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  }