diff options
Diffstat (limited to 'test/sca')
| -rw-r--r-- | test/sca/test_align.py | 4 | ||||
| -rw-r--r-- | test/sca/test_combine.py | 6 | ||||
| -rw-r--r-- | test/sca/test_edit.py | 2 | ||||
| -rw-r--r-- | test/sca/test_filter.py | 2 | ||||
| -rw-r--r-- | test/sca/test_match.py | 8 | ||||
| -rw-r--r-- | test/sca/test_process.py | 2 | ||||
| -rw-r--r-- | test/sca/test_sampling.py | 2 | ||||
| -rw-r--r-- | test/sca/test_test.py | 22 | ||||
| -rw-r--r-- | test/sca/test_trace.py | 2 | ||||
| -rw-r--r-- | test/sca/test_traceset.py | 93 |
10 files changed, 97 insertions, 46 deletions
diff --git a/test/sca/test_align.py b/test/sca/test_align.py index 96cc458..b595058 100644 --- a/test/sca/test_align.py +++ b/test/sca/test_align.py @@ -23,13 +23,13 @@ class AlignTests(TestCase): @slow def test_large_align(self): - example = InspectorTraceSet("test/data/example.trs") + example = InspectorTraceSet.read("test/data/example.trs") result = align_correlation(*example, reference_offset=100000, reference_length=20000, max_offset=15000) self.assertIsNotNone(result) @slow def test_large_dtw_align(self): - example = InspectorTraceSet("test/data/example.trs") + example = InspectorTraceSet.read("test/data/example.trs") result = align_dtw(*example[:5]) self.assertIsNotNone(result) diff --git a/test/sca/test_combine.py b/test/sca/test_combine.py index 7fda1fa..41df9fb 100644 --- a/test/sca/test_combine.py +++ b/test/sca/test_combine.py @@ -7,9 +7,9 @@ from pyecsca.sca import Trace, CombinedTrace, average, conditional_average, stan class CombineTests(TestCase): def setUp(self): - self.a = Trace(np.array([20, 80], dtype=np.dtype("i1")), None, b"\xff") - self.b = Trace(np.array([30, 42], dtype=np.dtype("i1")), None, b"\xff") - self.c = Trace(np.array([78, 56], dtype=np.dtype("i1")), None, b"\x00") + self.a = Trace(np.array([20, 80], dtype=np.dtype("i1")), None, b"\xff", None) + self.b = Trace(np.array([30, 42], dtype=np.dtype("i1")), None, b"\xff", None) + self.c = Trace(np.array([78, 56], dtype=np.dtype("i1")), None, b"\x00", None) def test_average(self): self.assertIsNone(average()) diff --git a/test/sca/test_edit.py b/test/sca/test_edit.py index 637e9b7..f5b529e 100644 --- a/test/sca/test_edit.py +++ b/test/sca/test_edit.py @@ -8,7 +8,7 @@ from pyecsca.sca import Trace, trim, reverse, pad class EditTests(TestCase): def setUp(self): - self._trace = Trace(np.array([10, 20, 30, 40, 50], dtype=np.dtype("i1")), None, None) + self._trace = Trace(np.array([10, 20, 30, 40, 50], dtype=np.dtype("i1")), None, None, None) def test_trim(self): result = trim(self._trace, 2) diff --git a/test/sca/test_filter.py b/test/sca/test_filter.py index 9194fa4..73516d8 100644 --- a/test/sca/test_filter.py +++ b/test/sca/test_filter.py @@ -10,7 +10,7 @@ class FilterTests(TestCase): def setUp(self): self._trace = Trace( np.array([5, 12, 15, 13, 15, 11, 7, 2, -4, -8, -10, -8, -13, -9, -11, -8, -5], - dtype=np.dtype("i1")), None, None) + dtype=np.dtype("i1")), None, None, None) def test_lowpass(self): result = filter_lowpass(self._trace, 100, 20) diff --git a/test/sca/test_match.py b/test/sca/test_match.py index b8663c7..549f143 100644 --- a/test/sca/test_match.py +++ b/test/sca/test_match.py @@ -10,21 +10,21 @@ class MatchingTests(TestCase): def test_simple_match(self): pattern = Trace(np.array([1, 15, 12, -10, 0, 13, 17, -1, 0], dtype=np.dtype("i1")), None, - None) + None, None) base = Trace(np.array( [0, 1, 3, 1, 2, -2, -3, 1, 15, 12, -10, 0, 13, 17, -1, 0, 3, 1], - dtype=np.dtype("i1")), None, None) + dtype=np.dtype("i1")), None, None, None) filtered = match_part(base, 7, 9) self.assertListEqual(filtered, [7]) plot(self, base=base, pattern=pad(pattern, (filtered[0], 0))) def test_multiple_match(self): pattern = Trace(np.array([1, 15, 12, -10, 0, 13, 17, -1, 0], dtype=np.dtype("i1")), None, - None) + None, None) base = Trace(np.array( [0, 1, 3, 1, 2, -2, -3, 1, 18, 10, -5, 0, 13, 17, -1, 0, 3, 1, 2, 5, 13, 8, -8, 1, 11, 15, 0, 1, 5, 2, 4], - dtype=np.dtype("i1")), None, None) + dtype=np.dtype("i1")), None, None, None) filtered = match_pattern(base, pattern, 0.9) self.assertListEqual(filtered, [7, 19]) plot(self, base=base, pattern1=pad(pattern, (filtered[0], 0)), pattern2=pad(pattern, (filtered[1], 0))) diff --git a/test/sca/test_process.py b/test/sca/test_process.py index f039a95..49d520f 100644 --- a/test/sca/test_process.py +++ b/test/sca/test_process.py @@ -7,7 +7,7 @@ from pyecsca.sca import Trace, absolute, invert, threshold, rolling_mean, offset class ProcessTests(TestCase): def setUp(self): - self._trace = Trace(np.array([30, -60, 145, 247], dtype=np.dtype("i2")), None, None) + self._trace = Trace(np.array([30, -60, 145, 247], dtype=np.dtype("i2")), None, None, None) def test_absolute(self): result = absolute(self._trace) diff --git a/test/sca/test_sampling.py b/test/sca/test_sampling.py index 40eaa7d..c08128c 100644 --- a/test/sca/test_sampling.py +++ b/test/sca/test_sampling.py @@ -29,7 +29,7 @@ class SamplingTests(TestCase): def test_downsample_decimate(self): trace = Trace(np.array([20, 30, 55, 18, 15, 10, 35, 24, 21, 15, 10, 8, -10, -5, -8, -12, -15, -18, -34, -21, -17, -10, -5, -12, -6, -2, - 4, 8, 21, 28], dtype=np.dtype("i1")), None, None) + 4, 8, 21, 28], dtype=np.dtype("i1")), None, None, None) result = downsample_decimate(trace, 2) self.assertIsNotNone(result) self.assertIsInstance(result, Trace) diff --git a/test/sca/test_test.py b/test/sca/test_test.py index 5277c20..f012f7f 100644 --- a/test/sca/test_test.py +++ b/test/sca/test_test.py @@ -8,19 +8,19 @@ from pyecsca.sca import Trace, welch_ttest, student_ttest, ks_test class TTestTests(TestCase): def setUp(self): - self.a = Trace(np.array([20, 80], dtype=np.dtype("i1")), None, b"\xff") - self.b = Trace(np.array([30, 42], dtype=np.dtype("i1")), None, b"\xff") - self.c = Trace(np.array([78, 56], dtype=np.dtype("i1")), None, b"\x00") - self.d = Trace(np.array([98, 36], dtype=np.dtype("i1")), None, b"\x00") + self.a = Trace(np.array([20, 80], dtype=np.dtype("i1")), None, b"\xff", None) + self.b = Trace(np.array([30, 42], dtype=np.dtype("i1")), None, b"\xff", None) + self.c = Trace(np.array([78, 56], dtype=np.dtype("i1")), None, b"\x00", None) + self.d = Trace(np.array([98, 36], dtype=np.dtype("i1")), None, b"\x00", None) def test_welch_ttest(self): self.assertIsNotNone(welch_ttest([self.a, self.b], [self.c, self.d])) a = Trace(np.array([19.8, 20.4, 19.6, 17.8, 18.5, 18.9, 18.3, 18.9, 19.5, 22.0]), None, - None) + None, None) b = Trace(np.array([28.2, 26.6, 20.1, 23.3, 25.2, 22.1, 17.7, 27.6, 20.6, 13.7]), None, - None) + None, None) c = Trace(np.array([20.2, 21.6, 27.1, 13.3, 24.2, 20.1, 11.7, 25.6, 26.6, 21.4]), None, - None) + None, None) result = welch_ttest([a, b], [b, c]) self.assertIsNotNone(result) @@ -35,8 +35,8 @@ class KolmogorovSmirnovTests(TestCase): def test_ks_test(self): self.assertIsNone(ks_test([], [])) - a = Trace(np.array([20, 80], dtype=np.dtype("i1")), None, b"\xff") - b = Trace(np.array([30, 42], dtype=np.dtype("i1")), None, b"\xff") - c = Trace(np.array([78, 56], dtype=np.dtype("i1")), None, b"\x00") - d = Trace(np.array([98, 36], dtype=np.dtype("i1")), None, b"\x00") + a = Trace(np.array([20, 80], dtype=np.dtype("i1")), None, b"\xff", None) + b = Trace(np.array([30, 42], dtype=np.dtype("i1")), None, b"\xff", None) + c = Trace(np.array([78, 56], dtype=np.dtype("i1")), None, b"\x00", None) + d = Trace(np.array([98, 36], dtype=np.dtype("i1")), None, b"\x00", None) self.assertIsNotNone(ks_test([a, b], [c, d])) diff --git a/test/sca/test_trace.py b/test/sca/test_trace.py index 3399c09..d09c4f5 100644 --- a/test/sca/test_trace.py +++ b/test/sca/test_trace.py @@ -6,7 +6,7 @@ from pyecsca.sca import Trace class TraceTests(TestCase): def test_basic(self): - trace = Trace(np.array([10, 15, 24], dtype=np.dtype("i1")), "Name", b"\xff\xaa") + trace = Trace(np.array([10, 15, 24], dtype=np.dtype("i1")), "Name", b"\xff\xaa", None) self.assertIsNotNone(trace) self.assertIn("Trace", str(trace)) self.assertIsNone(trace.trace_set) diff --git a/test/sca/test_traceset.py b/test/sca/test_traceset.py index 6d48707..a3ff526 100644 --- a/test/sca/test_traceset.py +++ b/test/sca/test_traceset.py @@ -1,8 +1,17 @@ import os.path +import shutil import tempfile from unittest import TestCase -from pyecsca.sca import TraceSet, InspectorTraceSet, ChipWhispererTraceSet +import numpy as np + +from pyecsca.sca import (TraceSet, InspectorTraceSet, ChipWhispererTraceSet, PickleTraceSet, + HDF5TraceSet, Trace) + +EXAMPLE_TRACES = [Trace(np.array([20, 40, 50, 50, 10], dtype=np.dtype("i1")), None, None), + Trace(np.array([1, 2, 3, 4, 5], dtype=np.dtype("i1")), None, None), + Trace(np.array([6, 7, 8, 9, 10], dtype=np.dtype("i1")), None, None)] +EXAMPLE_KWARGS = {"num_traces": 3, "thingy": "abc"} class TraceSetTests(TestCase): @@ -11,12 +20,14 @@ class TraceSetTests(TestCase): self.assertIsNotNone(TraceSet()) self.assertIsNotNone(InspectorTraceSet()) self.assertIsNotNone(ChipWhispererTraceSet()) + self.assertIsNotNone(PickleTraceSet()) + self.assertIsNotNone(HDF5TraceSet()) class InspectorTraceSetTests(TestCase): def test_load_fname(self): - result = InspectorTraceSet("test/data/example.trs") + result = InspectorTraceSet.read("test/data/example.trs") self.assertIsNotNone(result) self.assertEqual(result.global_title, "Example trace set") self.assertEqual(len(result), 10) @@ -27,36 +38,76 @@ class InspectorTraceSetTests(TestCase): def test_load_file(self): with open("test/data/example.trs", "rb") as f: - self.assertIsNotNone(InspectorTraceSet(f)) + self.assertIsNotNone(InspectorTraceSet.read(f)) def test_load_bytes(self): with open("test/data/example.trs", "rb") as f: - self.assertIsNotNone(InspectorTraceSet(f.read())) - - def test_get_bytes(self): - self.assertIsNotNone(bytes(InspectorTraceSet("test/data/example.trs"))) - - def test_keep_traces(self): - trace_set = InspectorTraceSet("test/data/example.trs") - self.assertIsNotNone(trace_set.raw) - trace_set = InspectorTraceSet("test/data/example.trs", keep_raw_traces=False) - self.assertIsNone(trace_set.raw) + self.assertIsNotNone(InspectorTraceSet.read(f.read())) def test_save(self): - trace_set = InspectorTraceSet("test/data/example.trs") + trace_set = InspectorTraceSet.read("test/data/example.trs") with tempfile.TemporaryDirectory() as dirname: path = os.path.join(dirname, "out.trs") - trace_set.save(path) + trace_set.write(path) self.assertTrue(os.path.exists(path)) - self.assertIsNotNone(InspectorTraceSet(path)) + self.assertIsNotNone(InspectorTraceSet.read(path)) - with self.assertRaises(ValueError): - trace_set.save(None) - -class ChipWhispererTraceSetTest(TestCase): +class ChipWhispererTraceSetTests(TestCase): def test_load_fname(self): - result = ChipWhispererTraceSet("test/data/", "chipwhisperer") + result = ChipWhispererTraceSet.read("test/data/config_chipwhisperer_.cfg") self.assertIsNotNone(result) self.assertEqual(len(result), 2) + + +class PickleTraceSetTests(TestCase): + + def test_load_fname(self): + result = PickleTraceSet.read("test/data/test.pickle") + self.assertIsNotNone(result) + + def test_load_file(self): + with open("test/data/test.pickle", "rb") as f: + self.assertIsNotNone(PickleTraceSet.read(f)) + + def test_save(self): + trace_set = PickleTraceSet(*EXAMPLE_TRACES, **EXAMPLE_KWARGS) + with tempfile.TemporaryDirectory() as dirname: + path = os.path.join(dirname, "out.pickle") + trace_set.write(path) + self.assertTrue(os.path.exists(path)) + self.assertIsNotNone(PickleTraceSet.read(path)) + + +class HDF5TraceSetTests(TestCase): + + def test_load_fname(self): + result = HDF5TraceSet.read("test/data/test.h5") + self.assertIsNotNone(result) + + def test_load_file(self): + with open("test/data/test.h5", "rb") as f: + self.assertIsNotNone(HDF5TraceSet.read(f)) + + def test_inplace(self): + with tempfile.TemporaryDirectory() as dirname: + path = os.path.join(dirname, "test.h5") + shutil.copy("test/data/test.h5", path) + trace_set = HDF5TraceSet.inplace(path) + self.assertIsNotNone(trace_set) + test_trace = Trace(np.array([6, 7], dtype=np.dtype("i1")), None, None, meta={"thing": "ring"}) + trace_set[0] = test_trace + trace_set.save() + trace_set.close() + + test_set = HDF5TraceSet.read(path) + self.assertEquals(test_set[0], test_trace) + + def test_save(self): + trace_set = HDF5TraceSet(*EXAMPLE_TRACES, **EXAMPLE_KWARGS) + with tempfile.TemporaryDirectory() as dirname: + path = os.path.join(dirname, "out.h5") + trace_set.write(path) + self.assertTrue(os.path.exists(path)) + self.assertIsNotNone(HDF5TraceSet.read(path)) |
