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