diff options
| author | J08nY | 2024-01-25 18:59:49 +0100 |
|---|---|---|
| committer | J08nY | 2024-01-25 18:59:49 +0100 |
| commit | cbfcfb3433dd6030db5a253d291985706bd0dc9a (patch) | |
| tree | d32f144ed048d2803af554e53a893dc4aebfcb4d /test | |
| parent | 340dd4e7cfa9a1075d1c33936ed9884234744a31 (diff) | |
| download | pyecsca-cbfcfb3433dd6030db5a253d291985706bd0dc9a.tar.gz pyecsca-cbfcfb3433dd6030db5a253d291985706bd0dc9a.tar.zst pyecsca-cbfcfb3433dd6030db5a253d291985706bd0dc9a.zip | |
Fix issues with pickling and equality checks of EC objects.
Diffstat (limited to 'test')
| -rw-r--r-- | test/ec/test_formula.py | 8 | ||||
| -rw-r--r-- | test/ec/test_pickle.py | 83 |
2 files changed, 90 insertions, 1 deletions
diff --git a/test/ec/test_formula.py b/test/ec/test_formula.py index 32e1cf3..ed437a5 100644 --- a/test/ec/test_formula.py +++ b/test/ec/test_formula.py @@ -77,6 +77,10 @@ def test_eq(add, dbl): assert add != dbl +def test_hashable(add): + assert hash(add) + + def test_num_ops(add): assert add.num_operations == 33 assert add.num_multiplications == 17 @@ -400,7 +404,9 @@ def library_formula_params(request) -> Tuple[EFDFormula, DomainParameters]: def test_formula_graph(library_formula_params): formula, params = library_formula_params - do_test_formula(rename_ivs(formula), params) + renamed = rename_ivs(formula) + do_test_formula(renamed, params) + assert hash(renamed) def test_switch_sign(library_formula_params): diff --git a/test/ec/test_pickle.py b/test/ec/test_pickle.py new file mode 100644 index 0000000..5d448b5 --- /dev/null +++ b/test/ec/test_pickle.py @@ -0,0 +1,83 @@ +import pickle +import pickletools +from multiprocessing import get_context +from multiprocessing.context import BaseContext + +import pytest + +from pyecsca.ec.formula.graph import FormulaGraph +from pyecsca.ec.model import ShortWeierstrassModel +from pyecsca.ec.params import get_params + + +@pytest.fixture() +def ctx() -> BaseContext: + return get_context("spawn") + + +def model_target(obj): + return obj._loaded + + +def test_model_loads(ctx): + # Test that the unpickling of EFDCurveModel triggers a reload that loads the EFD data for that model. + sw = ShortWeierstrassModel() + with ctx.Pool(processes=1) as pool: + res = pool.apply(model_target, args=(sw,)) + assert res + + +def test_model(): + sw = ShortWeierstrassModel() + data = pickle.dumps(sw) + back = pickle.loads(data) + assert sw == back + + +def test_coords(): + sw = ShortWeierstrassModel() + coords = sw.coordinates["projective"] + data = pickle.dumps(coords) + back = pickle.loads(data) + assert coords == back + + +def test_formula(): + sw = ShortWeierstrassModel() + coords = sw.coordinates["projective"] + formula = coords.formulas["add-2007-bl"] + data = pickle.dumps(formula) + back = pickle.loads(data) + assert formula == back + formulas = tuple(coords.formulas.values()) + data = pickle.dumps(formulas) + back = pickle.loads(data) + assert formulas == back + + +def test_code_formula(): + sw = ShortWeierstrassModel() + coords = sw.coordinates["projective"] + formula = coords.formulas["add-2007-bl"] + graph = FormulaGraph(formula) + code = graph.to_formula() + data = pickle.dumps(code) + pickletools.dis(data) + back = pickle.loads(data) + assert code == back + + +def test_params(secp128r1): + secp256r1 = get_params("secg", "secp256r1", "projective") + params = (secp128r1, secp256r1) + data = pickle.dumps(params) + back = pickle.loads(data) + assert params == back + + +def test_op(secp128r1): + formula = secp128r1.curve.coordinate_model.formulas["add-2007-bl"] + op = formula.code[0] + data = pickle.dumps(op) + back = pickle.loads(data) + assert op == back |
