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