aboutsummaryrefslogtreecommitdiff
path: root/test/sca
diff options
context:
space:
mode:
Diffstat (limited to 'test/sca')
-rw-r--r--test/sca/test_align.py4
-rw-r--r--test/sca/test_combine.py6
-rw-r--r--test/sca/test_edit.py2
-rw-r--r--test/sca/test_filter.py2
-rw-r--r--test/sca/test_match.py8
-rw-r--r--test/sca/test_process.py2
-rw-r--r--test/sca/test_sampling.py2
-rw-r--r--test/sca/test_test.py22
-rw-r--r--test/sca/test_trace.py2
-rw-r--r--test/sca/test_traceset.py93
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))