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  }