aboutsummaryrefslogtreecommitdiff
path: root/test/ec/test_configuration.py
blob: 15c9471de4e826fc0e1f9fc4233d072b7338b2d3 (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
import pickle

import pytest

from pyecsca.ec.configuration import (
    all_configurations,
    HashType,
    RandomMod,
    Multiplication,
    Squaring,
    Reduction,
    Inversion,
)
from pyecsca.ec.model import ShortWeierstrassModel
from pyecsca.ec.mult import LTRMultiplier, AccumulationOrder


@pytest.fixture(scope="module")
def base_independents():
    return {"hash_type": HashType.SHA1, "mod_rand": RandomMod.SAMPLE, "mult": Multiplication.BASE, "sqr": Squaring.BASE,
            "red": Reduction.BASE, "inv": Inversion.GCD, }


@pytest.mark.slow
def test_all():
    j = 0
    for _ in all_configurations(model=ShortWeierstrassModel()):
        j += 1


def test_weierstrass_projective(base_independents):
    model = ShortWeierstrassModel()
    coords = model.coordinates["projective"]
    configs = list(all_configurations(model=model, coords=coords, **base_independents))
    assert len(set(map(lambda cfg: cfg.scalarmult, configs))) == len(configs)
    assert len(configs) == 12640


def test_mult_class(base_independents):
    model = ShortWeierstrassModel()
    coords = model.coordinates["projective"]
    scalarmult = LTRMultiplier
    configs = list(all_configurations(model=model, coords=coords, scalarmult=scalarmult, **base_independents))
    assert len(set(map(lambda cfg: cfg.scalarmult, configs))) == len(configs)
    assert len(configs) == 1280


def test_one(base_independents):
    model = ShortWeierstrassModel()
    coords = model.coordinates["projective"]
    scalarmult = {"cls": LTRMultiplier, "add": coords.formulas["add-1998-cmo"], "dbl": coords.formulas["dbl-1998-cmo"],
                  "scl": None, "always": True, "complete": False, "short_circuit": True,
                  "accumulation_order": AccumulationOrder.PeqRP}
    configs = list(all_configurations(model=model, coords=coords, scalarmult=scalarmult, **base_independents))
    assert len(configs) == 1
    scalarmult = LTRMultiplier(coords.formulas["add-1998-cmo"], coords.formulas["dbl-1998-cmo"], None, True,
                               accumulation_order=AccumulationOrder.PeqRP, complete=False, short_circuit=True)
    configs = list(all_configurations(model=model, coords=coords, scalarmult=scalarmult, **base_independents))
    assert len(configs) == 1
    configs = list(all_configurations(model=model, scalarmult=scalarmult, **base_independents))
    assert len(configs) == 1


def test_pickle(base_independents):
    model = ShortWeierstrassModel()
    coords = model.coordinates["projective"]
    scalarmult = {"cls": LTRMultiplier, "add": coords.formulas["add-1998-cmo"], "dbl": coords.formulas["dbl-1998-cmo"],
                  "scl": None, "always": True, "complete": False, "short_circuit": True,
                  "accumulation_order": AccumulationOrder.PeqRP}
    configs = list(all_configurations(model=model, coords=coords, scalarmult=scalarmult, **base_independents))
    config = configs[0]
    assert config == pickle.loads(pickle.dumps(config))