diff options
| author | J08nY | 2020-02-26 17:09:58 +0100 |
|---|---|---|
| committer | J08nY | 2020-02-26 17:09:58 +0100 |
| commit | e1e9e33090644f25c3cf07dd104399a2b0aa294f (patch) | |
| tree | 551f7577866d1907ce877d860447c65ca7fe4849 /codegen.ipynb | |
| parent | b57f8b21f5ff49657d4d052dc179d2d3831200ea (diff) | |
| download | pyecsca-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.ipynb | 479 |
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, |
