diff options
Diffstat (limited to 'simulation.ipynb')
| -rw-r--r-- | simulation.ipynb | 3038 |
1 files changed, 3038 insertions, 0 deletions
diff --git a/simulation.ipynb b/simulation.ipynb new file mode 100644 index 0000000..cabe589 --- /dev/null +++ b/simulation.ipynb @@ -0,0 +1,3038 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Simulation\n", + "\n", + "**pyecsca** is able to simulate computation of key generation, ECDH and ECDSA while tracing particular actions performed by the implementation as well as intermediate values. These traces are collected by the context (see the `Context` and `DefaultContext` classes). There is always one context active. For performance reasons, by default it is a `NullContext` instance, which does not trace anything.\n", + "\n", + "These traces are useful for attacks which rely on computing particular intermediate values during the ECC computation." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## Initialisation" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "pycharm": { + "is_executing": false + } + }, + "outputs": [], + "source": [ + "from binascii import hexlify\n", + "from copy import copy\n", + "\n", + "from pyecsca.ec.key_generation import KeyGeneration\n", + "from pyecsca.ec.key_agreement import ECDH_SHA1\n", + "from pyecsca.ec.signature import ECDSA_SHA1\n", + "from pyecsca.ec.curves import get_params\n", + "from pyecsca.ec.mult import LTRMultiplier\n", + "from pyecsca.ec.context import DefaultContext, local" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "pycharm": { + "is_executing": false + } + }, + "outputs": [], + "source": [ + "p256 = get_params(\"secg\", \"secp256r1\", \"projective\")\n", + "model = p256.curve.model\n", + "coords = p256.curve.coordinate_model\n", + "\n", + "add = coords.formulas[\"add-2007-bl\"]\n", + "dbl = coords.formulas[\"dbl-2007-bl\"]\n", + "\n", + "mult = LTRMultiplier(add, dbl, None)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Key generation" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "pycharm": { + "is_executing": false + } + }, + "outputs": [], + "source": [ + "keygen = KeyGeneration(copy(mult), p256, False)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "scrolled": true, + "pycharm": { + "is_executing": false + } + }, + "outputs": [ + { + "name": "stdout", + "text": [ + "27534349110771347155923075045818046165979888998818651586000312719216910833318\n", + "[X=83933898411588104793089377774707107506941266646933982525624598759013717245621, Y=26527425049573216561448628629620140099790717296630687777633119014160647664021, Z=64088794318210508120032658643489914503426087501574872600975980808063169111279]\n", + "KeygenAction(DomainParameters(secg/secp256r1))\n", + "\tRandomModAction(ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551)\n", + "\tScalarMultiplicationAction([X=48439561293906451759052585252797914202762949526041747995844080717082404635286, Y=36134250956749795798585127919587881956611106672985015071877198253568414405109, Z=1], 27534349110771347155923075045818046165979888998818651586000312719216910833318)\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\n" + ], + "output_type": "stream" + } + ], + "source": [ + "with local(DefaultContext()) as keygen_ctx:\n", + " private, public = keygen.generate()\n", + "print(private)\n", + "print(public)\n", + "print(keygen_ctx.actions)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Signing" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "pycharm": { + "is_executing": false + } + }, + "outputs": [], + "source": [ + "ecdsa = ECDSA_SHA1(copy(mult), p256, add, public, private)\n", + "data = b\"something\"" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "scrolled": true, + "pycharm": { + "is_executing": false + } + }, + "outputs": [ + { + "name": "stdout", + "text": [ + "b'something'\n", + "(r=94431243472779457770181078394757042074208310087471629129794997149179235279505, s=89619810655289534561305906670069498479061576363695717048711157188366011214888)\n", + "ECDSASignAction(DomainParameters(secg/secp256r1), <built-in function openssl_sha1>, b'something', 27534349110771347155923075045818046165979888998818651586000312719216910833318)\n", + "\tRandomModAction(ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551)\n", + "\tScalarMultiplicationAction([X=48439561293906451759052585252797914202762949526041747995844080717082404635286, Y=36134250956749795798585127919587881956611106672985015071877198253568414405109, Z=1], 16976072681883240233350541036004334878693289354054036605340296754667307900719)\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\tCoordinateMappingAction(from=EFDCoordinateModel(\"projective\" on short Weierstrass curves), to=AffineCoordinateModel(\"affine\" on short Weierstrass curves), [X=112181343443676207839673239944150309423558811854593502506697340789120198013818, Y=26590797280311007970786578848912844749689034405618877005795309015688745953663, Z=89717118871975200382010216044865446574455808651213331300687232215082114512213])\n", + "\n" + ], + "output_type": "stream" + } + ], + "source": [ + "with local(DefaultContext()) as sign_ctx:\n", + " signature = ecdsa.sign_data(data)\n", + "print(data)\n", + "print(signature)\n", + "print(sign_ctx.actions)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "scrolled": true, + "pycharm": { + "is_executing": false + } + }, + "outputs": [ + { + "name": "stdout", + "text": [ + "True\n", + "ECDSAVerifyAction(DomainParameters(secg/secp256r1), <built-in function openssl_sha1>, b'something', (r=94431243472779457770181078394757042074208310087471629129794997149179235279505, s=89619810655289534561305906670069498479061576363695717048711157188366011214888), [X=83933898411588104793089377774707107506941266646933982525624598759013717245621, Y=26527425049573216561448628629620140099790717296630687777633119014160647664021, Z=64088794318210508120032658643489914503426087501574872600975980808063169111279])\n", + "\tScalarMultiplicationAction([X=48439561293906451759052585252797914202762949526041747995844080717082404635286, Y=36134250956749795798585127919587881956611106672985015071877198253568414405109, Z=1], 111701592732851471232423665291050553644989131547247713497227113418554581357191)\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\tScalarMultiplicationAction([X=83933898411588104793089377774707107506941266646933982525624598759013717245621, Y=26527425049573216561448628629620140099790717296630687777633119014160647664021, Z=64088794318210508120032658643489914503426087501574872600975980808063169111279], 50884739991402261722019439145912660354347752085629610148560262003195356694068)\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\tFormulaAction(add[add-2007-bl])\n", + "\tCoordinateMappingAction(from=EFDCoordinateModel(\"projective\" on short Weierstrass curves), to=AffineCoordinateModel(\"affine\" on short Weierstrass curves), [X=33220268646786012505635481950879642660999122034358327496103877225589837169128, Y=59047526405730729177958669924853809268519572571217073090908067030251985436204, Z=34642077428797388431535005955445808886681144927993619852316966053895246929620])\n", + "\n" + ], + "output_type": "stream" + } + ], + "source": [ + "with local(DefaultContext()) as verify_ctx:\n", + " verified = ecdsa.verify_data(signature, data)\n", + "print(verified)\n", + "print(verify_ctx.actions)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Key agreement" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "pycharm": { + "is_executing": false + } + }, + "outputs": [ + { + "name": "stdout", + "text": [ + "b'2306c549dfd8ff5a3315058491f05553af5e9af3'\n", + "b'2306c549dfd8ff5a3315058491f05553af5e9af3'\n", + "True\n", + "ECDHAction(DomainParameters(secg/secp256r1), <built-in function openssl_sha1>, 103438430940984774541828939544194320318457161320409005542664649093940739658887, [X=83933898411588104793089377774707107506941266646933982525624598759013717245621, Y=26527425049573216561448628629620140099790717296630687777633119014160647664021, Z=64088794318210508120032658643489914503426087501574872600975980808063169111279])\n", + "\tScalarMultiplicationAction([X=83933898411588104793089377774707107506941266646933982525624598759013717245621, Y=26527425049573216561448628629620140099790717296630687777633119014160647664021, Z=64088794318210508120032658643489914503426087501574872600975980808063169111279], 103438430940984774541828939544194320318457161320409005542664649093940739658887)\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\tCoordinateMappingAction(from=EFDCoordinateModel(\"projective\" on short Weierstrass curves), to=AffineCoordinateModel(\"affine\" on short Weierstrass curves), [X=40948568256083210564540727912654344852109520200919257442046729954666452205245, Y=6366196186345033428194912414976049955453074270985211902964131864960984443183, Z=80360534560280695310701608559656697246765616773519079982406291343716933042195])\n", + "ECDHAction(DomainParameters(secg/secp256r1), <built-in function openssl_sha1>, 27534349110771347155923075045818046165979888998818651586000312719216910833318, [X=94168775821425128025123356315870720268353785464412205108359316086219225962740, Y=89860887660942421780987238129326016281190906659933626958676811792200957428223, Z=107859243248362617524174156417645290219377867667119220732976494094454534205090])\n", + "\tScalarMultiplicationAction([X=94168775821425128025123356315870720268353785464412205108359316086219225962740, Y=89860887660942421780987238129326016281190906659933626958676811792200957428223, Z=107859243248362617524174156417645290219377867667119220732976494094454534205090], 27534349110771347155923075045818046165979888998818651586000312719216910833318)\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\t\tFormulaAction(add[add-2007-bl])\n", + "\t\tFormulaAction(dbl[dbl-2007-bl])\n", + "\tCoordinateMappingAction(from=EFDCoordinateModel(\"projective\" on short Weierstrass curves), to=AffineCoordinateModel(\"affine\" on short Weierstrass curves), [X=100384205237909480277933729488509491559941388631896756478278927787576061696216, Y=89454618352420160944043005478058627104629404729419865180753014723760630901144, Z=113999128464209288294133431971280289020726881968616500425343582653141041181105])\n", + "\n" + ], + "output_type": "stream" + } + ], + "source": [ + "other_private, other_public = keygen.generate()\n", + "\n", + "ecdh_a = ECDH_SHA1(copy(mult), p256, public, other_private)\n", + "ecdh_b = ECDH_SHA1(copy(mult), p256, other_public, private)\n", + "with local(DefaultContext()) as ecdh_ctx:\n", + " ecdh_a_result = ecdh_a.perform()\n", + " ecdh_b_result = ecdh_b.perform()\n", + "print(hexlify(ecdh_a_result))\n", + "print(hexlify(ecdh_b_result))\n", + "print(ecdh_a_result == ecdh_b_result)\n", + "print(ecdh_ctx.actions)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Walking the trace" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As visible from the outputs above, `DefaultContext` traces the actions performed by the implementation in an ordered tree where the child relationship means that some actions happened during another action and order of children gives the order of operations. In the above example of ECDH, two ECDH executions are visible, each consisting of one scalar multuplication which consists of several applications of `add` and `dbl` formulas.\n", + "\n", + "We can examine this tree in the first ECDH execution and see that the scalar multiplier used was not setup to be regular (see `LTRMultiplier` argument `always`) and that the order of operations leaks bits of the scalar. This fact will be easily exploitable on a power trace via SPA." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "dbl\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "dbl\n", + "dbl\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "dbl\n", + "add\n", + "0b111101110110100110100100111010010000001111001000100010011010101111011011100101001010101110011101011001010010100101011100001011100101101001101100001100100111001100111100011111011111101100100101110011010110110001101111110001100011010111000001111011011000111\n", + "0b111101110110100110100100111010010000001111001000100010011010101111011011100101001010101110011101011001010010100101011100001011100101101001101100001100100111001100111100011111011111101100100101110011010110110001101111110001100011010111000001111011011000111\n", + "True\n" + ] + } + ], + "source": [ + "tree = ecdh_ctx.actions\n", + "\n", + "ecdh_action, subtree = tree.get_by_index([0])\n", + "\n", + "scalarmult_action, subtree = subtree.get_by_index([0])\n", + "recovered_private = 1\n", + "for formula_call in subtree:\n", + " if formula_call.formula.shortname == \"add\":\n", + " recovered_private |= 1\n", + " elif formula_call.formula.shortname == \"dbl\":\n", + " recovered_private <<= 1\n", + " print(formula_call.formula.shortname)\n", + "\n", + "print(bin(int(other_private)))\n", + "print(bin(int(recovered_private)))\n", + "print(other_private == recovered_private)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One can navigate the tree by indices, to get the second formula call of the second ECDH scalar multiplication:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "FormulaAction(add[add-2007-bl], [Point([[X=383960763982903169689995079657542701951957535427344849026282264593569529481, Y=97816494580647658973605082832672362195798387552766223950530555908406646227345, Z=33112635526968736033324232912483052826450752467533070394363196286451437973911]] in EFDCoordinateModel(\"projective\" on short Weierstrass curves)), Point([[X=24901324827761941171665406740352491860459252998228148257353674203781522895658, Y=1469593958564832835035565462147741560916652661670762870816949405978440504767, Z=42322585263999539773352738483857501665285392542933346948286130835216078214252]] in EFDCoordinateModel(\"projective\" on short Weierstrass curves))]) = [Point([[X=106865350531828665272902459426695837837271776535211872763482234212642743419841, Y=102436521985123267638908548470272192599523323303084800549610360200950579480875, Z=14605232732661913809514868772836150792927623835013731687411437319958240413794]] in EFDCoordinateModel(\"projective\" on short Weierstrass curves))]\n" + ] + } + ], + "source": [ + "action, subtree = tree.get_by_index([1, 0, 1])\n", + "print(repr(action))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `[1,0,1]` path given above represented a walk through the execution trace, taking the second child of the root, then the first child then the second again." + ] + } + ], + "metadata": { + "@webio": { + "lastCommId": null, + "lastKernelId": null + }, + "hide_input": false, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.1" + }, + "latex_envs": { + "LaTeX_envs_menu_present": true, + "autoclose": false, + "autocomplete": true, + "bibliofile": "biblio.bib", + "cite_by": "apalike", + "current_citInitial": 1, + "eqLabelWithNumbers": true, + "eqNumInitial": 1, + "hotkeys": { + "equation": "Ctrl-E", + "itemize": "Ctrl-I" + }, + "labels_anchors": false, + "latex_user_defs": false, + "report_style_numbering": false, + "user_envs_cfg": false + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + }, + "pycharm": { + "stem_cell": { + "cell_type": "raw", + "source": [], + "metadata": { + "collapsed": false + } + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}
\ No newline at end of file |
