diff options
Diffstat (limited to 'test/ec/test_mod.py')
| -rw-r--r-- | test/ec/test_mod.py | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/test/ec/test_mod.py b/test/ec/test_mod.py index 18eeeac..724ea42 100644 --- a/test/ec/test_mod.py +++ b/test/ec/test_mod.py @@ -17,7 +17,7 @@ from pyecsca.ec.mod import ( miller_rabin, RawMod, SymbolicMod, - jacobi, + jacobi, cube_roots, ) from pyecsca.ec.mod.gmp import has_gmp from pyecsca.ec.mod.flint import has_flint @@ -116,6 +116,42 @@ def test_sqrt(): getconfig().ec.non_residue_action = "error" +def test_is_cubic_residue(): + # p is 2 mod 3 so all are residues + p = 11 + for i in range(11): + assert mod(i, p).is_cubic_residue() + p = 13 + assert not mod(4, p).is_cubic_residue() + assert mod(5, p).is_cubic_residue() + assert not mod(6, p).is_cubic_residue() + assert not mod(7, p).is_cubic_residue() + + +def test_cube_root(): + p = 11 + for i in range(11): + assert len(cube_roots(mod(i, p))) == 1 + assert mod(2, p).cube_root() == 7 + assert mod(3, p).cube_root() == 9 + assert mod(4, p).cube_root() == 5 + assert mod(5, p).cube_root() == 3 + assert mod(6, p).cube_root() == 8 + assert mod(7, p).cube_root() == 6 + + p = 13 + assert mod(1, p).cube_root() == 1 + assert mod(0, p).cube_root() == 0 + assert mod(5, p).cube_root() == 8 + assert mod(8, p).cube_root() == 5 + assert mod(12, p).cube_root() == 12 + + assert cube_roots(mod(0, p)) == {mod(0, p)} + assert cube_roots(mod(1, p)) == {mod(1, p), mod(3, p), mod(9, p)} + assert cube_roots(mod(5, p)) == {mod(8, p), mod(11, p), mod(7, p)} + assert cube_roots(mod(8, p)) == {mod(5, p), mod(2, p), mod(6, p)} + + def test_eq(): assert mod(1, 7) == 1 assert mod(1, 7) != "1" |
