github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/crypto/bn256/google/example_test.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 12:09:36</date> 10 //</624342626060996608> 11 12 //版权所有2012 Go作者。版权所有。 13 //此源代码的使用受BSD样式的控制 14 //可以在许可文件中找到的许可证。 15 16 package bn256 17 18 import ( 19 "crypto/rand" 20 ) 21 22 func ExamplePair() { 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