aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--epare/common.py59
-rw-r--r--epare/distinguish.ipynb2
-rw-r--r--epare/simulate.ipynb5
-rw-r--r--epare/simulate.py2
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,