Documentation ¶
Index ¶
- Variables
- func GenerateGTFieldTable(basePoint *GT) *[32 * 2]GTFieldTable
- func NewCurveGenerator() *curvePoint
- func NewCurvePoint() *curvePoint
- func NewTwistGenerator() *twistPoint
- func NewTwistPoint() *twistPoint
- func NormalizeScalar(scalar []byte) []byte
- func Sqrt(e, x *gfP) (isSquare bool)
- type G1
- func (e *G1) Add(a, b *G1) *G1
- func (e *G1) Double(a *G1) *G1
- func (e *G1) Equal(other *G1) bool
- func (e *G1) IsOnCurve() bool
- func (e *G1) Marshal() []byte
- func (e *G1) MarshalCompressed() []byte
- func (e *G1) MarshalUncompressed() []byte
- func (e *G1) Neg(a *G1) *G1
- func (e *G1) ScalarBaseMult(scalar []byte) (*G1, error)
- func (e *G1) ScalarMult(a *G1, scalar []byte) (*G1, error)
- func (e *G1) Set(a *G1) *G1
- func (g *G1) String() string
- func (e *G1) Unmarshal(m []byte) ([]byte, error)
- func (e *G1) UnmarshalCompressed(data []byte) ([]byte, error)
- func (e *G1) UnmarshalUncompressed(data []byte) ([]byte, error)
- type G2
- func (e *G2) Add(a, b *G2) *G2
- func (e *G2) Equal(other *G2) bool
- func (e *G2) IsOnCurve() bool
- func (e *G2) Marshal() []byte
- func (e *G2) MarshalCompressed() []byte
- func (e *G2) MarshalUncompressed() []byte
- func (e *G2) Neg(a *G2) *G2
- func (e *G2) ScalarBaseMult(scalar []byte) (*G2, error)
- func (e *G2) ScalarMult(a *G2, scalar []byte) (*G2, error)
- func (e *G2) Set(a *G2) *G2
- func (e *G2) String() string
- func (e *G2) Unmarshal(m []byte) ([]byte, error)
- func (e *G2) UnmarshalCompressed(data []byte) ([]byte, error)
- func (e *G2) UnmarshalUncompressed(data []byte) ([]byte, error)
- type GT
- func (e *GT) Add(a, b *GT) *GT
- func (e *GT) Equal(t *GT) bool
- func (e *GT) Finalize() *GT
- func (e *GT) Marshal() []byte
- func (e *GT) ScalarBaseMult(k *big.Int) *GT
- func (e *GT) ScalarMult(a *GT, k *big.Int) *GT
- func (e *GT) Set(a *GT) *GT
- func (e *GT) SetOne() *GT
- func (g *GT) String() string
- func (e *GT) Unmarshal(m []byte) ([]byte, error)
- type GTFieldTable
Constants ¶
This section is empty.
Variables ¶
var Gen1 = &G1{curveGen}
Gen1 is the generator of G1.
var Gen2 = &G2{twistGen}
Gen2 is the generator of G2.
var Order = bigFromHex("b640000002a3a6f1d603ab4ff58ec74449f2934b18ea8beee56ee19cd69ecf25")
Order is the number of elements in both G₁ and G₂: 36u⁴+36u³+18u²+6u+1.
Functions ¶
func GenerateGTFieldTable ¶ added in v1.0.2040
func GenerateGTFieldTable(basePoint *GT) *[32 * 2]GTFieldTable
func NewCurveGenerator ¶ added in v1.0.2040
func NewCurveGenerator() *curvePoint
func NewCurvePoint ¶ added in v1.0.2040
func NewCurvePoint() *curvePoint
func NewTwistGenerator ¶ added in v1.0.2040
func NewTwistGenerator() *twistPoint
func NewTwistPoint ¶ added in v1.0.2040
func NewTwistPoint() *twistPoint
func NormalizeScalar ¶ added in v1.0.2040
Types ¶
type G1 ¶
type G1 struct {
// contains filtered or unexported fields
}
G1 is an abstract cyclic group. The zero value is suitable for use as the output of an operation, but cannot be used as an input.
func (*G1) MarshalCompressed ¶ added in v1.0.2040
MarshalCompressed converts e to a byte slice with compress prefix. If the point is not on the curve (or is the conventional point at infinity), the behavior is undefined.
func (*G1) MarshalUncompressed ¶ added in v1.0.2040
MarshalUncompressed converts e to a byte slice with prefix
func (*G1) ScalarBaseMult ¶
ScalarBaseMult sets e to scaler*g where g is the generator of the group and then returns e.
func (*G1) ScalarMult ¶
ScalarMult sets e to a*k and then returns e.
func (*G1) Unmarshal ¶
Unmarshal sets e to the result of converting the output of Marshal back into a group element and then returns e.
func (*G1) UnmarshalCompressed ¶ added in v1.0.2040
UnmarshalCompressed sets e to the result of converting the output of Marshal back into a group element and then returns e.
type G2 ¶
type G2 struct {
// contains filtered or unexported fields
}
G2 is an abstract cyclic group. The zero value is suitable for use as the output of an operation, but cannot be used as an input.
func (*G2) MarshalCompressed ¶ added in v1.0.2040
MarshalCompressed converts e into a byte slice with uncompressed point prefix
func (*G2) MarshalUncompressed ¶ added in v1.0.2040
MarshalUncompressed converts e into a byte slice with uncompressed point prefix
func (*G2) ScalarBaseMult ¶
ScalarBaseMult sets e to g*k where g is the generator of the group and then returns out.
func (*G2) ScalarMult ¶
ScalarMult sets e to a*k and then returns e.
func (*G2) Unmarshal ¶
Unmarshal sets e to the result of converting the output of Marshal back into a group element and then returns e.
func (*G2) UnmarshalCompressed ¶ added in v1.0.2040
UnmarshalCompressed sets e to the result of converting the output of Marshal back into a group element and then returns e.
type GT ¶
type GT struct {
// contains filtered or unexported fields
}
GT is an abstract cyclic group. The zero value is suitable for use as the output of an operation, but cannot be used as an input.
func Miller ¶
Miller applies Miller's algorithm, which is a bilinear function from the source groups to F_p^12. Miller(g1, g2).Finalize() is equivalent to Pair(g1, g2).
func ScalarBaseMultGT ¶ added in v1.0.2040
func ScalarBaseMultGT(tables *[32 * 2]GTFieldTable, scalar []byte) (*GT, error)
ScalarBaseMultGT compute basepoint^r with precomputed table
func ScalarMultGT ¶ added in v1.0.2040
ScalarMultGT compute a^scalar
func (*GT) Marshal ¶
Marshal converts e into a byte slice. To support SM9 alg, we marshal it as 1-2-4-12 towering extentions here.
func (*GT) ScalarBaseMult ¶
ScalarBaseMult sets e to g*k where g is the generator of the group and then returns out.
func (*GT) ScalarMult ¶
ScalarMult sets e to a*k and then returns e.
type GTFieldTable ¶ added in v1.0.2040
type GTFieldTable [15]*GT
A GTFieldTable holds the first 15 Exp of a value at offset -1, so P is at table[0], P^15 is at table[14], and P^0 is implicitly the identity point.
func (*GTFieldTable) Select ¶ added in v1.0.2040
func (table *GTFieldTable) Select(p *GT, n uint8)
Select selects the n-th multiple of the table base point into p. It works in constant time by iterating over every entry of the table. n must be in [0, 15].