github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/crypto/bn256/bn256_fuzz.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:36</date> 10 //</624450083496136704> 11 12 //版权所有2018 P_ter Szil_gyi。版权所有。 13 //此源代码的使用受可以找到的BSD样式许可证的控制 14 //在许可证文件中。 15 16 //+构建GouuZZ 17 18 package bn256 19 20 import ( 21 "bytes" 22 "math/big" 23 24 cloudflare "github.com/ethereum/go-ethereum/crypto/bn256/cloudflare" 25 google "github.com/ethereum/go-ethereum/crypto/bn256/google" 26 ) 27 28 //在Google和CloudFlare库之间添加了fuzzaddfuzzzbn256。 29 func FuzzAdd(data []byte) int { 30 //首先确保我们有足够的数据 31 if len(data) != 128 { 32 return 0 33 } 34 //确保两个libs都能解析第一个曲线点 35 xc := new(cloudflare.G1) 36 _, errc := xc.Unmarshal(data[:64]) 37 38 xg := new(google.G1) 39 _, errg := xg.Unmarshal(data[:64]) 40 41 if (errc == nil) != (errg == nil) { 42 panic("parse mismatch") 43 } else if errc != nil { 44 return 0 45 } 46 //确保两个libs都能解析第二个曲线点 47 yc := new(cloudflare.G1) 48 _, errc = yc.Unmarshal(data[64:]) 49 50 yg := new(google.G1) 51 _, errg = yg.Unmarshal(data[64:]) 52 53 if (errc == nil) != (errg == nil) { 54 panic("parse mismatch") 55 } else if errc != nil { 56 return 0 57 } 58 //将这两个点相加,确保结果相同 59 rc := new(cloudflare.G1) 60 rc.Add(xc, yc) 61 62 rg := new(google.G1) 63 rg.Add(xg, yg) 64 65 if !bytes.Equal(rc.Marshal(), rg.Marshal()) { 66 panic("add mismatch") 67 } 68 return 0 69 } 70 71 //Google和CloudFlare之间的fuzzmul fuzzez bn256标量乘法 72 //图书馆。 73 func FuzzMul(data []byte) int { 74 //首先确保我们有足够的数据 75 if len(data) != 96 { 76 return 0 77 } 78 //确保两个libs都能解析曲线点 79 pc := new(cloudflare.G1) 80 _, errc := pc.Unmarshal(data[:64]) 81 82 pg := new(google.G1) 83 _, errg := pg.Unmarshal(data[:64]) 84 85 if (errc == nil) != (errg == nil) { 86 panic("parse mismatch") 87 } else if errc != nil { 88 return 0 89 } 90 //将这两个点相加,确保结果相同 91 rc := new(cloudflare.G1) 92 rc.ScalarMult(pc, new(big.Int).SetBytes(data[64:])) 93 94 rg := new(google.G1) 95 rg.ScalarMult(pg, new(big.Int).SetBytes(data[64:])) 96 97 if !bytes.Equal(rc.Marshal(), rg.Marshal()) { 98 panic("scalar mul mismatch") 99 } 100 return 0 101 } 102 103 func FuzzPair(data []byte) int { 104 //首先确保我们有足够的数据 105 if len(data) != 192 { 106 return 0 107 } 108 //确保两个libs都能解析曲线点 109 pc := new(cloudflare.G1) 110 _, errc := pc.Unmarshal(data[:64]) 111 112 pg := new(google.G1) 113 _, errg := pg.Unmarshal(data[:64]) 114 115 if (errc == nil) != (errg == nil) { 116 panic("parse mismatch") 117 } else if errc != nil { 118 return 0 119 } 120 //确保两个libs都能解析转折点 121 tc := new(cloudflare.G2) 122 _, errc = tc.Unmarshal(data[64:]) 123 124 tg := new(google.G2) 125 _, errg = tg.Unmarshal(data[64:]) 126 127 if (errc == nil) != (errg == nil) { 128 panic("parse mismatch") 129 } else if errc != nil { 130 return 0 131 } 132 //将两个点配对,确保结果相同 133 if cloudflare.PairingCheck([]*cloudflare.G1{pc}, []*cloudflare.G2{tc}) != google.PairingCheck([]*google.G1{pg}, []*google.G2{tg}) { 134 panic("pair mismatch") 135 } 136 return 0 137 } 138