diff options
| author | J08nY | 2024-06-01 14:15:39 +0200 |
|---|---|---|
| committer | J08nY | 2024-06-01 14:15:39 +0200 |
| commit | 5ddfea8c12b2e76fa7aed8eb146c8c385e2abe60 (patch) | |
| tree | 51edf08a2501553f61c9bbce506b70ac25ec9ef0 /pyecsca/sca | |
| parent | e2bb0abbd98c7666b3604499272d1e40a8d3d7b7 (diff) | |
| download | pyecsca-5ddfea8c12b2e76fa7aed8eb146c8c385e2abe60.tar.gz pyecsca-5ddfea8c12b2e76fa7aed8eb146c8c385e2abe60.tar.zst pyecsca-5ddfea8c12b2e76fa7aed8eb146c8c385e2abe60.zip | |
Make imports absolute (to allow doctests).
Diffstat (limited to 'pyecsca/sca')
37 files changed, 212 insertions, 176 deletions
diff --git a/pyecsca/sca/attack/CPA.py b/pyecsca/sca/attack/CPA.py index 8d4687a..77c9abb 100644 --- a/pyecsca/sca/attack/CPA.py +++ b/pyecsca/sca/attack/CPA.py @@ -3,14 +3,14 @@ from scipy.stats import pearsonr import numpy as np from numpy.typing import NDArray -from ...ec.mult import ScalarMultiplier -from ...ec.point import Point -from ...ec.context import DefaultContext, local -from ...ec.params import DomainParameters -from ...ec.mod import Mod -from ..trace import Trace -from ..trace.plot import plot_trace -from ..attack.leakage_model import LeakageModel +from pyecsca.ec.mult import ScalarMultiplier +from pyecsca.ec.point import Point +from pyecsca.ec.context import DefaultContext, local +from pyecsca.ec.params import DomainParameters +from pyecsca.ec.mod import Mod +from pyecsca.sca.trace import Trace +from pyecsca.sca.trace.plot import plot_trace +from pyecsca.sca.attack.leakage_model import LeakageModel @public diff --git a/pyecsca/sca/attack/DPA.py b/pyecsca/sca/attack/DPA.py index d77b28b..661adc6 100644 --- a/pyecsca/sca/attack/DPA.py +++ b/pyecsca/sca/attack/DPA.py @@ -1,14 +1,14 @@ from typing import Tuple, Dict from public import public -from ...ec.mult import ScalarMultiplier -from ...ec.point import Point -from ...ec.context import DefaultContext, local -from ...ec.params import DomainParameters -from ..trace import Trace -from ..trace.combine import average, subtract -from ..trace.process import absolute -from ..trace.plot import plot_trace +from pyecsca.ec.mult import ScalarMultiplier +from pyecsca.ec.point import Point +from pyecsca.ec.context import DefaultContext, local +from pyecsca.ec.params import DomainParameters +from pyecsca.sca.trace import Trace +from pyecsca.sca.trace.combine import average, subtract +from pyecsca.sca.trace.process import absolute +from pyecsca.sca.trace.plot import plot_trace @public diff --git a/pyecsca/sca/attack/leakage_model.py b/pyecsca/sca/attack/leakage_model.py index 87f32f0..c1691d8 100644 --- a/pyecsca/sca/attack/leakage_model.py +++ b/pyecsca/sca/attack/leakage_model.py @@ -8,7 +8,7 @@ from typing import Literal, ClassVar from numpy.random import default_rng from public import public -from ...sca.trace import Trace +from pyecsca.sca.trace import Trace if sys.version_info[0] < 3 or sys.version_info[0] == 3 and sys.version_info[1] < 10: def hw(i): diff --git a/pyecsca/sca/re/base.py b/pyecsca/sca/re/base.py index 742e930..ca9b454 100644 --- a/pyecsca/sca/re/base.py +++ b/pyecsca/sca/re/base.py @@ -3,12 +3,13 @@ from typing import Optional, Any, Set from public import public -from .tree import Tree +from pyecsca.sca.re.tree import Tree @public class RE(ABC): """A base class for Reverse-Engineering methods.""" + tree: Optional[Tree] = None """The RE tree (if any).""" configs: Set[Any] diff --git a/pyecsca/sca/re/rpa.py b/pyecsca/sca/re/rpa.py index 03a4873..c055274 100644 --- a/pyecsca/sca/re/rpa.py +++ b/pyecsca/sca/re/rpa.py @@ -8,10 +8,10 @@ from typing import MutableMapping, Optional, Callable, List, Set, cast from sympy import FF, sympify, Poly, symbols -from .base import RE -from .tree import Tree, Map -from ...ec.coordinates import AffineCoordinateModel -from ...ec.formula import ( +from pyecsca.sca.re.base import RE +from pyecsca.sca.re.tree import Tree, Map +from pyecsca.ec.coordinates import AffineCoordinateModel +from pyecsca.ec.formula import ( FormulaAction, DoublingFormula, AdditionFormula, @@ -20,17 +20,17 @@ from ...ec.formula import ( DifferentialAdditionFormula, LadderFormula, ) -from ...ec.mod import Mod -from ...ec.mult import ( +from pyecsca.ec.mod import Mod +from pyecsca.ec.mult import ( ScalarMultiplicationAction, PrecomputationAction, ScalarMultiplier, ) -from ...ec.params import DomainParameters -from ...ec.model import ShortWeierstrassModel, MontgomeryModel -from ...ec.point import Point -from ...ec.context import Context, Action, local -from ...misc.utils import log, warn +from pyecsca.ec.params import DomainParameters +from pyecsca.ec.model import ShortWeierstrassModel, MontgomeryModel +from pyecsca.ec.point import Point +from pyecsca.ec.context import Context, Action, local +from pyecsca.misc.utils import log, warn @public @@ -209,6 +209,7 @@ def rpa_distinguish( @public class RPA(RE): """RPA-based RE.""" + params: Optional[DomainParameters] = None """The domain parameters to use.""" P0: Optional[Point] = None @@ -306,7 +307,9 @@ class RPA(RE): if not tree.precise: done += 1 if done > tries: - warn(f"Tried more than {tries} times. Aborting. Distinguishing may not be precise.") + warn( + f"Tried more than {tries} times. Aborting. Distinguishing may not be precise." + ) break else: continue @@ -327,7 +330,12 @@ class RPA(RE): :param majority: Query the oracle up to `majority` times and take the majority vote of the results. :return: The set of possible multipliers. """ - if self.tree is None or self.scalars is None or self.P0 is None or self.params is None: + if ( + self.tree is None + or self.scalars is None + or self.P0 is None + or self.params is None + ): raise ValueError("Need to build tree first.") if (majority % 2) == 0: diff --git a/pyecsca/sca/re/tree.py b/pyecsca/sca/re/tree.py index c035638..bab749e 100644 --- a/pyecsca/sca/re/tree.py +++ b/pyecsca/sca/re/tree.py @@ -51,7 +51,7 @@ import pandas as pd from public import public from anytree import RenderTree, NodeMixin, AbstractStyle, PreOrderIter -from ...misc.utils import log +from pyecsca.misc.utils import log @public diff --git a/pyecsca/sca/re/zvp.py b/pyecsca/sca/re/zvp.py index a712624..a697388 100644 --- a/pyecsca/sca/re/zvp.py +++ b/pyecsca/sca/re/zvp.py @@ -8,12 +8,12 @@ from public import public from astunparse import unparse from sympy import FF, Poly, Monomial, Symbol, Expr, sympify, symbols, div -from .rpa import MultipleContext -from ...ec.context import local -from ...ec.curve import EllipticCurve -from ...ec.model import CurveModel -from ...ec.divpoly import mult_by_n -from ...ec.formula import ( +from pyecsca.sca.re.rpa import MultipleContext +from pyecsca.ec.context import local +from pyecsca.ec.curve import EllipticCurve +from pyecsca.ec.model import CurveModel +from pyecsca.ec.divpoly import mult_by_n +from pyecsca.ec.formula import ( Formula, AdditionFormula, DoublingFormula, @@ -21,12 +21,12 @@ from ...ec.formula import ( LadderFormula, NegationFormula, ) -from ...ec.formula.fake import FakePoint, FakeFormula -from ...ec.formula.unroll import unroll_formula -from ...ec.mod import Mod -from ...ec.mult import ScalarMultiplier -from ...ec.params import DomainParameters -from ...ec.point import Point +from pyecsca.ec.formula.fake import FakePoint, FakeFormula +from pyecsca.ec.formula.unroll import unroll_formula +from pyecsca.ec.mod import Mod +from pyecsca.ec.mult import ScalarMultiplier +from pyecsca.ec.params import DomainParameters +from pyecsca.ec.point import Point has_pari = False @@ -146,7 +146,7 @@ def compute_factor_set( formula: Formula, affine: bool = True, filter_nonhomo: bool = True, - xonly: bool = False + xonly: bool = False, ) -> Set[Poly]: """ Compute a set of factors present in the :paramref:`~.compute_factor_set.formula`. @@ -163,7 +163,12 @@ def compute_factor_set( if affine: unrolled = map_to_affine(formula, unrolled) if xonly: - unrolled = list({(name, eliminate_y(poly, formula.coordinate_model.curve_model)) for name, poly in unrolled}) + unrolled = list( + { + (name, eliminate_y(poly, formula.coordinate_model.curve_model)) + for name, poly in unrolled + } + ) curve_params = set(formula.coordinate_model.curve_model.parameter_names) @@ -231,11 +236,10 @@ def symbolic_curve_equation(x: Symbol, model: CurveModel) -> Expr: :param model: The curve model to use. :return: The sympy expression of the "ysquared" curve polynomial. """ - parameters = { - name: symbols(name) - for name in model.parameter_names - } - return eval(compile(model.ysquared, "", mode="eval"), {"x": x, **parameters}) # eval is OK here, skipcq: PYL-W0123 + parameters = {name: symbols(name) for name in model.parameter_names} + return eval( + compile(model.ysquared, "", mode="eval"), {"x": x, **parameters} + ) # eval is OK here, skipcq: PYL-W0123 def curve_equation(x: Symbol, curve: EllipticCurve) -> Expr: @@ -247,7 +251,9 @@ def curve_equation(x: Symbol, curve: EllipticCurve) -> Expr: :param curve: The elliptic curve to use. :return: The sympy expression of the "ysquared" curve polynomial. """ - return eval(compile(curve.model.ysquared, "", mode="eval"), {"x": x, **curve.parameters}) # eval is OK here, skipcq: PYL-W0123 + return eval( + compile(curve.model.ysquared, "", mode="eval"), {"x": x, **curve.parameters} + ) # eval is OK here, skipcq: PYL-W0123 def subs_curve_equation(poly: Poly, curve: EllipticCurve) -> Poly: @@ -565,7 +571,7 @@ def solve_hard_dcp_cypari( for deg in range(polydeg + 1): monomial = pari.polcoef(polynomial, deg, x2) monomial *= num**deg - monomial *= den**(polydeg - deg) + monomial *= den ** (polydeg - deg) subspoly += monomial if subspoly == pari.zero(): return {_deterministic_point_x(curve)} diff --git a/pyecsca/sca/scope/base.py b/pyecsca/sca/scope/base.py index 08befda..b9d43af 100644 --- a/pyecsca/sca/scope/base.py +++ b/pyecsca/sca/scope/base.py @@ -4,7 +4,7 @@ from typing import Tuple, Sequence, Optional from public import public -from ..trace import Trace +from pyecsca.sca.trace import Trace @public diff --git a/pyecsca/sca/scope/chipwhisperer.py b/pyecsca/sca/scope/chipwhisperer.py index 3706c0e..ba11525 100644 --- a/pyecsca/sca/scope/chipwhisperer.py +++ b/pyecsca/sca/scope/chipwhisperer.py @@ -5,8 +5,8 @@ import numpy as np from chipwhisperer.capture.scopes.OpenADC import OpenADC from public import public -from .base import Scope, SampleType -from ..trace import Trace +from pyecsca.sca.scope.base import Scope, SampleType +from pyecsca.sca.trace import Trace @public diff --git a/pyecsca/sca/scope/picoscope_alt.py b/pyecsca/sca/scope/picoscope_alt.py index 900d796..86332c0 100644 --- a/pyecsca/sca/scope/picoscope_alt.py +++ b/pyecsca/sca/scope/picoscope_alt.py @@ -9,8 +9,8 @@ from picoscope.ps5000 import PS5000 from picoscope.ps6000 import PS6000 from public import public -from .base import Scope, SampleType -from ..trace import Trace +from pyecsca.sca.scope.base import Scope, SampleType +from pyecsca.sca.trace import Trace @public diff --git a/pyecsca/sca/scope/picoscope_sdk.py b/pyecsca/sca/scope/picoscope_sdk.py index 2981ca3..b04d6bd 100644 --- a/pyecsca/sca/scope/picoscope_sdk.py +++ b/pyecsca/sca/scope/picoscope_sdk.py @@ -31,8 +31,8 @@ except CannotFindPicoSDKError as exc: ps6000 = exc from public import public -from .base import Scope, SampleType -from ..trace import Trace +from pyecsca.sca.scope.base import Scope, SampleType +from pyecsca.sca.trace import Trace def adc2volt( diff --git a/pyecsca/sca/stacked_traces/combine.py b/pyecsca/sca/stacked_traces/combine.py index 4b03985..a55c18b 100644 --- a/pyecsca/sca/stacked_traces/combine.py +++ b/pyecsca/sca/stacked_traces/combine.py @@ -10,8 +10,8 @@ from math import sqrt from public import public from typing import Callable, Union, Tuple, Optional, cast, List -from ...sca.trace.trace import CombinedTrace -from ...sca.stacked_traces import StackedTraces +from pyecsca.sca.trace.trace import CombinedTrace +from pyecsca.sca.stacked_traces import StackedTraces TPB = Union[int, Tuple[int, ...]] CudaCTX = Tuple[devicearray.DeviceNDArray, ...] diff --git a/pyecsca/sca/stacked_traces/stacked_traces.py b/pyecsca/sca/stacked_traces/stacked_traces.py index f2c67fc..09169bd 100644 --- a/pyecsca/sca/stacked_traces/stacked_traces.py +++ b/pyecsca/sca/stacked_traces/stacked_traces.py @@ -4,7 +4,7 @@ import numpy as np from public import public from typing import Any, Mapping, Sequence -from ...sca.trace_set.base import TraceSet +from pyecsca.sca.trace_set.base import TraceSet @public diff --git a/pyecsca/sca/target/ISO7816.py b/pyecsca/sca/target/ISO7816.py index 63326ca..0af78db 100644 --- a/pyecsca/sca/target/ISO7816.py +++ b/pyecsca/sca/target/ISO7816.py @@ -6,7 +6,7 @@ from typing import Optional from public import public -from .base import Target +from pyecsca.sca.target.base import Target @public diff --git a/pyecsca/sca/target/PCSC.py b/pyecsca/sca/target/PCSC.py index 212651b..cd74149 100644 --- a/pyecsca/sca/target/PCSC.py +++ b/pyecsca/sca/target/PCSC.py @@ -7,7 +7,8 @@ from smartcard.System import readers from smartcard.pcsc.PCSCCardConnection import PCSCCardConnection from smartcard.pcsc.PCSCReader import PCSCReader -from .ISO7816 import ISO7816Target, CommandAPDU, ResponseAPDU, ISO7816, CardProtocol, CardConnectionException +from pyecsca.sca.target.ISO7816 import ISO7816Target, CommandAPDU, ResponseAPDU, ISO7816, CardProtocol, \ + CardConnectionException @public diff --git a/pyecsca/sca/target/binary.py b/pyecsca/sca/target/binary.py index 310b9e2..0dd22d5 100644 --- a/pyecsca/sca/target/binary.py +++ b/pyecsca/sca/target/binary.py @@ -5,7 +5,7 @@ from typing import Optional, Union, List from public import public -from .serial import SerialTarget +from pyecsca.sca.target.serial import SerialTarget @public diff --git a/pyecsca/sca/target/chipwhisperer.py b/pyecsca/sca/target/chipwhisperer.py index 784596a..28a2cb8 100644 --- a/pyecsca/sca/target/chipwhisperer.py +++ b/pyecsca/sca/target/chipwhisperer.py @@ -12,8 +12,8 @@ from chipwhisperer.capture.scopes import ScopeTypes from chipwhisperer.capture.targets.SimpleSerial import SimpleSerial from public import public -from .flash import Flashable -from .simpleserial import SimpleSerialTarget +from pyecsca.sca.target.flash import Flashable +from pyecsca.sca.target.simpleserial import SimpleSerialTarget @public diff --git a/pyecsca/sca/target/ectester.py b/pyecsca/sca/target/ectester.py index 3f6bd57..ec00502 100644 --- a/pyecsca/sca/target/ectester.py +++ b/pyecsca/sca/target/ectester.py @@ -9,11 +9,18 @@ from typing import Optional, Mapping, List, Union from public import public -from .ISO7816 import CommandAPDU, ResponseAPDU, ISO7816, ISO7816Target, CardProtocol, CardConnectionException -from . import has_leia, has_pyscard -from ...ec.model import ShortWeierstrassModel -from ...ec.params import DomainParameters -from ...ec.point import Point +from pyecsca.sca.target.ISO7816 import ( + CommandAPDU, + ResponseAPDU, + ISO7816, + ISO7816Target, + CardProtocol, + CardConnectionException, +) +from pyecsca.sca.target import has_leia, has_pyscard +from pyecsca.ec.model import ShortWeierstrassModel +from pyecsca.ec.params import DomainParameters +from pyecsca.ec.point import Point class ShiftableFlag(IntFlag): # pragma: no cover @@ -248,7 +255,7 @@ class Response(ABC): # pragma: no cover offset = 0 for i in range(num_sw): if len(resp.data) >= offset + 2: - self.sws[i] = int.from_bytes(resp.data[offset: offset + 2], "big") + self.sws[i] = int.from_bytes(resp.data[offset : offset + 2], "big") offset += 2 if self.sws[i] != ISO7816.SW_NO_ERROR: self.success = False @@ -265,13 +272,13 @@ class Response(ABC): # pragma: no cover self.success = False self.error = True break - param_len = int.from_bytes(resp.data[offset: offset + 2], "big") + param_len = int.from_bytes(resp.data[offset : offset + 2], "big") offset += 2 if len(resp.data) < offset + param_len: self.success = False self.error = True break - self.params[i] = resp.data[offset: offset + param_len] + self.params[i] = resp.data[offset : offset + param_len] offset += param_len def __repr__(self): @@ -343,11 +350,11 @@ class ExportResponse(Response): # pragma: no cover parameters: ParameterEnum def __init__( - self, - resp: ResponseAPDU, - keypair: KeypairEnum, - key: KeyEnum, - params: ParameterEnum, + self, + resp: ResponseAPDU, + keypair: KeypairEnum, + key: KeyEnum, + params: ParameterEnum, ): self.keypair = keypair self.key = key @@ -473,31 +480,31 @@ class InfoResponse(Response): # pragma: no cover super().__init__(resp, 1, 0) offset = 2 - version_len = int.from_bytes(resp.data[offset: offset + 2], "big") + version_len = int.from_bytes(resp.data[offset : offset + 2], "big") offset += 2 - self.version = resp.data[offset: offset + version_len].decode() + self.version = resp.data[offset : offset + version_len].decode() offset += version_len self.base = AppletBaseEnum( - int.from_bytes(resp.data[offset: offset + 2], "big") + int.from_bytes(resp.data[offset : offset + 2], "big") ) offset += 2 - system_version = int.from_bytes(resp.data[offset: offset + 2], "big") + system_version = int.from_bytes(resp.data[offset : offset + 2], "big") system_major = system_version >> 8 system_minor = system_version & 0xFF minor_size = 1 if system_minor == 0 else ceil(log(system_minor, 10)) self.system_version = system_major + system_minor / (minor_size * 10) offset += 2 self.object_deletion_supported = ( - int.from_bytes(resp.data[offset: offset + 2], "big") == 1 + int.from_bytes(resp.data[offset : offset + 2], "big") == 1 ) offset += 2 - self.buf_len = int.from_bytes(resp.data[offset: offset + 2], "big") + self.buf_len = int.from_bytes(resp.data[offset : offset + 2], "big") offset += 2 - self.ram1_len = int.from_bytes(resp.data[offset: offset + 2], "big") + self.ram1_len = int.from_bytes(resp.data[offset : offset + 2], "big") offset += 2 - self.ram2_len = int.from_bytes(resp.data[offset: offset + 2], "big") + self.ram2_len = int.from_bytes(resp.data[offset : offset + 2], "big") offset += 2 - self.apdu_len = int.from_bytes(resp.data[offset: offset + 2], "big") + self.apdu_len = int.from_bytes(resp.data[offset : offset + 2], "big") offset += 2 def __repr__(self): @@ -538,7 +545,7 @@ class ECTesterTarget(ISO7816Target, ABC): # pragma: no cover chunk_length = 255 if chunk_start + chunk_length > len(data): chunk_length = len(data) - chunk_start - chunk = data[chunk_start: chunk_start + chunk_length] + chunk = data[chunk_start : chunk_start + chunk_length] chunk_apdu = CommandAPDU( self.CLA_ECTESTER, InstructionEnum.INS_BUFFER, 0, 0, chunk ) @@ -554,7 +561,7 @@ class ECTesterTarget(ISO7816Target, ABC): # pragma: no cover return resp def select_applet( - self, latest_version: bytes = AID_CURRENT_VERSION, count_back: int = 10 + self, latest_version: bytes = AID_CURRENT_VERSION, count_back: int = 10 ) -> bool: """ Select the *ECTester* applet, with a specified version or older. @@ -565,7 +572,11 @@ class ECTesterTarget(ISO7816Target, ABC): # pragma: no cover """ version_bytes = bytearray(latest_version) for _ in range(count_back): - for aid_suffix in (self.AID_SUFFIX_304, self.AID_SUFFIX_222, self.AID_SUFFIX_221): + for aid_suffix in ( + self.AID_SUFFIX_304, + self.AID_SUFFIX_222, + self.AID_SUFFIX_221, + ): aid = self.AID_PREFIX + version_bytes + aid_suffix if self.select(aid): return True @@ -587,7 +598,7 @@ class ECTesterTarget(ISO7816Target, ABC): # pragma: no cover @staticmethod def encode_parameters( - params: ParameterEnum, obj: Union[DomainParameters, Point, int] + params: ParameterEnum, obj: Union[DomainParameters, Point, int] ) -> Mapping[ParameterEnum, bytes]: """Encode values from `obj` into the byte parameters that the **ECTester** applet expects.""" @@ -600,7 +611,7 @@ class ECTesterTarget(ISO7816Target, ABC): # pragma: no cover result = {} if isinstance(obj, DomainParameters) and isinstance( - obj.curve.model, ShortWeierstrassModel + obj.curve.model, ShortWeierstrassModel ): for param in params & ParameterEnum.DOMAIN_FP: if param == ParameterEnum.G: @@ -620,7 +631,7 @@ class ECTesterTarget(ISO7816Target, ABC): # pragma: no cover result[param] = convert_point(obj) elif isinstance(obj, int): for param in params & ( - (ParameterEnum.DOMAIN_FP ^ ParameterEnum.G) | ParameterEnum.S + (ParameterEnum.DOMAIN_FP ^ ParameterEnum.G) | ParameterEnum.S ): result[param] = convert_int(obj) else: @@ -664,11 +675,11 @@ class ECTesterTarget(ISO7816Target, ABC): # pragma: no cover return AllocateSigResponse(resp) def allocate( - self, - keypair: KeypairEnum, - builder: KeyBuildEnum, - key_length: int, - key_class: KeyClassEnum, + self, + keypair: KeypairEnum, + builder: KeyBuildEnum, + key_length: int, + key_class: KeyClassEnum, ) -> AllocateResponse: """ Send the Allocate KeyPair command. @@ -703,11 +714,11 @@ class ECTesterTarget(ISO7816Target, ABC): # pragma: no cover return ClearResponse(resp, keypair) def set( - self, - keypair: KeypairEnum, - curve: CurveEnum, - params: ParameterEnum, - values: Optional[Mapping[ParameterEnum, bytes]] = None, + self, + keypair: KeypairEnum, + curve: CurveEnum, + params: ParameterEnum, + values: Optional[Mapping[ParameterEnum, bytes]] = None, ) -> SetResponse: """ Send the Set command. @@ -749,11 +760,11 @@ class ECTesterTarget(ISO7816Target, ABC): # pragma: no cover return SetResponse(resp, keypair) def transform( - self, - keypair: KeypairEnum, - key: KeyEnum, - params: ParameterEnum, - transformation: TransformationEnum, + self, + keypair: KeypairEnum, + key: KeyEnum, + params: ParameterEnum, + transformation: TransformationEnum, ) -> TransformResponse: """ Send the Transform command. @@ -790,7 +801,7 @@ class ECTesterTarget(ISO7816Target, ABC): # pragma: no cover return GenerateResponse(resp, keypair) def export( - self, keypair: KeypairEnum, key: KeyEnum, params: ParameterEnum + self, keypair: KeypairEnum, key: KeyEnum, params: ParameterEnum ) -> ExportResponse: """ Send the Export command. @@ -812,12 +823,12 @@ class ECTesterTarget(ISO7816Target, ABC): # pragma: no cover return ExportResponse(resp, keypair, key, params) def ecdh( - self, - pubkey: KeypairEnum, - privkey: KeypairEnum, - export: bool, - transformation: TransformationEnum, - ka_type: KeyAgreementEnum, + self, + pubkey: KeypairEnum, + privkey: KeypairEnum, + export: bool, + transformation: TransformationEnum, + ka_type: KeyAgreementEnum, ) -> ECDHResponse: """ Send the ECDH command. @@ -843,12 +854,12 @@ class ECTesterTarget(ISO7816Target, ABC): # pragma: no cover return ECDHResponse(resp, export) def ecdh_direct( - self, - privkey: KeypairEnum, - export: bool, - transformation: TransformationEnum, - ka_type: KeyAgreementEnum, - pubkey: bytes, + self, + privkey: KeypairEnum, + export: bool, + transformation: TransformationEnum, + ka_type: KeyAgreementEnum, + pubkey: bytes, ) -> ECDHResponse: """ Send the ECDH direct command. @@ -875,7 +886,7 @@ class ECTesterTarget(ISO7816Target, ABC): # pragma: no cover return ECDHResponse(resp, export) def ecdsa( - self, keypair: KeypairEnum, export: bool, sig_type: SignatureEnum, data: bytes + self, keypair: KeypairEnum, export: bool, sig_type: SignatureEnum, data: bytes ) -> ECDSAResponse: """ Send the ECDSA command. @@ -898,7 +909,7 @@ class ECTesterTarget(ISO7816Target, ABC): # pragma: no cover return ECDSAResponse(resp, export) def ecdsa_sign( - self, keypair: KeypairEnum, export: bool, sig_type: SignatureEnum, data: bytes + self, keypair: KeypairEnum, export: bool, sig_type: SignatureEnum, data: bytes ) -> ECDSAResponse: """ Send the ECDSA sign command. @@ -921,7 +932,7 @@ class ECTesterTarget(ISO7816Target, ABC): # pragma: no cover return ECDSAResponse(resp, export) def ecdsa_verify( - self, keypair: KeypairEnum, sig_type: SignatureEnum, sig: bytes, data: bytes + self, keypair: KeypairEnum, sig_type: SignatureEnum, sig: bytes, data: bytes ) -> ECDSAResponse: """ Send the ECDSA verify command. @@ -984,17 +995,20 @@ class ECTesterTarget(ISO7816Target, ABC): # pragma: no cover if has_pyscard: - from .PCSC import PCSCTarget + from pyecsca.sca.target.PCSC import PCSCTarget @public class ECTesterTargetPCSC(ECTesterTarget, PCSCTarget): """An ECTester-applet-based target that is connected via a PCSC-compatible reader.""" + pass + if has_leia: - from .leia import LEIATarget + from pyecsca.sca.target.leia import LEIATarget @public class ECTesterTargetLEIA(ECTesterTarget, LEIATarget): """An ECTester-applet-based target that is connected via the LEIA board.""" + pass diff --git a/pyecsca/sca/target/leakage.py b/pyecsca/sca/target/leakage.py index 1f6e2b0..c832028 100644 --- a/pyecsca/sca/target/leakage.py +++ b/pyecsca/sca/target/leakage.py @@ -2,20 +2,20 @@ import numpy as np from typing import Optional, Tuple from public import public -from ...ec.coordinates import CoordinateModel -from ...ec.mod import Mod -from ...ec.model import CurveModel -from ...ec.params import DomainParameters -from ...ec.point import Point -from ...ec.mult import ScalarMultiplier -from ...ec.key_generation import KeyGeneration -from ...ec.key_agreement import KeyAgreement -from ...ec.signature import Signature, SignatureResult -from ...ec.formula import FormulaAction -from ...ec.context import DefaultContext, local -from ..attack import LeakageModel -from ..trace import Trace -from .base import Target +from pyecsca.ec.coordinates import CoordinateModel +from pyecsca.ec.mod import Mod +from pyecsca.ec.model import CurveModel +from pyecsca.ec.params import DomainParameters +from pyecsca.ec.point import Point +from pyecsca.ec.mult import ScalarMultiplier +from pyecsca.ec.key_generation import KeyGeneration +from pyecsca.ec.key_agreement import KeyAgreement +from pyecsca.ec.signature import Signature, SignatureResult +from pyecsca.ec.formula import FormulaAction +from pyecsca.ec.context import DefaultContext, local +from pyecsca.sca.attack import LeakageModel +from pyecsca.sca.trace import Trace +from pyecsca.sca.target.base import Target @public diff --git a/pyecsca/sca/target/leia.py b/pyecsca/sca/target/leia.py index f4d5643..8dab7df 100644 --- a/pyecsca/sca/target/leia.py +++ b/pyecsca/sca/target/leia.py @@ -3,7 +3,8 @@ from typing import Optional from smartleia import LEIA, create_APDU_from_bytes, T -from .ISO7816 import ISO7816Target, CommandAPDU, ResponseAPDU, ISO7816, CardProtocol, CardConnectionException +from pyecsca.sca.target.ISO7816 import ISO7816Target, CommandAPDU, ResponseAPDU, ISO7816, CardProtocol, \ + CardConnectionException class LEIATarget(ISO7816Target): # pragma: no cover diff --git a/pyecsca/sca/target/serial.py b/pyecsca/sca/target/serial.py index 3b81851..62dea45 100644 --- a/pyecsca/sca/target/serial.py +++ b/pyecsca/sca/target/serial.py @@ -3,7 +3,7 @@ from abc import abstractmethod from public import public -from .base import Target +from pyecsca.sca.target.base import Target @public diff --git a/pyecsca/sca/target/simpleserial.py b/pyecsca/sca/target/simpleserial.py index edc543e..f13a0a6 100644 --- a/pyecsca/sca/target/simpleserial.py +++ b/pyecsca/sca/target/simpleserial.py @@ -5,7 +5,7 @@ from typing import Mapping, Union from public import public -from .serial import SerialTarget +from pyecsca.sca.target.serial import SerialTarget @public diff --git a/pyecsca/sca/trace/align.py b/pyecsca/sca/trace/align.py index 71815b8..e1d3669 100644 --- a/pyecsca/sca/trace/align.py +++ b/pyecsca/sca/trace/align.py @@ -5,8 +5,8 @@ from fastdtw import fastdtw, dtw from public import public from typing import List, Callable, Tuple -from .process import normalize -from .trace import Trace +from pyecsca.sca.trace.process import normalize +from pyecsca.sca.trace.trace import Trace def _align_reference( @@ -39,7 +39,7 @@ def align_correlation( reference_offset: int, reference_length: int, max_offset: int, - min_correlation: float = 0.5 + min_correlation: float = 0.5, ) -> Tuple[List[Trace], List[int]]: """ Align :paramref:`~.align_correlation.traces` to the :paramref:`~.align_correlation.reference` trace using correlation. @@ -92,7 +92,7 @@ def align_peaks( *traces: Trace, reference_offset: int, reference_length: int, - max_offset: int + max_offset: int, ) -> Tuple[List[Trace], List[int]]: """ Align :paramref:`~.align_correlation.traces` to the :paramref:`~.align_correlation.reference` trace using peaks. @@ -133,7 +133,7 @@ def align_offset( reference_length: int, max_offset: int, dist_func: Callable[[np.ndarray, np.ndarray], float], - max_dist: float = float("inf") + max_dist: float = float("inf"), ) -> Tuple[List[Trace], List[int]]: """ Align :paramref:`~.align_correlation.traces` to the :paramref:`~.align_correlation.reference` trace using a distance function. @@ -183,7 +183,7 @@ def align_sad( *traces: Trace, reference_offset: int, reference_length: int, - max_offset: int + max_offset: int, ) -> Tuple[List[Trace], List[int]]: """ Align :paramref:`~.align_correlation.traces` to the :paramref:`~.align_correlation.reference` trace using Sum of Absolute Differences. @@ -209,7 +209,7 @@ def align_sad( reference_offset=reference_offset, reference_length=reference_length, max_offset=max_offset, - dist_func=sad + dist_func=sad, ) diff --git a/pyecsca/sca/trace/combine.py b/pyecsca/sca/trace/combine.py index 42e8b1b..9997a83 100644 --- a/pyecsca/sca/trace/combine.py +++ b/pyecsca/sca/trace/combine.py @@ -4,7 +4,7 @@ from typing import Callable, Tuple import numpy as np from public import public -from .trace import Trace, CombinedTrace +from pyecsca.sca.trace.trace import Trace, CombinedTrace @public diff --git a/pyecsca/sca/trace/edit.py b/pyecsca/sca/trace/edit.py index 47b455e..7d50188 100644 --- a/pyecsca/sca/trace/edit.py +++ b/pyecsca/sca/trace/edit.py @@ -3,7 +3,7 @@ import numpy as np from public import public from typing import Union, Tuple, Any, Optional -from .trace import Trace +from pyecsca.sca.trace.trace import Trace @public diff --git a/pyecsca/sca/trace/filter.py b/pyecsca/sca/trace/filter.py index 40ec13e..17361b9 100644 --- a/pyecsca/sca/trace/filter.py +++ b/pyecsca/sca/trace/filter.py @@ -3,7 +3,7 @@ from public import public from scipy.signal import butter, lfilter from typing import Union, Tuple -from .trace import Trace +from pyecsca.sca.trace.trace import Trace def _filter_any( diff --git a/pyecsca/sca/trace/match.py b/pyecsca/sca/trace/match.py index ae41dff..8a1b9bb 100644 --- a/pyecsca/sca/trace/match.py +++ b/pyecsca/sca/trace/match.py @@ -4,9 +4,9 @@ from scipy.signal import find_peaks from public import public from typing import List -from .process import normalize -from .edit import trim -from .trace import Trace +from pyecsca.sca.trace.process import normalize +from pyecsca.sca.trace.edit import trim +from pyecsca.sca.trace.trace import Trace @public diff --git a/pyecsca/sca/trace/plot.py b/pyecsca/sca/trace/plot.py index d89310d..c12840b 100644 --- a/pyecsca/sca/trace/plot.py +++ b/pyecsca/sca/trace/plot.py @@ -5,7 +5,7 @@ import holoviews as hv from holoviews.operation.datashader import datashade from public import public -from .trace import Trace +from pyecsca.sca.trace.trace import Trace @public diff --git a/pyecsca/sca/trace/process.py b/pyecsca/sca/trace/process.py index 92a6296..1851e10 100644 --- a/pyecsca/sca/trace/process.py +++ b/pyecsca/sca/trace/process.py @@ -5,7 +5,7 @@ import numpy as np from scipy.signal import convolve from public import public -from .trace import Trace +from pyecsca.sca.trace.trace import Trace @public diff --git a/pyecsca/sca/trace/sampling.py b/pyecsca/sca/trace/sampling.py index b04ec5e..2c39e4d 100644 --- a/pyecsca/sca/trace/sampling.py +++ b/pyecsca/sca/trace/sampling.py @@ -5,7 +5,7 @@ import numpy as np from public import public from scipy.signal import decimate -from .trace import Trace +from pyecsca.sca.trace.trace import Trace @public diff --git a/pyecsca/sca/trace/test.py b/pyecsca/sca/trace/test.py index 8a0ddb9..c7bbd95 100644 --- a/pyecsca/sca/trace/test.py +++ b/pyecsca/sca/trace/test.py @@ -5,9 +5,9 @@ import numpy as np from public import public from scipy.stats import ttest_ind, ks_2samp, t -from .trace import Trace, CombinedTrace -from .combine import average_and_variance -from .edit import trim +from pyecsca.sca.trace.trace import Trace, CombinedTrace +from pyecsca.sca.trace.combine import average_and_variance +from pyecsca.sca.trace.edit import trim def _ttest_func( diff --git a/pyecsca/sca/trace/trace.py b/pyecsca/sca/trace/trace.py index dbab02d..a609ecb 100644 --- a/pyecsca/sca/trace/trace.py +++ b/pyecsca/sca/trace/trace.py @@ -17,7 +17,10 @@ class Trace: samples: ndarray def __init__( - self, samples: ndarray, meta: Optional[Mapping[str, Any]] = None, trace_set: Any = None + self, + samples: ndarray, + meta: Optional[Mapping[str, Any]] = None, + trace_set: Any = None, ): """ Construct a new trace. @@ -104,8 +107,10 @@ class Trace: def __deepcopy__(self, memodict): return Trace( - deepcopy(self.samples, memo=memodict) if isinstance(self.samples, np.ndarray) else np.array(self.samples), - deepcopy(self.meta, memo=memodict) + deepcopy(self.samples, memo=memodict) + if isinstance(self.samples, np.ndarray) + else np.array(self.samples), + deepcopy(self.meta, memo=memodict), ) def __repr__(self): diff --git a/pyecsca/sca/trace_set/base.py b/pyecsca/sca/trace_set/base.py index 99094bc..0f605e4 100644 --- a/pyecsca/sca/trace_set/base.py +++ b/pyecsca/sca/trace_set/base.py @@ -4,7 +4,7 @@ from typing import List, Union, BinaryIO from public import public -from ..trace import Trace +from pyecsca.sca.trace import Trace @public diff --git a/pyecsca/sca/trace_set/chipwhisperer.py b/pyecsca/sca/trace_set/chipwhisperer.py index 8ff20ea..564e1cd 100644 --- a/pyecsca/sca/trace_set/chipwhisperer.py +++ b/pyecsca/sca/trace_set/chipwhisperer.py @@ -7,8 +7,8 @@ from typing import Union, BinaryIO import numpy as np from public import public -from .base import TraceSet -from ..trace import Trace +from pyecsca.sca.trace_set.base import TraceSet +from pyecsca.sca.trace import Trace @public diff --git a/pyecsca/sca/trace_set/hdf5.py b/pyecsca/sca/trace_set/hdf5.py index 88c10a0..62690ae 100644 --- a/pyecsca/sca/trace_set/hdf5.py +++ b/pyecsca/sca/trace_set/hdf5.py @@ -16,8 +16,8 @@ import numpy as np from public import public from copy import deepcopy -from .base import TraceSet -from .. import Trace +from pyecsca.sca.trace_set.base import TraceSet +from pyecsca.sca import Trace @public diff --git a/pyecsca/sca/trace_set/inspector.py b/pyecsca/sca/trace_set/inspector.py index e945409..3ed4e2b 100644 --- a/pyecsca/sca/trace_set/inspector.py +++ b/pyecsca/sca/trace_set/inspector.py @@ -8,8 +8,8 @@ from typing import Union, Optional, BinaryIO import numpy as np from public import public -from .base import TraceSet -from ..trace import Trace +from pyecsca.sca.trace_set.base import TraceSet +from pyecsca.sca.trace import Trace @public diff --git a/pyecsca/sca/trace_set/pickle.py b/pyecsca/sca/trace_set/pickle.py index fdb65fe..0134c63 100644 --- a/pyecsca/sca/trace_set/pickle.py +++ b/pyecsca/sca/trace_set/pickle.py @@ -10,7 +10,7 @@ from typing import Union, BinaryIO from public import public -from .base import TraceSet +from pyecsca.sca.trace_set.base import TraceSet @public |
