internal/sm9: reduce usage of big.Int

This commit is contained in:
Sun Yimin 2025-03-25 17:19:10 +08:00 committed by GitHub
parent 88df15c64c
commit 11d0438cc4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 263 additions and 265 deletions

View File

@ -80,37 +80,48 @@ var pMinus5Over8 = [4]uint64{0x7cadf364fc6a28af, 0xa43e5269634f5ddb, 0x3ac07569f
var twoExpPMinus5Over8 = &gfP{0xd5dd560c5235102a, 0xa3772bab091163ac, 0x0ed7304fd0711ab0, 0x8efb889ed7056e1e}
// Frobenius Constant, frobConstant = i^((p-1)/6)
var frobConstant = fromBigInt(bigFromHex("3f23ea58e5720bdb843c6cfa9c08674947c5c86e0ddd04eda91d8354377b698b"))
// 3f23ea58e5720bdb843c6cfa9c08674947c5c86e0ddd04eda91d8354377b698b
var frobConstant = newGFpFromBytes([]byte{0x3f, 0x23, 0xea, 0x58, 0xe5, 0x72, 0x0b, 0xdb, 0x84, 0x3c, 0x6c, 0xfa, 0x9c, 0x08, 0x67, 0x49, 0x47, 0xc5, 0xc8, 0x6e, 0x0d, 0xdd, 0x04, 0xed, 0xa9, 0x1d, 0x83, 0x54, 0x37, 0x7b, 0x69, 0x8b})
// vToPMinus1 is v^(p-1), vToPMinus1 ^ 2 = p - 1
var vToPMinus1 = fromBigInt(bigFromHex("6c648de5dc0a3f2cf55acc93ee0baf159f9d411806dc5177f5b21fd3da24d011"))
// 6c648de5dc0a3f2cf55acc93ee0baf159f9d411806dc5177f5b21fd3da24d011
var vToPMinus1 = newGFpFromBytes([]byte{0x6c, 0x64, 0x8d, 0xe5, 0xdc, 0x0a, 0x3f, 0x2c, 0xf5, 0x5a, 0xcc, 0x93, 0xee, 0x0b, 0xaf, 0x15, 0x9f, 0x9d, 0x41, 0x18, 0x06, 0xdc, 0x51, 0x77, 0xf5, 0xb2, 0x1f, 0xd3, 0xda, 0x24, 0xd0, 0x11})
// wToPMinus1 is w^(p-1)
var wToPMinus1 = fromBigInt(bigFromHex("3f23ea58e5720bdb843c6cfa9c08674947c5c86e0ddd04eda91d8354377b698b"))
// 3f23ea58e5720bdb843c6cfa9c08674947c5c86e0ddd04eda91d8354377b698b
var wToPMinus1 = frobConstant
// w2ToPMinus1 is (w^2)^(p-1)
var w2ToPMinus1 = fromBigInt(bigFromHex("0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65334"))
// 0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65334
var w2ToPMinus1 = newGFpFromBytes([]byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00, 0x02, 0xa3, 0xa6, 0xf2, 0x78, 0x02, 0x72, 0x35, 0x4f, 0x8b, 0x78, 0xf4, 0xd5, 0xfc, 0x11, 0x96, 0x7b, 0xe6, 0x53, 0x34})
// wToP2Minus1 is w^(p^2-1)
var wToP2Minus1 = fromBigInt(bigFromHex("0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65334"))
// 0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65334
var wToP2Minus1 = w2ToPMinus1
// w2ToP2Minus1 is (w^2)^(p^2-1), w2ToP2Minus1 = vToPMinus1 * wToPMinus1
var w2ToP2Minus1 = fromBigInt(bigFromHex("0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65333"))
// 0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65333
var w2ToP2Minus1 = newGFpFromBytes([]byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00, 0x02, 0xa3, 0xa6, 0xf2, 0x78, 0x02, 0x72, 0x35, 0x4f, 0x8b, 0x78, 0xf4, 0xd5, 0xfc, 0x11, 0x96, 0x7b, 0xe6, 0x53, 0x33})
// vToPMinus1Mw2ToPMinus1 = vToPMinus1 * w2ToPMinus1
var vToPMinus1Mw2ToPMinus1 = fromBigInt(bigFromHex("2d40a38cf6983351711e5f99520347cc57d778a9f8ff4c8a4c949c7fa2a96686"))
// 2d40a38cf6983351711e5f99520347cc57d778a9f8ff4c8a4c949c7fa2a96686
var vToPMinus1Mw2ToPMinus1 = newGFpFromBytes([]byte{0x2d, 0x40, 0xa3, 0x8c, 0xf6, 0x98, 0x33, 0x51, 0x71, 0x1e, 0x5f, 0x99, 0x52, 0x03, 0x47, 0xcc, 0x57, 0xd7, 0x78, 0xa9, 0xf8, 0xff, 0x4c, 0x8a, 0x4c, 0x94, 0x9c, 0x7f, 0xa2, 0xa9, 0x66, 0x86})
// betaToNegPPlus1Over3 = i^(-(p-1)/3)
var betaToNegPPlus1Over3 = fromBigInt(bigFromHex("b640000002a3a6f0e303ab4ff2eb2052a9f02115caef75e70f738991676af24a"))
// b640000002a3a6f0e303ab4ff2eb2052a9f02115caef75e70f738991676af24a
var betaToNegPPlus1Over3 = newGFpFromBytes([]byte{0xb6, 0x40, 0x00, 0x00, 0x02, 0xa3, 0xa6, 0xf0, 0xe3, 0x03, 0xab, 0x4f, 0xf2, 0xeb, 0x20, 0x52, 0xa9, 0xf0, 0x21, 0x15, 0xca, 0xef, 0x75, 0xe7, 0x0f, 0x73, 0x89, 0x91, 0x67, 0x6a, 0xf2, 0x4a})
// betaToNegPPlus1Over2 = i^(-(p-1)/2)
var betaToNegPPlus1Over2 = fromBigInt(bigFromHex("49db721a269967c4e0a8debc0783182f82555233139e9d63efbd7b54092c756c"))
// 49db721a269967c4e0a8debc0783182f82555233139e9d63efbd7b54092c756c
var betaToNegPPlus1Over2 = newGFpFromBytes([]byte{0x49, 0xdb, 0x72, 0x1a, 0x26, 0x99, 0x67, 0xc4, 0xe0, 0xa8, 0xde, 0xbc, 0x07, 0x83, 0x18, 0x2f, 0x82, 0x55, 0x52, 0x33, 0x13, 0x9e, 0x9d, 0x63, 0xef, 0xbd, 0x7b, 0x54, 0x09, 0x2c, 0x75, 0x6c})
// betaToNegP2Plus1Over3 = i^(-(p^2-1)/3)
var betaToNegP2Plus1Over3 = fromBigInt(bigFromHex("b640000002a3a6f0e303ab4ff2eb2052a9f02115caef75e70f738991676af249"))
// b640000002a3a6f0e303ab4ff2eb2052a9f02115caef75e70f738991676af249
var betaToNegP2Plus1Over3 = newGFpFromBytes([]byte{0xb6, 0x40, 0x00, 0x00, 0x02, 0xa3, 0xa6, 0xf0, 0xe3, 0x03, 0xab, 0x4f, 0xf2, 0xeb, 0x20, 0x52, 0xa9, 0xf0, 0x21, 0x15, 0xca, 0xef, 0x75, 0xe7, 0x0f, 0x73, 0x89, 0x91, 0x67, 0x6a, 0xf2, 0x49})
// betaToNegP2Plus1Over2 = i^(-(p^2-1)/2)
var betaToNegP2Plus1Over2 = fromBigInt(bigFromHex("b640000002a3a6f1d603ab4ff58ec74521f2934b1a7aeedbe56f9b27e351457c"))
// b640000002a3a6f1d603ab4ff58ec74521f2934b1a7aeedbe56f9b27e351457c
var betaToNegP2Plus1Over2 = newGFpFromBytes([]byte{0xb6, 0x40, 0x00, 0x00, 0x02, 0xa3, 0xa6, 0xf1, 0xd6, 0x03, 0xab, 0x4f, 0xf5, 0x8e, 0xc7, 0x45, 0x21, 0xf2, 0x93, 0x4b, 0x1a, 0x7a, 0xee, 0xdb, 0xe5, 0x6f, 0x9b, 0x27, 0xe3, 0x51, 0x45, 0x7c})
var sToPMinus1 = w2ToPMinus1

View File

@ -16,8 +16,8 @@ var threeCurveB = newGFp(3 * 5)
// curveGen is the generator of G₁.
var curveGen = &curvePoint{
x: *fromBigInt(bigFromHex("93DE051D62BF718FF5ED0704487D01D6E1E4086909DC3280E8C4E4817C66DDDD")),
y: *fromBigInt(bigFromHex("21FE8DDA4F21E607631065125C395BBC1C1C00CBFA6024350C464CD70A3EA616")),
x: *newGFpFromBytes([]byte{0x93, 0xDE, 0x05, 0x1D, 0x62, 0xBF, 0x71, 0x8F, 0xF5, 0xED, 0x07, 0x04, 0x48, 0x7D, 0x01, 0xD6, 0xE1, 0xE4, 0x08, 0x69, 0x09, 0xDC, 0x32, 0x80, 0xE8, 0xC4, 0xE4, 0x81, 0x7C, 0x66, 0xDD, 0xDD}),
y: *newGFpFromBytes([]byte{0x21, 0xFE, 0x8D, 0xDA, 0x4F, 0x21, 0xE6, 0x07, 0x63, 0x10, 0x65, 0x12, 0x5C, 0x39, 0x5B, 0xBC, 0x1C, 0x1C, 0x00, 0xCB, 0xFA, 0x60, 0x24, 0x35, 0x0C, 0x46, 0x4C, 0xD7, 0x0A, 0x3E, 0xA6, 0x16}),
z: *one,
t: *one,
}

View File

@ -407,8 +407,11 @@ func (g1 *G1Curve) pointFromAffine(x, y *big.Int) (a *G1, err error) {
if x.BitLen() > g1.params.BitSize || y.BitLen() > g1.params.BitSize {
return a, errors.New("overflowing coordinate")
}
a.p.x = *fromBigInt(x)
a.p.y = *fromBigInt(y)
var buf [32]byte
x.FillBytes(buf[:])
a.p.x = *newGFpFromBytes(buf[:])
y.FillBytes(buf[:])
a.p.y = *newGFpFromBytes(buf[:])
a.p.z = *newGFp(1)
a.p.t = *newGFp(1)

View File

@ -3,10 +3,7 @@ package bn256
import (
"errors"
"fmt"
"math/big"
"math/bits"
"github.com/emmansun/gmsm/internal/byteorder"
)
type gfP [4]uint64
@ -27,33 +24,10 @@ func newGFp(x int64) (out *gfP) {
return out
}
func fromBigInt(x *big.Int) (out *gfP) {
func newGFpFromBytes(in []byte) (out *gfP) {
out = &gfP{}
var a *big.Int
if x.Sign() >= 0 {
a = x
} else {
a = new(big.Int).Neg(x)
}
bytes := a.Bytes()
if len(bytes) > 32 {
panic("sm9: invalid byte length")
} else if len(bytes) < 32 {
fixedBytes := make([]byte, 32)
copy(fixedBytes[32-len(bytes):], bytes)
bytes = fixedBytes
}
for i := 0; i < 4; i++ {
start := len(bytes) - 8
out[i] = byteorder.BEUint64(bytes[start:])
bytes = bytes[:start]
}
if x.Sign() < 0 {
gfpNeg(out, out)
}
if x.Sign() != 0 {
montEncode(out, out)
}
gfpUnmarshal(out, (*[32]byte)(in))
montEncode(out, out)
return out
}
@ -71,7 +45,7 @@ func (e *gfP) exp(f *gfP, bits [4]uint64) {
sum.Set(rN1)
power.Set(f)
for word := 0; word < 4; word++ {
for word := range 4 {
for bit := uint(0); bit < 64; bit++ {
if (bits[word]>>bit)&1 == 1 {
gfpMul(sum, sum, power)

View File

@ -23,32 +23,32 @@ func gfP12Decode(in *gfP12) *gfP12 {
var gfP12Gen *gfP12 = &gfP12{
x: gfP4{
x: gfP2{
x: *fromBigInt(bigFromHex("256943fbdb2bf87ab91ae7fbeaff14e146cf7e2279b9d155d13461e09b22f523")),
y: *fromBigInt(bigFromHex("0167b0280051495c6af1ec23ba2cd2ff1cdcdeca461a5ab0b5449e9091308310")),
x: *newGFpFromBytes([]byte{0x25, 0x69, 0x43, 0xfb, 0xdb, 0x2b, 0xf8, 0x7a, 0xb9, 0x1a, 0xe7, 0xfb, 0xea, 0xff, 0x14, 0xe1, 0x46, 0xcf, 0x7e, 0x22, 0x79, 0xb9, 0xd1, 0x55, 0xd1, 0x34, 0x61, 0xe0, 0x9b, 0x22, 0xf5, 0x23}),
y: *newGFpFromBytes([]byte{0x01, 0x67, 0xb0, 0x28, 0x00, 0x51, 0x49, 0x5c, 0x6a, 0xf1, 0xec, 0x23, 0xba, 0x2c, 0xd2, 0xff, 0x1c, 0xdc, 0xde, 0xca, 0x46, 0x1a, 0x5a, 0xb0, 0xb5, 0x44, 0x9e, 0x90, 0x91, 0x30, 0x83, 0x10}),
},
y: gfP2{
x: *fromBigInt(bigFromHex("5e7addaddf7fbfe16291b4e89af50b8217ddc47ba3cba833c6e77c3fb027685e")),
y: *fromBigInt(bigFromHex("79d0c8337072c93fef482bb055f44d6247ccac8e8e12525854b3566236337ebe")),
x: *newGFpFromBytes([]byte{0x5e, 0x7a, 0xdd, 0xad, 0xdf, 0x7f, 0xbf, 0xe1, 0x62, 0x91, 0xb4, 0xe8, 0x9a, 0xf5, 0x0b, 0x82, 0x17, 0xdd, 0xc4, 0x7b, 0xa3, 0xcb, 0xa8, 0x33, 0xc6, 0xe7, 0x7c, 0x3f, 0xb0, 0x27, 0x68, 0x5e}),
y: *newGFpFromBytes([]byte{0x79, 0xd0, 0xc8, 0x33, 0x70, 0x72, 0xc9, 0x3f, 0xef, 0x48, 0x2b, 0xb0, 0x55, 0xf4, 0x4d, 0x62, 0x47, 0xcc, 0xac, 0x8e, 0x8e, 0x12, 0x52, 0x58, 0x54, 0xb3, 0x56, 0x62, 0x36, 0x33, 0x7e, 0xbe}),
},
},
y: gfP4{
x: gfP2{
x: *fromBigInt(bigFromHex("082cde173022da8cd09b28a2d80a8cee53894436a52007f978dc37f36116d39b")),
y: *fromBigInt(bigFromHex("3fa7ed741eaed99a58f53e3df82df7ccd3407bcc7b1d44a9441920ced5fb824f")),
x: *newGFpFromBytes([]byte{0x08, 0x2c, 0xde, 0x17, 0x30, 0x22, 0xda, 0x8c, 0xd0, 0x9b, 0x28, 0xa2, 0xd8, 0x0a, 0x8c, 0xee, 0x53, 0x89, 0x44, 0x36, 0xa5, 0x20, 0x07, 0xf9, 0x78, 0xdc, 0x37, 0xf3, 0x61, 0x16, 0xd3, 0x9b}),
y: *newGFpFromBytes([]byte{0x3f, 0xa7, 0xed, 0x74, 0x1e, 0xae, 0xd9, 0x9a, 0x58, 0xf5, 0x3e, 0x3d, 0xf8, 0x2d, 0xf7, 0xcc, 0xd3, 0x40, 0x7b, 0xcc, 0x7b, 0x1d, 0x44, 0xa9, 0x44, 0x19, 0x20, 0xce, 0xd5, 0xfb, 0x82, 0x4f}),
},
y: gfP2{
x: *fromBigInt(bigFromHex("7fc6eb2aa771d99c9234fddd31752edfd60723e05a4ebfdeb5c33fbd47e0cf06")),
y: *fromBigInt(bigFromHex("6fa6b6fa6dd6b6d3b19a959a110e748154eef796dc0fc2dd766ea414de786968")),
x: *newGFpFromBytes([]byte{0x7f, 0xc6, 0xeb, 0x2a, 0xa7, 0x71, 0xd9, 0x9c, 0x92, 0x34, 0xfd, 0xdd, 0x31, 0x75, 0x2e, 0xdf, 0xd6, 0x07, 0x23, 0xe0, 0x5a, 0x4e, 0xbf, 0xde, 0xb5, 0xc3, 0x3f, 0xbd, 0x47, 0xe0, 0xcf, 0x06}),
y: *newGFpFromBytes([]byte{0x6f, 0xa6, 0xb6, 0xfa, 0x6d, 0xd6, 0xb6, 0xd3, 0xb1, 0x9a, 0x95, 0x9a, 0x11, 0x0e, 0x74, 0x81, 0x54, 0xee, 0xf7, 0x96, 0xdc, 0x0f, 0xc2, 0xdd, 0x76, 0x6e, 0xa4, 0x14, 0xde, 0x78, 0x69, 0x68}),
},
},
z: gfP4{
x: gfP2{
x: *fromBigInt(bigFromHex("8ffe1c0e9de45fd0fed790ac26be91f6b3f0a49c084fe29a3fb6ed288ad7994d")),
y: *fromBigInt(bigFromHex("1664a1366beb3196f0443e15f5f9042a947354a5678430d45ba031cff06db927")),
x: *newGFpFromBytes([]byte{0x8f, 0xfe, 0x1c, 0x0e, 0x9d, 0xe4, 0x5f, 0xd0, 0xfe, 0xd7, 0x90, 0xac, 0x26, 0xbe, 0x91, 0xf6, 0xb3, 0xf0, 0xa4, 0x9c, 0x08, 0x4f, 0xe2, 0x9a, 0x3f, 0xb6, 0xed, 0x28, 0x8a, 0xd7, 0x99, 0x4d}),
y: *newGFpFromBytes([]byte{0x16, 0x64, 0xa1, 0x36, 0x6b, 0xeb, 0x31, 0x96, 0xf0, 0x44, 0x3e, 0x15, 0xf5, 0xf9, 0x04, 0x2a, 0x94, 0x73, 0x54, 0xa5, 0x67, 0x84, 0x30, 0xd4, 0x5b, 0xa0, 0x31, 0xcf, 0xf0, 0x6d, 0xb9, 0x27}),
},
y: gfP2{
x: *fromBigInt(bigFromHex("7f7c6d52b475e6aaa827fdc5b4175ac6929320f782d998f86b6b57cda42a0426")),
y: *fromBigInt(bigFromHex("36a699de7c136f78eee2dbac4ca9727bff0cee02ee920f5822e65ea170aa9669")),
x: *newGFpFromBytes([]byte{0x7f, 0x7c, 0x6d, 0x52, 0xb4, 0x75, 0xe6, 0xaa, 0xa8, 0x27, 0xfd, 0xc5, 0xb4, 0x17, 0x5a, 0xc6, 0x92, 0x93, 0x20, 0xf7, 0x82, 0xd9, 0x98, 0xf8, 0x6b, 0x6b, 0x57, 0xcd, 0xa4, 0x2a, 0x04, 0x26}),
y: *newGFpFromBytes([]byte{0x36, 0xa6, 0x99, 0xde, 0x7c, 0x13, 0x6f, 0x78, 0xee, 0xe2, 0xdb, 0xac, 0x4c, 0xa9, 0x72, 0x7b, 0xff, 0x0c, 0xee, 0x02, 0xee, 0x92, 0x0f, 0x58, 0x22, 0xe6, 0x5e, 0xa1, 0x70, 0xaa, 0x96, 0x69}),
},
},
}
@ -227,13 +227,13 @@ func (e *gfP12) SquareNC(a *gfP12) *gfP12 {
}
// Cyclo6Square is used in final exponentiation after easy part(a ^ ((p^2 + 1)(p^6-1))).
// Note that after the easy part of the final exponentiation,
// the resulting element lies in cyclotomic subgroup.
// Note that after the easy part of the final exponentiation,
// the resulting element lies in cyclotomic subgroup.
// "New software speed records for cryptographic pairings"
// Section 3.3, Final exponentiation
// https://cryptojedi.org/papers/dclxvi-20100714.pdf
// The fomula reference:
// Granger/Scott (PKC2010).
// Granger/Scott (PKC2010).
// Section 3.2
// https://eprint.iacr.org/2009/565.pdf
func (e *gfP12) Cyclo6Square(a *gfP12) *gfP12 {

View File

@ -18,30 +18,30 @@ func gfP12b6Decode(in *gfP12b6) *gfP12b6 {
var gfP12b6Gen *gfP12b6 = &gfP12b6{
x: gfP6{
x: gfP2{
x: *fromBigInt(bigFromHex("256943fbdb2bf87ab91ae7fbeaff14e146cf7e2279b9d155d13461e09b22f523")),
y: *fromBigInt(bigFromHex("0167b0280051495c6af1ec23ba2cd2ff1cdcdeca461a5ab0b5449e9091308310")),
x: *newGFpFromBytes([]byte{0x25, 0x69, 0x43, 0xfb, 0xdb, 0x2b, 0xf8, 0x7a, 0xb9, 0x1a, 0xe7, 0xfb, 0xea, 0xff, 0x14, 0xe1, 0x46, 0xcf, 0x7e, 0x22, 0x79, 0xb9, 0xd1, 0x55, 0xd1, 0x34, 0x61, 0xe0, 0x9b, 0x22, 0xf5, 0x23}),
y: *newGFpFromBytes([]byte{0x01, 0x67, 0xb0, 0x28, 0x00, 0x51, 0x49, 0x5c, 0x6a, 0xf1, 0xec, 0x23, 0xba, 0x2c, 0xd2, 0xff, 0x1c, 0xdc, 0xde, 0xca, 0x46, 0x1a, 0x5a, 0xb0, 0xb5, 0x44, 0x9e, 0x90, 0x91, 0x30, 0x83, 0x10}),
},
y: gfP2{
x: *fromBigInt(bigFromHex("8ffe1c0e9de45fd0fed790ac26be91f6b3f0a49c084fe29a3fb6ed288ad7994d")),
y: *fromBigInt(bigFromHex("1664a1366beb3196f0443e15f5f9042a947354a5678430d45ba031cff06db927")),
x: *newGFpFromBytes([]byte{0x8f, 0xfe, 0x1c, 0x0e, 0x9d, 0xe4, 0x5f, 0xd0, 0xfe, 0xd7, 0x90, 0xac, 0x26, 0xbe, 0x91, 0xf6, 0xb3, 0xf0, 0xa4, 0x9c, 0x08, 0x4f, 0xe2, 0x9a, 0x3f, 0xb6, 0xed, 0x28, 0x8a, 0xd7, 0x99, 0x4d}),
y: *newGFpFromBytes([]byte{0x16, 0x64, 0xa1, 0x36, 0x6b, 0xeb, 0x31, 0x96, 0xf0, 0x44, 0x3e, 0x15, 0xf5, 0xf9, 0x04, 0x2a, 0x94, 0x73, 0x54, 0xa5, 0x67, 0x84, 0x30, 0xd4, 0x5b, 0xa0, 0x31, 0xcf, 0xf0, 0x6d, 0xb9, 0x27}),
},
z: gfP2{
x: *fromBigInt(bigFromHex("7fc6eb2aa771d99c9234fddd31752edfd60723e05a4ebfdeb5c33fbd47e0cf06")),
y: *fromBigInt(bigFromHex("6fa6b6fa6dd6b6d3b19a959a110e748154eef796dc0fc2dd766ea414de786968")),
x: *newGFpFromBytes([]byte{0x7f, 0xc6, 0xeb, 0x2a, 0xa7, 0x71, 0xd9, 0x9c, 0x92, 0x34, 0xfd, 0xdd, 0x31, 0x75, 0x2e, 0xdf, 0xd6, 0x07, 0x23, 0xe0, 0x5a, 0x4e, 0xbf, 0xde, 0xb5, 0xc3, 0x3f, 0xbd, 0x47, 0xe0, 0xcf, 0x06}),
y: *newGFpFromBytes([]byte{0x6f, 0xa6, 0xb6, 0xfa, 0x6d, 0xd6, 0xb6, 0xd3, 0xb1, 0x9a, 0x95, 0x9a, 0x11, 0x0e, 0x74, 0x81, 0x54, 0xee, 0xf7, 0x96, 0xdc, 0x0f, 0xc2, 0xdd, 0x76, 0x6e, 0xa4, 0x14, 0xde, 0x78, 0x69, 0x68}),
},
},
y: gfP6{
x: gfP2{
x: *fromBigInt(bigFromHex("082cde173022da8cd09b28a2d80a8cee53894436a52007f978dc37f36116d39b")),
y: *fromBigInt(bigFromHex("3fa7ed741eaed99a58f53e3df82df7ccd3407bcc7b1d44a9441920ced5fb824f")),
x: *newGFpFromBytes([]byte{0x08, 0x2c, 0xde, 0x17, 0x30, 0x22, 0xda, 0x8c, 0xd0, 0x9b, 0x28, 0xa2, 0xd8, 0x0a, 0x8c, 0xee, 0x53, 0x89, 0x44, 0x36, 0xa5, 0x20, 0x07, 0xf9, 0x78, 0xdc, 0x37, 0xf3, 0x61, 0x16, 0xd3, 0x9b}),
y: *newGFpFromBytes([]byte{0x3f, 0xa7, 0xed, 0x74, 0x1e, 0xae, 0xd9, 0x9a, 0x58, 0xf5, 0x3e, 0x3d, 0xf8, 0x2d, 0xf7, 0xcc, 0xd3, 0x40, 0x7b, 0xcc, 0x7b, 0x1d, 0x44, 0xa9, 0x44, 0x19, 0x20, 0xce, 0xd5, 0xfb, 0x82, 0x4f}),
},
y: gfP2{
x: *fromBigInt(bigFromHex("5e7addaddf7fbfe16291b4e89af50b8217ddc47ba3cba833c6e77c3fb027685e")),
y: *fromBigInt(bigFromHex("79d0c8337072c93fef482bb055f44d6247ccac8e8e12525854b3566236337ebe")),
x: *newGFpFromBytes([]byte{0x5e, 0x7a, 0xdd, 0xad, 0xdf, 0x7f, 0xbf, 0xe1, 0x62, 0x91, 0xb4, 0xe8, 0x9a, 0xf5, 0x0b, 0x82, 0x17, 0xdd, 0xc4, 0x7b, 0xa3, 0xcb, 0xa8, 0x33, 0xc6, 0xe7, 0x7c, 0x3f, 0xb0, 0x27, 0x68, 0x5e}),
y: *newGFpFromBytes([]byte{0x79, 0xd0, 0xc8, 0x33, 0x70, 0x72, 0xc9, 0x3f, 0xef, 0x48, 0x2b, 0xb0, 0x55, 0xf4, 0x4d, 0x62, 0x47, 0xcc, 0xac, 0x8e, 0x8e, 0x12, 0x52, 0x58, 0x54, 0xb3, 0x56, 0x62, 0x36, 0x33, 0x7e, 0xbe}),
},
z: gfP2{
x: *fromBigInt(bigFromHex("7f7c6d52b475e6aaa827fdc5b4175ac6929320f782d998f86b6b57cda42a0426")),
y: *fromBigInt(bigFromHex("36a699de7c136f78eee2dbac4ca9727bff0cee02ee920f5822e65ea170aa9669")),
x: *newGFpFromBytes([]byte{0x7f, 0x7c, 0x6d, 0x52, 0xb4, 0x75, 0xe6, 0xaa, 0xa8, 0x27, 0xfd, 0xc5, 0xb4, 0x17, 0x5a, 0xc6, 0x92, 0x93, 0x20, 0xf7, 0x82, 0xd9, 0x98, 0xf8, 0x6b, 0x6b, 0x57, 0xcd, 0xa4, 0x2a, 0x04, 0x26}),
y: *newGFpFromBytes([]byte{0x36, 0xa6, 0x99, 0xde, 0x7c, 0x13, 0x6f, 0x78, 0xee, 0xe2, 0xdb, 0xac, 0x4c, 0xa9, 0x72, 0x7b, 0xff, 0x0c, 0xee, 0x02, 0xee, 0x92, 0x0f, 0x58, 0x22, 0xe6, 0x5e, 0xa1, 0x70, 0xaa, 0x96, 0x69}),
},
},
}
@ -202,13 +202,13 @@ func (e *gfP12b6) SquareNC(a *gfP12b6) *gfP12b6 {
}
// Cyclo6Square is used in final exponentiation after easy part(a ^ ((p^2 + 1)(p^6-1))).
// Note that after the easy part of the final exponentiation,
// the resulting element lies in cyclotomic subgroup.
// Note that after the easy part of the final exponentiation,
// the resulting element lies in cyclotomic subgroup.
// "New software speed records for cryptographic pairings"
// Section 3.3, Final exponentiation
// https://cryptojedi.org/papers/dclxvi-20100714.pdf
// The fomula reference:
// Granger/Scott (PKC2010).
// Granger/Scott (PKC2010).
// Section 3.2
// https://eprint.iacr.org/2009/565.pdf
func (e *gfP12b6) Cyclo6Square(a *gfP12b6) *gfP12b6 {
@ -334,11 +334,11 @@ func (e *gfP12b6) Cyclo6Squares(a *gfP12b6, n int) *gfP12b6 {
gfP4Square(t11, t00, &in.x.y, &in.y.z)
gfP4Square(t12, t01, &in.y.x, &in.x.z)
gfP4Square(t02, t10, &in.x.x, &in.y.y)
f00.MulU1(t02)
t02.Set(t10)
t10.Set(f00)
f00.Add(t00, t00)
t00.Add(f00, t00)
f00.Add(t01, t01)
@ -351,7 +351,7 @@ func (e *gfP12b6) Cyclo6Squares(a *gfP12b6, n int) *gfP12b6 {
t11.Add(f00, t11)
f00.Add(t12, t12)
t12.Add(f00, t12)
f00.Add(&in.y.z, &in.y.z)
f00.Neg(f00)
f01.Add(&in.y.y, &in.y.y)
@ -361,7 +361,7 @@ func (e *gfP12b6) Cyclo6Squares(a *gfP12b6, n int) *gfP12b6 {
f10.Add(&in.x.z, &in.x.z)
f11.Add(&in.x.y, &in.x.y)
f12.Add(&in.x.x, &in.x.x)
f00.Add(f00, t00)
f01.Add(f01, t01)
f02.Add(f02, t02)

View File

@ -7,16 +7,16 @@ import (
var p6 = gfP6{
gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
}
@ -123,8 +123,8 @@ func TestToGfP12(t *testing.T) {
}
// after mul gfp
x2.MulGfP(x, fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")))
p12_1.MulGFP(p12, fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")))
x2.MulGfP(x, newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"))
p12_1.MulGFP(p12, newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"))
x3.SetGfP12(p12_1)
if *x2 != *x3 {
x3 = gfP12b6Decode(x3)
@ -134,8 +134,8 @@ func TestToGfP12(t *testing.T) {
// after mul gfp2
gfp2 := &gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
}
x2.MulGfP2(x, gfp2)
@ -183,7 +183,7 @@ func Test_gfP12b6Invert(t *testing.T) {
func TestSToPMinus1Over2(t *testing.T) {
expected := &gfP2{}
expected.y.Set(fromBigInt(bigFromHex("3f23ea58e5720bdb843c6cfa9c08674947c5c86e0ddd04eda91d8354377b698b")))
expected.y.Set(newGFpFromHex("3f23ea58e5720bdb843c6cfa9c08674947c5c86e0ddd04eda91d8354377b698b"))
expected.x.Set(zero)
s := &gfP6{}
@ -218,7 +218,7 @@ func TestSToPSquaredMinus1Over2(t *testing.T) {
s.Exp(s, p2)
expected := &gfP2{}
expected.y.Set(fromBigInt(bigFromHex("0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65334")))
expected.y.Set(newGFpFromHex("0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65334"))
expected.x.Set(zero)
if !(s.x.IsZero() && s.y.IsZero() && s.z == *expected) {
@ -252,7 +252,7 @@ func TestSToP4Minus1Over2(t *testing.T) {
s.Exp(s, p4)
expected := &gfP2{}
expected.y.Set(fromBigInt(bigFromHex("0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65333")))
expected.y.Set(newGFpFromHex("0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65333"))
expected.x.Set(zero)
if !(s.x.IsZero() && s.y.IsZero() && s.z == *expected) {

View File

@ -7,12 +7,12 @@ import (
var testdataP4 = gfP4{
gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
}
@ -243,7 +243,7 @@ func Test_gfP12Frobenius_Case1(t *testing.T) {
i = gfP12Decode(i)
expected.z.x.SetZero()
expected.z.y.x.Set(zero)
expected.z.y.y.Set(fromBigInt(bigFromHex("3f23ea58e5720bdb843c6cfa9c08674947c5c86e0ddd04eda91d8354377b698b")))
expected.z.y.y.Set(newGFpFromHex("3f23ea58e5720bdb843c6cfa9c08674947c5c86e0ddd04eda91d8354377b698b"))
expected.x.SetZero()
expected.y.SetZero()
expected = gfP12Decode(expected)
@ -262,7 +262,7 @@ func Test_gfP12Frobenius_Case2(t *testing.T) {
i = gfP12Decode(i)
expected.z.x.SetZero()
expected.z.y.x.Set(zero)
expected.z.y.y.Set(fromBigInt(bigFromHex("0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65334")))
expected.z.y.y.Set(newGFpFromHex("0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65334"))
expected.x.SetZero()
expected.y.SetZero()
expected = gfP12Decode(expected)
@ -282,7 +282,7 @@ func Test_gfP12FrobeniusP2_Case1(t *testing.T) {
i = gfP12Decode(i)
expected.z.x.SetZero()
expected.z.y.x.Set(zero)
expected.z.y.y.Set(fromBigInt(bigFromHex("0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65334")))
expected.z.y.y.Set(newGFpFromHex("0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65334"))
expected.x.SetZero()
expected.y.SetZero()
expected = gfP12Decode(expected)
@ -302,7 +302,7 @@ func Test_gfP12FrobeniusP2_Case2(t *testing.T) {
i = gfP12Decode(i)
expected.z.x.SetZero()
expected.z.y.x.Set(zero)
expected.z.y.y.Set(fromBigInt(bigFromHex("0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65333")))
expected.z.y.y.Set(newGFpFromHex("0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65333"))
expected.x.SetZero()
expected.y.SetZero()
expected = gfP12Decode(expected)
@ -323,7 +323,7 @@ func Test_gfP12FrobeniusP3_Case1(t *testing.T) {
i = gfP12Decode(i)
expected.z.x.SetZero()
expected.z.y.x.Set(zero)
expected.z.y.y.Set(fromBigInt(bigFromHex("6c648de5dc0a3f2cf55acc93ee0baf159f9d411806dc5177f5b21fd3da24d011")))
expected.z.y.y.Set(newGFpFromHex("6c648de5dc0a3f2cf55acc93ee0baf159f9d411806dc5177f5b21fd3da24d011"))
expected.x.SetZero()
expected.y.SetZero()
expected = gfP12Decode(expected)
@ -344,7 +344,7 @@ func Test_gfP12FrobeniusP3_Case2(t *testing.T) {
i = gfP12Decode(i)
expected.z.x.SetZero()
expected.z.y.x.Set(zero)
expected.z.y.y.Set(fromBigInt(bigFromHex("b640000002a3a6f1d603ab4ff58ec74521f2934b1a7aeedbe56f9b27e351457c"))) // -1
expected.z.y.y.Set(newGFpFromHex("b640000002a3a6f1d603ab4ff58ec74521f2934b1a7aeedbe56f9b27e351457c")) // -1
expected.x.SetZero()
expected.y.SetZero()
expected = gfP12Decode(expected)

View File

@ -7,12 +7,12 @@ import (
func TestGfp2BasicOperations(t *testing.T) {
x := &gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
}
y := &gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
}
expectedAdd := "(5bf55bb67d25f098609a367366d94d6599da7405db44c388edb64706908922e4, 728185f97d3df3a01d3ad2a0e140d12011e10fa47d50fd12e6413a361e549cd9)"
expectedSub := "(0e6cca2ef0f4dce3fa4a249bb48a25d84dbf1f63ac843004e3b586d5dac6e8eb, 51785a37fb519603d4b026648151d768ebe9b9193a9c83c365c31316fb711845)"
@ -125,8 +125,8 @@ func TestGfp2BasicOperations(t *testing.T) {
func Test_gfP2Invert(t *testing.T) {
x := &gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
}
xInv := &gfP2{}
@ -141,7 +141,7 @@ func Test_gfP2Invert(t *testing.T) {
}
x = &gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*zero,
}
@ -155,7 +155,7 @@ func Test_gfP2Invert(t *testing.T) {
x = &gfP2{
*zero,
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
}
xInv.Invert(x)
@ -169,8 +169,8 @@ func Test_gfP2Invert(t *testing.T) {
func Test_gfP2Exp(t *testing.T) {
x := &gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
}
got := &gfP2{}
got.Exp(x, big.NewInt(1))
@ -181,8 +181,8 @@ func Test_gfP2Exp(t *testing.T) {
func Test_gfP2Frobenius(t *testing.T) {
x := &gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
}
expected := &gfP2{}
expected.Exp(x, p)
@ -207,8 +207,8 @@ func Test_gfP2Frobenius(t *testing.T) {
func Test_gfP2Sqrt(t *testing.T) {
x := &gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
}
x2, x3, sqrt, sqrtNeg := &gfP2{}, &gfP2{}, &gfP2{}, &gfP2{}
x2.Mul(x, x)
@ -227,12 +227,12 @@ func Test_gfP2Sqrt(t *testing.T) {
func BenchmarkGfP2Mul(b *testing.B) {
x := &gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
}
y := &gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
}
t := &gfP2{}
b.ReportAllocs()
@ -244,8 +244,8 @@ func BenchmarkGfP2Mul(b *testing.B) {
func BenchmarkGfP2MulScalar(b *testing.B) {
x := &gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
}
t := &gfP2{}
@ -258,8 +258,8 @@ func BenchmarkGfP2MulScalar(b *testing.B) {
func BenchmarkGfP2MulU1(b *testing.B) {
x := &gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
}
t := &gfP2{}
@ -272,12 +272,12 @@ func BenchmarkGfP2MulU1(b *testing.B) {
func BenchmarkGfP2MulU(b *testing.B) {
x := &gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
}
y := &gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
}
t := &gfP2{}
@ -290,8 +290,8 @@ func BenchmarkGfP2MulU(b *testing.B) {
func BenchmarkGfP2Square(b *testing.B) {
x := &gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
}
b.ReportAllocs()
b.ResetTimer()
@ -302,8 +302,8 @@ func BenchmarkGfP2Square(b *testing.B) {
func BenchmarkGfP2SquareU(b *testing.B) {
x := &gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
}
b.ReportAllocs()
b.ResetTimer()
@ -314,8 +314,8 @@ func BenchmarkGfP2SquareU(b *testing.B) {
func BenchmarkGfP2Invert(b *testing.B) {
x := &gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
}
t := &gfP2{}
b.ReportAllocs()
@ -327,8 +327,8 @@ func BenchmarkGfP2Invert(b *testing.B) {
func BenchmarkGfP2Neg(b *testing.B) {
x := &gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
}
b.ReportAllocs()
b.ResetTimer()
@ -340,8 +340,8 @@ func BenchmarkGfP2Neg(b *testing.B) {
func BenchmarkGfP2Neg2(b *testing.B) {
x := &gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
}
b.ReportAllocs()
b.ResetTimer()
@ -354,8 +354,8 @@ func BenchmarkGfP2Neg2(b *testing.B) {
/*
func Test_gfP2QuadraticResidue(t *testing.T) {
x := &gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
}
n := bigFromHex("40df880001e10199aa9f985292a7740a5f3e998ff60a2401e81d08b99ba6f8ff691684e427df891a9250c20f55961961fe81f6fc785a9512ad93e28f5cfb4f84")
y := &gfP2{}

View File

@ -8,12 +8,12 @@ import (
func TestGfp4BasicOperations(t *testing.T) {
x := &gfP4{
gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
}
y := &gfP4{}
@ -115,12 +115,12 @@ func TestGfp4BasicOperations(t *testing.T) {
func Test_gfP4Square(t *testing.T) {
x := &gfP4{
gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
}
xmulx := &gfP4{}
@ -140,12 +140,12 @@ func Test_gfP4Invert(t *testing.T) {
gfp2Zero := (&gfP2{}).SetZero()
x := &gfP4{
gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
}
@ -160,8 +160,8 @@ func Test_gfP4Invert(t *testing.T) {
x = &gfP4{
gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
},
*gfp2Zero,
}
@ -176,8 +176,8 @@ func Test_gfP4Invert(t *testing.T) {
x = &gfP4{
*gfp2Zero,
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
}
@ -192,12 +192,12 @@ func Test_gfP4Invert(t *testing.T) {
func Test_gfP4Frobenius(t *testing.T) {
x := &gfP4{
gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
}
expected := &gfP4{}
@ -218,7 +218,7 @@ func Test_gfP4Frobenius_Case1(t *testing.T) {
i.Exp(i, pMinus1)
i = gfP4Decode(i)
expected.y.x.Set(zero)
expected.y.y.Set(fromBigInt(bigFromHex("6c648de5dc0a3f2cf55acc93ee0baf159f9d411806dc5177f5b21fd3da24d011")))
expected.y.y.Set(newGFpFromHex("6c648de5dc0a3f2cf55acc93ee0baf159f9d411806dc5177f5b21fd3da24d011"))
expected.x.SetZero()
expected = gfP4Decode(expected)
if expected.x != i.x || expected.y != i.y {
@ -229,12 +229,12 @@ func Test_gfP4Frobenius_Case1(t *testing.T) {
func Test_gfP4FrobeniusP2(t *testing.T) {
x := &gfP4{
gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
}
expected := &gfP4{}
@ -267,12 +267,12 @@ func Test_gfP4FrobeniusP2_Case1(t *testing.T) {
func Test_gfP4FrobeniusP3(t *testing.T) {
x := &gfP4{
gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
}
expected := &gfP4{}
@ -289,22 +289,22 @@ func Test_gfP4FrobeniusP3(t *testing.T) {
func BenchmarkGfP4Mul(b *testing.B) {
x := &gfP4{
gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
}
y := &gfP4{
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
},
}
t := &gfP4{}
@ -318,12 +318,12 @@ func BenchmarkGfP4Mul(b *testing.B) {
func BenchmarkGfP4Square(b *testing.B) {
x := &gfP4{
gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
}
t := &gfP4{}

View File

@ -8,16 +8,16 @@ import (
func TestMulS(t *testing.T) {
x := &gfP6{
gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
}
s := &gfP6{}
@ -52,28 +52,28 @@ func Test_gfP6Square(t *testing.T) {
gfp2Zero := (&gfP2{}).SetZero()
x := &gfP6{
gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
}
testGfP6Square(t, x)
x = &gfP6{
gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
},
*gfp2Zero,
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
}
testGfP6Square(t, x)
@ -94,28 +94,28 @@ func Test_gfP6Invert(t *testing.T) {
gfp2Zero := (&gfP2{}).SetZero()
x := &gfP6{
gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
}
testGfP6Invert(t, x)
x = &gfP6{
gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
*gfp2Zero,
}
@ -124,12 +124,12 @@ func Test_gfP6Invert(t *testing.T) {
x = &gfP6{
*gfp2Zero,
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
},
}
testGfP6Invert(t, x)
@ -137,13 +137,13 @@ func Test_gfP6Invert(t *testing.T) {
x = &gfP6{
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
*gfp2Zero,
gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
},
}
testGfP6Invert(t, x)
@ -154,7 +154,7 @@ func Test_gfP6Invert(t *testing.T) {
// sToPMinus1 = 0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65334
func TestSToPMinus1(t *testing.T) {
expected := &gfP2{}
expected.y.Set(fromBigInt(bigFromHex("0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65334")))
expected.y.Set(newGFpFromHex("0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65334"))
expected.x.Set(zero)
s := &gfP6{}
@ -170,7 +170,7 @@ func TestSToPMinus1(t *testing.T) {
// s2ToPMinus1 = 0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65333
func TestS2ToPMinus1(t *testing.T) {
expected := &gfP2{}
expected.y.Set(fromBigInt(bigFromHex("0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65333")))
expected.y.Set(newGFpFromHex("0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65333"))
expected.x.Set(zero)
s := &gfP6{}
@ -182,7 +182,7 @@ func TestS2ToPMinus1(t *testing.T) {
}
s2 := &gfP2{}
s2.y.Set(fromBigInt(bigFromHex("0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65334")))
s2.y.Set(newGFpFromHex("0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65334"))
s2.x.Set(zero)
s2.Square(s2)
@ -194,16 +194,16 @@ func TestS2ToPMinus1(t *testing.T) {
func Test_gfP6Frobenius(t *testing.T) {
x := &gfP6{
gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
}
expected := &gfP6{}
@ -223,7 +223,7 @@ func TestSToPSquaredMinus1(t *testing.T) {
s.Exp(s, p2)
expected := &gfP2{}
expected.y.Set(fromBigInt(bigFromHex("0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65333")))
expected.y.Set(newGFpFromHex("0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65333"))
expected.x.Set(zero)
if !(s.x.IsZero() && s.y.IsZero() && s.z == *expected) {
@ -233,11 +233,11 @@ func TestSToPSquaredMinus1(t *testing.T) {
func TestSTo2PSquaredMinus2(t *testing.T) {
expected := &gfP2{}
expected.y.Set(fromBigInt(bigFromHex("b640000002a3a6f0e303ab4ff2eb2052a9f02115caef75e70f738991676af249")))
expected.y.Set(newGFpFromHex("b640000002a3a6f0e303ab4ff2eb2052a9f02115caef75e70f738991676af249"))
expected.x.Set(zero)
s2 := &gfP2{}
s2.y.Set(fromBigInt(bigFromHex("0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65333")))
s2.y.Set(newGFpFromHex("0000000000000000f300000002a3a6f2780272354f8b78f4d5fc11967be65333"))
s2.x.Set(zero)
s2.Square(s2)
@ -250,16 +250,16 @@ func TestSTo2PSquaredMinus2(t *testing.T) {
func Test_gfP6FrobeniusP2(t *testing.T) {
x := &gfP6{
gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
}
expected := &gfP6{}
@ -275,16 +275,16 @@ func Test_gfP6FrobeniusP2(t *testing.T) {
func Test_gfP6FrobeniusP4(t *testing.T) {
x := &gfP6{
gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"),
*newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96"),
*newGFpFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7"),
},
}
expected := &gfP6{}

View File

@ -6,15 +6,25 @@ import (
"testing"
)
func fromBigInt(x *big.Int) (out *gfP) {
var buf [32]byte
x.FillBytes(buf[:])
return newGFpFromBytes(buf[:])
}
func newGFpFromHex(x string) (out *gfP) {
return fromBigInt(bigFromHex(x))
}
func TestGfpBasicOperations(t *testing.T) {
x := fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"))
y := fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B"))
expectedAdd := fromBigInt(bigFromHex("0691692307d370af56226e57920199fbbe10f216c67fbc9468c7f225a4b1f21f"))
expectedDouble := fromBigInt(bigFromHex("551de7a0ee24723edcf314ff72f478fac1c7c4e7044238acc3913cfbcdaf7d05"))
expectedSub := fromBigInt(bigFromHex("67b381821c52a5624f3304a8149be8461e3bc07adcb872c38aa65051ba53ba97"))
expectedNeg := fromBigInt(bigFromHex("7f1d8aad70909be90358f1d02240062433cc3a0248ded72febb879ec33ce6f22"))
expectedMul := fromBigInt(bigFromHex("3d08bbad376584e4f74bd31f78f716372b96ba8c3f939c12b8d54e79b6489e76"))
expectedMul2 := fromBigInt(bigFromHex("1df94a9e05a559ff38e0ab50cece734dc058d33738ceacaa15986a67cbff1ef6"))
x := newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")
y := newGFpFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")
expectedAdd := newGFpFromHex("0691692307d370af56226e57920199fbbe10f216c67fbc9468c7f225a4b1f21f")
expectedDouble := newGFpFromHex("551de7a0ee24723edcf314ff72f478fac1c7c4e7044238acc3913cfbcdaf7d05")
expectedSub := newGFpFromHex("67b381821c52a5624f3304a8149be8461e3bc07adcb872c38aa65051ba53ba97")
expectedNeg := newGFpFromHex("7f1d8aad70909be90358f1d02240062433cc3a0248ded72febb879ec33ce6f22")
expectedMul := newGFpFromHex("3d08bbad376584e4f74bd31f78f716372b96ba8c3f939c12b8d54e79b6489e76")
expectedMul2 := newGFpFromHex("1df94a9e05a559ff38e0ab50cece734dc058d33738ceacaa15986a67cbff1ef6")
t.Parallel()
t.Run("add", func(t *testing.T) {
@ -142,7 +152,7 @@ func TestGfpSqr(t *testing.T) {
}
func TestFromMont(t *testing.T) {
x := fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141"))
x := newGFpFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")
ret1, ret2 := &gfP{}, &gfP{}
gfpFromMont(ret1, x)
gfpMul(ret2, x, &gfP{1})
@ -240,7 +250,7 @@ func TestGeneratedSqrt(t *testing.T) {
}
func TestInvert(t *testing.T) {
x := fromBigInt(bigFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596"))
x := newGFpFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596")
xInv := &gfP{}
xInv.Invert(x)
y := &gfP{}
@ -251,7 +261,7 @@ func TestInvert(t *testing.T) {
}
func TestGfpNeg(t *testing.T) {
x := fromBigInt(bigFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596"))
x := newGFpFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596")
got := &gfP{}
gfpSub(got, zero, x)
expected := &gfP{}
@ -267,7 +277,7 @@ func TestGfpNeg(t *testing.T) {
}
func BenchmarkGfPUnmarshal(b *testing.B) {
x := fromBigInt(bigFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596"))
x := newGFpFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596")
b.ReportAllocs()
b.ResetTimer()
var out [32]byte
@ -278,7 +288,7 @@ func BenchmarkGfPUnmarshal(b *testing.B) {
}
func BenchmarkGfPMul(b *testing.B) {
x := fromBigInt(bigFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596"))
x := newGFpFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596")
b.ReportAllocs()
b.ResetTimer()
ret := &gfP{}
@ -288,7 +298,7 @@ func BenchmarkGfPMul(b *testing.B) {
}
func BenchmarkGfPSqr(b *testing.B) {
x := fromBigInt(bigFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596"))
x := newGFpFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596")
b.ReportAllocs()
b.ResetTimer()
ret := &gfP{}
@ -298,7 +308,7 @@ func BenchmarkGfPSqr(b *testing.B) {
}
func BenchmarkGfPTriple(b *testing.B) {
x := fromBigInt(bigFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596"))
x := newGFpFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596")
b.ReportAllocs()
b.ResetTimer()
ret := &gfP{}
@ -308,7 +318,7 @@ func BenchmarkGfPTriple(b *testing.B) {
}
func BenchmarkGfPTriple2(b *testing.B) {
x := fromBigInt(bigFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596"))
x := newGFpFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596")
b.ReportAllocs()
b.ResetTimer()
ret := &gfP{}
@ -319,7 +329,7 @@ func BenchmarkGfPTriple2(b *testing.B) {
}
func BenchmarkGfPDouble(b *testing.B) {
x := fromBigInt(bigFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596"))
x := newGFpFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596")
b.ReportAllocs()
b.ResetTimer()
ret := &gfP{}
@ -329,7 +339,7 @@ func BenchmarkGfPDouble(b *testing.B) {
}
func BenchmarkGfPDouble2(b *testing.B) {
x := fromBigInt(bigFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596"))
x := newGFpFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596")
b.ReportAllocs()
b.ResetTimer()
ret := &gfP{}
@ -339,7 +349,7 @@ func BenchmarkGfPDouble2(b *testing.B) {
}
func BenchmarkGfPNeg(b *testing.B) {
x := fromBigInt(bigFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596"))
x := newGFpFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596")
b.ReportAllocs()
b.ResetTimer()
ret := &gfP{}
@ -349,7 +359,7 @@ func BenchmarkGfPNeg(b *testing.B) {
}
func BenchmarkGfPNeg2(b *testing.B) {
x := fromBigInt(bigFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596"))
x := newGFpFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596")
b.ReportAllocs()
b.ResetTimer()
ret := &gfP{}
@ -359,7 +369,7 @@ func BenchmarkGfPNeg2(b *testing.B) {
}
func BenchmarkGfPInvert(b *testing.B) {
x := fromBigInt(bigFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596"))
x := newGFpFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596")
b.ReportAllocs()
b.ResetTimer()
ret := &gfP{}
@ -369,7 +379,7 @@ func BenchmarkGfPInvert(b *testing.B) {
}
func BenchmarkGfPInvert2(b *testing.B) {
x := fromBigInt(bigFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596"))
x := newGFpFromHex("9093a2b979e6186f43a9b28d41ba644d533377f2ede8c66b19774bf4a9c7a596")
b.ReportAllocs()
b.ResetTimer()
ret := &gfP{}

View File

@ -25,12 +25,12 @@ var threeTwistB = &gfP2{
// twistGen is the generator of group G₂.
var twistGen = &twistPoint{
gfP2{
*fromBigInt(bigFromHex("85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141")),
*fromBigInt(bigFromHex("3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B")),
*newGFpFromBytes([]byte{0x85, 0xAE, 0xF3, 0xD0, 0x78, 0x64, 0x0C, 0x98, 0x59, 0x7B, 0x60, 0x27, 0xB4, 0x41, 0xA0, 0x1F, 0xF1, 0xDD, 0x2C, 0x19, 0x0F, 0x5E, 0x93, 0xC4, 0x54, 0x80, 0x6C, 0x11, 0xD8, 0x80, 0x61, 0x41}),
*newGFpFromBytes([]byte{0x37, 0x22, 0x75, 0x52, 0x92, 0x13, 0x0B, 0x08, 0xD2, 0xAA, 0xB9, 0x7F, 0xD3, 0x4E, 0xC1, 0x20, 0xEE, 0x26, 0x59, 0x48, 0xD1, 0x9C, 0x17, 0xAB, 0xF9, 0xB7, 0x21, 0x3B, 0xAF, 0x82, 0xD6, 0x5B}),
},
gfP2{
*fromBigInt(bigFromHex("17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96")),
*fromBigInt(bigFromHex("A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7")),
*newGFpFromBytes([]byte{0x17, 0x50, 0x9B, 0x09, 0x2E, 0x84, 0x5C, 0x12, 0x66, 0xBA, 0x0D, 0x26, 0x2C, 0xBE, 0xE6, 0xED, 0x07, 0x36, 0xA9, 0x6F, 0xA3, 0x47, 0xC8, 0xBD, 0x85, 0x6D, 0xC7, 0x6B, 0x84, 0xEB, 0xEB, 0x96}),
*newGFpFromBytes([]byte{0xA7, 0xCF, 0x28, 0xD5, 0x19, 0xBE, 0x3D, 0xA6, 0x5F, 0x31, 0x70, 0x15, 0x3D, 0x27, 0x8F, 0xF2, 0x47, 0xEF, 0xBA, 0x98, 0xA7, 0x1A, 0x08, 0x11, 0x62, 0x15, 0xBB, 0xA5, 0xC9, 0x99, 0xA7, 0xC7}),
},
gfP2{*newGFp(0), *newGFp(1)},
gfP2{*newGFp(0), *newGFp(1)},