aboutsummaryrefslogtreecommitdiff
path: root/test/sca/test_combine.py
blob: 7c5e31679ad68c45f6c27369a81d68efd96cae19 (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
from collections import namedtuple

import numpy as np
import pytest

from pyecsca.sca import (
    Trace,
    CombinedTrace,
    average,
    conditional_average,
    standard_deviation,
    variance,
    average_and_variance,
    add,
    subtract,
)


@pytest.fixture()
def data():
    Data = namedtuple("Data", ["a", "b", "c"])
    return Data(a=Trace(np.array([20, 80], dtype=np.dtype("i1")), {"data": b"\xff"}),
                b=Trace(np.array([30, 42], dtype=np.dtype("i1")), {"data": b"\xff"}),
                c=Trace(np.array([78, 56], dtype=np.dtype("i1")), {"data": b"\x00"}))


def test_average(data):
    with pytest.raises(ValueError):
        average()
    result = average(data.a, data.b)
    assert result is not None
    assert isinstance(result, CombinedTrace)
    assert len(result.samples) == 2
    assert result.samples[0] == 25
    assert result.samples[1] == 61


def test_conditional_average(data):
    result = conditional_average(data.a, data.b, data.c, condition=lambda trace: trace.meta["data"] == b"\xff", )
    assert isinstance(result, CombinedTrace)
    assert len(result.samples) == 2
    assert result.samples[0] == 25
    assert result.samples[1] == 61


def test_standard_deviation(data):
    with pytest.raises(ValueError):
        standard_deviation()
    result = standard_deviation(data.a, data.b)
    assert isinstance(result, CombinedTrace)
    assert len(result.samples) == 2


def test_variance(data):
    with pytest.raises(ValueError):
        variance()
    result = variance(data.a, data.b)
    assert isinstance(result, CombinedTrace)
    assert len(result.samples) == 2


def test_average_and_variance(data):
    with pytest.raises(ValueError):
        average_and_variance()
    mean, var = average_and_variance(data.a, data.b)
    assert isinstance(mean, CombinedTrace)
    assert isinstance(var, CombinedTrace)
    assert len(mean.samples) == 2
    assert len(var.samples) == 2
    assert mean == average(data.a, data.b)
    assert var == variance(data.a, data.b)


def test_add(data):
    with pytest.raises(ValueError):
        add()
    result = add(data.a, data.b)
    assert isinstance(result, CombinedTrace)
    assert result.samples[0] == 50
    assert result.samples[1] == 122
    np.testing.assert_equal(data.a.samples, add(data.a).samples)


def test_subtract(data):
    result = subtract(data.a, data.b)
    assert isinstance(result, CombinedTrace)
    assert result.samples[0] == -10
    assert result.samples[1] == 38