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

43 lines
957 B
Go

package sm9
import (
"math/big"
)
// dup duplicates a byte slice b.
func dup(b []byte) []byte {
ret := make([]byte, len(b))
copy(ret, b)
return ret
}
// pairingThenMul computes e = e(p,q)^k
func pairingThenMul(p *G1, q *G2, k *big.Int) *GT {
e := Pairing(p, q)
return e.ScalarMult(e, k)
}
// mulG1ThenPairing computes e = e(p,q)^k = e(kp,q)
func mulG1ThenPairing(p *G1, q *G2, k *big.Int) *GT {
p1 := (&G1{}).ScalarMult(p, k)
return Pairing(p1, q)
}
// mulG2ThenPairing computes e = e(p,q)^k = e(p,kq)
func mulG2ThenPairing(p *G1, q *G2, k *big.Int) *GT {
q2 := (&G2{}).ScalarMult(q, k)
return Pairing(p, q2)
}
// mulG1BaseThenPairing computes e = e(p,q)^k = e(kp,q)
func mulG1BaseThenPairing(e *GT, q *G2, k *big.Int) {
p1 := (&G1{}).ScalarBaseMult(k)
pairing(e, p1, q)
}
// mulG2BaseThenPairing computes e = e(p,q)^k = e(kp,q)
func mulG2BaseThenPairing(p *G1, k *big.Int) *GT {
q2 := (&G2{}).ScalarBaseMult(k)
return Pairing(p, q2)
}