From 25b639d02ec38d36b45ce3ede31cf57a43848f98 Mon Sep 17 00:00:00 2001 From: Ariel Mendelzon Date: Tue, 22 Oct 2024 16:51:11 -0300 Subject: [PATCH] Incorporate latest master (d85258d30b873576d3cf3e3c6fa90c31a4e03ba4) changes: - Fix verify_attestation.py to accept distinct versions for UI and Signer (#197) - Version 5.2.0 release (#194) - Removing compilation products from repository (#200) --- .github/workflows/coverage.yml | 4 +- CHANGELOG.md | 14 +++++ README.md | 4 +- docs/attestation.md | 4 +- docs/heartbeat.md | 4 +- firmware/src/ledger/ui/src/attestation.h | 2 +- firmware/src/ledger/ui/src/defs.h | 2 +- firmware/src/ledger/ui/src/ui_heartbeat.h | 2 +- .../ui/test/attestation/test_attestation.c | 8 +-- .../src/ledger/ui/test/onboard/test_onboard.c | 4 +- .../ui/test/ui_heartbeat/test_ui_heartbeat.c | 2 +- firmware/src/powhsm/src/attestation.h | 2 +- firmware/src/powhsm/src/defs.h | 2 +- firmware/src/powhsm/src/heartbeat.h | 2 +- .../src/powhsm/test/btcscript/btcscript.o | Bin 3608 -> 0 bytes .../src/powhsm/test/btcscript/hex_reader.o | Bin 1920 -> 0 bytes firmware/src/powhsm/test/btcscript/test.out | Bin 26856 -> 0 bytes .../powhsm/test/btcscript/test_btcscript.o | Bin 18752 -> 0 bytes firmware/src/powhsm/test/btcscript/test_fwk.o | Bin 1368 -> 0 bytes firmware/src/powhsm/test/btctx/hex_reader.o | Bin 1920 -> 0 bytes firmware/src/powhsm/test/btctx/svarint.o | Bin 3096 -> 0 bytes firmware/src/powhsm/test/btctx/test_fwk.o | Bin 1368 -> 0 bytes .../powhsm/test/difficulty/test_difficulty.o | Bin 3424 -> 0 bytes .../src/powhsm/test/difficulty/test_fwk.o | Bin 1368 -> 0 bytes firmware/src/powhsm/test/sha256/sha256.o | Bin 4352 -> 0 bytes firmware/src/powhsm/test/sha256/test.out | Bin 17288 -> 0 bytes firmware/src/powhsm/test/sha256/test_fwk.o | Bin 1368 -> 0 bytes firmware/src/powhsm/test/sha256/test_sha256.o | Bin 3512 -> 0 bytes firmware/src/powhsm/test/srlp/test_fwk.o | Bin 1368 -> 0 bytes firmware/src/powhsm/test/srlp/test_srlp.o | Bin 9584 -> 0 bytes firmware/src/powhsm/test/svarint/svarint.o | Bin 3096 -> 0 bytes firmware/src/powhsm/test/svarint/test.out | Bin 17584 -> 0 bytes firmware/src/powhsm/test/svarint/test_fwk.o | Bin 1368 -> 0 bytes .../src/powhsm/test/svarint/test_svarint.o | Bin 9848 -> 0 bytes firmware/src/powhsm/test/trie/hex_reader.o | Bin 1920 -> 0 bytes firmware/src/powhsm/test/trie/svarint.o | Bin 3096 -> 0 bytes firmware/src/powhsm/test/trie/test_fwk.o | Bin 1368 -> 0 bytes firmware/src/powhsm/test/trie/test_trie.o | Bin 32744 -> 0 bytes firmware/test/cases/heartbeat.py | 2 +- middleware/admin/verify_attestation.py | 33 ++++++++--- middleware/ledger/protocol.py | 4 +- .../tests/admin/test_verify_attestation.py | 56 +++++++++++++++++- middleware/tests/ledger/test_protocol.py | 2 +- middleware/tests/ledger/test_protocol_v1.py | 2 +- 44 files changed, 117 insertions(+), 38 deletions(-) delete mode 100644 firmware/src/powhsm/test/btcscript/btcscript.o delete mode 100644 firmware/src/powhsm/test/btcscript/hex_reader.o delete mode 100755 firmware/src/powhsm/test/btcscript/test.out delete mode 100644 firmware/src/powhsm/test/btcscript/test_btcscript.o delete mode 100644 firmware/src/powhsm/test/btcscript/test_fwk.o delete mode 100644 firmware/src/powhsm/test/btctx/hex_reader.o delete mode 100644 firmware/src/powhsm/test/btctx/svarint.o delete mode 100644 firmware/src/powhsm/test/btctx/test_fwk.o delete mode 100644 firmware/src/powhsm/test/difficulty/test_difficulty.o delete mode 100644 firmware/src/powhsm/test/difficulty/test_fwk.o delete mode 100644 firmware/src/powhsm/test/sha256/sha256.o delete mode 100755 firmware/src/powhsm/test/sha256/test.out delete mode 100644 firmware/src/powhsm/test/sha256/test_fwk.o delete mode 100644 firmware/src/powhsm/test/sha256/test_sha256.o delete mode 100644 firmware/src/powhsm/test/srlp/test_fwk.o delete mode 100644 firmware/src/powhsm/test/srlp/test_srlp.o delete mode 100644 firmware/src/powhsm/test/svarint/svarint.o delete mode 100755 firmware/src/powhsm/test/svarint/test.out delete mode 100644 firmware/src/powhsm/test/svarint/test_fwk.o delete mode 100644 firmware/src/powhsm/test/svarint/test_svarint.o delete mode 100644 firmware/src/powhsm/test/trie/hex_reader.o delete mode 100644 firmware/src/powhsm/test/trie/svarint.o delete mode 100644 firmware/src/powhsm/test/trie/test_fwk.o delete mode 100644 firmware/src/powhsm/test/trie/test_trie.o diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index d28212e4..1be1df43 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -34,7 +34,7 @@ jobs: run: | aws s3 sync \ middleware/coverage/ \ - s3://${{ secrets.CODECOVERAGE_S3_BUCKET }}/powhsm_5.1.x/middleware_coverage_report \ + s3://${{ secrets.CODECOVERAGE_S3_BUCKET }}/powhsm_5.2.x/middleware_coverage_report \ --sse aws:kms --sse-kms-key-id ${{ secrets.CODECOVERAGE_KMS_KEY_ID }} \ --no-progress --follow-symlinks --delete --only-show-errors @@ -49,7 +49,7 @@ jobs: run: | aws s3 sync \ firmware/coverage/output/ \ - s3://${{ secrets.CODECOVERAGE_S3_BUCKET }}/powhsm_5.1.x/firmware_coverage_report \ + s3://${{ secrets.CODECOVERAGE_S3_BUCKET }}/powhsm_5.2.x/firmware_coverage_report \ --sse aws:kms --sse-kms-key-id ${{ secrets.CODECOVERAGE_KMS_KEY_ID }} \ --no-progress --follow-symlinks --delete --only-show-errors diff --git a/CHANGELOG.md b/CHANGELOG.md index 82e33d9f..d680f359 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## [5.2.0] - 09/09/2024 + +### Features/enhancements + +- Added "screen saver" mode to signer app to extend display lifetime +- Decoupled business and I/O (aka communication) layers in preparation for multiple platforms +- Improved HAL directory structure to accomodate for testing different platform implementations + +### Fixes + +- Fixed middleware docker image build +- Fixed verify_attestaion.py to allow distinct versions for UI and Signer +- Incidentally bumped urllib3, certifi to address dependabot findings + ## [5.1.0] - 01/07/2024 ### Features/enhancements diff --git a/README.md b/README.md index 86e9f533..ee086462 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,8 @@ ![Tests](https://github.com/rsksmart/rsk-powhsm/actions/workflows/run-tests.yml/badge.svg) ![Python linter](https://github.com/rsksmart/rsk-powhsm/actions/workflows/lint-python.yml/badge.svg) ![C linter](https://github.com/rsksmart/rsk-powhsm/actions/workflows/lint-c.yml/badge.svg) -[![Middleware coverage](https://img.shields.io/endpoint?url=https://d16sboe9lzo4ru.cloudfront.net/powhsm_5.1.x/middleware_coverage_report/badge.json)](https://d16sboe9lzo4ru.cloudfront.net/powhsm_5.1.x/middleware_coverage_report/index.html) -[![Firmware coverage](https://img.shields.io/endpoint?url=https://d16sboe9lzo4ru.cloudfront.net/powhsm_5.1.x/firmware_coverage_report/badge.json)](https://d16sboe9lzo4ru.cloudfront.net/powhsm_5.1.x/firmware_coverage_report/index.html) +[![Middleware coverage](https://img.shields.io/endpoint?url=https://d16sboe9lzo4ru.cloudfront.net/powhsm_5.2.x/middleware_coverage_report/badge.json)](https://d16sboe9lzo4ru.cloudfront.net/powhsm_5.2.x/middleware_coverage_report/index.html) +[![Firmware coverage](https://img.shields.io/endpoint?url=https://d16sboe9lzo4ru.cloudfront.net/powhsm_5.2.x/firmware_coverage_report/badge.json)](https://d16sboe9lzo4ru.cloudfront.net/powhsm_5.2.x/firmware_coverage_report/index.html) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE) diff --git a/docs/attestation.md b/docs/attestation.md index e5b56c14..3cc0ac25 100644 --- a/docs/attestation.md +++ b/docs/attestation.md @@ -56,7 +56,7 @@ Before diving into the UI attestation, it is important to recall a few relevant To generate the attestation, the UI uses the configured attestation scheme to sign a message generated by the concatenation of: -- A predefined header (`HSM:UI:5.1`). +- A predefined header (`HSM:UI:5.2`). - A 32 byte user-defined value. By default, the attestation generation client supplies the latest RSK block hash as this value, so it can then be used as a minimum timestamp reference for the attestation generation. - The compressed public key corresponding to the private key obtained by deriving the generated seed with the BIP32 path `m/44'/0'/0'/0/0` (normally used as the BTC key by the Signer application). - The hash of the currently authorized Signer version. @@ -66,7 +66,7 @@ As a consequence of the aforementioned features, this message guarantees that th ### Signer attestation -To generate the attestation, the Signer uses the configured attestation scheme to sign a message containing a predefined header (`HSM:SIGNER:5.1`) and the `sha256sum` of the concatenation of the authorized public keys (see the [protocol](./protocol.md) for details on this) lexicographically ordered by their UTF-encoded derivation path. This message guarantees that the device is running a specific version of the Signer and that those keys are in control of the ledger device. +To generate the attestation, the Signer uses the configured attestation scheme to sign a message containing a predefined header (`HSM:SIGNER:5.2`) and the `sha256sum` of the concatenation of the authorized public keys (see the [protocol](./protocol.md) for details on this) lexicographically ordered by their UTF-encoded derivation path. This message guarantees that the device is running a specific version of the Signer and that those keys are in control of the ledger device. ## Attestation file format diff --git a/docs/heartbeat.md b/docs/heartbeat.md index 3f81a567..6d4f5fdf 100644 --- a/docs/heartbeat.md +++ b/docs/heartbeat.md @@ -41,7 +41,7 @@ certification -- to verify. To generate the heartbeat, the Signer uses the configured endorsement scheme to sign a message generated by the concatenation of: -- A predefined header (`HSM:SIGNER:HB:5.1:`). +- A predefined header (`HSM:SIGNER:HB:5.2:`). - A 32 byte value corresponding to the currently known best block hash. - A value corresponding to the first 8 bytes of the last successful authorized signed operation's transaction hash. @@ -57,7 +57,7 @@ transactions. To generate the heartbeat, the UI uses the configured endorsement scheme to sign a message generated by the concatenation of: -- A predefined header (`HSM:UI:HB:5.1:`). +- A predefined header (`HSM:UI:HB:5.2:`). - A 32 byte user-defined value. This value can vary and could be, for example, used as a timestamp reference for the end user. - A 32 byte value corresponding to the currently authorized Signer hash. diff --git a/firmware/src/ledger/ui/src/attestation.h b/firmware/src/ledger/ui/src/attestation.h index 8eeb5413..bb9230e3 100644 --- a/firmware/src/ledger/ui/src/attestation.h +++ b/firmware/src/ledger/ui/src/attestation.h @@ -48,7 +48,7 @@ typedef enum { } err_code_att_t; // Attestation message prefix -#define ATT_MSG_PREFIX "HSM:UI:5.1" +#define ATT_MSG_PREFIX "HSM:UI:5.2" #define ATT_MSG_PREFIX_LENGTH (sizeof(ATT_MSG_PREFIX) - sizeof("")) // User defined value size diff --git a/firmware/src/ledger/ui/src/defs.h b/firmware/src/ledger/ui/src/defs.h index d9f2e9ff..afb7635b 100644 --- a/firmware/src/ledger/ui/src/defs.h +++ b/firmware/src/ledger/ui/src/defs.h @@ -30,7 +30,7 @@ // Version and patchlevel #define VERSION_MAJOR 0x05 -#define VERSION_MINOR 0x01 +#define VERSION_MINOR 0x02 #define VERSION_PATCH 0x00 #endif // __DEFS_H diff --git a/firmware/src/ledger/ui/src/ui_heartbeat.h b/firmware/src/ledger/ui/src/ui_heartbeat.h index d5f873da..e42db887 100644 --- a/firmware/src/ledger/ui/src/ui_heartbeat.h +++ b/firmware/src/ledger/ui/src/ui_heartbeat.h @@ -46,7 +46,7 @@ typedef enum { } err_code_ui_heartbeat_t; // Heartbeat message prefix -#define UI_HEARTBEAT_MSG_PREFIX "HSM:UI:HB:5.1:" +#define UI_HEARTBEAT_MSG_PREFIX "HSM:UI:HB:5.2:" #define UI_HEARTBEAT_MSG_PREFIX_LENGTH \ (sizeof(UI_HEARTBEAT_MSG_PREFIX) - sizeof("")) diff --git a/firmware/src/ledger/ui/test/attestation/test_attestation.c b/firmware/src/ledger/ui/test/attestation/test_attestation.c index eae3b102..31333927 100644 --- a/firmware/src/ledger/ui/test/attestation/test_attestation.c +++ b/firmware/src/ledger/ui/test/attestation/test_attestation.c @@ -160,7 +160,7 @@ void test_get_attestation_ud_value() { assert(3 == get_attestation(rx, &G_att_ctx)); // PREFIX + UD_VALUE + Compressed pubkey + Signer hash + Iteration ASSERT_MEMCMP( - "HSM:UI:5.1" + "HSM:UI:5.2" "\x46\x8d\xa8\x7f\x6a\x85\xe6\x40\x93\x27\xe1\x17\xe8\xc7\xd2\x11\x0c" "\x73\x60\x22\x26\xbb\xb5\xed\xf2\x7d\x98\xc8\xa3\x1b\xcc\xf0" "\x02\xe6\xd7\x1d\x5c\x2b\x06\x36\x03\x53\xfb\xd8\x22\x7a\xb3\xab\xfc" @@ -208,7 +208,7 @@ void test_get_attestation_get_msg() { *N_onboarded_ui = 1; memcpy( G_att_ctx.msg, - "HSM:UI:5.1" + "HSM:UI:5.2" "\x46\x8d\xa8\x7f\x6a\x85\xe6\x40\x93\x27\xe1\x17\xe8\xc7\xd2\x11\x0c" "\x73\x60\x22\x26\xbb\xb5\xed\xf2\x7d\x98\xc8\xa3\x1b\xcc\xf0" "\x03\xe6\xd7\x1d\x5c\x2b\x06\x36\x03\x53\xfb\xd8\x22\x7a\xb3\xab\xfc" @@ -225,7 +225,7 @@ void test_get_attestation_get_msg() { assert((APDU_TOTAL_DATA_SIZE_OUT + 3) == get_attestation(rx, &G_att_ctx)); ASSERT_APDU( "\x80\x50\x02\x01" - "HSM:UI:5.1" + "HSM:UI:5.2" "\x46\x8d\xa8\x7f\x6a\x85\xe6\x40\x93\x27\xe1\x17\xe8\xc7\xd2\x11\x0c" "\x73\x60\x22\x26\xbb\xb5\xed\xf2\x7d\x98\xc8\xa3\x1b\xcc\xf0" "\x03\xe6\xd7\x1d\x5c\x2b\x06\x36\x03\x53\xfb\xd8\x22\x7a\xb3\xab\xfc" @@ -249,7 +249,7 @@ void test_get_attestation_get_msg_wrong_state() { *N_onboarded_ui = 1; memcpy( &G_att_ctx.msg, - "HSM:UI:5.1" + "HSM:UI:5.2" "\x46\x8d\xa8\x7f\x6a\x85\xe6\x40\x93\x27\xe1\x17\xe8\xc7\xd2\x11\x0c" "\x73\x60\x22\x26\xbb\xb5\xed\xf2\x7d\x98\xc8\xa3\x1b\xcc\xf0" "\x03\xe6\xd7\x1d\x5c\x2b\x06\x36\x03\x53\xfb\xd8\x22\x7a\xb3\xab\xfc" diff --git a/firmware/src/ledger/ui/test/onboard/test_onboard.c b/firmware/src/ledger/ui/test/onboard/test_onboard.c index fe686a05..1e9ccebc 100644 --- a/firmware/src/ledger/ui/test/onboard/test_onboard.c +++ b/firmware/src/ledger/ui/test/onboard/test_onboard.c @@ -313,11 +313,11 @@ void test_is_onboarded() { G_device_onboarded = true; assert(5 == is_onboarded()); - ASSERT_APDU("\x80\x01\x05\x01\x00"); + ASSERT_APDU("\x80\x01\x05\x02\x00"); G_device_onboarded = false; assert(5 == is_onboarded()); - ASSERT_APDU("\x80\x00\x05\x01\x00"); + ASSERT_APDU("\x80\x00\x05\x02\x00"); } int main() { diff --git a/firmware/src/ledger/ui/test/ui_heartbeat/test_ui_heartbeat.c b/firmware/src/ledger/ui/test/ui_heartbeat/test_ui_heartbeat.c index 810b6a0b..36fe5518 100644 --- a/firmware/src/ledger/ui/test/ui_heartbeat/test_ui_heartbeat.c +++ b/firmware/src/ledger/ui/test/ui_heartbeat/test_ui_heartbeat.c @@ -230,7 +230,7 @@ void test_op_ud_value() { assert_ok("\x80\x60\x01"); - const char expected_msg[] = "HSM:UI:HB:5.1:" // Prefix + const char expected_msg[] = "HSM:UI:HB:5.2:" // Prefix "\x11" // UD "\x22\x22\x22\x22\x22\x22\x22\x22\x22\x22" // . "\x22\x22\x22\x22\x22\x22\x22\x22\x22\x22" // . diff --git a/firmware/src/powhsm/src/attestation.h b/firmware/src/powhsm/src/attestation.h index 6d405300..23d1171b 100644 --- a/firmware/src/powhsm/src/attestation.h +++ b/firmware/src/powhsm/src/attestation.h @@ -33,7 +33,7 @@ // ----------------------------------------------------------------------- // Attestation message prefix -#define ATT_MSG_PREFIX "HSM:SIGNER:5.1" +#define ATT_MSG_PREFIX "HSM:SIGNER:5.2" #define ATT_MSG_PREFIX_LENGTH (sizeof(ATT_MSG_PREFIX) - sizeof("")) // ----------------------------------------------------------------------- diff --git a/firmware/src/powhsm/src/defs.h b/firmware/src/powhsm/src/defs.h index a78e7ca0..7413c6ee 100644 --- a/firmware/src/powhsm/src/defs.h +++ b/firmware/src/powhsm/src/defs.h @@ -29,7 +29,7 @@ // Version and patchlevel #define VERSION_MAJOR 0x05 -#define VERSION_MINOR 0x01 +#define VERSION_MINOR 0x02 #define VERSION_PATCH 0x00 #endif // __DEFS_H diff --git a/firmware/src/powhsm/src/heartbeat.h b/firmware/src/powhsm/src/heartbeat.h index c9a52133..1026f2b1 100644 --- a/firmware/src/powhsm/src/heartbeat.h +++ b/firmware/src/powhsm/src/heartbeat.h @@ -45,7 +45,7 @@ typedef enum { } err_code_heartbeat_t; // Heartbeat message prefix -#define HEARTBEAT_MSG_PREFIX "HSM:SIGNER:HB:5.1:" +#define HEARTBEAT_MSG_PREFIX "HSM:SIGNER:HB:5.2:" #define HEARTBEAT_MSG_PREFIX_LENGTH (sizeof(HEARTBEAT_MSG_PREFIX) - sizeof("")) // User-defined value size diff --git a/firmware/src/powhsm/test/btcscript/btcscript.o b/firmware/src/powhsm/test/btcscript/btcscript.o deleted file mode 100644 index acae619227451c3ae0daf0b295e52fef37ee0568..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3608 zcmb`JO>7%Q6o6;#G)>bqYpNJogi0=l5(HVdTS*5Y5bmez1f-F?Z$KCNxSpj z_kL#P?ReK8Y4ItaBoQtWd4V_y?ABZhm;Ao8?0@d7xJ{ zP)}fxUZumWFz8zpn0NQ+XgL~oh+a(|>Sm&gWmJ;~W+Je0?+&eR16=>B;iaxK|{?d|E(ww-%+J<(?yYF{k9^f)scq$St1R;4cOYtHO)P3>E) z8=5=k#rH;R(^c&!GZA83uc}?&$YLv;e-EH}I95p2G((Udk=#i|;Bv_X6AaE9$u+aUgC zx4k-kSepIp)U0b1jcU8{%GkdxGzD(8zwMg`xxZaF(2isL3=ql1VJo)yNvEy5 z6+b!YHf`Nc=-bP-QF#omv#xcf5rTx_3ZUYV5wP3wi@>o?n#I!|gFeIf=Zw?dqCRJ2 zOWESW4MWM2tg-CasfEIVK~mH4+3~S>YIbVsvUVkPWo$gIrAR)PFXaqZY%y0VUw4D- zVxd&d=g1RmK75qe)rT!h&I>qSFUI1hfya*u;wJ_CvVgxM;AH`?2>5pbUKj9(0)7e) zE{L~3ApyttWxM!`0v;FeR|Wj4fG-L7ihzG6;9m*&w*tN`;5!2TtANu6x9RgaYXyF{Vkx%t$!Vg_D>|C5BF4jysu7e@t#Qe^$HEGw4l zIQGMZ&qamHEnTeOJUT&6!G-hi?;QQ72lfTVJ=2hzUI1|@?B{41aDNUitmzHkWPs1d z6TEg599T2L1K7y(2Rxk5&qw@@aNQmHz`G#k^v2GzeD@i{P@ccc^7!Cg|0Qs=>;H{z zD??|A*nj-@!1HNo5!NgDia@$Mi0r?ku8Wb1$3 Joea7+|37`_=tckl diff --git a/firmware/src/powhsm/test/btcscript/hex_reader.o b/firmware/src/powhsm/test/btcscript/hex_reader.o deleted file mode 100644 index 4826ca386c46eade11a927efcad733a38956aab6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1920 zcmbu8%WD%s7{F(fKGK(|;-T1r5einZ+oWKnB6YQHI~1#;1}~O&n`}+6X(8E`R_z1g zqf00XUc87N{R>J@5-C_c2=SJSkc&`B4)NAQF@E1LZ3Ps1Zu-q-0EO@BBRHP}r=-nXR_i1~3=Vhr>`jD%!w~*3gTG{t3 zf=9{H)Y$H4mS0&;9WH0NjjaOpspV$YyamRgmHJKGD741yBy&oodlz)iQF|^+?O+D_ zWx-3Iq^-tHXjS_02IA?qUc|g@y?|5xVM;I15C-R{lG$I|G{h&1%H#B0CkDKt>o*iR zhKd-gp4HD^K2VFMf)eK zL52qh&-=Qrn3GXs#uxCby=tJl?-bX3z5d>SKM?Ta29DwYqCB`sl!aEMy}91=0?wxc z7=9?%akzA-^{H#HrOq`15oO;6wTn&-18JZ279cU-3iMG-6v|?oHkT5GCmbIVkYnOe^Wc8;~SE1K;va! zqthXhNlt(dnf!9T$$`9vj86iG-{_z7&peTvX-!-y=;f0RR91 diff --git a/firmware/src/powhsm/test/btcscript/test.out b/firmware/src/powhsm/test/btcscript/test.out deleted file mode 100755 index c85001866e3c54d1e90b91c4b9c8a5ee0d1242b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26856 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 G?f(bx%ndyN diff --git a/firmware/src/powhsm/test/btcscript/test_fwk.o b/firmware/src/powhsm/test/btcscript/test_fwk.o deleted file mode 100644 index 4ebfd3efdd8231f4f8d686b416a261fbdbdfba65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1368 zcmbtTy-piJ5T3IE6YNBel_C-pPK80R@>wE9grWn7AE79P6-zYMY3*C^3GPn1TZNwn zDkM6}JPJKc9w9G44^NQH*t=ob91VPucV@nsZ+7Q)eYWv+v*0+O;lO8jh%^iEv+&@1 zBiDm6%s_Yh^7g8CL*|-vy&KqSw?EYzUqnCTaougQ7IT+BE-0_wYPQ^_>o!%pcgi}a z9dM4T&TOSLeT9wYkf$G^M9bQn>P4abdTJdDFr?fn@rW`lI=?y26O{)#;{@FQ$;%aU zCkH5kF}xuxVkQqon9QTGdg=*&;y=EEOwBmY=o=unsCXTZW+$~2ne_LL4%h&OS(Js5 z&x0t8{rE@Zr(%$#fq#^SQasM?3+acMpTzxyr-2BdPQ4H`u{pIzBtr9ge_+{3BzYgL zOviSpJt>YQuz*Vrte<7T21yi&7`Zr+f^B{4E@zSt4uGZNkTWs#_fj5-@kTFPXHidg zZGUl3^{pwZ4b__XfB|v#4R_2U!?*SGn4@?4T>TPisi*#*pgV%zzo7|b_5RwfAg_J1 z^wbOt->%(Jdh-oX`8h3!-Ld(%(yS&nFrZiMnI!sE)lknxI=UmRf3NE4Joes{`mOSJ l%DzHNT3b)N{q0HeOAWeBfdPB|x0uV*d+Jc%4K2C0{x7P(TxS3P diff --git a/firmware/src/powhsm/test/btctx/hex_reader.o b/firmware/src/powhsm/test/btctx/hex_reader.o deleted file mode 100644 index 4826ca386c46eade11a927efcad733a38956aab6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1920 zcmbu8%WD%s7{F(fKGK(|;-T1r5einZ+oWKnB6YQHI~1#;1}~O&n`}+6X(8E`R_z1g zqf00XUc87N{R>J@5-C_c2=SJSkc&`B4)NAQF@E1LZ3Ps1Zu-q-0EO@BBRHP}r=-nXR_i1~3=Vhr>`jD%!w~*3gTG{t3 zf=9{H)Y$H4mS0&;9WH0NjjaOpspV$YyamRgmHJKGD741yBy&oodlz)iQF|^+?O+D_ zWx-3Iq^-tHXjS_02IA?qUc|g@y?|5xVM;I15C-R{lG$I|G{h&1%H#B0CkDKt>o*iR zhKd-gp4HD^K2VFMf)eK zL52qh&-=Qrn3GXs#uxCby=tJl?-bX3z5d>SKM?Ta29DwYqCB`sl!aEMy}91=0?wxc z7=9?%akzA-^{H#HrOq`15oO;6wTn&-18JZ279cU-3iMG-6v|?oHkT5GCmbIVkYnOe^Wc8;~SE1K;va! zqthXhNlt(dnf!9T$$`9vj86iG-{_z7&peTvX-!-y=;f0RR91 diff --git a/firmware/src/powhsm/test/btctx/svarint.o b/firmware/src/powhsm/test/btctx/svarint.o deleted file mode 100644 index 64db7f1fce0a9bc3bbc55ee95627a80422651842..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3096 zcmb`J-)mb{9Kg@Lw_WR2d*e@nn-Ijg3ig^r5m&0*uDk7J6jSElP zV`0^Hl1mVZ2-|}b-~0z8bbBc21{n?pV?GO_Rhrd@Dk6Ev8o%Fj&$&rXbMeJ*x#xS% z=lkQF`#txZ=CUz0AxjeBB9XUAYs4ub!N*#CopyCHKn{=@)A`L@{v%*Ig}PZX>Za3+ zRwQ{dd$YBN*`S^eQQ4R$@%GFhppUsX=;f%!p}3|vO#+(2uz-MfYj{Pi8M0VA((Oj-bwd)Yp>8F-=n44OjmcKY56-`+!-`eEw2t`$ePvX`#`8RWBZ1D%44CKh0754oJypIJaO&c8USF$X@~k?`9LcN5ETN>~m+l zgkDwh2$czCD9tpA0SMpN>UT2$lp%`(3ASUd^X`8*)9`>7uCRnbkMux7{HRaghK7*I z@$r$+&~a;aK9LSZ!dg^|48QR*>xH7>Xe1nogvry?nGosXNh0L~(!qhg{#E#R4gtpp zCaJziZO@OS6V5%PSCv3@HQM%q7gedUWO%%u^$^igU8^>C3QOG{t?a&J8>lpKa zLg*#Lhg7T3KH0WTT6{`A z?|t~X55McffA!)2`0x;|j$0r02~(mAoS&030_W#sN#OjPd@FE%PKcKMBxNUNLE9Nu zpXI%bbv~ilR^BGsT*6KeZ8n=FT5=(kveLldWLVndJ2S&@K9c8%M%}Hm@eeZzI1T@k zgdh)=OuVslU?_jL7YoL$ywrxxL3r>i>F~5mkR=>q@%Xb0WBEN9WX>-!F5bMai-7ry z^W%BOoTB@i4Dk6_xHmr^N1%f_!yGWpAQxTb Vwc`6f0hVs@YiuHZ&+-If{J(SUN8A7a diff --git a/firmware/src/powhsm/test/btctx/test_fwk.o b/firmware/src/powhsm/test/btctx/test_fwk.o deleted file mode 100644 index 4ebfd3efdd8231f4f8d686b416a261fbdbdfba65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1368 zcmbtTy-piJ5T3IE6YNBel_C-pPK80R@>wE9grWn7AE79P6-zYMY3*C^3GPn1TZNwn zDkM6}JPJKc9w9G44^NQH*t=ob91VPucV@nsZ+7Q)eYWv+v*0+O;lO8jh%^iEv+&@1 zBiDm6%s_Yh^7g8CL*|-vy&KqSw?EYzUqnCTaougQ7IT+BE-0_wYPQ^_>o!%pcgi}a z9dM4T&TOSLeT9wYkf$G^M9bQn>P4abdTJdDFr?fn@rW`lI=?y26O{)#;{@FQ$;%aU zCkH5kF}xuxVkQqon9QTGdg=*&;y=EEOwBmY=o=unsCXTZW+$~2ne_LL4%h&OS(Js5 z&x0t8{rE@Zr(%$#fq#^SQasM?3+acMpTzxyr-2BdPQ4H`u{pIzBtr9ge_+{3BzYgL zOviSpJt>YQuz*Vrte<7T21yi&7`Zr+f^B{4E@zSt4uGZNkTWs#_fj5-@kTFPXHidg zZGUl3^{pwZ4b__XfB|v#4R_2U!?*SGn4@?4T>TPisi*#*pgV%zzo7|b_5RwfAg_J1 z^wbOt->%(Jdh-oX`8h3!-Ld(%(yS&nFrZiMnI!sE)lknxI=UmRf3NE4Joes{`mOSJ l%DzHNT3b)N{q0HeOAWeBfdPB|x0uV*d+Jc%4K2C0{x7P(TxS3P diff --git a/firmware/src/powhsm/test/difficulty/test_difficulty.o b/firmware/src/powhsm/test/difficulty/test_difficulty.o deleted file mode 100644 index 8fd2864c65241a6c47962531bd643539eb7cf53d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3424 zcmbtXZ)jUp6u)WO&T0QSR}eec8&2u4%aXViJ61{my!HxRE45*4I$zWD#fCP2czNB@ zLUCFn3nkDmlTLK>i$gz%qEOl*ZCqhd1lb1>rUeWBTWuNj!!&56p7Y+l$@4b(;?8*Q zoclX}-#Pc*bg#-?9VIp!;bbGvlKhIJgh&tOWsf0xNF}KtUYh)wPHy%GGV;9=a#Q}3 z(3JNUP09Bb_JY}x9bPnRT=uQ{HPw^6-OIw^14rsQopQ$5#SHv2|e zzYD9RoZUD)C1)90J(o`2q^V}~n8%k9dQ#4UXLd6C_=Rtlu~ZYC*gm8mq^U}@TRa6X znmU0p^EZr)gi!P>O;wa&;frR?x$+X}d<;xmAjb5UD@G$;+f0K2^kN-*u|YEODmF7C zubJ$p67+|%YmX@}pIN4h{WZtu{yy~`I47bzJ3BOaC5~*~`%HGCe1GjYU3~iOUys#Y zJMz|HD;`XrlGh7NFC%YZXZW@RJq`YYuOtmLgo8--WC(mOic26U>1!$AJb@82P*4g}|1?l_>#JLZ` zxjf-?$0eexF*R@C8+i1tZ~@_^CqG zgmkvGos{a^)q$WdEV-Nxx5IU`@d%S7x6|!%x?E1Op9Qjw_YzyY##UFc=YeTx#sR?b zLE4MWX{oAtv!t!E++Jz}6GMjw3F+K_^xmBQB~wifBIo|+(7QNcs8aI#P9Y0>!5fJX zJNzp|c8FAn?4)cL{0Ja63x1ecJjU=eTR+UWli_P@UBfssJK1Adz5qr3m40}J` zj6lYoK|$Eqa2yr4>ORp(6y^C|xv%f6(&6oH>wB)JTTvXYf~a%%=}|hndRkk$l%9@` z7vw&rucft1R>)}ILYlWe^p;QWl^e30-&?SqHM{{cZD#PJMq{5J%F#Jqo)a1Q5r{}J#JzQzjy zNX+|-1-JI|0NX!kUkeYf=QzW8J*yZL$Rpsqo=yS(z%(aa3>WJOS?~(5<#{h!aJ*|d zF0pv1W+n#W5paHf`URYy6XJ-Cg>>Hla9uO`5SKJ{#OKh}xK12{KHWzg1F;x!Xc2Sa zkAy-hY;;FBqN|S1Ztqd}Rq_vm0lKL}NnFJAVWaUC64_m)(Z319yygBPS zkg(^T9AXOn?5eF{{`fZ^`tqChQD%>GMO^%)xFO_a=DYGYfC6LwUw;?)Vtz5*8UwaK zXC=wH0J#Ys^mhvQEmjb}U$`1=kvMO)$cBQwvf>9ZocnQG{M|uJte^YGxgq1c{~YcG zq0s!I_iT;?T(5KF@4Y>k(D~aEacWNR3 Nc~-yA>I|~z|1bBcH=FwE9grWn7AE79P6-zYMY3*C^3GPn1TZNwn zDkM6}JPJKc9w9G44^NQH*t=ob91VPucV@nsZ+7Q)eYWv+v*0+O;lO8jh%^iEv+&@1 zBiDm6%s_Yh^7g8CL*|-vy&KqSw?EYzUqnCTaougQ7IT+BE-0_wYPQ^_>o!%pcgi}a z9dM4T&TOSLeT9wYkf$G^M9bQn>P4abdTJdDFr?fn@rW`lI=?y26O{)#;{@FQ$;%aU zCkH5kF}xuxVkQqon9QTGdg=*&;y=EEOwBmY=o=unsCXTZW+$~2ne_LL4%h&OS(Js5 z&x0t8{rE@Zr(%$#fq#^SQasM?3+acMpTzxyr-2BdPQ4H`u{pIzBtr9ge_+{3BzYgL zOviSpJt>YQuz*Vrte<7T21yi&7`Zr+f^B{4E@zSt4uGZNkTWs#_fj5-@kTFPXHidg zZGUl3^{pwZ4b__XfB|v#4R_2U!?*SGn4@?4T>TPisi*#*pgV%zzo7|b_5RwfAg_J1 z^wbOt->%(Jdh-oX`8h3!-Ld(%(yS&nFrZiMnI!sE)lknxI=UmRf3NE4Joes{`mOSJ l%DzHNT3b)N{q0HeOAWeBfdPB|x0uV*d+Jc%4K2C0{x7P(TxS3P diff --git a/firmware/src/powhsm/test/sha256/sha256.o b/firmware/src/powhsm/test/sha256/sha256.o deleted file mode 100644 index fcb8c696885dc9e508af1fe353feba7f7f24363f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4352 zcmbtYZ){W76@Sl8^A88R)S6(hEnCn44ZN6*l28UF^pdAGD~392D$*q;F*sl+kT@Z$ zY5{#D%G+x;m+eC)T8XZpb|6hm6Ra9r>X&MVK@WA5Y;>;!74w(|O7AY>D zQN5J7T@6}_Rk?AZC0MqSVr6+CySk~%J(rAYstpdi)N2hk$ zhnryIP$I0c?D0xuK{tF7$?HaoMCNs)RU&h`(JqmkZgff{s~bUyOzTESA{lymGdI*a z<&X%TQ)UZ5FU-ohJ_&oxp__| z@8fhinao4B;130WDWN8EGpvz9azX6@wTzn#W%PQ%k)NQcOI|N4g4YN07zm$Ew7@b3 zqD3cKWin?VT6Llwc4{Enb)pjzF%X?P5rjMqL{KL}P;&zjirsiey?{~_&Y$EH9uF29 zRUzRKn4a)>5C6U5i00uN`uXAOn%dHPw|l#$wr>0P-iw;rescfveVW?&Qt+X3ni{

VYfGLK^RD}oZpmqV$Zp)lL)6KMswDIArTH%jLwzWf6xuR6Jx21 zx%Gk+%|iMaL26DX$b!1lKDilgCdmkRP|%=)$9`=EYSN7nXSoV_JfmJ-g}fdLhz*A6qce2EBYW9&rkQ1W|TL(UzeWsB5ul_p+J~U-=`<|A` zuj`;h<5(ulPnBwZT0*c%C1aK1v~ny@OkeGx?1*=#UJoU!H5Pz744{K~e#-#DcMMu1 zUhH6YFmDe2~jL-X>Pyx?4+bJaG7eo8X8mSS$&Z7{mE7IU)|%+_Aa%~9aiS=r;$?c&n%jb`sKjQeDa$!|@XzLf7P6+F+{^rUze`#A& z|HP&AQ+sc|a^P-{EBKEWe;DcMxH#w>Or9yXBwqS-aXdB~@?QAl^?T$08azJ9HSXTM zt$O|AfrDNC?rL|fYqQI}>Cp{TtKM9@*8G5%N@g(-BqR57p&l-a@$pwOXB5YqZ*ds7dUgyw z{l7&u%z!Oy?l=!%IF6cHl(xG@!slvuu;w0kjN=Mk2pF}R;Iwo4EG-7_2c_8gW$5`0Qb#;LjAilc{BS?!wK3#82EZ7j p8(s!FKIV8#(|mRSadmY4<7gO$Isb=&D;D2E|F7^HVo^26{|Al+PG|rC diff --git a/firmware/src/powhsm/test/sha256/test.out b/firmware/src/powhsm/test/sha256/test.out deleted file mode 100755 index b48a2106cf6b2d5ba255400195cb1d5c17787952..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17288 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 bTg%XMfMirI@wmN-WY6Ym8Zlu8VJ!PEMe##% diff --git a/firmware/src/powhsm/test/sha256/test_fwk.o b/firmware/src/powhsm/test/sha256/test_fwk.o deleted file mode 100644 index 4ebfd3efdd8231f4f8d686b416a261fbdbdfba65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1368 zcmbtTy-piJ5T3IE6YNBel_C-pPK80R@>wE9grWn7AE79P6-zYMY3*C^3GPn1TZNwn zDkM6}JPJKc9w9G44^NQH*t=ob91VPucV@nsZ+7Q)eYWv+v*0+O;lO8jh%^iEv+&@1 zBiDm6%s_Yh^7g8CL*|-vy&KqSw?EYzUqnCTaougQ7IT+BE-0_wYPQ^_>o!%pcgi}a z9dM4T&TOSLeT9wYkf$G^M9bQn>P4abdTJdDFr?fn@rW`lI=?y26O{)#;{@FQ$;%aU zCkH5kF}xuxVkQqon9QTGdg=*&;y=EEOwBmY=o=unsCXTZW+$~2ne_LL4%h&OS(Js5 z&x0t8{rE@Zr(%$#fq#^SQasM?3+acMpTzxyr-2BdPQ4H`u{pIzBtr9ge_+{3BzYgL zOviSpJt>YQuz*Vrte<7T21yi&7`Zr+f^B{4E@zSt4uGZNkTWs#_fj5-@kTFPXHidg zZGUl3^{pwZ4b__XfB|v#4R_2U!?*SGn4@?4T>TPisi*#*pgV%zzo7|b_5RwfAg_J1 z^wbOt->%(Jdh-oX`8h3!-Ld(%(yS&nFrZiMnI!sE)lknxI=UmRf3NE4Joes{`mOSJ l%DzHNT3b)N{q0HeOAWeBfdPB|x0uV*d+Jc%4K2C0{x7P(TxS3P diff --git a/firmware/src/powhsm/test/sha256/test_sha256.o b/firmware/src/powhsm/test/sha256/test_sha256.o deleted file mode 100644 index 8746029e3c4b61de408b667912d1c8e507598f80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3512 zcmbtWeNa?Y6u-*~rh=joF=ONwexTvHFlqUf3%GDahE-rkZK}s(d9nw$NF*+SlL`PmC12Y9BBrtMdY?g**l0f2#jRt$@`de)P(ct0b{r&wk z*s?@YjZ{)0GpdlKo(9{mqbJ?kDDfodyb6{0TSJn!WbBFaec7m;$wzqxd>DWU>9qEmo z2FC^r`@s;VVUqStOw;mnuY>JKSzTqzw0mG{16v0TfBD?So1Jmj(y18yxM18u_Xi`v zb_#44XxL%ySotY#C}`JegXI4!P~7Lrfp;ATOlgPV2jLR`|r=Fc;! zn0)vC-lnI;OTZY^tXC?&e)GssY41Qq>Y+x^td->GsHA0LG8MZ=pP7c8 z1RHBsA?qX+TUjT;wiEoCX*iX2l8OnelVD^0x{r;-WW|2gOt3)}uwMk4ssBZImWsda z*<$Tpm1Y7P>z8%ay|uxLYqzNwn7!uU3;R#O`L}d~-*p^w$DZneu(;}AkLG7Lh%BiO+y z!%#xAfyCutS-Fx$FI%P>=Fc~n2&t&%FbX00xw&%;=?jH&C+{|7nv7Y-%;~eHvXLRn zl$B}9%rucCc^RUsEhf4^qHcWr@W&e9jd==id{D;X#hX1k@!go*ggAY?4k(gso@6B? zq*vQF>(L%fFw`(|uYV}Je#jdht|<5$O7swEDAAMHN8mAl=m1~NEb0vPWcVX|1oTAB z8ldP&+`xp5CV?KO%3rD(VAJ7AWE{21je=XF;9L~k6$P)2g0GK)2czH(QScpr<9?NW zN@oBt%^BvnCB>G~(iL2utthv2k+q29jHbvTk%N#L!rJ9sa9aR|rpKA+(AbCtZainw^E z8TK|6lHx)br diff --git a/firmware/src/powhsm/test/srlp/test_fwk.o b/firmware/src/powhsm/test/srlp/test_fwk.o deleted file mode 100644 index 4ebfd3efdd8231f4f8d686b416a261fbdbdfba65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1368 zcmbtTy-piJ5T3IE6YNBel_C-pPK80R@>wE9grWn7AE79P6-zYMY3*C^3GPn1TZNwn zDkM6}JPJKc9w9G44^NQH*t=ob91VPucV@nsZ+7Q)eYWv+v*0+O;lO8jh%^iEv+&@1 zBiDm6%s_Yh^7g8CL*|-vy&KqSw?EYzUqnCTaougQ7IT+BE-0_wYPQ^_>o!%pcgi}a z9dM4T&TOSLeT9wYkf$G^M9bQn>P4abdTJdDFr?fn@rW`lI=?y26O{)#;{@FQ$;%aU zCkH5kF}xuxVkQqon9QTGdg=*&;y=EEOwBmY=o=unsCXTZW+$~2ne_LL4%h&OS(Js5 z&x0t8{rE@Zr(%$#fq#^SQasM?3+acMpTzxyr-2BdPQ4H`u{pIzBtr9ge_+{3BzYgL zOviSpJt>YQuz*Vrte<7T21yi&7`Zr+f^B{4E@zSt4uGZNkTWs#_fj5-@kTFPXHidg zZGUl3^{pwZ4b__XfB|v#4R_2U!?*SGn4@?4T>TPisi*#*pgV%zzo7|b_5RwfAg_J1 z^wbOt->%(Jdh-oX`8h3!-Ld(%(yS&nFrZiMnI!sE)lknxI=UmRf3NE4Joes{`mOSJ l%DzHNT3b)N{q0HeOAWeBfdPB|x0uV*d+Jc%4K2C0{x7P(TxS3P diff --git a/firmware/src/powhsm/test/srlp/test_srlp.o b/firmware/src/powhsm/test/srlp/test_srlp.o deleted file mode 100644 index 6ec09981d9e5281cc379fd0cde42d9f0e89161ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9584 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 diff --git a/firmware/src/powhsm/test/svarint/svarint.o b/firmware/src/powhsm/test/svarint/svarint.o deleted file mode 100644 index 64db7f1fce0a9bc3bbc55ee95627a80422651842..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3096 zcmb`J-)mb{9Kg@Lw_WR2d*e@nn-Ijg3ig^r5m&0*uDk7J6jSElP zV`0^Hl1mVZ2-|}b-~0z8bbBc21{n?pV?GO_Rhrd@Dk6Ev8o%Fj&$&rXbMeJ*x#xS% z=lkQF`#txZ=CUz0AxjeBB9XUAYs4ub!N*#CopyCHKn{=@)A`L@{v%*Ig}PZX>Za3+ zRwQ{dd$YBN*`S^eQQ4R$@%GFhppUsX=;f%!p}3|vO#+(2uz-MfYj{Pi8M0VA((Oj-bwd)Yp>8F-=n44OjmcKY56-`+!-`eEw2t`$ePvX`#`8RWBZ1D%44CKh0754oJypIJaO&c8USF$X@~k?`9LcN5ETN>~m+l zgkDwh2$czCD9tpA0SMpN>UT2$lp%`(3ASUd^X`8*)9`>7uCRnbkMux7{HRaghK7*I z@$r$+&~a;aK9LSZ!dg^|48QR*>xH7>Xe1nogvry?nGosXNh0L~(!qhg{#E#R4gtpp zCaJziZO@OS6V5%PSCv3@HQM%q7gedUWO%%u^$^igU8^>C3QOG{t?a&J8>lpKa zLg*#Lhg7T3KH0WTT6{`A z?|t~X55McffA!)2`0x;|j$0r02~(mAoS&030_W#sN#OjPd@FE%PKcKMBxNUNLE9Nu zpXI%bbv~ilR^BGsT*6KeZ8n=FT5=(kveLldWLVndJ2S&@K9c8%M%}Hm@eeZzI1T@k zgdh)=OuVslU?_jL7YoL$ywrxxL3r>i>F~5mkR=>q@%Xb0WBEN9WX>-!F5bMai-7ry z^W%BOoTB@i4Dk6_xHmr^N1%f_!yGWpAQxTb Vwc`6f0hVs@YiuHZ&+-If{J(SUN8A7a diff --git a/firmware/src/powhsm/test/svarint/test.out b/firmware/src/powhsm/test/svarint/test.out deleted file mode 100755 index a23bc5afa0560fec98260b9a382fb53911fd9d3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17584 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 VmL3yQAW}4Lra}x(QAlZu{{aZLRj&X5 diff --git a/firmware/src/powhsm/test/svarint/test_fwk.o b/firmware/src/powhsm/test/svarint/test_fwk.o deleted file mode 100644 index 4ebfd3efdd8231f4f8d686b416a261fbdbdfba65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1368 zcmbtTy-piJ5T3IE6YNBel_C-pPK80R@>wE9grWn7AE79P6-zYMY3*C^3GPn1TZNwn zDkM6}JPJKc9w9G44^NQH*t=ob91VPucV@nsZ+7Q)eYWv+v*0+O;lO8jh%^iEv+&@1 zBiDm6%s_Yh^7g8CL*|-vy&KqSw?EYzUqnCTaougQ7IT+BE-0_wYPQ^_>o!%pcgi}a z9dM4T&TOSLeT9wYkf$G^M9bQn>P4abdTJdDFr?fn@rW`lI=?y26O{)#;{@FQ$;%aU zCkH5kF}xuxVkQqon9QTGdg=*&;y=EEOwBmY=o=unsCXTZW+$~2ne_LL4%h&OS(Js5 z&x0t8{rE@Zr(%$#fq#^SQasM?3+acMpTzxyr-2BdPQ4H`u{pIzBtr9ge_+{3BzYgL zOviSpJt>YQuz*Vrte<7T21yi&7`Zr+f^B{4E@zSt4uGZNkTWs#_fj5-@kTFPXHidg zZGUl3^{pwZ4b__XfB|v#4R_2U!?*SGn4@?4T>TPisi*#*pgV%zzo7|b_5RwfAg_J1 z^wbOt->%(Jdh-oX`8h3!-Ld(%(yS&nFrZiMnI!sE)lknxI=UmRf3NE4Joes{`mOSJ l%DzHNT3b)N{q0HeOAWeBfdPB|x0uV*d+Jc%4K2C0{x7P(TxS3P diff --git a/firmware/src/powhsm/test/svarint/test_svarint.o b/firmware/src/powhsm/test/svarint/test_svarint.o deleted file mode 100644 index a4f24c4720678aca8801e0e3dae6ff5192661410..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9848 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 diff --git a/firmware/src/powhsm/test/trie/svarint.o b/firmware/src/powhsm/test/trie/svarint.o deleted file mode 100644 index 64db7f1fce0a9bc3bbc55ee95627a80422651842..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3096 zcmb`J-)mb{9Kg@Lw_WR2d*e@nn-Ijg3ig^r5m&0*uDk7J6jSElP zV`0^Hl1mVZ2-|}b-~0z8bbBc21{n?pV?GO_Rhrd@Dk6Ev8o%Fj&$&rXbMeJ*x#xS% z=lkQF`#txZ=CUz0AxjeBB9XUAYs4ub!N*#CopyCHKn{=@)A`L@{v%*Ig}PZX>Za3+ zRwQ{dd$YBN*`S^eQQ4R$@%GFhppUsX=;f%!p}3|vO#+(2uz-MfYj{Pi8M0VA((Oj-bwd)Yp>8F-=n44OjmcKY56-`+!-`eEw2t`$ePvX`#`8RWBZ1D%44CKh0754oJypIJaO&c8USF$X@~k?`9LcN5ETN>~m+l zgkDwh2$czCD9tpA0SMpN>UT2$lp%`(3ASUd^X`8*)9`>7uCRnbkMux7{HRaghK7*I z@$r$+&~a;aK9LSZ!dg^|48QR*>xH7>Xe1nogvry?nGosXNh0L~(!qhg{#E#R4gtpp zCaJziZO@OS6V5%PSCv3@HQM%q7gedUWO%%u^$^igU8^>C3QOG{t?a&J8>lpKa zLg*#Lhg7T3KH0WTT6{`A z?|t~X55McffA!)2`0x;|j$0r02~(mAoS&030_W#sN#OjPd@FE%PKcKMBxNUNLE9Nu zpXI%bbv~ilR^BGsT*6KeZ8n=FT5=(kveLldWLVndJ2S&@K9c8%M%}Hm@eeZzI1T@k zgdh)=OuVslU?_jL7YoL$ywrxxL3r>i>F~5mkR=>q@%Xb0WBEN9WX>-!F5bMai-7ry z^W%BOoTB@i4Dk6_xHmr^N1%f_!yGWpAQxTb Vwc`6f0hVs@YiuHZ&+-If{J(SUN8A7a diff --git a/firmware/src/powhsm/test/trie/test_fwk.o b/firmware/src/powhsm/test/trie/test_fwk.o deleted file mode 100644 index 4ebfd3efdd8231f4f8d686b416a261fbdbdfba65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1368 zcmbtTy-piJ5T3IE6YNBel_C-pPK80R@>wE9grWn7AE79P6-zYMY3*C^3GPn1TZNwn zDkM6}JPJKc9w9G44^NQH*t=ob91VPucV@nsZ+7Q)eYWv+v*0+O;lO8jh%^iEv+&@1 zBiDm6%s_Yh^7g8CL*|-vy&KqSw?EYzUqnCTaougQ7IT+BE-0_wYPQ^_>o!%pcgi}a z9dM4T&TOSLeT9wYkf$G^M9bQn>P4abdTJdDFr?fn@rW`lI=?y26O{)#;{@FQ$;%aU zCkH5kF}xuxVkQqon9QTGdg=*&;y=EEOwBmY=o=unsCXTZW+$~2ne_LL4%h&OS(Js5 z&x0t8{rE@Zr(%$#fq#^SQasM?3+acMpTzxyr-2BdPQ4H`u{pIzBtr9ge_+{3BzYgL zOviSpJt>YQuz*Vrte<7T21yi&7`Zr+f^B{4E@zSt4uGZNkTWs#_fj5-@kTFPXHidg zZGUl3^{pwZ4b__XfB|v#4R_2U!?*SGn4@?4T>TPisi*#*pgV%zzo7|b_5RwfAg_J1 z^wbOt->%(Jdh-oX`8h3!-Ld(%(yS&nFrZiMnI!sE)lknxI=UmRf3NE4Joes{`mOSJ l%DzHNT3b)N{q0HeOAWeBfdPB|x0uV*d+Jc%4K2C0{x7P(TxS3P diff --git a/firmware/src/powhsm/test/trie/test_trie.o b/firmware/src/powhsm/test/trie/test_trie.o deleted file mode 100644 index 7f9bf22bca112d55dc75d27edc8771537825fe97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32744 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 L)Dz|1#_#_DPSq$a diff --git a/firmware/test/cases/heartbeat.py b/firmware/test/cases/heartbeat.py index 3b838106..09bad8d2 100644 --- a/firmware/test/cases/heartbeat.py +++ b/firmware/test/cases/heartbeat.py @@ -27,7 +27,7 @@ class Heartbeat(TestCase): - EXPECTED_HEADER = "HSM:SIGNER:HB:5.1:" + EXPECTED_HEADER = "HSM:SIGNER:HB:5.2:" EHL = len(EXPECTED_HEADER) @classmethod diff --git a/middleware/admin/verify_attestation.py b/middleware/admin/verify_attestation.py index e22caf10..3d398267 100644 --- a/middleware/admin/verify_attestation.py +++ b/middleware/admin/verify_attestation.py @@ -23,13 +23,14 @@ import json import hashlib import secp256k1 as ec +import re from .misc import info, head, AdminError from .utils import is_nonempty_hex_string from .certificate import HSMCertificate -UI_MESSAGE_HEADER = b"HSM:UI:5.1" -SIGNER_MESSAGE_HEADER = b"HSM:SIGNER:5.1" +UI_MESSAGE_HEADER_REGEX = re.compile(b"^HSM:UI:(5.[0-9])") +SIGNER_MESSAGE_HEADER_REGEX = re.compile(b"^HSM:SIGNER:(5.[0-9])") UI_DERIVATION_PATH = "m/44'/0'/0'/0/0" UD_VALUE_LENGTH = 32 PUBKEY_COMPRESSED_LENGTH = 33 @@ -45,6 +46,14 @@ "dad609" +def match_ui_message_header(ui_message): + return UI_MESSAGE_HEADER_REGEX.match(ui_message) + + +def match_signer_message_header(signer_message): + return SIGNER_MESSAGE_HEADER_REGEX.match(signer_message) + + def do_verify_attestation(options): head("### -> Verify UI and Signer attestations", fill="#") @@ -121,12 +130,14 @@ def do_verify_attestation(options): ui_message = bytes.fromhex(ui_result[1]) ui_hash = bytes.fromhex(ui_result[2]) - mh_len = len(UI_MESSAGE_HEADER) - if ui_message[:mh_len] != UI_MESSAGE_HEADER: + mh_match = match_ui_message_header(ui_message) + if mh_match is None: raise AdminError( - f"Invalid UI attestation message header: {ui_message[:mh_len].hex()}") + f"Invalid UI attestation message header: {ui_message.hex()}") + mh_len = len(mh_match.group(0)) - # Extract UD value, UI public key and signer version from message + # Extract UI version, UD value, UI public key and signer version from message + ui_version = mh_match.group(1) ud_value = ui_message[mh_len:mh_len + UD_VALUE_LENGTH].hex() ui_public_key = ui_message[mh_len + UD_VALUE_LENGTH:mh_len + UD_VALUE_LENGTH + PUBKEY_COMPRESSED_LENGTH].hex() @@ -147,6 +158,7 @@ def do_verify_attestation(options): f"Authorized signer hash: {signer_hash}", f"Authorized signer iteration: {signer_iteration}", f"Installed UI hash: {ui_hash.hex()}", + f"Installed UI version: {ui_version.decode()}", ], fill="-", ) @@ -162,11 +174,12 @@ def do_verify_attestation(options): signer_message = bytes.fromhex(signer_result[1]) signer_hash = bytes.fromhex(signer_result[2]) - mh_len = len(SIGNER_MESSAGE_HEADER) - if signer_message[:mh_len] != SIGNER_MESSAGE_HEADER: + mh_match = match_signer_message_header(signer_message) + if mh_match is None: raise AdminError( - f"Invalid Signer attestation message header: {signer_message[:mh_len].hex()}") + f"Invalid Signer attestation message header: {signer_message.hex()}") + mh_len = len(mh_match.group(0)) if signer_message[mh_len:] != pubkeys_hash: reported = signer_message[mh_len:].hex() raise AdminError( @@ -174,11 +187,13 @@ def do_verify_attestation(options): f" but attestation reports {reported}" ) + signer_version = mh_match.group(1) head( ["Signer verified with public keys:"] + pubkeys_output + [ "", f"Hash: {signer_message[mh_len:].hex()}", f"Installed Signer hash: {signer_hash.hex()}", + f"Installed Signer version: {signer_version.decode()}", ], fill="-", ) diff --git a/middleware/ledger/protocol.py b/middleware/ledger/protocol.py index bf595796..4e6af5cc 100644 --- a/middleware/ledger/protocol.py +++ b/middleware/ledger/protocol.py @@ -38,8 +38,8 @@ class HSM2ProtocolLedger(HSM2Protocol): # Current manager supported versions for HSM UI and HSM SIGNER (<=) - UI_VERSION = HSM2FirmwareVersion(5, 1, 0) - APP_VERSION = HSM2FirmwareVersion(5, 1, 0) + UI_VERSION = HSM2FirmwareVersion(5, 2, 0) + APP_VERSION = HSM2FirmwareVersion(5, 2, 0) # Amount of time to wait to make sure the app is opened OPEN_APP_WAIT = 1 # second diff --git a/middleware/tests/admin/test_verify_attestation.py b/middleware/tests/admin/test_verify_attestation.py index 4da01987..3b1968ab 100644 --- a/middleware/tests/admin/test_verify_attestation.py +++ b/middleware/tests/admin/test_verify_attestation.py @@ -25,7 +25,11 @@ from unittest.mock import Mock, call, patch, mock_open from admin.misc import AdminError from admin.pubkeys import PATHS -from admin.verify_attestation import do_verify_attestation +from admin.verify_attestation import ( + do_verify_attestation, + match_ui_message_header, + match_signer_message_header +) import ecdsa import hashlib import logging @@ -33,6 +37,8 @@ logging.disable(logging.CRITICAL) EXPECTED_UI_DERIVATION_PATH = "m/44'/0'/0'/0/0" +SIGNER_HEADER = b"HSM:SIGNER:5.2" +UI_HEADER = b"HSM:UI:5.2" @patch("sys.stdout.write") @@ -65,14 +71,14 @@ def setUp(self): ) self.pubkeys_hash = pubkeys_hash.digest() - self.ui_msg = b"HSM:UI:5.1" + \ + self.ui_msg = UI_HEADER + \ bytes.fromhex("aa"*32) + \ bytes.fromhex("bb"*33) + \ bytes.fromhex("cc"*32) + \ bytes.fromhex("0123") self.ui_hash = bytes.fromhex("ee" * 32) - self.signer_msg = b"HSM:SIGNER:5.1" + \ + self.signer_msg = SIGNER_HEADER + \ bytes.fromhex(self.pubkeys_hash.hex()) self.signer_hash = bytes.fromhex("ff" * 32) @@ -108,6 +114,7 @@ def test_verify_attestation(self, f"Authorized signer hash: {'cc'*32}", "Authorized signer iteration: 291", f"Installed UI hash: {'ee'*32}", + "Installed UI version: 5.2", ], fill="-", ) @@ -118,6 +125,7 @@ def test_verify_attestation(self, "", f"Hash: {self.pubkeys_hash.hex()}", f"Installed Signer hash: {'ff'*32}", + "Installed Signer version: 5.2", ], fill="-", ) @@ -276,3 +284,45 @@ def test_verify_attestation_invalid_signer_att(self, self.assertEqual([call(self.pubkeys_path, 'r')], file_mock.call_args_list) self.assertEqual(("Invalid Signer attestation: error validating 'signer'"), str(e.exception)) + + def test_match_ui_message_header_valid_header(self, _): + valid_headers = [ + UI_HEADER, + b"HSM:UI:5.0", + b"HSM:UI:5.5", + b"HSM:UI:5.9", + ] + for header in valid_headers: + ui_message = header + self.ui_msg[len(UI_HEADER):] + self.assertTrue(match_ui_message_header(ui_message)) + + def test_match_ui_message_header_invalid_header(self, _): + invalid_headers = [ + SIGNER_HEADER, + b"HSM:UI:4.0", + b"HSM:UI:5.X", + ] + for header in invalid_headers: + ui_message = header + self.ui_msg[len(UI_HEADER):] + self.assertFalse(match_ui_message_header(ui_message)) + + def test_match_signer_message_header_valid_header(self, _): + valid_headers = [ + SIGNER_HEADER, + b"HSM:SIGNER:5.0", + b"HSM:SIGNER:5.5", + b"HSM:SIGNER:5.9", + ] + for header in valid_headers: + signer_message = header + self.signer_msg[len(SIGNER_HEADER):] + self.assertTrue(match_signer_message_header(signer_message)) + + def test_match_signer_message_header_invalid_header(self, _): + invalid_headers = [ + UI_HEADER, + b"HSM:SIGNER:4.0", + b"HSM:SIGNER:5.X", + ] + for header in invalid_headers: + signer_message = header + self.signer_msg[len(SIGNER_HEADER):] + self.assertFalse(match_signer_message_header(signer_message)) diff --git a/middleware/tests/ledger/test_protocol.py b/middleware/tests/ledger/test_protocol.py index 3efb7ea6..13de3f4f 100644 --- a/middleware/tests/ledger/test_protocol.py +++ b/middleware/tests/ledger/test_protocol.py @@ -49,7 +49,7 @@ def setUp(self): self.dongle.disconnect = Mock() self.dongle.is_onboarded = Mock(return_value=True) self.dongle.get_current_mode = Mock(return_value=HSM2Dongle.MODE.SIGNER) - self.dongle.get_version = Mock(return_value=HSM2FirmwareVersion(5, 1, 0)) + self.dongle.get_version = Mock(return_value=HSM2FirmwareVersion(5, 2, 0)) self.dongle.get_signer_parameters = Mock(return_value=Mock( min_required_difficulty=123)) self.protocol = HSM2ProtocolLedger(self.pin, self.dongle) diff --git a/middleware/tests/ledger/test_protocol_v1.py b/middleware/tests/ledger/test_protocol_v1.py index be1d0cab..9a98ee65 100644 --- a/middleware/tests/ledger/test_protocol_v1.py +++ b/middleware/tests/ledger/test_protocol_v1.py @@ -47,7 +47,7 @@ def setUp(self): self.dongle.disconnect = Mock() self.dongle.is_onboarded = Mock(return_value=True) self.dongle.get_current_mode = Mock(return_value=HSM2Dongle.MODE.SIGNER) - self.dongle.get_version = Mock(return_value=HSM2FirmwareVersion(5, 1, 0)) + self.dongle.get_version = Mock(return_value=HSM2FirmwareVersion(5, 2, 0)) self.dongle.get_signer_parameters = Mock(return_value=Mock( min_required_difficulty=123)) self.protocol = HSM1ProtocolLedger(self.pin, self.dongle)