diff options
| author | vojtechsu | 2025-07-06 19:52:20 +0200 |
|---|---|---|
| committer | vojtechsu | 2025-07-06 19:52:20 +0200 |
| commit | b084992d2a7f888a4304c8e535205b351d990672 (patch) | |
| tree | 3aa72ea8ed80316be5c2d9abd61a45197162a960 | |
| parent | 5f607e99f25da2bd93bb8ed2a2654937862e7405 (diff) | |
| download | ECTester-b084992d2a7f888a4304c8e535205b351d990672.tar.gz ECTester-b084992d2a7f888a4304c8e535205b351d990672.tar.zst ECTester-b084992d2a7f888a4304c8e535205b351d990672.zip | |
| -rw-r--r-- | analysis/countermeasures/combinations.ipynb | 484 |
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)" ] } ], |
