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