mirror of
https://github.com/sonr-io/crypto.git
synced 2026-01-11 20:08:57 +00:00
218 lines
3.8 KiB
Go
Executable File
218 lines
3.8 KiB
Go
Executable File
package bls12381
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestFp6Arithmetic(t *testing.T) {
|
|
a := fp6{
|
|
A: fp2{
|
|
A: fp{
|
|
0x47f9cb98b1b82d58,
|
|
0x5fe911eba3aa1d9d,
|
|
0x96bf1b5f4dd81db3,
|
|
0x8100d27cc9259f5b,
|
|
0xafa20b9674640eab,
|
|
0x09bbcea7d8d9497d,
|
|
},
|
|
B: fp{
|
|
0x0303cb98b1662daa,
|
|
0xd93110aa0a621d5a,
|
|
0xbfa9820c5be4a468,
|
|
0x0ba3643ecb05a348,
|
|
0xdc3534bb1f1c25a6,
|
|
0x06c305bb19c0e1c1,
|
|
},
|
|
},
|
|
B: fp2{
|
|
A: fp{
|
|
0x46f9cb98b162d858,
|
|
0x0be9109cf7aa1d57,
|
|
0xc791bc55fece41d2,
|
|
0xf84c57704e385ec2,
|
|
0xcb49c1d9c010e60f,
|
|
0x0acdb8e158bfe3c8,
|
|
},
|
|
B: fp{
|
|
0x8aefcb98b15f8306,
|
|
0x3ea1108fe4f21d54,
|
|
0xcf79f69fa1b7df3b,
|
|
0xe4f54aa1d16b1a3c,
|
|
0xba5e4ef86105a679,
|
|
0x0ed86c0797bee5cf,
|
|
},
|
|
},
|
|
C: fp2{
|
|
A: fp{
|
|
0xcee5cb98b15c2db4,
|
|
0x71591082d23a1d51,
|
|
0xd76230e944a17ca4,
|
|
0xd19e3dd3549dd5b6,
|
|
0xa972dc1701fa66e3,
|
|
0x12e31f2dd6bde7d6,
|
|
},
|
|
B: fp{
|
|
0xad2acb98b1732d9d,
|
|
0x2cfd10dd06961d64,
|
|
0x07396b86c6ef24e8,
|
|
0xbd76e2fdb1bfc820,
|
|
0x6afea7f6de94d0d5,
|
|
0x10994b0c5744c040,
|
|
},
|
|
},
|
|
}
|
|
b := fp6{
|
|
A: fp2{
|
|
A: fp{
|
|
0xf120cb98b16fd84b,
|
|
0x5fb510cff3de1d61,
|
|
0x0f21a5d069d8c251,
|
|
0xaa1fd62f34f2839a,
|
|
0x5a1335157f89913f,
|
|
0x14a3fe329643c247,
|
|
},
|
|
B: fp{
|
|
0x3516cb98b16c82f9,
|
|
0x926d10c2e1261d5f,
|
|
0x1709e01a0cc25fba,
|
|
0x96c8c960b8253f14,
|
|
0x4927c234207e51a9,
|
|
0x18aeb158d542c44e,
|
|
},
|
|
},
|
|
B: fp2{
|
|
A: fp{
|
|
0xbf0dcb98b16982fc,
|
|
0xa67910b71d1a1d5c,
|
|
0xb7c147c2b8fb06ff,
|
|
0x1efa710d47d2e7ce,
|
|
0xed20a79c7e27653c,
|
|
0x02b85294dac1dfba,
|
|
},
|
|
B: fp{
|
|
0x9d52cb98b18082e5,
|
|
0x621d111151761d6f,
|
|
0xe79882603b48af43,
|
|
0x0ad31637a4f4da37,
|
|
0xaeac737c5ac1cf2e,
|
|
0x006e7e735b48b824,
|
|
},
|
|
},
|
|
C: fp2{
|
|
A: fp{
|
|
0xe148cb98b17d2d93,
|
|
0x94d511043ebe1d6c,
|
|
0xef80bca9de324cac,
|
|
0xf77c0969282795b1,
|
|
0x9dc1009afbb68f97,
|
|
0x047931999a47ba2b,
|
|
},
|
|
B: fp{
|
|
0x253ecb98b179d841,
|
|
0xc78d10f72c061d6a,
|
|
0xf768f6f3811bea15,
|
|
0xe424fc9aab5a512b,
|
|
0x8cd58db99cab5001,
|
|
0x0883e4bfd946bc32,
|
|
},
|
|
},
|
|
}
|
|
c := fp6{
|
|
A: fp2{
|
|
A: fp{
|
|
0x6934cb98b17682ef,
|
|
0xfa4510ea194e1d67,
|
|
0xff51313d2405877e,
|
|
0xd0cdefcc2e8d0ca5,
|
|
0x7bea1ad83da0106b,
|
|
0x0c8e97e61845be39,
|
|
},
|
|
B: fp{
|
|
0x4779cb98b18d82d8,
|
|
0xb5e911444daa1d7a,
|
|
0x2f286bdaa6532fc2,
|
|
0xbca694f68baeff0f,
|
|
0x3d75e6b81a3a7a5d,
|
|
0x0a44c3c498cc96a3,
|
|
},
|
|
},
|
|
B: fp2{
|
|
A: fp{
|
|
0x8b6fcb98b18a2d86,
|
|
0xe8a111373af21d77,
|
|
0x3710a624493ccd2b,
|
|
0xa94f88280ee1ba89,
|
|
0x2c8a73d6bb2f3ac7,
|
|
0x0e4f76ead7cb98aa,
|
|
},
|
|
B: fp{
|
|
0xcf65cb98b186d834,
|
|
0x1b59112a283a1d74,
|
|
0x3ef8e06dec266a95,
|
|
0x95f87b5992147603,
|
|
0x1b9f00f55c23fb31,
|
|
0x125a2a1116ca9ab1,
|
|
},
|
|
},
|
|
C: fp2{
|
|
A: fp{
|
|
0x135bcb98b18382e2,
|
|
0x4e11111d15821d72,
|
|
0x46e11ab78f1007fe,
|
|
0x82a16e8b1547317d,
|
|
0x0ab38e13fd18bb9b,
|
|
0x1664dd3755c99cb8,
|
|
},
|
|
B: fp{
|
|
0xce65cb98b1318334,
|
|
0xc7590fdb7c3a1d2e,
|
|
0x6fcb81649d1c8eb3,
|
|
0x0d44004d1727356a,
|
|
0x3746b738a7d0d296,
|
|
0x136c144a96b134fc,
|
|
},
|
|
},
|
|
}
|
|
|
|
d := new(fp6).Square(&a)
|
|
e := new(fp6).Mul(&a, &a)
|
|
require.Equal(t, 1, e.Equal(d))
|
|
|
|
d.Square(&b)
|
|
e.Mul(&b, &b)
|
|
require.Equal(t, 1, e.Equal(d))
|
|
|
|
d.Square(&c)
|
|
e.Mul(&c, &c)
|
|
require.Equal(t, 1, e.Equal(d))
|
|
|
|
// (a + b) * c^2
|
|
d.Add(&a, &b)
|
|
d.Mul(d, new(fp6).Square(&c))
|
|
|
|
e.Mul(&c, &c)
|
|
e.Mul(e, &a)
|
|
tt := new(fp6).Mul(&c, &c)
|
|
tt.Mul(tt, &b)
|
|
e.Add(e, tt)
|
|
|
|
require.Equal(t, 1, d.Equal(e))
|
|
|
|
_, wasInverted := d.Invert(&a)
|
|
require.Equal(t, 1, wasInverted)
|
|
_, wasInverted = e.Invert(&b)
|
|
require.Equal(t, 1, wasInverted)
|
|
|
|
tt.Mul(&a, &b)
|
|
_, wasInverted = tt.Invert(tt)
|
|
require.Equal(t, 1, wasInverted)
|
|
d.Mul(d, e)
|
|
require.Equal(t, 1, tt.Equal(d))
|
|
|
|
_, _ = d.Invert(&a)
|
|
e.SetOne()
|
|
require.Equal(t, 1, e.Equal(d.Mul(d, &a)))
|
|
}
|