bn256

package
v0.0.0-...-f8b7a73 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 16, 2019 License: GPL-3.0, BSD-3-Clause Imports: 4 Imported by: 0

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

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

func PairingCheck

func PairingCheck(a []*G1, b []*G2) bool

pairingcheck计算一组点的最佳ate对。

Types

type G1

type G1 struct {
	// contains filtered or unexported fields
}

g1是一个抽象的循环群。零值适合用作 操作的输出,但不能用作输入。

func RandomG1

func RandomG1(r io.Reader) (*big.Int, *G1, error)

randomg1返回x和g_,其中x是从r读取的随机非零数字。

func (*G1) Add

func (e *G1) Add(a, b *G1) *G1

将集合e添加到a+b,然后返回e。 bug(agl):此函数不完整:a==b失败。

func (*G1) CurvePoints

func (e *G1) CurvePoints() (*big.Int, *big.Int, *big.Int, *big.Int)

curve points以大整数返回p的曲线点

func (*G1) Marshal

func (e *G1) Marshal() []byte

marshal将n转换为字节片。

func (*G1) Neg

func (e *G1) Neg(a *G1) *G1

neg将e设置为-a,然后返回e。

func (*G1) ScalarBaseMult

func (e *G1) ScalarBaseMult(k *big.Int) *G1

scalarbasemult将e设置为g*k,其中g是组的生成器,并且 然后返回E。

func (*G1) ScalarMult

func (e *G1) ScalarMult(a *G1, k *big.Int) *G1

scalarmult将e设置为*k,然后返回e。

func (*G1) String

func (e *G1) String() string

func (*G1) Unmarshal

func (e *G1) Unmarshal(m []byte) ([]byte, error)

unmarshal将e设置为将marshal的输出转换回 一个group元素,然后返回e。

type G2

type G2 struct {
	// contains filtered or unexported fields
}

g2是一个抽象的循环群。零值适合用作 操作的输出,但不能用作输入。

func RandomG2

func RandomG2(r io.Reader) (*big.Int, *G2, error)

randomg1返回x和g,其中x是从r读取的随机非零数字。

func (*G2) Add

func (e *G2) Add(a, b *G2) *G2

将集合e添加到a+b,然后返回e。 bug(agl):此函数不完整:a==b失败。

func (*G2) CurvePoints

func (e *G2) CurvePoints() (*gfP2, *gfP2, *gfP2, *gfP2)

curve points返回p的曲线点,其中包括 以及曲线点的虚部。

func (*G2) Marshal

func (n *G2) Marshal() []byte

marshal将n转换为字节片。

func (*G2) ScalarBaseMult

func (e *G2) ScalarBaseMult(k *big.Int) *G2

scalarbasemult将e设置为g*k,其中g是组的生成器,并且 然后返回。

func (*G2) ScalarMult

func (e *G2) ScalarMult(a *G2, k *big.Int) *G2

scalarmult将e设置为*k,然后返回e。

func (*G2) String

func (e *G2) String() string

func (*G2) Unmarshal

func (e *G2) Unmarshal(m []byte) ([]byte, error)

unmarshal将e设置为将marshal的输出转换回 一个group元素,然后返回e。

type GT

type GT struct {
	// contains filtered or unexported fields
}

gt是一个抽象循环群。零值适合用作 操作的输出,但不能用作输入。

func Pair

func Pair(g1 *G1, g2 *G2) *GT

配对计算最佳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:

func (*GT) Add

func (e *GT) Add(a, b *GT) *GT

将集合e添加到a+b,然后返回e。

func (*GT) Marshal

func (n *GT) Marshal() []byte

marshal将n转换为字节片。

func (*GT) Neg

func (e *GT) Neg(a *GT) *GT

neg将e设置为-a,然后返回e。

func (*GT) ScalarMult

func (e *GT) ScalarMult(a *GT, k *big.Int) *GT

scalarmult将e设置为*k,然后返回e。

func (*GT) String

func (g *GT) String() string

func (*GT) Unmarshal

func (e *GT) Unmarshal(m []byte) (*GT, bool)

unmarshal将e设置为将marshal的输出转换回 一个group元素,然后返回e。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL