aboutsummaryrefslogtreecommitdiffhomepage
path: root/codegen.ipynb
diff options
context:
space:
mode:
authorJ08nY2020-02-26 17:09:58 +0100
committerJ08nY2020-02-26 17:09:58 +0100
commite1e9e33090644f25c3cf07dd104399a2b0aa294f (patch)
tree551f7577866d1907ce877d860447c65ca7fe4849 /codegen.ipynb
parentb57f8b21f5ff49657d4d052dc179d2d3831200ea (diff)
downloadpyecsca-notebook-e1e9e33090644f25c3cf07dd104399a2b0aa294f.tar.gz
pyecsca-notebook-e1e9e33090644f25c3cf07dd104399a2b0aa294f.tar.zst
pyecsca-notebook-e1e9e33090644f25c3cf07dd104399a2b0aa294f.zip
Add example of a generated implementation running on a target.
Diffstat (limited to 'codegen.ipynb')
-rw-r--r--codegen.ipynb479
1 files changed, 436 insertions, 43 deletions
diff --git a/codegen.ipynb b/codegen.ipynb
index 83ccc3a..eb2ab4e 100644
--- a/codegen.ipynb
+++ b/codegen.ipynb
@@ -17,7 +17,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 1,
"outputs": [
{
"data": {
@@ -25,7 +25,7 @@
},
"metadata": {},
"output_type": "execute_result",
- "execution_count": 3
+ "execution_count": 1
}
],
"source": [
@@ -57,7 +57,7 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": 2,
"outputs": [
{
"name": "stdout",
@@ -132,6 +132,14 @@
"\n"
],
"output_type": "stream"
+ },
+ {
+ "data": {
+ "text/plain": "()"
+ },
+ "metadata": {},
+ "output_type": "execute_result",
+ "execution_count": 2
}
],
"source": [
@@ -152,7 +160,8 @@
"\tif hasattr(tp, \"names\"):\n",
"\t\tfor enum_name in tp.names():\n",
"\t\t\tprint(\" \", enum_name)\n",
- "\tprint()"
+ "\tprint()\n",
+ "()"
],
"metadata": {
"collapsed": false,
@@ -192,15 +201,15 @@
},
{
"cell_type": "code",
- "execution_count": 13,
+ "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 0x7fb1da4ddd00>, hash_type=HASH_SHA1, mod_rand=MOD_RAND_REDUCE, mult=MUL_BASE, sqr=SQR_BASE, red=RED_BASE, platform=HOST, keygen=True, ecdh=True, ecdsa=True)"
+ "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": 13
+ "execution_count": 3
}
],
"source": [
@@ -208,7 +217,7 @@
"from pyecsca.ec.mult import LTRMultiplier\n",
"from pyecsca.ec.configuration import *\n",
"\n",
- "platform = Platform.HOST\n",
+ "platform = Platform.STM32F3\n",
"hash_type = HashType.SHA1\n",
"mod_rand = RandomMod.REDUCE\n",
"mult = Multiplication.BASE\n",
@@ -253,12 +262,12 @@
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": 4,
"outputs": [
{
"name": "stdout",
"text": [
- "/tmp/tmpszimqnob\n"
+ "/tmp/tmp1wtoeyhk\n"
],
"output_type": "stream"
}
@@ -294,7 +303,350 @@
},
{
"cell_type": "code",
- "execution_count": 15,
+ "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"
+ }
+ ],
+ "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",
+ "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"
+ }
+ ],
+ "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",
+ "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,
+ "outputs": [],
+ "source": [
+ "from pyecsca.codegen.client import DeviceTarget\n",
+ "from pyecsca.ec.curves import get_params\n",
+ "\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",
+ "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
+ }
+ ],
+ "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",
+ "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"
+ }
+ ],
+ "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",
+ "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"
+ }
+ ],
+ "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",
+ "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",
@@ -308,52 +660,66 @@
"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/point.s gen/curve.s gen/mult.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/point.d gen/curve.d gen/mult.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/point.i gen/curve.i gen/mult.i simpleserial.i uart.i host_hal.i\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 (GCC) 9.2.0\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. -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSS_VER=SS_VER_1_1 -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",
+ "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. -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSS_VER=SS_VER_1_1 -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",
+ "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. -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSS_VER=SS_VER_1_1 -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",
+ "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. -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSS_VER=SS_VER_1_1 -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",
+ "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. -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSS_VER=SS_VER_1_1 -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/point.c\n",
- "gcc -c -I. -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSS_VER=SS_VER_1_1 -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",
+ "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. -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSS_VER=SS_VER_1_1 -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",
+ "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. -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSS_VER=SS_VER_1_1 -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",
+ "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. -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSS_VER=SS_VER_1_1 -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",
+ "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. -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSS_VER=SS_VER_1_1 -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",
+ "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. -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSS_VER=SS_VER_1_1 -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",
+ "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. -gdwarf-2 -DHASH=HASH_SHA1 -DMOD_RAND=MOD_RAND_REDUCE -DSS_VER=SS_VER_1_1 -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/point.o objdir/gen/curve.o objdir/gen/mult.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",
+ "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",
@@ -369,7 +735,7 @@
"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",
- " 82833\t 744\t 576\t 84153\t 148b9\tpyecsca-codegen-HOST.elf\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",
@@ -379,8 +745,11 @@
}
],
"source": [
- "from subprocess import run\n",
+ "config = DeviceConfiguration(model, coords, formulas, scalarmult, \n",
+ "\t\t\t\t\t\t\t hash_type, mod_rand, mult, sqr, red,\n",
+ "\t\t\t\t\t\t\t Platform.HOST, True, True, True)\n",
"\n",
+ "directory, elf_name, hex_name = render(config)\n",
"res = run([\"make\"], cwd=directory, capture_output=True)\n",
"print(res.stdout.decode())"
],
@@ -393,38 +762,62 @@
}
},
{
- "cell_type": "markdown",
+ "cell_type": "code",
+ "execution_count": 12,
+ "outputs": [],
"source": [
- "Now the files `elf_name` and `hex_name` in the directory contain the ELF file and HEX file built.\n"
+ "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": "#%% md\n"
+ "name": "#%%\n",
+ "is_executing": false
}
}
},
{
"cell_type": "code",
- "execution_count": 17,
+ "execution_count": 13,
+ "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": [
- "pyecsca-codegen-HOST.elf: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=b120c193e0d3f480bec86e817c0b08e3f9ed74c7, for GNU/Linux 3.2.0, with debug_info, not stripped\n",
- "\n",
- "pyecsca-codegen-HOST.hex: ASCII text, with CRLF line terminators\n",
- "\n"
+ "True\n",
+ "162938999268550597445809790209592423458\n",
+ "[x=111810799217268384317536017529141796945, y=309320541414531923178173772704935971498]\n",
+ "[x=111810799217268384317536017529141796945, y=309320541414531923178173772704935971498]\n"
],
"output_type": "stream"
}
],
"source": [
- "res = run([\"file\", elf_name], cwd=directory, capture_output=True)\n",
- "print(res.stdout.decode())\n",
+ "print(params.curve.is_on_curve(pub))\n",
"\n",
- "res = run([\"file\", hex_name], cwd=directory, capture_output=True)\n",
- "print(res.stdout.decode())"
+ "print(priv)\n",
+ "print(pub)\n",
+ "print(params.curve.affine_multiply(params.generator.to_affine(), priv))"
],
"metadata": {
"collapsed": false,