aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--analysis/countermeasures/combinations.ipynb484
1 files changed, 185 insertions, 299 deletions
diff --git a/analysis/countermeasures/combinations.ipynb b/analysis/countermeasures/combinations.ipynb
index e54c5ab..feba401 100644
--- a/analysis/countermeasures/combinations.ipynb
+++ b/analysis/countermeasures/combinations.ipynb
@@ -28,17 +28,17 @@
"from pyecsca.ec.params import load_params_ectester, get_params\n",
"from pyecsca.ec.mult import LTRMultiplier, RTLMultiplier, ScalarMultiplicationAction\n",
"from pyecsca.ec.context import local, DefaultContext\n",
- "from countermeasures import GroupScalarRandomization, AdditiveSplitting, MultiplicativeSplitting, EuclideanSplitting, BrumleyTuveri\n",
"from pyecsca.ec.formula import AdditionFormula\n",
"from pyecsca.ec.mod import Mod, mod\n",
"from pyecsca.ec.mult import ScalarMultiplier, ScalarMultiplicationAction\n",
"from pyecsca.ec.params import DomainParameters\n",
"from pyecsca.ec.point import Point\n",
- "from countermeasures import *\n",
+ "from pyecsca.ec.countermeasures import *\n",
"from public import public\n",
"from abc import ABC, abstractmethod\n",
"from typing import Optional\n",
- "# %matplotlib ipympl"
+ "# %matplotlib ipympl\n",
+ "import secrets"
]
},
{
@@ -172,8 +172,8 @@
" super().__init__(mult)\n",
" self.rand_bits = rand_bits\n",
" self.add = add\n",
- " self.r = None\n",
- " self.s = None\n",
+ " self.r: int = None\n",
+ " self.s: int = None\n",
"\n",
" def init(self, params: DomainParameters, point: Point):\n",
" self.params = params\n",
@@ -190,11 +190,10 @@
" with ScalarMultiplicationAction(self.point, self.params, scalar) as action:\n",
" order = self.params.order\n",
" r = int(Mod.random(1 << self.rand_bits)) if self.r is None else self.r\n",
- " order = self.params.order\n",
- " s = Mod.random(order) if self.s is None else self.s\n",
+ " s = int(Mod.random(order)) if self.s is None else self.s\n",
" gsr_scalar = scalar + r * order\n",
- " m1 = self.mult.multiply(int(gsr_scalar-s))\n",
- " m2 = self.mult.multiply(int(s))\n",
+ " m1 = self.mult.multiply(gsr_scalar-s)\n",
+ " m2 = self.mult.multiply(s)\n",
" if self.add is None:\n",
" res = self.mult._add(m1, m2) # noqa: This is OK.\n",
" else:\n",
@@ -220,9 +219,9 @@
" super().__init__(mult)\n",
" self.rand_bits = rand_bits\n",
" self.add = add\n",
- " self.r1 = None\n",
- " self.r2 = None\n",
- " self.s = None\n",
+ " self.r1: int = None\n",
+ " self.r2: int = None\n",
+ " self.s: int = None\n",
"\n",
" def init(self, params: DomainParameters, point: Point):\n",
" self.params = params\n",
@@ -241,11 +240,11 @@
" r1 = int(Mod.random(1 << self.rand_bits)) if self.r1 is None else self.r1\n",
" r2 = int(Mod.random(1 << self.rand_bits)) if self.r2 is None else self.r2\n",
" order = self.params.order\n",
- " s = Mod.random(order) if self.s is None else self.s\n",
- " add_scalar = scalar - s\n",
+ " s = int(Mod.random(order)) if self.s is None else self.s\n",
+ " add_scalar = int(mod(scalar,order) - mod(s,order))\n",
" \n",
- " m1 = self.mult.multiply(int(add_scalar+r1*order))\n",
- " m2 = self.mult.multiply(int(s+r2*order))\n",
+ " m1 = self.mult.multiply(add_scalar+r1*order)\n",
+ " m2 = self.mult.multiply(s+r2*order)\n",
" if self.add is None:\n",
" res = self.mult._add(m1, m2) # noqa: This is OK.\n",
" else:\n",
@@ -359,7 +358,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar_projected(ga2,300)"
+ "test_3n_random_scalar_projected(ga2,10)"
]
},
{
@@ -369,7 +368,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar_projected(ga2,300)"
+ "test_3n_random_scalar_projected(ga2,10)"
]
},
{
@@ -381,9 +380,9 @@
"source": [
"order = params3n.order\n",
"ga1 = GSR_Add_1(mult)\n",
- "ga1.s = Mod.random(order)\n",
+ "ga1.s = int(Mod.random(order))\n",
"ga2 = GSR_Add_2(mult)\n",
- "ga2.s = Mod.random(order)"
+ "ga2.s = int(Mod.random(order))"
]
},
{
@@ -393,7 +392,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar_projected(ga1,300)"
+ "test_3n_random_scalar_projected(ga1,10)"
]
},
{
@@ -403,7 +402,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar_projected(ga2,300)"
+ "test_3n_random_scalar_projected(ga2,10)"
]
},
{
@@ -438,8 +437,8 @@
" super().__init__(mult)\n",
" self.rand_bits_gsr = rand_bits_gsr\n",
" self.rand_bits_mult = rand_bits_mult\n",
- " self.r = None\n",
- " self.s = None\n",
+ " self.r: int = None\n",
+ " self.s: int = None\n",
" \n",
" def init(self, params: DomainParameters, point: Point):\n",
" self.params = params\n",
@@ -455,15 +454,15 @@
" raise ValueError(\"Not initialized.\")\n",
" with ScalarMultiplicationAction(self.point, self.params, scalar) as action:\n",
" order = self.params.order\n",
- " r = Mod.random(1 << self.rand_bits_gsr) if self.r is None else self.r\n",
- " s = Mod.random(1 << self.rand_bits_mult) if self.s is None else self.s\n",
+ " r = int(Mod.random(1 << self.rand_bits_gsr)) if self.r is None else self.r\n",
+ " s = int(Mod.random(1 << self.rand_bits_mult)) if self.s is None else self.s\n",
" \n",
- " S = self.mult.multiply(int(s))\n",
+ " S = self.mult.multiply(s)\n",
" self.mult.init(self.params, S)\n",
" \n",
- " ks_inv = scalar * mod(int(s), order).inverse()\n",
- " ks_inv_gsr = int(ks_inv) + int(r)*order\n",
- " return action.exit(self.mult.multiply(int(ks_inv_gsr)))\n",
+ " ks_inv = scalar * mod(s, order).inverse()\n",
+ " ks_inv_gsr = int(ks_inv) + r*order\n",
+ " return action.exit(self.mult.multiply(ks_inv_gsr))\n",
"\n",
"@public\n",
"class GSR_Mult_2(ScalarMultiplierCountermeasure):\n",
@@ -482,26 +481,26 @@
" super().__init__(mult)\n",
" self.rand_bits_gsr = rand_bits_gsr\n",
" self.rand_bits_mult = rand_bits_mult\n",
- " self.s = None\n",
- " self.r1 = None\n",
- " self.r2 = None\n",
+ " self.s: int = None\n",
+ " self.r1: int = None\n",
+ " self.r2: int = None\n",
"\n",
" def multiply(self, scalar: int) -> Point:\n",
" if self.params is None or self.point is None:\n",
" raise ValueError(\"Not initialized.\")\n",
" with ScalarMultiplicationAction(self.point, self.params, scalar) as action:\n",
" order = self.params.order\n",
- " r1 = Mod.random(1 << self.rand_bits_gsr) if self.r1 is None else self.r1\n",
- " r2 = Mod.random(1 << self.rand_bits_gsr) if self.r2 is None else self.r2\n",
- " s = Mod.random(1 << self.rand_bits_mult) if self.s is None else self.s\n",
- " s_gsr = s+ r2*order \n",
+ " r1 = int(Mod.random(1 << self.rand_bits_gsr)) if self.r1 is None else self.r1\n",
+ " r2 = int(Mod.random(1 << self.rand_bits_gsr)) if self.r2 is None else self.r2\n",
+ " s = int(Mod.random(1 << self.rand_bits_mult)) if self.s is None else self.s\n",
+ " s_gsr = s + r2*order \n",
" \n",
- " S = self.mult.multiply(int(s_gsr))\n",
+ " S = self.mult.multiply(s_gsr)\n",
" self.mult.init(self.params, S)\n",
" \n",
- " ks_inv = scalar * mod(int(s_gsr), order).inverse()\n",
- " ks_inv_gsr = int(ks_inv) + int(r1)*order\n",
- " return action.exit(self.mult.multiply(int(ks_inv_gsr)))\n",
+ " ks_inv = scalar * mod(s, order).inverse()\n",
+ " ks_inv_gsr = int(ks_inv) + r1*order\n",
+ " return action.exit(self.mult.multiply(ks_inv_gsr))\n",
" \n",
"\n",
"@public\n",
@@ -521,8 +520,8 @@
" super().__init__(mult)\n",
" self.rand_bits_gsr = rand_bits_gsr\n",
" self.rand_bits_mult = rand_bits_mult\n",
- " self.r = None\n",
- " self.s = None\n",
+ " self.r: int = None\n",
+ " self.s: int = None\n",
" \n",
" def init(self, params: DomainParameters, point: Point):\n",
" self.params = params\n",
@@ -538,14 +537,14 @@
" raise ValueError(\"Not initialized.\")\n",
" with ScalarMultiplicationAction(self.point, self.params, scalar) as action:\n",
" order = self.params.order\n",
- " r = Mod.random(1 << self.rand_bits_gsr) if self.r is None else self.r\n",
- " s = Mod.random(1 << self.rand_bits_mult) if self.s is None else self.s\n",
- " s_gsr = s+ r*order \n",
+ " r = int(Mod.random(1 << self.rand_bits_gsr)) if self.r is None else self.r\n",
+ " s = int(Mod.random(1 << self.rand_bits_mult)) if self.s is None else self.s\n",
+ " s_gsr = s + r*order \n",
" \n",
- " S = self.mult.multiply(int(s_gsr))\n",
+ " S = self.mult.multiply(s_gsr)\n",
" self.mult.init(self.params, S)\n",
" \n",
- " ks_inv = scalar * mod(int(s_gsr), order).inverse()\n",
+ " ks_inv = scalar * mod(s, order).inverse()\n",
" return action.exit(self.mult.multiply(int(ks_inv)))"
]
},
@@ -658,7 +657,7 @@
"metadata": {},
"outputs": [],
"source": [
- "r = Mod.random(32)\n",
+ "r = int(Mod.random(1 << 32))\n",
"gm1 = GSR_Mult_1(mult)\n",
"gm1.r = r\n",
"gm2 = GSR_Mult_2(mult)\n",
@@ -674,7 +673,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar_projected(gm1,300)"
+ "test_3n_random_scalar_projected(gm1,10)"
]
},
{
@@ -684,7 +683,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar_projected(gm2,300)"
+ "test_3n_random_scalar_projected(gm2,10)"
]
},
{
@@ -694,7 +693,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar_projected(gm3,300)"
+ "test_3n_random_scalar_projected(gm3,10)"
]
},
{
@@ -704,7 +703,7 @@
"metadata": {},
"outputs": [],
"source": [
- "s = Mod.random(32)\n",
+ "s = int(Mod.random(1 << 32))\n",
"gm1 = GSR_Mult_1(mult)\n",
"gm1.s = s\n",
"gm2 = GSR_Mult_2(mult)\n",
@@ -720,7 +719,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar_projected(gm1,300)"
+ "test_3n_random_scalar_projected(gm1,10)"
]
},
{
@@ -730,7 +729,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar_projected(gm2,300)"
+ "test_3n_random_scalar_projected(gm2,10)"
]
},
{
@@ -740,7 +739,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar_projected(gm3,300)"
+ "test_3n_random_scalar_projected(gm3,10)"
]
},
{
@@ -776,8 +775,8 @@
" super().__init__(mult)\n",
" self.add = add\n",
" self.rand_bits_gsr = rand_bits_gsr\n",
- " self.r = None\n",
- " self.s = None\n",
+ " self.r: int = None\n",
+ " self.s: int = None\n",
"\n",
" def init(self, params: DomainParameters, point: Point):\n",
" self.params = params\n",
@@ -794,12 +793,12 @@
" with ScalarMultiplicationAction(self.point, self.params, scalar) as action:\n",
" half_bits = self.params.order.bit_length() // 2\n",
" order = self.params.order\n",
- " r = Mod.random(1 << self.rand_bits_gsr) if self.r is None else self.r\n",
- " gsr = int(scalar)+int(r)*int(order)\n",
- " s = Mod.random(1 << half_bits) if self.s is None else self.s\n",
- " S = self.mult.multiply(int(s))\n",
- " k1 = gsr % int(s)\n",
- " k2 = gsr // int(s)\n",
+ " r = int(Mod.random(1 << self.rand_bits_gsr)) if self.r is None else self.r\n",
+ " gsr = scalar+r*order\n",
+ " s = int(Mod.random(1 << half_bits)) if self.s is None else self.s\n",
+ " S = self.mult.multiply(s)\n",
+ " k1 = gsr % s\n",
+ " k2 = gsr // s\n",
" T = self.mult.multiply(k1)\n",
" self.mult.init(self.params, S)\n",
" R = self.mult.multiply(k2)\n",
@@ -830,8 +829,8 @@
" super().__init__(mult)\n",
" self.add = add\n",
" self.rand_bits_gsr = rand_bits_gsr\n",
- " self.r = None\n",
- " self.s = None\n",
+ " self.r: int = None\n",
+ " self.s: int = None\n",
" \n",
" def init(self, params: DomainParameters, point: Point):\n",
" self.params = params\n",
@@ -848,11 +847,11 @@
" with ScalarMultiplicationAction(self.point, self.params, scalar) as action:\n",
" half_bits = self.params.order.bit_length() // 2\n",
" order = self.params.order\n",
- " r = Mod.random(1 << self.rand_bits_gsr) if self.r is None else self.r\n",
- " s = Mod.random(1 << half_bits) if self.s is None else self.s\n",
- " S = self.mult.multiply(int(s)+int(r)*order)\n",
- " k1 = int(scalar) % int(s)\n",
- " k2 = int(scalar) // int(s)\n",
+ " r = int(Mod.random(1 << self.rand_bits_gsr)) if self.r is None else self.r\n",
+ " s = int(Mod.random(1 << half_bits)) if self.s is None else self.s\n",
+ " S = self.mult.multiply(s+r*order)\n",
+ " k1 = scalar % s\n",
+ " k2 = scalar // s\n",
" T = self.mult.multiply(k1)\n",
" self.mult.init(self.params, S)\n",
" R = self.mult.multiply(k2)\n",
@@ -882,9 +881,9 @@
" super().__init__(mult)\n",
" self.add = add\n",
" self.rand_bits_gsr = rand_bits_gsr\n",
- " self.r1 = None\n",
- " self.r2 = None\n",
- " self.s = None\n",
+ " self.r1: int = None\n",
+ " self.r2: int = None\n",
+ " self.s: int = None\n",
" \n",
" def init(self, params: DomainParameters, point: Point):\n",
" self.params = params\n",
@@ -901,15 +900,15 @@
" with ScalarMultiplicationAction(self.point, self.params, scalar) as action:\n",
" half_bits = self.params.order.bit_length() // 2\n",
" order = self.params.order\n",
- " r1 = Mod.random(1 << self.rand_bits_gsr) if self.r1 is None else self.r1\n",
- " r2 = Mod.random(1 << self.rand_bits_gsr) if self.r2 is None else self.r2\n",
- " s = Mod.random(1 << half_bits) if self.s is None else self.s\n",
- " S = self.mult.multiply(int(s))\n",
- " k1 = int(scalar) % int(s)\n",
- " k2 = int(scalar) // int(s)\n",
- " T = self.mult.multiply(k1+int(r1)*order)\n",
+ " r1 = int(Mod.random(1 << self.rand_bits_gsr)) if self.r1 is None else self.r1\n",
+ " r2 = int(Mod.random(1 << self.rand_bits_gsr)) if self.r2 is None else self.r2\n",
+ " s = int(Mod.random(1 << half_bits)) if self.s is None else self.s\n",
+ " S = self.mult.multiply(s)\n",
+ " k1 = scalar % s\n",
+ " k2 = scalar // s\n",
+ " T = self.mult.multiply(k1+r1*order)\n",
" self.mult.init(self.params, S)\n",
- " R = self.mult.multiply(k2+int(r2)*order)\n",
+ " R = self.mult.multiply(k2+r2*order)\n",
" if self.add is None:\n",
" res = self.mult._add(R, T) # noqa: This is OK.\n",
" else:\n",
@@ -917,63 +916,7 @@
" self.params.curve.prime, R, T, **self.params.curve.parameters\n",
" )[0]\n",
" return action.exit(res)\n",
- " \n",
- "@public\n",
- "class GSR_Eucl_4(ScalarMultiplierCountermeasure):\n",
- " r\"\"\"\n",
- " GSR with Eucl, option 4.\n",
- " k = k1+k2s\n",
- " [k1+r1*n]+[k2+r2*n][s+r3*n]\n",
- " \"\"\"\n",
- "\n",
- " add: Optional[AdditionFormula]\n",
- "\n",
- " def __init__(self, mult: ScalarMultiplier, rand_bits_gsr: int = 32, add: Optional[AdditionFormula] = None):\n",
- " \"\"\"\n",
- " :param mult: The multiplier to use.\n",
- " :param add: Addition formula to use, if None, the formula from the multiplier is used.\n",
- " \"\"\"\n",
- " super().__init__(mult)\n",
- " self.add = add\n",
- " self.rand_bits_gsr = rand_bits_gsr\n",
- " self.r1 = None\n",
- " self.r2 = None\n",
- " self.r3 = None\n",
- " self.s = None\n",
- " \n",
- " def init(self, params: DomainParameters, point: Point):\n",
- " self.params = params\n",
- " self.point = point\n",
- " self.mult.init(\n",
- " self.params,\n",
- " self.point,\n",
- " bits=params.full_order.bit_length() + self.rand_bits_gsr,\n",
- " )\n",
- "\n",
- " def multiply(self, scalar: int) -> Point:\n",
- " if self.params is None or self.point is None:\n",
- " raise ValueError(\"Not initialized.\")\n",
- " with ScalarMultiplicationAction(self.point, self.params, scalar) as action:\n",
- " half_bits = self.params.order.bit_length() // 2\n",
- " order = self.params.order\n",
- " r1 = Mod.random(1 << self.rand_bits_gsr) if self.r1 is None else self.r1\n",
- " r2 = Mod.random(1 << self.rand_bits_gsr) if self.r2 is None else self.r2\n",
- " r3 = Mod.random(1 << self.rand_bits_gsr) if self.r3 is None else self.r3\n",
- " s = Mod.random(1 << half_bits) if self.s is None else self.s\n",
- " S = self.mult.multiply(int(s)+int(r3)*order)\n",
- " k1 = int(scalar) % int(s)\n",
- " k2 = int(scalar) // int(s)\n",
- " T = self.mult.multiply(k1+int(r1)*order)\n",
- " self.mult.init(self.params, S)\n",
- " R = self.mult.multiply(k2+int(r2)*order)\n",
- " if self.add is None:\n",
- " res = self.mult._add(R, T) # noqa: This is OK.\n",
- " else:\n",
- " res = self.add(\n",
- " self.params.curve.prime, R, T, **self.params.curve.parameters\n",
- " )[0]\n",
- " return action.exit(res)\n",
- " \n"
+ " \n"
]
},
{
@@ -985,8 +928,7 @@
"source": [
"ge1 = GSR_Eucl_1(mult)\n",
"ge2 = GSR_Eucl_2(mult)\n",
- "ge3 = GSR_Eucl_3(mult)\n",
- "ge4 = GSR_Eucl_4(mult)"
+ "ge3 = GSR_Eucl_3(mult)"
]
},
{
@@ -1022,16 +964,6 @@
{
"cell_type": "code",
"execution_count": null,
- "id": "1182264d",
- "metadata": {},
- "outputs": [],
- "source": [
- "test_3n_random_scalar(ge4, 10)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
"id": "83df90c7",
"metadata": {},
"outputs": [],
@@ -1056,17 +988,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar_projected(ge3,1000)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "b1e49379",
- "metadata": {},
- "outputs": [],
- "source": [
- "test_3n_random_scalar_projected(ge4,1000)"
+ "test_3n_random_scalar_projected(ge3,10)"
]
},
{
@@ -1076,7 +998,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_fixed_scalar(ge1,1000)"
+ "test_3n_fixed_scalar(ge1,10)"
]
},
{
@@ -1086,7 +1008,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_fixed_scalar(ge2,1000)"
+ "test_3n_fixed_scalar(ge2,10)"
]
},
{
@@ -1096,17 +1018,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_fixed_scalar(ge3,1000)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "b630dac1",
- "metadata": {},
- "outputs": [],
- "source": [
- "test_3n_fixed_scalar(ge4,1000)"
+ "test_3n_fixed_scalar(ge3,10)"
]
},
{
@@ -1117,15 +1029,13 @@
"outputs": [],
"source": [
"half_bits = params3n.order.bit_length() // 2\n",
- "s = Mod.random(1 << half_bits)\n",
+ "s = int(Mod.random(1 << half_bits))\n",
"ge1 = GSR_Eucl_1(mult)\n",
"ge1.s = s\n",
"ge2 = GSR_Eucl_2(mult)\n",
"ge2.s = s\n",
"ge3 = GSR_Eucl_3(mult)\n",
- "ge3.s = s\n",
- "ge4 = GSR_Eucl_4(mult)\n",
- "ge4.s = s"
+ "ge3.s = s"
]
},
{
@@ -1135,7 +1045,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar_projected(ge1,1000)"
+ "test_3n_random_scalar_projected(ge1,10)"
]
},
{
@@ -1145,7 +1055,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar_projected(ge2,1000)"
+ "test_3n_random_scalar_projected(ge2,10)"
]
},
{
@@ -1155,17 +1065,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar_projected(ge3,1000)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "b54b176c",
- "metadata": {},
- "outputs": [],
- "source": [
- "test_3n_random_scalar_projected(ge4,1000)"
+ "test_3n_random_scalar_projected(ge3,10)"
]
},
{
@@ -1176,9 +1076,9 @@
"outputs": [],
"source": [
"bits = 32\n",
- "r1 = Mod.random(1 << bits)\n",
- "r2 = Mod.random(1 << bits)\n",
- "r3 = Mod.random(1 << bits)\n",
+ "r1 = int(Mod.random(1 << bits))\n",
+ "r2 = int(Mod.random(1 << bits))\n",
+ "r3 = int(Mod.random(1 << bits))\n",
"\n",
"ge1 = GSR_Eucl_1(mult)\n",
"ge1.r1 = r1\n",
@@ -1191,11 +1091,7 @@
"ge3 = GSR_Eucl_3(mult)\n",
"ge3.r1 = r1\n",
"ge3.r2 = r2\n",
- "ge3.r3 = r3\n",
- "ge4 = GSR_Eucl_4(mult)\n",
- "ge4.r1 = r1\n",
- "ge4.r2 = r2\n",
- "ge4.r3 = r3"
+ "ge3.r3 = r3"
]
},
{
@@ -1205,7 +1101,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar_projected(ge1,1000)"
+ "test_3n_random_scalar_projected(ge1,10)"
]
},
{
@@ -1215,7 +1111,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar_projected(ge2,1000)"
+ "test_3n_random_scalar_projected(ge2,10)"
]
},
{
@@ -1225,17 +1121,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar_projected(ge3,1000)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "d0d3daed",
- "metadata": {},
- "outputs": [],
- "source": [
- "test_3n_random_scalar_projected(ge4,1000)"
+ "test_3n_random_scalar_projected(ge3,10)"
]
},
{
@@ -1270,31 +1156,31 @@
" super().__init__(mult)\n",
" self.add = add\n",
" self.rand_bits_mul = rand_bits_mul\n",
- " self.r = None\n",
- " self.s1 = None\n",
- " self.s2 = None\n",
+ " self.r: int = None\n",
+ " self.s1: int = None\n",
+ " self.s2: int = None\n",
"\n",
" def multiply(self, scalar: int) -> Point:\n",
" if self.params is None or self.point is None:\n",
" raise ValueError(\"Not initialized.\")\n",
" with ScalarMultiplicationAction(self.point, self.params, scalar) as action:\n",
" order = self.params.order\n",
- " r = Mod.random(order) if self.r is None else self.r\n",
- " s1 = Mod.random(1 << self.rand_bits_mul) if self.s1 is None else self.s1\n",
- " s2 = Mod.random(1 << self.rand_bits_mul) if self.s2 is None else self.s2\n",
- " kr = scalar - r\n",
+ " r = int(Mod.random(order)) if self.r is None else self.r\n",
+ " s1 = int(Mod.random(1 << self.rand_bits_mul)) if self.s1 is None else self.s1\n",
+ " s2 = int(Mod.random(1 << self.rand_bits_mul)) if self.s2 is None else self.s2\n",
+ " kr = int(mod(scalar,order) - mod(r,order))\n",
" \n",
- " kr_inv = kr * mod(int(s1), order).inverse()\n",
- " r_inv = r * mod(int(s2), order).inverse()\n",
+ " kr_inv = int(kr * mod(s1, order).inverse())\n",
+ " r_inv = int(r * mod(s2, order).inverse())\n",
" \n",
- " R = self.mult.multiply(int(s1))\n",
+ " R = self.mult.multiply(s1)\n",
" self.mult.init(self.params, R)\n",
- " R = self.mult.multiply(int(kr_inv))\n",
+ " R = self.mult.multiply(kr_inv)\n",
" \n",
" self.mult.init(self.params, self.point)\n",
- " S = self.mult.multiply(int(s2))\n",
+ " S = self.mult.multiply(s2)\n",
" self.mult.init(self.params, S)\n",
- " S = self.mult.multiply(int(r_inv))\n",
+ " S = self.mult.multiply(r_inv)\n",
" if self.add is None:\n",
" res = self.mult._add(R, S) # noqa: This is OK.\n",
" else:\n",
@@ -1376,7 +1262,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar(am2, 1000)"
+ "test_3n_random_scalar(am2, 10)"
]
},
{
@@ -1386,7 +1272,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar_projected(am1, 1000)"
+ "test_3n_random_scalar_projected(am1, 10)"
]
},
{
@@ -1396,7 +1282,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar_projected(am2, 1000)"
+ "test_3n_random_scalar_projected(am2, 10)"
]
},
{
@@ -1406,7 +1292,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_fixed_scalar(am1,1000)"
+ "test_3n_fixed_scalar(am1,10)"
]
},
{
@@ -1416,7 +1302,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_fixed_scalar(am2,1000)"
+ "test_3n_fixed_scalar(am2,10)"
]
},
{
@@ -1453,9 +1339,9 @@
" \"\"\"\n",
" super().__init__(mult)\n",
" self.add = add\n",
- " self.r = None\n",
- " self.s1 = None\n",
- " self.s2 = None\n",
+ " self.r: int = None\n",
+ " self.s1: int = None\n",
+ " self.s2: int = None\n",
"\n",
" def multiply(self, scalar: int) -> Point:\n",
" if self.params is None or self.point is None:\n",
@@ -1463,26 +1349,26 @@
" with ScalarMultiplicationAction(self.point, self.params, scalar) as action:\n",
" half_bits = self.params.order.bit_length() // 2\n",
" order = self.params.order\n",
- " r = Mod.random(order) if self.r is None else self.r\n",
- " s1 = Mod.random(1 << half_bits) if self.s1 is None else self.s1\n",
- " s2 = Mod.random(1 << half_bits) if self.s2 is None else self.s2\n",
- " k_r = int(scalar-r)\n",
- " k1 = k_r % int(s1)\n",
- " k2 = k_r // int(s1)\n",
+ " r = int(Mod.random(order)) if self.r is None else self.r\n",
+ " s1 = int(Mod.random(1 << half_bits)) if self.s1 is None else self.s1\n",
+ " s2 = int(Mod.random(1 << half_bits)) if self.s2 is None else self.s2\n",
+ " k_r = int(mod(scalar,order)-mod(r,order))\n",
+ " k1 = k_r % s1\n",
+ " k2 = k_r // s1\n",
" \n",
- " l1 = int(r) % int(s2)\n",
- " l2 = int(r) // int(s2)\n",
+ " l1 = r % s2\n",
+ " l2 = r // s2\n",
" \n",
" \n",
- " S1 = self.mult.multiply(int(s1))\n",
- " S2 = self.mult.multiply(int(s2))\n",
- " K1 = self.mult.multiply(int(k1))\n",
- " L1 = self.mult.multiply(int(l1))\n",
+ " S1 = self.mult.multiply(s1)\n",
+ " S2 = self.mult.multiply(s2)\n",
+ " K1 = self.mult.multiply(k1)\n",
+ " L1 = self.mult.multiply(l1)\n",
" \n",
" self.mult.init(self.params, S1)\n",
- " K2 = self.mult.multiply(int(k2))\n",
+ " K2 = self.mult.multiply(k2)\n",
" self.mult.init(self.params, S2)\n",
- " L2 = self.mult.multiply(int(l2))\n",
+ " L2 = self.mult.multiply(l2)\n",
" \n",
" if self.add is None:\n",
" res = self.mult._add(K1, K2)\n",
@@ -1519,9 +1405,9 @@
" \"\"\"\n",
" super().__init__(mult)\n",
" self.add = add\n",
- " self.r1 = None\n",
- " self.r2 = None\n",
- " self.s = None\n",
+ " self.r1: int = None\n",
+ " self.r2: int = None\n",
+ " self.s: int = None\n",
"\n",
" def multiply(self, scalar: int) -> Point:\n",
" if self.params is None or self.point is None:\n",
@@ -1529,22 +1415,22 @@
" with ScalarMultiplicationAction(self.point, self.params, scalar) as action:\n",
" half_bits = self.params.order.bit_length() // 2\n",
" order = self.params.order\n",
- " r1 = Mod.random(order) if self.r1 is None else self.r1\n",
- " r2 = Mod.random(order) if self.r2 is None else self.r2\n",
- " s = Mod.random(1 << half_bits) if self.s is None else self.s\n",
- " k1 = int(scalar) % int(s)\n",
- " k2 = int(scalar) // int(s)\n",
- " k1r1 = k1-r1\n",
- " k2r2 = k2-r2\n",
+ " r1 = int(Mod.random(order)) if self.r1 is None else self.r1\n",
+ " r2 = int(Mod.random(order)) if self.r2 is None else self.r2\n",
+ " s = int(Mod.random(1 << half_bits)) if self.s is None else self.s\n",
+ " k1 = scalar % s\n",
+ " k2 = scalar // s\n",
+ " k1r1 = int(mod(k1,order)-mod(r1,order))\n",
+ " k2r2 = int(mod(k2,order)-mod(r2,order))\n",
" \n",
" \n",
- " S = self.mult.multiply(int(s))\n",
- " KR1 = self.mult.multiply(int(k1r1))\n",
- " R1 = self.mult.multiply(int(r1))\n",
+ " S = self.mult.multiply(s)\n",
+ " KR1 = self.mult.multiply(k1r1)\n",
+ " R1 = self.mult.multiply(r1)\n",
" \n",
" self.mult.init(self.params, S)\n",
- " KR2 = self.mult.multiply(int(k2r2))\n",
- " R2 = self.mult.multiply(int(r2))\n",
+ " KR2 = self.mult.multiply(k2r2)\n",
+ " R2 = self.mult.multiply(r2)\n",
" \n",
" if self.add is None:\n",
" res = self.mult._add(KR1, R1)\n",
@@ -1592,7 +1478,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar(ae2, 1000)"
+ "test_3n_random_scalar(ae2, 10)"
]
},
{
@@ -1602,7 +1488,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar_projected(ae1, 1000)"
+ "test_3n_random_scalar_projected(ae1, 10)"
]
},
{
@@ -1612,7 +1498,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar_projected(ae2, 1000)"
+ "test_3n_random_scalar_projected(ae2, 10)"
]
},
{
@@ -1622,7 +1508,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_fixed_scalar(ae1,1000)"
+ "test_3n_fixed_scalar(ae1,10)"
]
},
{
@@ -1632,7 +1518,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_fixed_scalar(ae2,1000)"
+ "test_3n_fixed_scalar(ae2,10)"
]
},
{
@@ -1661,8 +1547,8 @@
" super().__init__(mult)\n",
" self.add = add\n",
" self.rand_bits_mul = rand_bits_mul\n",
- " self.r = None\n",
- " self.s = None\n",
+ " self.r: int = None\n",
+ " self.s: int = None\n",
"\n",
" def multiply(self, scalar: int) -> Point:\n",
" if self.params is None or self.point is None:\n",
@@ -1670,22 +1556,22 @@
" with ScalarMultiplicationAction(self.point, self.params, scalar) as action:\n",
" half_bits = self.params.order.bit_length() // 2\n",
" order = self.params.order\n",
- " s = Mod.random(order) if self.s is None else self.s\n",
- " r = Mod.random(1 << self.rand_bits_mul) if self.r is None else self.r\n",
+ " s = int(Mod.random(order)) if self.s is None else self.s\n",
+ " r = int(Mod.random(1 << self.rand_bits_mul)) if self.r is None else self.r\n",
" \n",
- " kr_inv = scalar * mod(int(r), order).inverse()\n",
+ " kr_inv = int(scalar * mod(int(r), order).inverse())\n",
" \n",
- " k1 = int(kr_inv) % int(s)\n",
- " k2 = int(kr_inv) // int(s)\n",
+ " k1 = kr_inv % s\n",
+ " k2 = kr_inv // s\n",
" \n",
- " R = self.mult.multiply(int(r))\n",
+ " R = self.mult.multiply(r)\n",
" self.mult.init(self.params, R)\n",
" \n",
- " K1 = self.mult.multiply(int(k1))\n",
+ " K1 = self.mult.multiply(k1)\n",
" \n",
- " S = self.mult.multiply(int(s))\n",
+ " S = self.mult.multiply(s)\n",
" self.mult.init(self.params, S)\n",
- " K2 = self.mult.multiply(int(k2))\n",
+ " K2 = self.mult.multiply(k2)\n",
" \n",
" if self.add is None:\n",
" res = self.mult._add(K1, K2)\n",
@@ -1714,9 +1600,9 @@
" super().__init__(mult)\n",
" self.add = add\n",
" self.rand_bits_mul = rand_bits_mul\n",
- " self.s = None\n",
- " self.r1 = None\n",
- " self.r2 = None\n",
+ " self.s: int = None\n",
+ " self.r1: int = None\n",
+ " self.r2: int = None\n",
"\n",
" def multiply(self, scalar: int) -> Point:\n",
" if self.params is None or self.point is None:\n",
@@ -1724,28 +1610,28 @@
" with ScalarMultiplicationAction(self.point, self.params, scalar) as action:\n",
" half_bits = self.params.order.bit_length() // 2\n",
" order = self.params.order\n",
- " s = Mod.random(order) if self.s is None else self.s\n",
+ " s = int(Mod.random(order)) if self.s is None else self.s\n",
" \n",
- " r1 = Mod.random(1 << self.rand_bits_mul) if self.r1 is None else self.r1\n",
- " r2 = Mod.random(1 << self.rand_bits_mul) if self.r2 is None else self.r2\n",
+ " r1 = int(Mod.random(1 << self.rand_bits_mul)) if self.r1 is None else self.r1\n",
+ " r2 = int(Mod.random(1 << self.rand_bits_mul)) if self.r2 is None else self.r2\n",
" \n",
- " k1 = int(scalar) % int(s)\n",
- " k2 = int(scalar) // int(s)\n",
+ " k1 = scalar % s\n",
+ " k2 = scalar // s\n",
" \n",
- " kr1_inv = k1 * mod(int(r1), order).inverse()\n",
- " kr2_inv = k2 * mod(int(r2), order).inverse()\n",
+ " kr1_inv = int(k1 * mod(int(r1), order).inverse())\n",
+ " kr2_inv = int(k2 * mod(int(r2), order).inverse())\n",
" \n",
- " R1 = self.mult.multiply(int(r1))\n",
- " S = self.mult.multiply(int(s))\n",
+ " R1 = self.mult.multiply(r1)\n",
+ " S = self.mult.multiply(s)\n",
" \n",
" self.mult.init(self.params, R1)\n",
- " R1 = self.mult.multiply(int(kr1_inv))\n",
+ " R1 = self.mult.multiply(kr1_inv)\n",
" \n",
" self.mult.init(self.params, S)\n",
- " R2 = self.mult.multiply(int(r2))\n",
+ " R2 = self.mult.multiply(r2)\n",
" \n",
" self.mult.init(self.params, R2)\n",
- " R2 = self.mult.multiply(int(kr2_inv))\n",
+ " R2 = self.mult.multiply(kr2_inv)\n",
" \n",
" \n",
" if self.add is None:\n",
@@ -1786,7 +1672,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar(me2, 1000)"
+ "test_3n_random_scalar(me2, 10)"
]
},
{
@@ -1796,7 +1682,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar_projected(me1, 1000)"
+ "test_3n_random_scalar_projected(me1, 10)"
]
},
{
@@ -1806,7 +1692,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_random_scalar_projected(me2, 1000)"
+ "test_3n_random_scalar_projected(me2, 10)"
]
},
{
@@ -1816,7 +1702,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_fixed_scalar(me1,1000)"
+ "test_3n_fixed_scalar(me1,10)"
]
},
{
@@ -1826,7 +1712,7 @@
"metadata": {},
"outputs": [],
"source": [
- "test_3n_fixed_scalar(me2,1000)"
+ "test_3n_fixed_scalar(me2,10)"
]
}
],