aboutsummaryrefslogtreecommitdiffhomepage
path: root/simulation.ipynb
diff options
context:
space:
mode:
Diffstat (limited to 'simulation.ipynb')
-rw-r--r--simulation.ipynb3038
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