mirror of
https://github.com/sonr-io/crypto.git
synced 2026-01-12 04:09:13 +00:00
418 lines
7.9 KiB
Go
418 lines
7.9 KiB
Go
|
|
package bls12381
|
||
|
|
|
||
|
|
import (
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/stretchr/testify/require"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestFp12Arithmetic(t *testing.T) {
|
||
|
|
var aa, bb, cc, d, e, f fp12
|
||
|
|
a := fp12{
|
||
|
|
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{
|
||
|
|
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 := fp12{
|
||
|
|
A: fp6{
|
||
|
|
A: fp2{
|
||
|
|
A: fp{
|
||
|
|
0x47f9_cb98_b1b8_2d58,
|
||
|
|
0x5fe9_11eb_a3aa_1d9d,
|
||
|
|
0x96bf_1b5f_4dd8_1db3,
|
||
|
|
0x8100_d272_c925_9f5b,
|
||
|
|
0xafa2_0b96_7464_0eab,
|
||
|
|
0x09bb_cea7_d8d9_497d,
|
||
|
|
},
|
||
|
|
B: fp{
|
||
|
|
0x0303_cb98_b166_2daa,
|
||
|
|
0xd931_10aa_0a62_1d5a,
|
||
|
|
0xbfa9_820c_5be4_a468,
|
||
|
|
0x0ba3_643e_cb05_a348,
|
||
|
|
0xdc35_34bb_1f1c_25a6,
|
||
|
|
0x06c3_05bb_19c0_e1c1,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
B: fp2{
|
||
|
|
A: fp{
|
||
|
|
0x46f9_cb98_b162_d858,
|
||
|
|
0x0be9_109c_f7aa_1d57,
|
||
|
|
0xc791_bc55_fece_41d2,
|
||
|
|
0xf84c_5770_4e38_5ec2,
|
||
|
|
0xcb49_c1d9_c010_e60f,
|
||
|
|
0x0acd_b8e1_58bf_e348,
|
||
|
|
},
|
||
|
|
B: fp{
|
||
|
|
0x8aef_cb98_b15f_8306,
|
||
|
|
0x3ea1_108f_e4f2_1d54,
|
||
|
|
0xcf79_f69f_a1b7_df3b,
|
||
|
|
0xe4f5_4aa1_d16b_1a3c,
|
||
|
|
0xba5e_4ef8_6105_a679,
|
||
|
|
0x0ed8_6c07_97be_e5cf,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
C: fp2{
|
||
|
|
A: fp{
|
||
|
|
0xcee5_cb98_b15c_2db4,
|
||
|
|
0x7159_1082_d23a_1d51,
|
||
|
|
0xd762_30e9_44a1_7ca4,
|
||
|
|
0xd19e_3dd3_549d_d5b6,
|
||
|
|
0xa972_dc17_01fa_66e3,
|
||
|
|
0x12e3_1f2d_d6bd_e7d6,
|
||
|
|
},
|
||
|
|
B: fp{
|
||
|
|
0xad2a_cb98_b173_2d9d,
|
||
|
|
0x2cfd_10dd_0696_1d64,
|
||
|
|
0x0739_6b86_c6ef_24e8,
|
||
|
|
0xbd76_e2fd_b1bf_c820,
|
||
|
|
0x6afe_a7f6_de94_d0d5,
|
||
|
|
0x1099_4b0c_5744_c040,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
B: fp6{
|
||
|
|
A: fp2{
|
||
|
|
A: fp{
|
||
|
|
0x47f9_cb98_b1b8_2d58,
|
||
|
|
0x5fe9_11eb_a3aa_1d9d,
|
||
|
|
0x96bf_1b5f_4dd2_1db3,
|
||
|
|
0x8100_d27c_c925_9f5b,
|
||
|
|
0xafa2_0b96_7464_0eab,
|
||
|
|
0x09bb_cea7_d8d9_497d,
|
||
|
|
},
|
||
|
|
B: fp{
|
||
|
|
0x0303_cb98_b166_2daa,
|
||
|
|
0xd931_10aa_0a62_1d5a,
|
||
|
|
0xbfa9_820c_5be4_a468,
|
||
|
|
0x0ba3_643e_cb05_a348,
|
||
|
|
0xdc35_34bb_1f1c_25a6,
|
||
|
|
0x06c3_05bb_19c0_e1c1,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
B: fp2{
|
||
|
|
A: fp{
|
||
|
|
0x46f9_cb98_b162_d858,
|
||
|
|
0x0be9_109c_f7aa_1d57,
|
||
|
|
0xc791_bc55_fece_41d2,
|
||
|
|
0xf84c_5770_4e38_5ec2,
|
||
|
|
0xcb49_c1d9_c010_e60f,
|
||
|
|
0x0acd_b8e1_58bf_e3c8,
|
||
|
|
},
|
||
|
|
B: fp{
|
||
|
|
0x8aef_cb98_b15f_8306,
|
||
|
|
0x3ea1_108f_e4f2_1d54,
|
||
|
|
0xcf79_f69f_a117_df3b,
|
||
|
|
0xe4f5_4aa1_d16b_1a3c,
|
||
|
|
0xba5e_4ef8_6105_a679,
|
||
|
|
0x0ed8_6c07_97be_e5cf,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
C: fp2{
|
||
|
|
A: fp{
|
||
|
|
0xcee5_cb98_b15c_2db4,
|
||
|
|
0x7159_1082_d23a_1d51,
|
||
|
|
0xd762_30e9_44a1_7ca4,
|
||
|
|
0xd19e_3dd3_549d_d5b6,
|
||
|
|
0xa972_dc17_01fa_66e3,
|
||
|
|
0x12e3_1f2d_d6bd_e7d6,
|
||
|
|
},
|
||
|
|
B: fp{
|
||
|
|
0xad2a_cb98_b173_2d9d,
|
||
|
|
0x2cfd_10dd_0696_1d64,
|
||
|
|
0x0739_6b86_c6ef_24e8,
|
||
|
|
0xbd76_e2fd_b1bf_c820,
|
||
|
|
0x6afe_a7f6_de94_d0d5,
|
||
|
|
0x1099_4b0c_5744_c040,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
c := fp12{
|
||
|
|
A: fp6{
|
||
|
|
A: fp2{
|
||
|
|
A: fp{
|
||
|
|
0x47f9_cb98_71b8_2d58,
|
||
|
|
0x5fe9_11eb_a3aa_1d9d,
|
||
|
|
0x96bf_1b5f_4dd8_1db3,
|
||
|
|
0x8100_d27c_c925_9f5b,
|
||
|
|
0xafa2_0b96_7464_0eab,
|
||
|
|
0x09bb_cea7_d8d9_497d,
|
||
|
|
},
|
||
|
|
B: fp{
|
||
|
|
0x0303_cb98_b166_2daa,
|
||
|
|
0xd931_10aa_0a62_1d5a,
|
||
|
|
0xbfa9_820c_5be4_a468,
|
||
|
|
0x0ba3_643e_cb05_a348,
|
||
|
|
0xdc35_34bb_1f1c_25a6,
|
||
|
|
0x06c3_05bb_19c0_e1c1,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
B: fp2{
|
||
|
|
A: fp{
|
||
|
|
0x46f9_cb98_b162_d858,
|
||
|
|
0x0be9_109c_f7aa_1d57,
|
||
|
|
0x7791_bc55_fece_41d2,
|
||
|
|
0xf84c_5770_4e38_5ec2,
|
||
|
|
0xcb49_c1d9_c010_e60f,
|
||
|
|
0x0acd_b8e1_58bf_e3c8,
|
||
|
|
},
|
||
|
|
B: fp{
|
||
|
|
0x8aef_cb98_b15f_8306,
|
||
|
|
0x3ea1_108f_e4f2_1d54,
|
||
|
|
0xcf79_f69f_a1b7_df3b,
|
||
|
|
0xe4f5_4aa1_d16b_133c,
|
||
|
|
0xba5e_4ef8_6105_a679,
|
||
|
|
0x0ed8_6c07_97be_e5cf,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
C: fp2{
|
||
|
|
A: fp{
|
||
|
|
0xcee5_cb98_b15c_2db4,
|
||
|
|
0x7159_1082_d23a_1d51,
|
||
|
|
0xd762_40e9_44a1_7ca4,
|
||
|
|
0xd19e_3dd3_549d_d5b6,
|
||
|
|
0xa972_dc17_01fa_66e3,
|
||
|
|
0x12e3_1f2d_d6bd_e7d6,
|
||
|
|
},
|
||
|
|
B: fp{
|
||
|
|
0xad2a_cb98_b173_2d9d,
|
||
|
|
0x2cfd_10dd_0696_1d64,
|
||
|
|
0x0739_6b86_c6ef_24e8,
|
||
|
|
0xbd76_e2fd_b1bf_c820,
|
||
|
|
0x6afe_a7f6_de94_d0d5,
|
||
|
|
0x1099_4b0c_1744_c040,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
B: fp6{
|
||
|
|
A: fp2{
|
||
|
|
A: fp{
|
||
|
|
0x47f9_cb98_b1b8_2d58,
|
||
|
|
0x5fe9_11eb_a3aa_1d9d,
|
||
|
|
0x96bf_1b5f_4dd8_1db3,
|
||
|
|
0x8100_d27c_c925_9f5b,
|
||
|
|
0xafa2_0b96_7464_0eab,
|
||
|
|
0x09bb_cea7_d8d9_497d,
|
||
|
|
},
|
||
|
|
B: fp{
|
||
|
|
0x0303_cb98_b166_2daa,
|
||
|
|
0xd931_10aa_0a62_1d5a,
|
||
|
|
0xbfa9_820c_5be4_a468,
|
||
|
|
0x0ba3_643e_cb05_a348,
|
||
|
|
0xdc35_34bb_1f1c_25a6,
|
||
|
|
0x06c3_05bb_19c0_e1c1,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
B: fp2{
|
||
|
|
A: fp{
|
||
|
|
0x46f9_cb98_b162_d858,
|
||
|
|
0x0be9_109c_f7aa_1d57,
|
||
|
|
0xc791_bc55_fece_41d2,
|
||
|
|
0xf84c_5770_4e38_5ec2,
|
||
|
|
0xcb49_c1d3_c010_e60f,
|
||
|
|
0x0acd_b8e1_58bf_e3c8,
|
||
|
|
},
|
||
|
|
B: fp{
|
||
|
|
0x8aef_cb98_b15f_8306,
|
||
|
|
0x3ea1_108f_e4f2_1d54,
|
||
|
|
0xcf79_f69f_a1b7_df3b,
|
||
|
|
0xe4f5_4aa1_d16b_1a3c,
|
||
|
|
0xba5e_4ef8_6105_a679,
|
||
|
|
0x0ed8_6c07_97be_e5cf,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
C: fp2{
|
||
|
|
A: fp{
|
||
|
|
0xcee5_cb98_b15c_2db4,
|
||
|
|
0x7159_1082_d23a_1d51,
|
||
|
|
0xd762_30e9_44a1_7ca4,
|
||
|
|
0xd19e_3dd3_549d_d5b6,
|
||
|
|
0xa972_dc17_01fa_66e3,
|
||
|
|
0x12e3_1f2d_d6bd_e7d6,
|
||
|
|
},
|
||
|
|
B: fp{
|
||
|
|
0xad2a_cb98_b173_2d9d,
|
||
|
|
0x2cfd_10dd_0696_1d64,
|
||
|
|
0x0739_6b86_c6ef_24e8,
|
||
|
|
0xbd76_e2fd_b1bf_c820,
|
||
|
|
0x6afe_a7f6_de94_d0d5,
|
||
|
|
0x1099_4b0c_5744_1040,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
aa.Square(&a)
|
||
|
|
aa.Invert(&aa)
|
||
|
|
aa.Square(&aa)
|
||
|
|
aa.Add(&aa, &c)
|
||
|
|
|
||
|
|
bb.Square(&b)
|
||
|
|
bb.Invert(&bb)
|
||
|
|
bb.Square(&bb)
|
||
|
|
bb.Add(&bb, &aa)
|
||
|
|
|
||
|
|
cc.Square(&c)
|
||
|
|
cc.Invert(&cc)
|
||
|
|
cc.Square(&cc)
|
||
|
|
cc.Add(&cc, &bb)
|
||
|
|
|
||
|
|
d.Square(&aa)
|
||
|
|
e.Mul(&aa, &aa)
|
||
|
|
require.Equal(t, 1, e.Equal(&d))
|
||
|
|
|
||
|
|
d.Square(&bb)
|
||
|
|
e.Mul(&bb, &bb)
|
||
|
|
require.Equal(t, 1, e.Equal(&d))
|
||
|
|
|
||
|
|
d.Square(&cc)
|
||
|
|
e.Mul(&cc, &cc)
|
||
|
|
require.Equal(t, 1, e.Equal(&d))
|
||
|
|
|
||
|
|
d.Square(&cc)
|
||
|
|
e.Add(&aa, &bb)
|
||
|
|
d.Mul(&d, &e)
|
||
|
|
|
||
|
|
e.Mul(&cc, &cc)
|
||
|
|
e.Mul(&e, &aa)
|
||
|
|
f.Mul(&cc, &cc)
|
||
|
|
f.Mul(&f, &bb)
|
||
|
|
e.Add(&e, &f)
|
||
|
|
|
||
|
|
require.Equal(t, 1, e.Equal(&d))
|
||
|
|
|
||
|
|
d.Invert(&aa)
|
||
|
|
e.Invert(&bb)
|
||
|
|
f.Mul(&aa, &bb)
|
||
|
|
f.Invert(&f)
|
||
|
|
require.Equal(t, 1, f.Equal(e.Mul(&e, &d)))
|
||
|
|
|
||
|
|
require.Equal(t, 1, d.Mul(&d, &aa).IsOne())
|
||
|
|
|
||
|
|
require.Equal(t, 0, aa.Equal(d.FrobeniusMap(&aa)))
|
||
|
|
d.FrobeniusMap(&aa).
|
||
|
|
FrobeniusMap(&d).
|
||
|
|
FrobeniusMap(&d).
|
||
|
|
FrobeniusMap(&d).
|
||
|
|
FrobeniusMap(&d).
|
||
|
|
FrobeniusMap(&d).
|
||
|
|
FrobeniusMap(&d).
|
||
|
|
FrobeniusMap(&d).
|
||
|
|
FrobeniusMap(&d).
|
||
|
|
FrobeniusMap(&d).
|
||
|
|
FrobeniusMap(&d).
|
||
|
|
FrobeniusMap(&d)
|
||
|
|
require.Equal(t, 1, aa.Equal(&d))
|
||
|
|
}
|