mirror of
https://github.com/sonr-io/crypto.git
synced 2026-08-02 15:31:38 +00:00
425 lines
7.6 KiB
Go
Executable File
425 lines
7.6 KiB
Go
Executable File
package bls12381
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestFp2Square(t *testing.T) {
|
|
a := fp2{
|
|
A: fp{
|
|
0xc9a2183163ee70d4,
|
|
0xbc3770a7196b5c91,
|
|
0xa247f8c1304c5f44,
|
|
0xb01fc2a3726c80b5,
|
|
0xe1d293e5bbd919c9,
|
|
0x04b78e80020ef2ca,
|
|
},
|
|
B: fp{
|
|
0x952ea4460462618f,
|
|
0x238d5eddf025c62f,
|
|
0xf6c94b012ea92e72,
|
|
0x03ce24eac1c93808,
|
|
0x055950f945da483c,
|
|
0x010a768d0df4eabc,
|
|
},
|
|
}
|
|
b := fp2{
|
|
A: fp{
|
|
0xa1e09175a4d2c1fe,
|
|
0x8b33acfc204eff12,
|
|
0xe24415a11b456e42,
|
|
0x61d996b1b6ee1936,
|
|
0x1164dbe8667c853c,
|
|
0x0788557acc7d9c79,
|
|
},
|
|
B: fp{
|
|
0xda6a87cc6f48fa36,
|
|
0x0fc7b488277c1903,
|
|
0x9445ac4adc448187,
|
|
0x02616d5bc9099209,
|
|
0xdbed46772db58d48,
|
|
0x11b94d5076c7b7b1,
|
|
},
|
|
}
|
|
|
|
require.Equal(t, &b, a.Square(&a))
|
|
}
|
|
|
|
func TestFp2Mul(t *testing.T) {
|
|
a := fp2{
|
|
A: fp{
|
|
0xc9a2183163ee70d4,
|
|
0xbc3770a7196b5c91,
|
|
0xa247f8c1304c5f44,
|
|
0xb01fc2a3726c80b5,
|
|
0xe1d293e5bbd919c9,
|
|
0x04b78e80020ef2ca,
|
|
},
|
|
B: fp{
|
|
0x952ea4460462618f,
|
|
0x238d5eddf025c62f,
|
|
0xf6c94b012ea92e72,
|
|
0x03ce24eac1c93808,
|
|
0x055950f945da483c,
|
|
0x010a768d0df4eabc,
|
|
},
|
|
}
|
|
b := fp2{
|
|
A: fp{
|
|
0xa1e09175a4d2c1fe,
|
|
0x8b33acfc204eff12,
|
|
0xe24415a11b456e42,
|
|
0x61d996b1b6ee1936,
|
|
0x1164dbe8667c853c,
|
|
0x0788557acc7d9c79,
|
|
},
|
|
B: fp{
|
|
0xda6a87cc6f48fa36,
|
|
0x0fc7b488277c1903,
|
|
0x9445ac4adc448187,
|
|
0x02616d5bc9099209,
|
|
0xdbed46772db58d48,
|
|
0x11b94d5076c7b7b1,
|
|
},
|
|
}
|
|
c := fp2{
|
|
A: fp{
|
|
0xf597483e27b4e0f7,
|
|
0x610fbadf811dae5f,
|
|
0x8432af917714327a,
|
|
0x6a9a9603cf88f09e,
|
|
0xf05a7bf8bad0eb01,
|
|
0x09549131c003ffae,
|
|
},
|
|
B: fp{
|
|
0x963b02d0f93d37cd,
|
|
0xc95ce1cdb30a73d4,
|
|
0x308725fa3126f9b8,
|
|
0x56da3c167fab0d50,
|
|
0x6b5086b5f4b6d6af,
|
|
0x09c39f062f18e9f2,
|
|
},
|
|
}
|
|
|
|
require.Equal(t, 1, c.Equal(new(fp2).Mul(&a, &b)))
|
|
}
|
|
|
|
func TestFp2Add(t *testing.T) {
|
|
a := fp2{
|
|
A: fp{
|
|
0xc9a2183163ee70d4,
|
|
0xbc3770a7196b5c91,
|
|
0xa247f8c1304c5f44,
|
|
0xb01fc2a3726c80b5,
|
|
0xe1d293e5bbd919c9,
|
|
0x04b78e80020ef2ca,
|
|
},
|
|
B: fp{
|
|
0x952ea4460462618f,
|
|
0x238d5eddf025c62f,
|
|
0xf6c94b012ea92e72,
|
|
0x03ce24eac1c93808,
|
|
0x055950f945da483c,
|
|
0x010a768d0df4eabc,
|
|
},
|
|
}
|
|
b := fp2{
|
|
A: fp{
|
|
0xa1e09175a4d2c1fe,
|
|
0x8b33acfc204eff12,
|
|
0xe24415a11b456e42,
|
|
0x61d996b1b6ee1936,
|
|
0x1164dbe8667c853c,
|
|
0x0788557acc7d9c79,
|
|
},
|
|
B: fp{
|
|
0xda6a87cc6f48fa36,
|
|
0x0fc7b488277c1903,
|
|
0x9445ac4adc448187,
|
|
0x02616d5bc9099209,
|
|
0xdbed46772db58d48,
|
|
0x11b94d5076c7b7b1,
|
|
},
|
|
}
|
|
c := fp2{
|
|
A: fp{
|
|
0x6b82a9a708c132d2,
|
|
0x476b1da339ba5ba4,
|
|
0x848c0e624b91cd87,
|
|
0x11f95955295a99ec,
|
|
0xf3376fce22559f06,
|
|
0x0c3fe3face8c8f43,
|
|
},
|
|
B: fp{
|
|
0x6f992c1273ab5bc5,
|
|
0x3355136617a1df33,
|
|
0x8b0ef74c0aedaff9,
|
|
0x062f92468ad2ca12,
|
|
0xe1469770738fd584,
|
|
0x12c3c3dd84bca26d,
|
|
},
|
|
}
|
|
|
|
require.Equal(t, 1, c.Equal(new(fp2).Add(&a, &b)))
|
|
}
|
|
|
|
func TestFp2Sub(t *testing.T) {
|
|
a := fp2{
|
|
A: fp{
|
|
0xc9a2183163ee70d4,
|
|
0xbc3770a7196b5c91,
|
|
0xa247f8c1304c5f44,
|
|
0xb01fc2a3726c80b5,
|
|
0xe1d293e5bbd919c9,
|
|
0x04b78e80020ef2ca,
|
|
},
|
|
B: fp{
|
|
0x952ea4460462618f,
|
|
0x238d5eddf025c62f,
|
|
0xf6c94b012ea92e72,
|
|
0x03ce24eac1c93808,
|
|
0x055950f945da483c,
|
|
0x010a768d0df4eabc,
|
|
},
|
|
}
|
|
b := fp2{
|
|
A: fp{
|
|
0xa1e09175a4d2c1fe,
|
|
0x8b33acfc204eff12,
|
|
0xe24415a11b456e42,
|
|
0x61d996b1b6ee1936,
|
|
0x1164dbe8667c853c,
|
|
0x0788557acc7d9c79,
|
|
},
|
|
B: fp{
|
|
0xda6a87cc6f48fa36,
|
|
0x0fc7b488277c1903,
|
|
0x9445ac4adc448187,
|
|
0x02616d5bc9099209,
|
|
0xdbed46772db58d48,
|
|
0x11b94d5076c7b7b1,
|
|
},
|
|
}
|
|
c := fp2{
|
|
A: fp{
|
|
0xe1c086bbbf1b5981,
|
|
0x4fafc3a9aa705d7e,
|
|
0x2734b5c10bb7e726,
|
|
0xb2bd7776af037a3e,
|
|
0x1b895fb398a84164,
|
|
0x17304aef6f113cec,
|
|
},
|
|
B: fp{
|
|
0x74c31c7995191204,
|
|
0x3271aa5479fdad2b,
|
|
0xc9b471574915a30f,
|
|
0x65e40313ec44b8be,
|
|
0x7487b2385b7067cb,
|
|
0x09523b26d0ad19a4,
|
|
},
|
|
}
|
|
|
|
require.Equal(t, 1, c.Equal(new(fp2).Sub(&a, &b)))
|
|
}
|
|
|
|
func TestFp2Neg(t *testing.T) {
|
|
a := fp2{
|
|
A: fp{
|
|
0xc9a2183163ee70d4,
|
|
0xbc3770a7196b5c91,
|
|
0xa247f8c1304c5f44,
|
|
0xb01fc2a3726c80b5,
|
|
0xe1d293e5bbd919c9,
|
|
0x04b78e80020ef2ca,
|
|
},
|
|
B: fp{
|
|
0x952ea4460462618f,
|
|
0x238d5eddf025c62f,
|
|
0xf6c94b012ea92e72,
|
|
0x03ce24eac1c93808,
|
|
0x055950f945da483c,
|
|
0x010a768d0df4eabc,
|
|
},
|
|
}
|
|
b := fp2{
|
|
A: fp{
|
|
0xf05ce7ce9c1139d7,
|
|
0x62748f5797e8a36d,
|
|
0xc4e8d9dfc66496df,
|
|
0xb45788e181189209,
|
|
0x694913d08772930d,
|
|
0x1549836a3770f3cf,
|
|
},
|
|
B: fp{
|
|
0x24d05bb9fb9d491c,
|
|
0xfb1ea120c12e39d0,
|
|
0x7067879fc807c7b1,
|
|
0x60a9269a31bbdab6,
|
|
0x45c256bcfd71649b,
|
|
0x18f69b5d2b8afbde,
|
|
},
|
|
}
|
|
|
|
require.Equal(t, 1, b.Equal(new(fp2).Neg(&a)))
|
|
}
|
|
|
|
func TestFp2Sqrt(t *testing.T) {
|
|
a := fp2{
|
|
A: fp{
|
|
0x2beed14627d7f9e9,
|
|
0xb6614e06660e5dce,
|
|
0x06c4cc7c2f91d42c,
|
|
0x996d78474b7a63cc,
|
|
0xebaebc4c820d574e,
|
|
0x18865e12d93fd845,
|
|
},
|
|
B: fp{
|
|
0x7d828664baf4f566,
|
|
0xd17e663996ec7339,
|
|
0x679ead55cb4078d0,
|
|
0xfe3b2260e001ec28,
|
|
0x305993d043d91b68,
|
|
0x0626f03c0489b72d,
|
|
},
|
|
}
|
|
|
|
asq, wasSquare := (&fp2{}).Sqrt(&a)
|
|
require.Equal(t, 1, wasSquare)
|
|
require.Equal(t, 1, a.Equal(asq.Square(asq)))
|
|
|
|
b := fp2{
|
|
A: fp{
|
|
0x6631000000105545,
|
|
0x211400400eec000d,
|
|
0x3fa7af30c820e316,
|
|
0xc52a8b8d6387695d,
|
|
0x9fb4e61d1e83eac5,
|
|
0x005cb922afe84dc7,
|
|
},
|
|
B: fp{},
|
|
}
|
|
bsq, wasSquare := (&fp2{}).Sqrt(&b)
|
|
require.Equal(t, 1, wasSquare)
|
|
require.Equal(t, 1, b.Equal(bsq.Square(bsq)))
|
|
|
|
c := fp2{
|
|
A: fp{
|
|
0x44f600000051ffae,
|
|
0x86b8014199480043,
|
|
0xd7159952f1f3794a,
|
|
0x755d6e3dfe1ffc12,
|
|
0xd36cd6db5547e905,
|
|
0x02f8c8ecbf1867bb,
|
|
},
|
|
B: fp{},
|
|
}
|
|
csq, wasSquare := (&fp2{}).Sqrt(&c)
|
|
require.Equal(t, 1, wasSquare)
|
|
require.Equal(t, 1, c.Equal(csq.Square(csq)))
|
|
|
|
d := fp2{
|
|
A: fp{
|
|
0xc5fa1bc8fd00d7f6,
|
|
0x3830ca454606003b,
|
|
0x2b287f1104b102da,
|
|
0xa7fb30f28230f23e,
|
|
0x339cdb9ee953dbf0,
|
|
0x0d78ec51d989fc57,
|
|
},
|
|
B: fp{
|
|
0x27ec4898cf87f613,
|
|
0x9de1394e1abb05a5,
|
|
0x0947f85dc170fc14,
|
|
0x586fbc696b6114b7,
|
|
0x2b3475a4077d7169,
|
|
0x13e1c895cc4b6c22,
|
|
},
|
|
}
|
|
_, wasSquare = (&fp2{}).Sqrt(&d)
|
|
require.Equal(t, 0, wasSquare)
|
|
|
|
_, wasSquare = (&fp2{}).Sqrt(&fp2{})
|
|
require.Equal(t, 1, wasSquare)
|
|
}
|
|
|
|
func TestFp2Invert(t *testing.T) {
|
|
a := fp2{
|
|
A: fp{
|
|
0x1128ecad67549455,
|
|
0x9e7a1cff3a4ea1a8,
|
|
0xeb208d51e08bcf27,
|
|
0xe98ad40811f5fc2b,
|
|
0x736c3a59232d511d,
|
|
0x10acd42d29cfcbb6,
|
|
},
|
|
B: fp{
|
|
0xd328e37cc2f58d41,
|
|
0x948df0858a605869,
|
|
0x6032f9d56f93a573,
|
|
0x2be483ef3fffdc87,
|
|
0x30ef61f88f483c2a,
|
|
0x1333f55a35725be0,
|
|
},
|
|
}
|
|
|
|
b := fp2{
|
|
A: fp{
|
|
0x0581a1333d4f48a6,
|
|
0x58242f6ef0748500,
|
|
0x0292c955349e6da5,
|
|
0xba37721ddd95fcd0,
|
|
0x70d167903aa5dfc5,
|
|
0x11895e118b58a9d5,
|
|
},
|
|
B: fp{
|
|
0x0eda09d2d7a85d17,
|
|
0x8808e137a7d1a2cf,
|
|
0x43ae2625c1ff21db,
|
|
0xf85ac9fdf7a74c64,
|
|
0x8fccdda5b8da9738,
|
|
0x08e84f0cb32cd17d,
|
|
},
|
|
}
|
|
|
|
ainv, wasInverted := (&fp2{}).Invert(&a)
|
|
require.Equal(t, 1, wasInverted)
|
|
require.Equal(t, 1, b.Equal(ainv))
|
|
|
|
_, wasInverted = (&fp2{}).Invert(&fp2{})
|
|
require.Equal(t, 0, wasInverted)
|
|
}
|
|
|
|
func TestFp2LexicographicallyLargest(t *testing.T) {
|
|
require.Equal(t, 0, new(fp2).SetZero().LexicographicallyLargest())
|
|
require.Equal(t, 0, new(fp2).SetOne().LexicographicallyLargest())
|
|
|
|
a := fp2{
|
|
A: fp{
|
|
0x1128_ecad_6754_9455,
|
|
0x9e7a_1cff_3a4e_a1a8,
|
|
0xeb20_8d51_e08b_cf27,
|
|
0xe98a_d408_11f5_fc2b,
|
|
0x736c_3a59_232d_511d,
|
|
0x10ac_d42d_29cf_cbb6,
|
|
},
|
|
B: fp{
|
|
0xd328_e37c_c2f5_8d41,
|
|
0x948d_f085_8a60_5869,
|
|
0x6032_f9d5_6f93_a573,
|
|
0x2be4_83ef_3fff_dc87,
|
|
0x30ef_61f8_8f48_3c2a,
|
|
0x1333_f55a_3572_5be0,
|
|
},
|
|
}
|
|
|
|
require.Equal(t, 1, a.LexicographicallyLargest())
|
|
aNeg := new(fp2).Neg(&a)
|
|
require.Equal(t, 0, aNeg.LexicographicallyLargest())
|
|
a.B.SetZero()
|
|
require.Equal(t, 0, a.LexicographicallyLargest())
|
|
aNeg.B.SetZero()
|
|
require.Equal(t, 1, aNeg.LexicographicallyLargest())
|
|
}
|