github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/crypto/bn256/cloudflare/example_test.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 //版权所有2012 Go作者。版权所有。 10 //此源代码的使用受BSD样式的控制 11 //可以在许可文件中找到的许可证。 12 13 package bn256 14 15 import ( 16 "crypto/rand" 17 "testing" 18 19 "github.com/stretchr/testify/require" 20 ) 21 22 func TestExamplePair(t *testing.T) { 23 //这实现了从“a”到“a”的三方diffie-hellman算法 24 //三方diffie-hellman的圆形协议”,A.joux。 25 //http://www.springerlink.com/content/cddc57yyva0hburb/fulltext.pdf 26 27 //三方(A、B和C)中的每一方都会产生一个私人价值。 28 a, _ := rand.Int(rand.Reader, Order) 29 b, _ := rand.Int(rand.Reader, Order) 30 c, _ := rand.Int(rand.Reader, Order) 31 32 //然后,每一方计算g_和g₂乘以其私有价值。 33 pa := new(G1).ScalarBaseMult(a) 34 qa := new(G2).ScalarBaseMult(a) 35 36 pb := new(G1).ScalarBaseMult(b) 37 qb := new(G2).ScalarBaseMult(b) 38 39 pc := new(G1).ScalarBaseMult(c) 40 qc := new(G2).ScalarBaseMult(c) 41 42 //现在,每一方都与另外两方交换其公共价值观,以及 43 //所有参与方都可以计算共享密钥。 44 k1 := Pair(pb, qc) 45 k1.ScalarMult(k1, a) 46 47 k2 := Pair(pc, qa) 48 k2.ScalarMult(k2, b) 49 50 k3 := Pair(pa, qb) 51 k3.ScalarMult(k3, c) 52 53 //k1、k2和k3都相等。 54 55 require.Equal(t, k1, k2) 56 require.Equal(t, k1, k3) 57 58 require.Equal(t, len(np), 4) //避免NP上的gometalinter varcheck错误 59 }