github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/crypto/bn256/bn256_fuzz.go (about) 1 2 //此源码被清华学神尹成大魔王专业翻译分析并修改 3 //尹成QQ77025077 4 //尹成微信18510341407 5 //尹成所在QQ群721929980 6 //尹成邮箱 yinc13@mails.tsinghua.edu.cn 7 //尹成毕业于清华大学,微软区块链领域全球最有价值专家 8 //https://mvp.microsoft.com/zh-cn/PublicProfile/4033620 9 //版权所有2018 P_ter Szil_gyi。版权所有。 10 //此源代码的使用受可以找到的BSD样式许可证的控制 11 //在许可证文件中。 12 13 //+构建GouuZZ 14 15 package bn256 16 17 import ( 18 "bytes" 19 "math/big" 20 21 cloudflare "github.com/ethereum/go-ethereum/crypto/bn256/cloudflare" 22 google "github.com/ethereum/go-ethereum/crypto/bn256/google" 23 ) 24 25 //在Google和CloudFlare库之间添加了fuzzaddfuzzzbn256。 26 func FuzzAdd(data []byte) int { 27 //首先确保我们有足够的数据 28 if len(data) != 128 { 29 return 0 30 } 31 //确保两个libs都能解析第一个曲线点 32 xc := new(cloudflare.G1) 33 _, errc := xc.Unmarshal(data[:64]) 34 35 xg := new(google.G1) 36 _, errg := xg.Unmarshal(data[:64]) 37 38 if (errc == nil) != (errg == nil) { 39 panic("parse mismatch") 40 } else if errc != nil { 41 return 0 42 } 43 //确保两个libs都能解析第二个曲线点 44 yc := new(cloudflare.G1) 45 _, errc = yc.Unmarshal(data[64:]) 46 47 yg := new(google.G1) 48 _, errg = yg.Unmarshal(data[64:]) 49 50 if (errc == nil) != (errg == nil) { 51 panic("parse mismatch") 52 } else if errc != nil { 53 return 0 54 } 55 //将这两个点相加,确保结果相同 56 rc := new(cloudflare.G1) 57 rc.Add(xc, yc) 58 59 rg := new(google.G1) 60 rg.Add(xg, yg) 61 62 if !bytes.Equal(rc.Marshal(), rg.Marshal()) { 63 panic("add mismatch") 64 } 65 return 0 66 } 67 68 //Google和CloudFlare之间的fuzzmul fuzzez bn256标量乘法 69 //图书馆。 70 func FuzzMul(data []byte) int { 71 //首先确保我们有足够的数据 72 if len(data) != 96 { 73 return 0 74 } 75 //确保两个libs都能解析曲线点 76 pc := new(cloudflare.G1) 77 _, errc := pc.Unmarshal(data[:64]) 78 79 pg := new(google.G1) 80 _, errg := pg.Unmarshal(data[:64]) 81 82 if (errc == nil) != (errg == nil) { 83 panic("parse mismatch") 84 } else if errc != nil { 85 return 0 86 } 87 //将这两个点相加,确保结果相同 88 rc := new(cloudflare.G1) 89 rc.ScalarMult(pc, new(big.Int).SetBytes(data[64:])) 90 91 rg := new(google.G1) 92 rg.ScalarMult(pg, new(big.Int).SetBytes(data[64:])) 93 94 if !bytes.Equal(rc.Marshal(), rg.Marshal()) { 95 panic("scalar mul mismatch") 96 } 97 return 0 98 } 99 100 func FuzzPair(data []byte) int { 101 //首先确保我们有足够的数据 102 if len(data) != 192 { 103 return 0 104 } 105 //确保两个libs都能解析曲线点 106 pc := new(cloudflare.G1) 107 _, errc := pc.Unmarshal(data[:64]) 108 109 pg := new(google.G1) 110 _, errg := pg.Unmarshal(data[:64]) 111 112 if (errc == nil) != (errg == nil) { 113 panic("parse mismatch") 114 } else if errc != nil { 115 return 0 116 } 117 //确保两个libs都能解析转折点 118 tc := new(cloudflare.G2) 119 _, errc = tc.Unmarshal(data[64:]) 120 121 tg := new(google.G2) 122 _, errg = tg.Unmarshal(data[64:]) 123 124 if (errc == nil) != (errg == nil) { 125 panic("parse mismatch") 126 } else if errc != nil { 127 return 0 128 } 129 //将两个点配对,确保结果相同 130 if cloudflare.PairingCheck([]*cloudflare.G1{pc}, []*cloudflare.G2{tc}) != google.PairingCheck([]*google.G1{pg}, []*google.G2{tg}) { 131 panic("pair mismatch") 132 } 133 return 0 134 }