github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/crypto/bn256/google/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 ) 18 19 func ExamplePair() { 20 //这实现了从“a”到“a”的三方diffie-hellman算法 21 //三方diffie-hellman的圆形协议”,A.joux。 22 //http://www.springerlink.com/content/cddc57yyva0hburb/fulltext.pdf 23 24 //三方(A、B和C)中的每一方都会产生一个私人价值。 25 a, _ := rand.Int(rand.Reader, Order) 26 b, _ := rand.Int(rand.Reader, Order) 27 c, _ := rand.Int(rand.Reader, Order) 28 29 //然后,每一方计算g_和g₂乘以其私有价值。 30 pa := new(G1).ScalarBaseMult(a) 31 qa := new(G2).ScalarBaseMult(a) 32 33 pb := new(G1).ScalarBaseMult(b) 34 qb := new(G2).ScalarBaseMult(b) 35 36 pc := new(G1).ScalarBaseMult(c) 37 qc := new(G2).ScalarBaseMult(c) 38 39 //现在,每一方都与另外两方交换其公共价值观,以及 40 //所有参与方都可以计算共享密钥。 41 k1 := Pair(pb, qc) 42 k1.ScalarMult(k1, a) 43 44 k2 := Pair(pc, qa) 45 k2.ScalarMult(k2, b) 46 47 k3 := Pair(pa, qb) 48 k3.ScalarMult(k3, c) 49 50 //k1、k2和k3都相等。 51 }