aboutsummaryrefslogtreecommitdiffhomepage
path: root/codegen.ipynb
diff options
context:
space:
mode:
authorJ08nY2020-07-14 22:46:20 +0200
committerJ08nY2020-07-14 22:46:20 +0200
commite22ca41a68a5f6c717d9b526906b56dafc2f1ca1 (patch)
tree0124828717c56f69f4de82f45845588baf54c088 /codegen.ipynb
parent260f0305d6ccb5825c3d0872c25d49e616773225 (diff)
downloadpyecsca-notebook-e22ca41a68a5f6c717d9b526906b56dafc2f1ca1.tar.gz
pyecsca-notebook-e22ca41a68a5f6c717d9b526906b56dafc2f1ca1.tar.zst
pyecsca-notebook-e22ca41a68a5f6c717d9b526906b56dafc2f1ca1.zip
Cleanup notebooks.
Diffstat (limited to 'codegen.ipynb')
-rw-r--r--codegen.ipynb671
1 files changed, 79 insertions, 592 deletions
diff --git a/codegen.ipynb b/codegen.ipynb
index 76a12ab..54fe0c9 100644
--- a/codegen.ipynb
+++ b/codegen.ipynb
@@ -2,12 +2,7 @@
"cells": [
{
"cell_type": "markdown",
- "metadata": {
- "collapsed": true,
- "pycharm": {
- "name": "#%% md\n"
- }
- },
+ "metadata": {},
"source": [
"# Code generation\n",
"\n",
@@ -17,131 +12,29 @@
},
{
"cell_type": "code",
- "execution_count": 1,
- "outputs": [
- {
- "data": {
- "text/plain": "['HOST', 'XMEGA', 'STM32F0', 'STM32F3']"
- },
- "metadata": {},
- "output_type": "execute_result",
- "execution_count": 1
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"from pyecsca.codegen.common import Platform\n",
"\n",
"\n",
"Platform.names()"
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%%\n",
- "is_executing": false
- }
- }
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"To generate an implementation we need an actual configuration which the implementation should\n",
"implement, which is stored inside the `Configuration` and `DeviceConfiguration` classes. "
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%% md\n"
- }
- }
+ ]
},
{
"cell_type": "code",
- "execution_count": 2,
- "outputs": [
- {
- "name": "stdout",
- "text": [
- "model <class 'pyecsca.ec.model.CurveModel'>\n",
- " A model(form) of an elliptic curve.\n",
- "\n",
- "coords <class 'pyecsca.ec.coordinates.CoordinateModel'>\n",
- " A coordinate system for a particular model(form) of an elliptic curve.\n",
- "\n",
- "formulas typing.Set[pyecsca.ec.formula.Formula]\n",
- " A formula operating on points.\n",
- "\n",
- "scalarmult <class 'pyecsca.ec.mult.ScalarMultiplier'>\n",
- " \n",
- " A scalar multiplication algorithm.\n",
- "\n",
- " :param short_circuit: Whether the use of formulas will be guarded by short-circuit on inputs\n",
- " of the point at infinity.\n",
- " :param formulas: Formulas this instance will use.\n",
- " \n",
- "\n",
- "hash_type <enum 'HashType'>\n",
- " Hash algorithm used in ECDH and ECDSA.\n",
- " NONE\n",
- " SHA1\n",
- " SHA224\n",
- " SHA256\n",
- " SHA384\n",
- " SHA512\n",
- "\n",
- "mod_rand <enum 'RandomMod'>\n",
- " Method of sampling a uniform integer modulo order.\n",
- " SAMPLE\n",
- " REDUCE\n",
- "\n",
- "mult <enum 'Multiplication'>\n",
- " Base multiplication algorithm to use.\n",
- " TOOM_COOK\n",
- " KARATSUBA\n",
- " COMBA\n",
- " BASE\n",
- "\n",
- "sqr <enum 'Squaring'>\n",
- " Base squaring algorithm to use.\n",
- " TOOM_COOK\n",
- " KARATSUBA\n",
- " COMBA\n",
- " BASE\n",
- "\n",
- "red <enum 'Reduction'>\n",
- " Modular reduction method used.\n",
- " BARRETT\n",
- " MONTGOMERY\n",
- " BASE\n",
- "\n",
- "platform <enum 'Platform'>\n",
- " Platform to build for.\n",
- " HOST\n",
- " XMEGA\n",
- " STM32F0\n",
- " STM32F3\n",
- "\n",
- "keygen <class 'bool'>\n",
- " \n",
- "\n",
- "ecdh <class 'bool'>\n",
- " \n",
- "\n",
- "ecdsa <class 'bool'>\n",
- " \n",
- "\n"
- ],
- "output_type": "stream"
- },
- {
- "data": {
- "text/plain": "()"
- },
- "metadata": {},
- "output_type": "execute_result",
- "execution_count": 2
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"from typing import get_args\n",
"from pyecsca.codegen.common import DeviceConfiguration\n",
@@ -162,17 +55,11 @@
"\t\t\tprint(\" \", enum_name)\n",
"\tprint()\n",
"()"
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%%\n",
- "is_executing": false
- }
- }
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"The `DeviceConfiguration` class contains a few additional attributes apart from those\n",
"in the `Configuration` class: `platform`, `keygen`, `ecdh` and `ecdsa`.\n",
@@ -180,38 +67,22 @@
"The `platform` attribute defines for which target the implementation\n",
"should be built. The other boolean attributes specify whether particular\n",
"functionality should be implemented and enabled in the implementation."
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%% md\n"
- }
- }
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"## Generating\n",
"\n",
"We will first create a `DeviceConfiguration`, which we will then generate and build."
- ],
- "metadata": {
- "collapsed": false
- }
+ ]
},
{
"cell_type": "code",
- "execution_count": 3,
- "outputs": [
- {
- "data": {
- "text/plain": "DeviceConfiguration(model=ShortWeierstrassModel(), coords=EFDCoordinateModel(\"projective\" on short Weierstrass curves), formulas=[AdditionEFDFormula(add-1998-cmo for EFDCoordinateModel(\"projective\" on short Weierstrass curves)), DoublingEFDFormula(dbl-1998-cmo for EFDCoordinateModel(\"projective\" on short Weierstrass curves)), ScalingEFDFormula(z for EFDCoordinateModel(\"projective\" on short Weierstrass curves))], scalarmult=<pyecsca.ec.mult.LTRMultiplier object at 0x7f071c2cd4c0>, hash_type=HASH_SHA1, mod_rand=MOD_RAND_REDUCE, mult=MUL_BASE, sqr=SQR_BASE, red=RED_BASE, platform=CW308_STM32F3, keygen=True, ecdh=True, ecdsa=True)"
- },
- "metadata": {},
- "output_type": "execute_result",
- "execution_count": 3
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"from pyecsca.ec.model import ShortWeierstrassModel\n",
"from pyecsca.ec.mult import LTRMultiplier\n",
@@ -237,250 +108,85 @@
"\t\t\t\t\t\t\t platform, True, True, True)\n",
"\n",
"config"
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%%\n",
- "is_executing": false
- }
- }
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"Now we can render the configuration, which will generate the source files into a\n",
"randomly created temporary directory, and return the path to the directory as\n",
"well as names of the elf and hex files which will be built in that directory."
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%% md\n"
- }
- }
+ ]
},
{
"cell_type": "code",
- "execution_count": 4,
- "outputs": [
- {
- "name": "stdout",
- "text": [
- "/tmp/tmp1wtoeyhk\n"
- ],
- "output_type": "stream"
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"from pyecsca.codegen.builder import render\n",
"\n",
"directory, elf_name, hex_name = render(config)\n",
"\n",
"print(directory)"
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%%\n",
- "is_executing": false
- }
- }
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"## Building\n",
"\n",
"When we have the implementation rendered, we can build it using make."
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%% md\n"
- }
- }
+ ]
},
{
"cell_type": "code",
- "execution_count": 5,
- "outputs": [
- {
- "name": "stdout",
- "text": [
- "rm -f -- pyecsca-codegen-CW308_STM32F3.hex\n",
- "rm -f -- pyecsca-codegen-CW308_STM32F3.eep\n",
- "rm -f -- pyecsca-codegen-CW308_STM32F3.cof\n",
- "rm -f -- pyecsca-codegen-CW308_STM32F3.elf\n",
- "rm -f -- pyecsca-codegen-CW308_STM32F3.map\n",
- "rm -f -- pyecsca-codegen-CW308_STM32F3.sym\n",
- "rm -f -- pyecsca-codegen-CW308_STM32F3.lss\n",
- "rm -f -- objdir/*.o\n",
- "rm -f -- objdir/*.lst\n",
- "rm -f -- main.s bn/bn.s asn1/asn1.s hash/hash.s prng/prng.s gen/curve.s gen/formula_add.s gen/formula_dbl.s gen/formulas.s gen/formula_scl.s gen/mult.s gen/point.s simpleserial.s stm32f3_hal.s stm32f3_hal_lowlevel.s stm32f3_sysmem.s\n",
- "rm -f -- main.d bn/bn.d asn1/asn1.d hash/hash.d prng/prng.d gen/curve.d gen/formula_add.d gen/formula_dbl.d gen/formulas.d gen/formula_scl.d gen/mult.d gen/point.d simpleserial.d stm32f3_hal.d stm32f3_hal_lowlevel.d stm32f3_sysmem.d\n",
- "rm -f -- main.i bn/bn.i asn1/asn1.i hash/hash.i prng/prng.i gen/curve.i gen/formula_add.i gen/formula_dbl.i gen/formulas.i gen/formula_scl.i gen/mult.i gen/point.i simpleserial.i stm32f3_hal.i stm32f3_hal_lowlevel.i stm32f3_sysmem.i\n",
- "mkdir objdir objdir/hash objdir/prng objdir/asn1 objdir/bn objdir/gen\n",
- "mkdir .dep\n",
- ".\n",
- "-------- begin --------\n",
- "arm-none-eabi-gcc (Arch Repository) 9.2.0\n",
- "Copyright (C) 2019 Free Software Foundation, Inc.\n",
- "This is free software; see the source for copying conditions. There is NO\n",
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
- "\n",
- ".\n",
- "Compiling C: main.c\n",
- "arm-none-eabi-gcc -c -mcpu=cortex-m4 -I. -DMP_NO_DEV_URANDOM -DMP_32BIT -DMP_LOW_MEM -DMP_PREC=10 -mthumb -mfloat-abi=soft -mfpu=fpv4-sp-d16 -fmessage-length=0 -ffunction-sections -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSTM32F303xC -DSTM32F3 -DSTM32 -DDEBUG -DHAL=HAL_stm32f3 -DPLATFORM=CW308_STM32F3 -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/main.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/stm32f3 -I./hal/stm32f3/CMSIS -I./hal/stm32f3/CMSIS/core -I./hal/stm32f3/CMSIS/device -I./hal/stm32f4/Legacy -std=gnu99 -MMD -MP -MF .dep/main.o.d main.c -o objdir/main.o \n",
- ".\n",
- "Compiling C: bn/bn.c\n",
- "arm-none-eabi-gcc -c -mcpu=cortex-m4 -I. -DMP_NO_DEV_URANDOM -DMP_32BIT -DMP_LOW_MEM -DMP_PREC=10 -mthumb -mfloat-abi=soft -mfpu=fpv4-sp-d16 -fmessage-length=0 -ffunction-sections -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSTM32F303xC -DSTM32F3 -DSTM32 -DDEBUG -DHAL=HAL_stm32f3 -DPLATFORM=CW308_STM32F3 -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/bn.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/stm32f3 -I./hal/stm32f3/CMSIS -I./hal/stm32f3/CMSIS/core -I./hal/stm32f3/CMSIS/device -I./hal/stm32f4/Legacy -std=gnu99 -MMD -MP -MF .dep/bn.o.d bn/bn.c -o objdir/bn/bn.o \n",
- ".\n",
- "Compiling C: asn1/asn1.c\n",
- "arm-none-eabi-gcc -c -mcpu=cortex-m4 -I. -DMP_NO_DEV_URANDOM -DMP_32BIT -DMP_LOW_MEM -DMP_PREC=10 -mthumb -mfloat-abi=soft -mfpu=fpv4-sp-d16 -fmessage-length=0 -ffunction-sections -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSTM32F303xC -DSTM32F3 -DSTM32 -DDEBUG -DHAL=HAL_stm32f3 -DPLATFORM=CW308_STM32F3 -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/asn1.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/stm32f3 -I./hal/stm32f3/CMSIS -I./hal/stm32f3/CMSIS/core -I./hal/stm32f3/CMSIS/device -I./hal/stm32f4/Legacy -std=gnu99 -MMD -MP -MF .dep/asn1.o.d asn1/asn1.c -o objdir/asn1/asn1.o \n",
- ".\n",
- "Compiling C: hash/hash.c\n",
- "arm-none-eabi-gcc -c -mcpu=cortex-m4 -I. -DMP_NO_DEV_URANDOM -DMP_32BIT -DMP_LOW_MEM -DMP_PREC=10 -mthumb -mfloat-abi=soft -mfpu=fpv4-sp-d16 -fmessage-length=0 -ffunction-sections -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSTM32F303xC -DSTM32F3 -DSTM32 -DDEBUG -DHAL=HAL_stm32f3 -DPLATFORM=CW308_STM32F3 -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/hash.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/stm32f3 -I./hal/stm32f3/CMSIS -I./hal/stm32f3/CMSIS/core -I./hal/stm32f3/CMSIS/device -I./hal/stm32f4/Legacy -std=gnu99 -MMD -MP -MF .dep/hash.o.d hash/hash.c -o objdir/hash/hash.o \n",
- ".\n",
- "Compiling C: prng/prng.c\n",
- "arm-none-eabi-gcc -c -mcpu=cortex-m4 -I. -DMP_NO_DEV_URANDOM -DMP_32BIT -DMP_LOW_MEM -DMP_PREC=10 -mthumb -mfloat-abi=soft -mfpu=fpv4-sp-d16 -fmessage-length=0 -ffunction-sections -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSTM32F303xC -DSTM32F3 -DSTM32 -DDEBUG -DHAL=HAL_stm32f3 -DPLATFORM=CW308_STM32F3 -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/prng.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/stm32f3 -I./hal/stm32f3/CMSIS -I./hal/stm32f3/CMSIS/core -I./hal/stm32f3/CMSIS/device -I./hal/stm32f4/Legacy -std=gnu99 -MMD -MP -MF .dep/prng.o.d prng/prng.c -o objdir/prng/prng.o \n",
- ".\n",
- "Compiling C: gen/curve.c\n",
- "arm-none-eabi-gcc -c -mcpu=cortex-m4 -I. -DMP_NO_DEV_URANDOM -DMP_32BIT -DMP_LOW_MEM -DMP_PREC=10 -mthumb -mfloat-abi=soft -mfpu=fpv4-sp-d16 -fmessage-length=0 -ffunction-sections -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSTM32F303xC -DSTM32F3 -DSTM32 -DDEBUG -DHAL=HAL_stm32f3 -DPLATFORM=CW308_STM32F3 -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/curve.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/stm32f3 -I./hal/stm32f3/CMSIS -I./hal/stm32f3/CMSIS/core -I./hal/stm32f3/CMSIS/device -I./hal/stm32f4/Legacy -std=gnu99 -MMD -MP -MF .dep/curve.o.d gen/curve.c -o objdir/gen/curve.o \n",
- ".\n",
- "Compiling C: gen/formula_add.c\n",
- "arm-none-eabi-gcc -c -mcpu=cortex-m4 -I. -DMP_NO_DEV_URANDOM -DMP_32BIT -DMP_LOW_MEM -DMP_PREC=10 -mthumb -mfloat-abi=soft -mfpu=fpv4-sp-d16 -fmessage-length=0 -ffunction-sections -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSTM32F303xC -DSTM32F3 -DSTM32 -DDEBUG -DHAL=HAL_stm32f3 -DPLATFORM=CW308_STM32F3 -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/formula_add.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/stm32f3 -I./hal/stm32f3/CMSIS -I./hal/stm32f3/CMSIS/core -I./hal/stm32f3/CMSIS/device -I./hal/stm32f4/Legacy -std=gnu99 -MMD -MP -MF .dep/formula_add.o.d gen/formula_add.c -o objdir/gen/formula_add.o \n",
- ".\n",
- "Compiling C: gen/formula_dbl.c\n",
- "arm-none-eabi-gcc -c -mcpu=cortex-m4 -I. -DMP_NO_DEV_URANDOM -DMP_32BIT -DMP_LOW_MEM -DMP_PREC=10 -mthumb -mfloat-abi=soft -mfpu=fpv4-sp-d16 -fmessage-length=0 -ffunction-sections -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSTM32F303xC -DSTM32F3 -DSTM32 -DDEBUG -DHAL=HAL_stm32f3 -DPLATFORM=CW308_STM32F3 -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/formula_dbl.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/stm32f3 -I./hal/stm32f3/CMSIS -I./hal/stm32f3/CMSIS/core -I./hal/stm32f3/CMSIS/device -I./hal/stm32f4/Legacy -std=gnu99 -MMD -MP -MF .dep/formula_dbl.o.d gen/formula_dbl.c -o objdir/gen/formula_dbl.o \n",
- ".\n",
- "Compiling C: gen/formulas.c\n",
- "arm-none-eabi-gcc -c -mcpu=cortex-m4 -I. -DMP_NO_DEV_URANDOM -DMP_32BIT -DMP_LOW_MEM -DMP_PREC=10 -mthumb -mfloat-abi=soft -mfpu=fpv4-sp-d16 -fmessage-length=0 -ffunction-sections -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSTM32F303xC -DSTM32F3 -DSTM32 -DDEBUG -DHAL=HAL_stm32f3 -DPLATFORM=CW308_STM32F3 -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/formulas.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/stm32f3 -I./hal/stm32f3/CMSIS -I./hal/stm32f3/CMSIS/core -I./hal/stm32f3/CMSIS/device -I./hal/stm32f4/Legacy -std=gnu99 -MMD -MP -MF .dep/formulas.o.d gen/formulas.c -o objdir/gen/formulas.o \n",
- ".\n",
- "Compiling C: gen/formula_scl.c\n",
- "arm-none-eabi-gcc -c -mcpu=cortex-m4 -I. -DMP_NO_DEV_URANDOM -DMP_32BIT -DMP_LOW_MEM -DMP_PREC=10 -mthumb -mfloat-abi=soft -mfpu=fpv4-sp-d16 -fmessage-length=0 -ffunction-sections -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSTM32F303xC -DSTM32F3 -DSTM32 -DDEBUG -DHAL=HAL_stm32f3 -DPLATFORM=CW308_STM32F3 -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/formula_scl.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/stm32f3 -I./hal/stm32f3/CMSIS -I./hal/stm32f3/CMSIS/core -I./hal/stm32f3/CMSIS/device -I./hal/stm32f4/Legacy -std=gnu99 -MMD -MP -MF .dep/formula_scl.o.d gen/formula_scl.c -o objdir/gen/formula_scl.o \n",
- ".\n",
- "Compiling C: gen/mult.c\n",
- "arm-none-eabi-gcc -c -mcpu=cortex-m4 -I. -DMP_NO_DEV_URANDOM -DMP_32BIT -DMP_LOW_MEM -DMP_PREC=10 -mthumb -mfloat-abi=soft -mfpu=fpv4-sp-d16 -fmessage-length=0 -ffunction-sections -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSTM32F303xC -DSTM32F3 -DSTM32 -DDEBUG -DHAL=HAL_stm32f3 -DPLATFORM=CW308_STM32F3 -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/mult.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/stm32f3 -I./hal/stm32f3/CMSIS -I./hal/stm32f3/CMSIS/core -I./hal/stm32f3/CMSIS/device -I./hal/stm32f4/Legacy -std=gnu99 -MMD -MP -MF .dep/mult.o.d gen/mult.c -o objdir/gen/mult.o \n",
- ".\n",
- "Compiling C: gen/point.c\n",
- "arm-none-eabi-gcc -c -mcpu=cortex-m4 -I. -DMP_NO_DEV_URANDOM -DMP_32BIT -DMP_LOW_MEM -DMP_PREC=10 -mthumb -mfloat-abi=soft -mfpu=fpv4-sp-d16 -fmessage-length=0 -ffunction-sections -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSTM32F303xC -DSTM32F3 -DSTM32 -DDEBUG -DHAL=HAL_stm32f3 -DPLATFORM=CW308_STM32F3 -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/point.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/stm32f3 -I./hal/stm32f3/CMSIS -I./hal/stm32f3/CMSIS/core -I./hal/stm32f3/CMSIS/device -I./hal/stm32f4/Legacy -std=gnu99 -MMD -MP -MF .dep/point.o.d gen/point.c -o objdir/gen/point.o \n",
- ".\n",
- "Compiling C: ./simpleserial/simpleserial.c\n",
- "arm-none-eabi-gcc -c -mcpu=cortex-m4 -I. -DMP_NO_DEV_URANDOM -DMP_32BIT -DMP_LOW_MEM -DMP_PREC=10 -mthumb -mfloat-abi=soft -mfpu=fpv4-sp-d16 -fmessage-length=0 -ffunction-sections -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSTM32F303xC -DSTM32F3 -DSTM32 -DDEBUG -DHAL=HAL_stm32f3 -DPLATFORM=CW308_STM32F3 -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/simpleserial.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/stm32f3 -I./hal/stm32f3/CMSIS -I./hal/stm32f3/CMSIS/core -I./hal/stm32f3/CMSIS/device -I./hal/stm32f4/Legacy -std=gnu99 -MMD -MP -MF .dep/simpleserial.o.d ./simpleserial/simpleserial.c -o objdir/simpleserial.o \n",
- ".\n",
- "Compiling C: ./hal/stm32f3/stm32f3_hal.c\n",
- "arm-none-eabi-gcc -c -mcpu=cortex-m4 -I. -DMP_NO_DEV_URANDOM -DMP_32BIT -DMP_LOW_MEM -DMP_PREC=10 -mthumb -mfloat-abi=soft -mfpu=fpv4-sp-d16 -fmessage-length=0 -ffunction-sections -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSTM32F303xC -DSTM32F3 -DSTM32 -DDEBUG -DHAL=HAL_stm32f3 -DPLATFORM=CW308_STM32F3 -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/stm32f3_hal.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/stm32f3 -I./hal/stm32f3/CMSIS -I./hal/stm32f3/CMSIS/core -I./hal/stm32f3/CMSIS/device -I./hal/stm32f4/Legacy -std=gnu99 -MMD -MP -MF .dep/stm32f3_hal.o.d ./hal/stm32f3/stm32f3_hal.c -o objdir/stm32f3_hal.o \n",
- ".\n",
- "Compiling C: ./hal/stm32f3/stm32f3_hal_lowlevel.c\n",
- "arm-none-eabi-gcc -c -mcpu=cortex-m4 -I. -DMP_NO_DEV_URANDOM -DMP_32BIT -DMP_LOW_MEM -DMP_PREC=10 -mthumb -mfloat-abi=soft -mfpu=fpv4-sp-d16 -fmessage-length=0 -ffunction-sections -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSTM32F303xC -DSTM32F3 -DSTM32 -DDEBUG -DHAL=HAL_stm32f3 -DPLATFORM=CW308_STM32F3 -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/stm32f3_hal_lowlevel.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/stm32f3 -I./hal/stm32f3/CMSIS -I./hal/stm32f3/CMSIS/core -I./hal/stm32f3/CMSIS/device -I./hal/stm32f4/Legacy -std=gnu99 -MMD -MP -MF .dep/stm32f3_hal_lowlevel.o.d ./hal/stm32f3/stm32f3_hal_lowlevel.c -o objdir/stm32f3_hal_lowlevel.o \n",
- ".\n",
- "Compiling C: ./hal/stm32f3/stm32f3_sysmem.c\n",
- "arm-none-eabi-gcc -c -mcpu=cortex-m4 -I. -DMP_NO_DEV_URANDOM -DMP_32BIT -DMP_LOW_MEM -DMP_PREC=10 -mthumb -mfloat-abi=soft -mfpu=fpv4-sp-d16 -fmessage-length=0 -ffunction-sections -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSTM32F303xC -DSTM32F3 -DSTM32 -DDEBUG -DHAL=HAL_stm32f3 -DPLATFORM=CW308_STM32F3 -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/stm32f3_sysmem.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/stm32f3 -I./hal/stm32f3/CMSIS -I./hal/stm32f3/CMSIS/core -I./hal/stm32f3/CMSIS/device -I./hal/stm32f4/Legacy -std=gnu99 -MMD -MP -MF .dep/stm32f3_sysmem.o.d ./hal/stm32f3/stm32f3_sysmem.c -o objdir/stm32f3_sysmem.o \n",
- ".\n",
- "Assembling: ./hal/stm32f3/stm32f3_startup.S\n",
- "arm-none-eabi-gcc -c -mcpu=cortex-m4 -I. -x assembler-with-cpp -mthumb -mfloat-abi=soft -mfpu=fpv4-sp-d16 -fmessage-length=0 -ffunction-sections -DF_CPU=7372800 -Wa,-gstabs,-adhlns=objdir/stm32f3_startup.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/stm32f3 -I./hal/stm32f3/CMSIS -I./hal/stm32f3/CMSIS/core -I./hal/stm32f3/CMSIS/device -I./hal/stm32f4/Legacy ./hal/stm32f3/stm32f3_startup.S -o objdir/stm32f3_startup.o\n",
- ".\n",
- "Linking: pyecsca-codegen-CW308_STM32F3.elf\n",
- "arm-none-eabi-gcc -mcpu=cortex-m4 -I. -DMP_NO_DEV_URANDOM -DMP_32BIT -DMP_LOW_MEM -DMP_PREC=10 -mthumb -mfloat-abi=soft -mfpu=fpv4-sp-d16 -fmessage-length=0 -ffunction-sections -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSTM32F303xC -DSTM32F3 -DSTM32 -DDEBUG -DHAL=HAL_stm32f3 -DPLATFORM=CW308_STM32F3 -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/main.o -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/stm32f3 -I./hal/stm32f3/CMSIS -I./hal/stm32f3/CMSIS/core -I./hal/stm32f3/CMSIS/device -I./hal/stm32f4/Legacy -std=gnu99 -MMD -MP -MF .dep/pyecsca-codegen-CW308_STM32F3.elf.d objdir/main.o objdir/bn/bn.o objdir/asn1/asn1.o objdir/hash/hash.o objdir/prng/prng.o objdir/gen/curve.o objdir/gen/formula_add.o objdir/gen/formula_dbl.o objdir/gen/formulas.o objdir/gen/formula_scl.o objdir/gen/mult.o objdir/gen/point.o objdir/simpleserial.o objdir/stm32f3_hal.o objdir/stm32f3_hal_lowlevel.o objdir/stm32f3_sysmem.o objdir/stm32f3_startup.o --output pyecsca-codegen-CW308_STM32F3.elf tommath/libtommath-CW308_STM32F3.a --specs=nano.specs -T ./hal/stm32f3/LinkerScript.ld -Wl,--gc-sections -lm -Wl,-Map=pyecsca-codegen-CW308_STM32F3.map,--cref -lm \n",
- ".\n",
- "Creating load file for Flash: pyecsca-codegen-CW308_STM32F3.hex\n",
- "arm-none-eabi-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature pyecsca-codegen-CW308_STM32F3.elf pyecsca-codegen-CW308_STM32F3.hex\n",
- ".\n",
- "Creating load file for EEPROM: pyecsca-codegen-CW308_STM32F3.eep\n",
- "arm-none-eabi-objcopy -j .eeprom --set-section-flags=.eeprom=\"alloc,load\" \\\n",
- "--change-section-lma .eeprom=0 --no-change-warnings -O ihex pyecsca-codegen-CW308_STM32F3.elf pyecsca-codegen-CW308_STM32F3.eep || exit 0\n",
- ".\n",
- "Creating Extended Listing: pyecsca-codegen-CW308_STM32F3.lss\n",
- "arm-none-eabi-objdump -h -S -z pyecsca-codegen-CW308_STM32F3.elf > pyecsca-codegen-CW308_STM32F3.lss\n",
- ".\n",
- "Creating Symbol Table: pyecsca-codegen-CW308_STM32F3.sym\n",
- "arm-none-eabi-nm -n pyecsca-codegen-CW308_STM32F3.elf > pyecsca-codegen-CW308_STM32F3.sym\n",
- "Size after:\n",
- " text\t data\t bss\t dec\t hex\tfilename\n",
- " 29144\t 128\t 2592\t 31864\t 7c78\tpyecsca-codegen-CW308_STM32F3.elf\n",
- "+--------------------------------------------------------\n",
- "+ Built for platform CW308T: STM32F3 Target\n",
- "+--------------------------------------------------------\n",
- "\n"
- ],
- "output_type": "stream"
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"from subprocess import run\n",
"\n",
"res = run([\"make\"], cwd=directory, capture_output=True)\n",
"print(res.stdout.decode())"
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%%\n",
- "is_executing": false
- }
- }
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"Now the files `elf_name` and `hex_name` in the directory contain the ELF file and HEX file built.\n"
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%% md\n"
- }
- }
+ ]
},
{
"cell_type": "code",
- "execution_count": 6,
- "outputs": [
- {
- "name": "stdout",
- "text": [
- "pyecsca-codegen-CW308_STM32F3.elf: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, with debug_info, not stripped\n",
- "\n",
- "pyecsca-codegen-CW308_STM32F3.hex: ASCII text, with CRLF line terminators\n",
- "\n"
- ],
- "output_type": "stream"
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"res = run([\"file\", elf_name], cwd=directory, capture_output=True)\n",
"print(res.stdout.decode())\n",
"\n",
"res = run([\"file\", hex_name], cwd=directory, capture_output=True)\n",
"print(res.stdout.decode())"
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%%\n",
- "is_executing": false
- }
- }
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"## Running\n",
"\n",
"We will now run key generation using the generated implementation on\n",
"the `STM32F3` target."
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%% md\n"
- }
- }
+ ]
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": null,
+ "metadata": {},
"outputs": [],
"source": [
"from pyecsca.codegen.client import DeviceTarget\n",
@@ -488,262 +194,79 @@
"\n",
"params = get_params(\"secg\", \"secp128r1\", \"projective\")\n",
"target = DeviceTarget(params.curve.model, params.curve.coordinate_model, Platform.STM32F3, timeout=10000)"
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%%\n",
- "is_executing": false
- }
- }
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"Flash the implementation."
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%% md\n"
- }
- }
+ ]
},
{
"cell_type": "code",
- "execution_count": 8,
- "outputs": [
- {
- "name": "stdout",
- "text": [
- "Serial baud rate = 115200\n",
- "Detected known STMF32: STM32F302xB(C)/303xB(C)\n",
- "Extended erase (0x44), this can take ten seconds or more\n",
- "Attempting to program 29271 bytes at 0x8000000\n",
- "STM32F Programming flash...\n",
- "STM32F Reading flash...\n",
- "Verified flash OK, 29271 bytes\n",
- "Serial baud rate = 38400\n"
- ],
- "output_type": "stream"
- },
- {
- "data": {
- "text/plain": "True"
- },
- "metadata": {},
- "output_type": "execute_result",
- "execution_count": 8
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"from os.path import join\n",
"\n",
"target.flash(join(directory, hex_name))\n"
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%%\n",
- "is_executing": false
- }
- }
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"Run the key generation."
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%% md\n"
- }
- }
+ ]
},
{
"cell_type": "code",
- "execution_count": 9,
- "outputs": [
- {
- "name": "stdout",
- "text": [
- "Serial baud rate = 38400\n",
- "Serial baud rate = 115200\n"
- ],
- "output_type": "stream"
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"target.connect()\n",
"target.set_params(params)\n",
"priv, pub = target.generate()\n",
"target.disconnect()"
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%%\n",
- "is_executing": false
- }
- }
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"And we can check that the generated keypair is valid."
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%% md\n"
- }
- }
+ ]
},
{
"cell_type": "code",
- "execution_count": 10,
- "outputs": [
- {
- "name": "stdout",
- "text": [
- "True\n",
- "189359030463681349816366610478560039051\n",
- "[x=122835813094999453922649270086793500655, y=326514220558629293368386081113307347349]\n",
- "[x=122835813094999453922649270086793500655, y=326514220558629293368386081113307347349]\n"
- ],
- "output_type": "stream"
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"print(params.curve.is_on_curve(pub))\n",
"\n",
"print(priv)\n",
"print(pub)\n",
"print(params.curve.affine_multiply(params.generator.to_affine(), priv))"
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%%\n",
- "is_executing": false
- }
- }
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"## Running on the host\n",
"\n",
"We can also run the implementation on the host."
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%% md\n"
- }
- }
+ ]
},
{
"cell_type": "code",
- "execution_count": 11,
- "outputs": [
- {
- "name": "stdout",
- "text": [
- "rm -f -- pyecsca-codegen-HOST.hex\n",
- "rm -f -- pyecsca-codegen-HOST.eep\n",
- "rm -f -- pyecsca-codegen-HOST.cof\n",
- "rm -f -- pyecsca-codegen-HOST.elf\n",
- "rm -f -- pyecsca-codegen-HOST.map\n",
- "rm -f -- pyecsca-codegen-HOST.sym\n",
- "rm -f -- pyecsca-codegen-HOST.lss\n",
- "rm -f -- objdir/*.o\n",
- "rm -f -- objdir/*.lst\n",
- "rm -f -- main.s bn/bn.s asn1/asn1.s hash/hash.s prng/prng.s gen/curve.s gen/formula_add.s gen/formula_dbl.s gen/formulas.s gen/formula_scl.s gen/mult.s gen/point.s simpleserial.s uart.s host_hal.s\n",
- "rm -f -- main.d bn/bn.d asn1/asn1.d hash/hash.d prng/prng.d gen/curve.d gen/formula_add.d gen/formula_dbl.d gen/formulas.d gen/formula_scl.d gen/mult.d gen/point.d simpleserial.d uart.d host_hal.d\n",
- "rm -f -- main.i bn/bn.i asn1/asn1.i hash/hash.i prng/prng.i gen/curve.i gen/formula_add.i gen/formula_dbl.i gen/formulas.i gen/formula_scl.i gen/mult.i gen/point.i simpleserial.i uart.i host_hal.i\n",
- "mkdir objdir objdir/hash objdir/prng objdir/asn1 objdir/bn objdir/gen\n",
- "mkdir .dep\n",
- ".\n",
- "-------- begin --------\n",
- "gcc (Arch Linux 9.2.1+20200130-2) 9.2.1 20200130\n",
- "Copyright (C) 2019 Free Software Foundation, Inc.\n",
- "This is free software; see the source for copying conditions. There is NO\n",
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
- "\n",
- ".\n",
- "Compiling C: main.c\n",
- "gcc -c -I. -DMP_NO_DEV_URANDOM -DMP_LOW_MEM -DMP_PREC=10 -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DHAL=HAL_host -DPLATFORM=HOST -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/main.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/host -std=gnu99 -MMD -MP -MF .dep/main.o.d main.c -o objdir/main.o \n",
- ".\n",
- "Compiling C: bn/bn.c\n",
- "gcc -c -I. -DMP_NO_DEV_URANDOM -DMP_LOW_MEM -DMP_PREC=10 -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DHAL=HAL_host -DPLATFORM=HOST -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/bn.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/host -std=gnu99 -MMD -MP -MF .dep/bn.o.d bn/bn.c -o objdir/bn/bn.o \n",
- ".\n",
- "Compiling C: asn1/asn1.c\n",
- "gcc -c -I. -DMP_NO_DEV_URANDOM -DMP_LOW_MEM -DMP_PREC=10 -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DHAL=HAL_host -DPLATFORM=HOST -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/asn1.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/host -std=gnu99 -MMD -MP -MF .dep/asn1.o.d asn1/asn1.c -o objdir/asn1/asn1.o \n",
- ".\n",
- "Compiling C: hash/hash.c\n",
- "gcc -c -I. -DMP_NO_DEV_URANDOM -DMP_LOW_MEM -DMP_PREC=10 -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DHAL=HAL_host -DPLATFORM=HOST -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/hash.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/host -std=gnu99 -MMD -MP -MF .dep/hash.o.d hash/hash.c -o objdir/hash/hash.o \n",
- ".\n",
- "Compiling C: prng/prng.c\n",
- "gcc -c -I. -DMP_NO_DEV_URANDOM -DMP_LOW_MEM -DMP_PREC=10 -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DHAL=HAL_host -DPLATFORM=HOST -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/prng.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/host -std=gnu99 -MMD -MP -MF .dep/prng.o.d prng/prng.c -o objdir/prng/prng.o \n",
- ".\n",
- "Compiling C: gen/curve.c\n",
- "gcc -c -I. -DMP_NO_DEV_URANDOM -DMP_LOW_MEM -DMP_PREC=10 -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DHAL=HAL_host -DPLATFORM=HOST -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/curve.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/host -std=gnu99 -MMD -MP -MF .dep/curve.o.d gen/curve.c -o objdir/gen/curve.o \n",
- ".\n",
- "Compiling C: gen/formula_add.c\n",
- "gcc -c -I. -DMP_NO_DEV_URANDOM -DMP_LOW_MEM -DMP_PREC=10 -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DHAL=HAL_host -DPLATFORM=HOST -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/formula_add.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/host -std=gnu99 -MMD -MP -MF .dep/formula_add.o.d gen/formula_add.c -o objdir/gen/formula_add.o \n",
- ".\n",
- "Compiling C: gen/formula_dbl.c\n",
- "gcc -c -I. -DMP_NO_DEV_URANDOM -DMP_LOW_MEM -DMP_PREC=10 -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DHAL=HAL_host -DPLATFORM=HOST -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/formula_dbl.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/host -std=gnu99 -MMD -MP -MF .dep/formula_dbl.o.d gen/formula_dbl.c -o objdir/gen/formula_dbl.o \n",
- ".\n",
- "Compiling C: gen/formulas.c\n",
- "gcc -c -I. -DMP_NO_DEV_URANDOM -DMP_LOW_MEM -DMP_PREC=10 -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DHAL=HAL_host -DPLATFORM=HOST -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/formulas.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/host -std=gnu99 -MMD -MP -MF .dep/formulas.o.d gen/formulas.c -o objdir/gen/formulas.o \n",
- ".\n",
- "Compiling C: gen/formula_scl.c\n",
- "gcc -c -I. -DMP_NO_DEV_URANDOM -DMP_LOW_MEM -DMP_PREC=10 -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DHAL=HAL_host -DPLATFORM=HOST -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/formula_scl.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/host -std=gnu99 -MMD -MP -MF .dep/formula_scl.o.d gen/formula_scl.c -o objdir/gen/formula_scl.o \n",
- ".\n",
- "Compiling C: gen/mult.c\n",
- "gcc -c -I. -DMP_NO_DEV_URANDOM -DMP_LOW_MEM -DMP_PREC=10 -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DHAL=HAL_host -DPLATFORM=HOST -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/mult.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/host -std=gnu99 -MMD -MP -MF .dep/mult.o.d gen/mult.c -o objdir/gen/mult.o \n",
- ".\n",
- "Compiling C: gen/point.c\n",
- "gcc -c -I. -DMP_NO_DEV_URANDOM -DMP_LOW_MEM -DMP_PREC=10 -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DHAL=HAL_host -DPLATFORM=HOST -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/point.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/host -std=gnu99 -MMD -MP -MF .dep/point.o.d gen/point.c -o objdir/gen/point.o \n",
- ".\n",
- "Compiling C: ./simpleserial/simpleserial.c\n",
- "gcc -c -I. -DMP_NO_DEV_URANDOM -DMP_LOW_MEM -DMP_PREC=10 -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DHAL=HAL_host -DPLATFORM=HOST -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/simpleserial.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/host -std=gnu99 -MMD -MP -MF .dep/simpleserial.o.d ./simpleserial/simpleserial.c -o objdir/simpleserial.o \n",
- ".\n",
- "Compiling C: ./hal/host/uart.c\n",
- "gcc -c -I. -DMP_NO_DEV_URANDOM -DMP_LOW_MEM -DMP_PREC=10 -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DHAL=HAL_host -DPLATFORM=HOST -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/uart.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/host -std=gnu99 -MMD -MP -MF .dep/uart.o.d ./hal/host/uart.c -o objdir/uart.o \n",
- ".\n",
- "Compiling C: ./hal/host/host_hal.c\n",
- "gcc -c -I. -DMP_NO_DEV_URANDOM -DMP_LOW_MEM -DMP_PREC=10 -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DHAL=HAL_host -DPLATFORM=HOST -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/host_hal.lst -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/host -std=gnu99 -MMD -MP -MF .dep/host_hal.o.d ./hal/host/host_hal.c -o objdir/host_hal.o \n",
- ".\n",
- "Linking: pyecsca-codegen-HOST.elf\n",
- "gcc -I. -DMP_NO_DEV_URANDOM -DMP_LOW_MEM -DMP_PREC=10 -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DHAL=HAL_host -DPLATFORM=HOST -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/main.o -Ihash -Iprng -Iasn1 -Ibn -Igen -Itommath -I./simpleserial/ -I./hal -I./hal/host -std=gnu99 -MMD -MP -MF .dep/pyecsca-codegen-HOST.elf.d objdir/main.o objdir/bn/bn.o objdir/asn1/asn1.o objdir/hash/hash.o objdir/prng/prng.o objdir/gen/curve.o objdir/gen/formula_add.o objdir/gen/formula_dbl.o objdir/gen/formulas.o objdir/gen/formula_scl.o objdir/gen/mult.o objdir/gen/point.o objdir/simpleserial.o objdir/uart.o objdir/host_hal.o --output pyecsca-codegen-HOST.elf tommath/libtommath-HOST.a -Wl,-Map=pyecsca-codegen-HOST.map,--cref -lm \n",
- ".\n",
- "Creating load file for Flash: pyecsca-codegen-HOST.hex\n",
- "objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature pyecsca-codegen-HOST.elf pyecsca-codegen-HOST.hex\n",
- ".\n",
- "Creating load file for EEPROM: pyecsca-codegen-HOST.eep\n",
- "objcopy -j .eeprom --set-section-flags=.eeprom=\"alloc,load\" \\\n",
- "--change-section-lma .eeprom=0 --no-change-warnings -O ihex pyecsca-codegen-HOST.elf pyecsca-codegen-HOST.eep || exit 0\n",
- ".\n",
- "Creating Extended Listing: pyecsca-codegen-HOST.lss\n",
- "objdump -h -S -z pyecsca-codegen-HOST.elf > pyecsca-codegen-HOST.lss\n",
- ".\n",
- "Creating Symbol Table: pyecsca-codegen-HOST.sym\n",
- "nm -n pyecsca-codegen-HOST.elf > pyecsca-codegen-HOST.sym\n",
- "Size after:\n",
- " text\t data\t bss\t dec\t hex\tfilename\n",
- " 82632\t 728\t 2592\t 85952\t 14fc0\tpyecsca-codegen-HOST.elf\n",
- "+--------------------------------------------------------\n",
- "+ Built for platform HOST: Host machine target\n",
- "+--------------------------------------------------------\n",
- "\n"
- ],
- "output_type": "stream"
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"config = DeviceConfiguration(model, coords, formulas, scalarmult, \n",
"\t\t\t\t\t\t\t hash_type, mod_rand, mult, sqr, red,\n",
@@ -752,80 +275,44 @@
"directory, elf_name, hex_name = render(config)\n",
"res = run([\"make\"], cwd=directory, capture_output=True)\n",
"print(res.stdout.decode())"
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%%\n",
- "is_executing": false
- }
- }
+ ]
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": null,
+ "metadata": {},
"outputs": [],
"source": [
"from pyecsca.codegen.client import HostTarget\n",
"from os.path import join\n",
"\n",
"target = HostTarget(params.curve.model, params.curve.coordinate_model, binary=join(directory, elf_name))"
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%%\n",
- "is_executing": false
- }
- }
+ ]
},
{
"cell_type": "code",
- "execution_count": 13,
+ "execution_count": null,
+ "metadata": {},
"outputs": [],
"source": [
"target.connect()\n",
"target.set_params(params)\n",
"priv, pub = target.generate()\n",
"target.disconnect()"
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%%\n",
- "is_executing": false
- }
- }
+ ]
},
{
"cell_type": "code",
- "execution_count": 14,
- "outputs": [
- {
- "name": "stdout",
- "text": [
- "True\n",
- "162938999268550597445809790209592423458\n",
- "[x=111810799217268384317536017529141796945, y=309320541414531923178173772704935971498]\n",
- "[x=111810799217268384317536017529141796945, y=309320541414531923178173772704935971498]\n"
- ],
- "output_type": "stream"
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"print(params.curve.is_on_curve(pub))\n",
"\n",
"print(priv)\n",
"print(pub)\n",
"print(params.curve.affine_multiply(params.generator.to_affine(), priv))"
- ],
- "metadata": {
- "collapsed": false,
- "pycharm": {
- "name": "#%%\n",
- "is_executing": false
- }
- }
+ ]
}
],
"metadata": {
@@ -849,13 +336,13 @@
"pycharm": {
"stem_cell": {
"cell_type": "raw",
- "source": [],
"metadata": {
"collapsed": false
- }
+ },
+ "source": []
}
}
},
"nbformat": 4,
"nbformat_minor": 4
-} \ No newline at end of file
+}