Documentation ¶
Overview ¶
包BN256实现特定的双线性组。
双线性群是许多新密码协议的基础。 在过去的十年里提出的。它们由三个组成 组(g_、g嫪和gt),以便存在一个函数e(g_、g嫪)=gt_ (其中g_是相应组的生成器)。该函数被调用 配对功能。
这个包专门实现了256位以上的最佳ATE配对 Barreto-Naehrig曲线,如中所述 http://cryptojedi.org/papers/dclxvi-20100714.pdf.它的输出是兼容的 以及本文中描述的实现。
(此软件包以前声称在128位安全级别下运行。 然而,最近对攻击的改进意味着这不再是真的了。见 https://moderncrypto.org/mail archive/curves/2016/000740.html.网址)
Index ¶
- Variables
- func PairingCheck(a []*G1, b []*G2) bool
- type G1
- func (e *G1) Add(a, b *G1) *G1
- func (e *G1) CurvePoints() (*big.Int, *big.Int, *big.Int, *big.Int)
- func (e *G1) Marshal() []byte
- func (e *G1) Neg(a *G1) *G1
- func (e *G1) ScalarBaseMult(k *big.Int) *G1
- func (e *G1) ScalarMult(a *G1, k *big.Int) *G1
- func (e *G1) String() string
- func (e *G1) Unmarshal(m []byte) ([]byte, error)
- type G2
- type GT
Examples ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var Order = bigFromBase10("21888242871839275222246405745257275088548364400416034343698204186575808495617")
order是G_和G癓中的元素数:36U_+36U³+18U²+6U+1。
View Source
var P = bigFromBase10("21888242871839275222246405745257275088696311157297823662689037894645226208583")
P是一个基本字段:36U_+36U³+24U²+6U+1。
Functions ¶
Types ¶
type G1 ¶
type G1 struct {
// contains filtered or unexported fields
}
g1是一个抽象的循环群。零值适合用作 操作的输出,但不能用作输入。
func (*G1) CurvePoints ¶
curve points以大整数返回p的曲线点
func (*G1) ScalarBaseMult ¶
scalarbasemult将e设置为g*k,其中g是组的生成器,并且 然后返回E。
type G2 ¶
type G2 struct {
// contains filtered or unexported fields
}
g2是一个抽象的循环群。零值适合用作 操作的输出,但不能用作输入。
func (*G2) CurvePoints ¶
func (e *G2) CurvePoints() (*gfP2, *gfP2, *gfP2, *gfP2)
curve points返回p的曲线点,其中包括 以及曲线点的虚部。
func (*G2) ScalarBaseMult ¶
scalarbasemult将e设置为g*k,其中g是组的生成器,并且 然后返回。
type GT ¶
type GT struct {
// contains filtered or unexported fields
}
gt是一个抽象循环群。零值适合用作 操作的输出,但不能用作输入。
func Pair ¶
配对计算最佳ATE配对。
Example ¶
//这实现了从“a”到“a”的三方diffie-hellman算法 //三方diffie-hellman的圆形协议”,A.joux。 //http://www.springerlink.com/content/cddc57yyva0hburb/fulltext.pdf //三方(A、B和C)中的每一方都会产生一个私人价值。 a, _ := rand.Int(rand.Reader, Order) b, _ := rand.Int(rand.Reader, Order) c, _ := rand.Int(rand.Reader, Order) //然后,每一方计算g_和g₂乘以其私有价值。 pa := new(G1).ScalarBaseMult(a) qa := new(G2).ScalarBaseMult(a) pb := new(G1).ScalarBaseMult(b) qb := new(G2).ScalarBaseMult(b) pc := new(G1).ScalarBaseMult(c) qc := new(G2).ScalarBaseMult(c) //现在,每一方都与另外两方交换其公共价值观,以及 //所有参与方都可以计算共享密钥。 k1 := Pair(pb, qc) k1.ScalarMult(k1, a) k2 := Pair(pc, qa) k2.ScalarMult(k2, b) k3 := Pair(pa, qb) k3.ScalarMult(k3, c) // k1、k2和k3都相等。
Output:
Click to show internal directories.
Click to hide internal directories.