blob: 5af3625586edaad7356330cef8d8b98d3031c819 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
import pickle
from multiprocessing import get_context
from multiprocessing.context import BaseContext
import pytest
from pyecsca.ec.formula.efd import EFDFormula
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: EFDFormula = coords.formulas["add-2007-bl"] # type: ignore
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
code_formula = formula.to_code()
assert formula != code_formula
back_code = pickle.loads(pickle.dumps(code_formula))
assert code_formula == back_code
def formula_target(formula):
return hasattr(formula, "coordinate_model")
def test_formula_loads(ctx):
sw = ShortWeierstrassModel()
coords = sw.coordinates["projective"]
formula: EFDFormula = coords.formulas["add-2007-bl"] # type: ignore
with ctx.Pool(processes=1) as pool:
res = pool.apply(formula_target, args=(formula,))
assert res
formula = formula.to_code() # type: ignore
with ctx.Pool(processes=1) as pool:
res = pool.apply(formula_target, args=(formula,))
assert res
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)
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
|