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