mirror of
https://github.com/sonr-io/crypto.git
synced 2026-08-02 15:31:38 +00:00
No commit suggestions generated
This commit is contained in:
Executable
+417
@@ -0,0 +1,417 @@
|
||||
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))
|
||||
}
|
||||
Reference in New Issue
Block a user