diff options
| author | J08nY | 2025-03-20 17:05:29 +0100 |
|---|---|---|
| committer | J08nY | 2025-04-16 12:25:06 +0200 |
| commit | 8ac23a01cdf0ae0074a30bfe9152163f184da789 (patch) | |
| tree | fec5ca35fe5b73ac4775a7057dbc0b67ba93bb75 | |
| parent | 334a33afabaaaf3a1be83a0573ee3dc2ddbe575d (diff) | |
| download | ECTester-8ac23a01cdf0ae0074a30bfe9152163f184da789.tar.gz ECTester-8ac23a01cdf0ae0074a30bfe9152163f184da789.tar.zst ECTester-8ac23a01cdf0ae0074a30bfe9152163f184da789.zip | |
| -rw-r--r-- | epare/common.py | 59 | ||||
| -rw-r--r-- | epare/distinguish.ipynb | 2 | ||||
| -rw-r--r-- | epare/simulate.ipynb | 5 | ||||
| -rw-r--r-- | epare/simulate.py | 2 |
4 files changed, 47 insertions, 21 deletions
diff --git a/epare/common.py b/epare/common.py index bed28dc..7df5e28 100644 --- a/epare/common.py +++ b/epare/common.py @@ -15,7 +15,7 @@ from enum import Enum from pyecsca.ec.params import DomainParameters, get_params from pyecsca.ec.mult import * -from pyecsca.ec.countermeasures import GroupScalarRandomization, AdditiveSplitting, MultiplicativeSplitting, EuclideanSplitting +from pyecsca.ec.countermeasures import GroupScalarRandomization, AdditiveSplitting, MultiplicativeSplitting, EuclideanSplitting, BrumleyTuveri spawn_context = multiprocessing.get_context("spawn") @@ -67,9 +67,11 @@ class MultIdent: return lambda *args, **kwargs: MultiplicativeSplitting(func(*args, **kwargs)) elif self.countermeasure == "euclidean": return lambda *args, **kwargs: EuclideanSplitting(func(*args, **kwargs)) + elif self.countermeasure == "bt": + return lambda *args, **kwargs: BrumleyTuveri(func(*args, **kwargs)) def with_countermeasure(self, countermeasure: str | None): - if countermeasure not in (None, "gsr", "additive", "multiplicative", "euclidean"): + if countermeasure not in (None, "gsr", "additive", "multiplicative", "euclidean", "bt"): raise ValueError(f"Unknown countermeasure: {countermeasure}") return MultIdent(self.klass, *self.args, **self.kwargs, countermeasure=countermeasure) @@ -167,19 +169,30 @@ class ProbMap: # All dbl-and-add multipliers from https://github.com/J08nY/pyecsca/blob/master/pyecsca/ec/mult window_mults = [ - MultIdent(SlidingWindowMultiplier, width=3), - MultIdent(SlidingWindowMultiplier, width=4), - MultIdent(SlidingWindowMultiplier, width=5), - MultIdent(SlidingWindowMultiplier, width=6), + MultIdent(SlidingWindowMultiplier, width=2, recoding_direction=ProcessingDirection.LTR), + MultIdent(SlidingWindowMultiplier, width=3, recoding_direction=ProcessingDirection.LTR), + MultIdent(SlidingWindowMultiplier, width=4, recoding_direction=ProcessingDirection.LTR), + MultIdent(SlidingWindowMultiplier, width=5, recoding_direction=ProcessingDirection.LTR), + MultIdent(SlidingWindowMultiplier, width=6, recoding_direction=ProcessingDirection.LTR), + MultIdent(SlidingWindowMultiplier, width=2, recoding_direction=ProcessingDirection.RTL), + MultIdent(SlidingWindowMultiplier, width=3, recoding_direction=ProcessingDirection.RTL), + MultIdent(SlidingWindowMultiplier, width=4, recoding_direction=ProcessingDirection.RTL), + MultIdent(SlidingWindowMultiplier, width=5, recoding_direction=ProcessingDirection.RTL), + MultIdent(SlidingWindowMultiplier, width=6, recoding_direction=ProcessingDirection.RTL), + MultIdent(FixedWindowLTRMultiplier, m=2**1), + MultIdent(FixedWindowLTRMultiplier, m=2**2), + MultIdent(FixedWindowLTRMultiplier, m=2**3), MultIdent(FixedWindowLTRMultiplier, m=2**4), MultIdent(FixedWindowLTRMultiplier, m=2**5), MultIdent(FixedWindowLTRMultiplier, m=2**6), + MultIdent(WindowBoothMultiplier, width=2), MultIdent(WindowBoothMultiplier, width=3), MultIdent(WindowBoothMultiplier, width=4), MultIdent(WindowBoothMultiplier, width=5), MultIdent(WindowBoothMultiplier, width=6) ] naf_mults = [ + MultIdent(WindowNAFMultiplier, width=2), MultIdent(WindowNAFMultiplier, width=3), MultIdent(WindowNAFMultiplier, width=4), MultIdent(WindowNAFMultiplier, width=5), @@ -188,11 +201,16 @@ naf_mults = [ MultIdent(BinaryNAFMultiplier, direction=ProcessingDirection.RTL) ] comb_mults = [ - MultIdent(CombMultiplier, width=2), - MultIdent(CombMultiplier, width=3), - MultIdent(CombMultiplier, width=4), - MultIdent(CombMultiplier, width=5), - MultIdent(CombMultiplier, width=6), + MultIdent(CombMultiplier, width=2, complete=True), + MultIdent(CombMultiplier, width=3, complete=True), + MultIdent(CombMultiplier, width=4, complete=True), + MultIdent(CombMultiplier, width=5, complete=True), + MultIdent(CombMultiplier, width=6, complete=True), + MultIdent(CombMultiplier, width=2, complete=False), + MultIdent(CombMultiplier, width=3, complete=False), + MultIdent(CombMultiplier, width=4, complete=False), + MultIdent(CombMultiplier, width=5, complete=False), + MultIdent(CombMultiplier, width=6, complete=False), MultIdent(BGMWMultiplier, width=2, direction=ProcessingDirection.LTR), MultIdent(BGMWMultiplier, width=3, direction=ProcessingDirection.LTR), MultIdent(BGMWMultiplier, width=4, direction=ProcessingDirection.LTR), @@ -205,17 +223,24 @@ comb_mults = [ MultIdent(BGMWMultiplier, width=6, direction=ProcessingDirection.RTL) ] binary_mults = [ - MultIdent(LTRMultiplier, always=False), - MultIdent(LTRMultiplier, always=True), - MultIdent(RTLMultiplier, always=False), - MultIdent(RTLMultiplier, always=True), + MultIdent(LTRMultiplier, always=False, complete=True), + MultIdent(LTRMultiplier, always=True, complete=True), + MultIdent(RTLMultiplier, always=False, complete=True), + MultIdent(RTLMultiplier, always=True, complete=True), + MultIdent(LTRMultiplier, always=False, complete=False), + MultIdent(LTRMultiplier, always=True, complete=False), + MultIdent(RTLMultiplier, always=False, complete=False), + MultIdent(RTLMultiplier, always=True, complete=False), MultIdent(CoronMultiplier) ] other_mults = [ - MultIdent(FullPrecompMultiplier, always=False), - MultIdent(FullPrecompMultiplier, always=True), + MultIdent(FullPrecompMultiplier, always=False, complete=True), + MultIdent(FullPrecompMultiplier, always=True, complete=True), + MultIdent(FullPrecompMultiplier, always=False, complete=False), + MultIdent(FullPrecompMultiplier, always=True, complete=False), MultIdent(SimpleLadderMultiplier, complete=True), MultIdent(SimpleLadderMultiplier, complete=False) ] all_mults = window_mults + naf_mults + binary_mults + other_mults + comb_mults +all_mults_with_ctr = [mult.with_countermeasure(ctr) for mult in all_mults for ctr in (None, "gsr", "additive", "multiplicative", "euclidean", "bt")]
\ No newline at end of file diff --git a/epare/distinguish.ipynb b/epare/distinguish.ipynb index 9cedf48..875b9ed 100644 --- a/epare/distinguish.ipynb +++ b/epare/distinguish.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "bc1528b8-61cd-4219-993f-e3f1ac79e801", "metadata": {}, "outputs": [], diff --git a/epare/simulate.ipynb b/epare/simulate.ipynb index 89a5533..54e29ca 100644 --- a/epare/simulate.ipynb +++ b/epare/simulate.ipynb @@ -132,6 +132,7 @@ "source": [ "category = \"secg\"\n", "curve = \"secp256r1\"\n", + "kind = \"precomp+necessary\"\n", "params = get_params(category, curve, \"projective\")\n", "num_workers = 20\n", "bits = params.order.bit_length()\n", @@ -159,11 +160,11 @@ "chunk_id = randbytes(4).hex()\n", "with TaskExecutor(max_workers=num_workers, mp_context=spawn_context) as pool, enable_spawn(get_small_scalar_multiples) as target:\n", " for mult in selected_mults:\n", - " for countermeasure in (None, \"gsr\", \"additive\", \"multiplicative\", \"euclidean\"):\n", + " for countermeasure in (None, \"gsr\", \"additive\", \"multiplicative\", \"euclidean\", \"bt\"):\n", " mwc = mult.with_countermeasure(countermeasure)\n", " pool.submit_task(mwc,\n", " target,\n", - " mwc, params, bits, samples, seed=chunk_id)\n", + " mwc, params, bits, samples, seed=chunk_id, kind=kind)\n", " for mult, future in tqdm(pool.as_completed(), desc=\"Computing small scalar distributions.\", total=len(pool.tasks)):\n", " print(f\"Got {mult}.\")\n", " if error := future.exception():\n", diff --git a/epare/simulate.py b/epare/simulate.py index 2748377..2010e1a 100644 --- a/epare/simulate.py +++ b/epare/simulate.py @@ -99,7 +99,7 @@ if __name__ == "__main__": chunk_id = randbytes(6).hex() with TaskExecutor(max_workers=num_workers) as pool: for mult in selected_mults: - for countermeasure in (None, "gsr", "additive", "multiplicative", "euclidean"): + for countermeasure in (None, "gsr", "additive", "multiplicative", "euclidean", "bt"): mwc = mult.with_countermeasure(countermeasure) pool.submit_task(mwc, get_small_scalar_multiples, |
