Files
xgcl/sm/sm9/sm9.go
T
2026-05-27 23:03:00 +08:00

98 lines
1.9 KiB
Go

package sm9
import (
"math/big"
"xdx.jelly/xgcl/sm/sm9/errors"
"xdx.jelly/xgcl/sm/sm9/internal/bn256"
)
const (
// Sm9RefMaxBits defined in GMT 0018
Sm9RefMaxBits = 256
// Sm9RefMaxLen defined in GMT 0018
Sm9RefMaxLen = (Sm9RefMaxBits + 7) / 8
byteSize = Sm9RefMaxLen
// Sm9Strict UnmarshalBinary check data strict
Sm9Strict = false
// hidSign 签名hid
hidSign byte = 1
// hidKeyExchange 密钥交换hid
hidKeyExchange byte = 3
// hidKeyEncapsule 密钥封装hid
hidKeyEncapsule byte = 3
// hidEncryption 加解密hid
hidEncryption byte = 3
)
// G1 is the group G<sup>1</sup>
type G1 = bn256.G1
// G2 is the group G2
type G2 = bn256.G2
// GT is the group GT
type GT = bn256.GT
type PublicKey = []byte
var (
// Pairing is the pairing funcition e: G1 x G2 -> GT.
Pairing func(g1 *G1, g2 *G2) *GT = bn256.Pair
pairing func(e *GT, g1 *G1, g2 *G2) = bn256.PairLol
// N is the group order of G1, G2 and GT
N = bn256.N
// P is the character of finite field where E lives.
P = bn256.P
g1Gen *G1 = new(G1).ScalarBaseMult(new(big.Int).SetInt64(1))
g2Gen *G2 = new(G2).ScalarBaseMult(new(big.Int).SetInt64(1))
gtGen *GT = Pairing(g1Gen, g2Gen)
nMinusOne = new(big.Int).Sub(N, new(big.Int).SetInt64(1))
)
// ByteSize returns the size of the bytes number of order (which is 32).
func ByteSize() int {
return byteSize
}
// OrderN return the order of group G1, G2 and GT
// Deprecated: use Order instead.
var OrderN = Order
// Order returns the order of group G1, G2 and GT.
func Order() *big.Int {
return N
}
// Prime returns the character of finite field.
func Prime() *big.Int {
return P
}
// G1Generator returns the generator of G1.
func G1Generator() *G1 {
return g1Gen
}
// G2Generator returns the generator of G2.
func G2Generator() *G2 {
return g2Gen
}
// GTGenerator returns the generator of GT.
func GTGenerator() *GT {
return gtGen
}
var ErrKGCRebuildKey = errors.ErrKGCRebuildKey