From 7dad477413649f6fef3e1bc9811ed0810820dea1 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Tue, 5 Jul 2022 17:18:22 +0200 Subject: [PATCH] Moved EIP 712 commands handling into their own file & renamed some things --- src/apdu_constants.h | 7 ------- src/main.c | 2 +- src/utils.h | 3 +++ .../{entrypoint.c => commands_712.c} | 5 +++-- .../{eip712.h => commands_712.h} | 18 +++++------------- src_features/signMessageEIP712/context.c | 1 - src_features/signMessageEIP712/encode_field.c | 1 - src_features/signMessageEIP712/field_hash.c | 1 - src_features/signMessageEIP712/filtering.c | 2 +- .../signMessageEIP712/format_hash_field_type.c | 2 +- src_features/signMessageEIP712/path.c | 2 +- src_features/signMessageEIP712/sol_typenames.c | 2 +- src_features/signMessageEIP712/type_hash.c | 1 - src_features/signMessageEIP712/ui_logic.c | 1 - .../signMessageEIP712_v0/cmd_signMessage712.c | 1 - 15 files changed, 16 insertions(+), 33 deletions(-) rename src_features/signMessageEIP712/{entrypoint.c => commands_712.c} (98%) rename src_features/signMessageEIP712/{eip712.h => commands_712.h} (67%) diff --git a/src/apdu_constants.h b/src/apdu_constants.h index aeb2986..5f1cbf4 100644 --- a/src/apdu_constants.h +++ b/src/apdu_constants.h @@ -182,13 +182,6 @@ void handleStarkwareUnsafeSign(uint8_t p1, #endif -#ifdef HAVE_EIP712_FULL_SUPPORT -bool handle_eip712_struct_def(const uint8_t *const apdu_buf); -bool handle_eip712_struct_impl(const uint8_t *const apdu_buf); -bool handle_eip712_sign(const uint8_t *const apdu_buf); -bool handle_eip712_filtering(const uint8_t *const apdu_buf); -#endif // HAVE_EIP712_FULL_SUPPORT - extern uint16_t apdu_response_code; #endif // _APDU_CONSTANTS_H_ diff --git a/src/main.c b/src/main.c index 708f2bf..85417e3 100644 --- a/src/main.c +++ b/src/main.c @@ -29,7 +29,7 @@ #include "handle_swap_sign_transaction.h" #include "handle_get_printable_amount.h" #include "handle_check_address.h" -#include "context.h" +#include "commands_712.h" #ifdef HAVE_STARKWARE #include "stark_crypto.h" diff --git a/src/utils.h b/src/utils.h index 3477081..3d772b8 100644 --- a/src/utils.h +++ b/src/utils.h @@ -22,6 +22,9 @@ #include "uint256.h" + +#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) + void array_hexstr(char* strbuf, const void* bin, unsigned int len); void convertUint128BE(const uint8_t *const data, uint32_t length, uint128_t *const target); diff --git a/src_features/signMessageEIP712/entrypoint.c b/src_features/signMessageEIP712/commands_712.c similarity index 98% rename from src_features/signMessageEIP712/entrypoint.c rename to src_features/signMessageEIP712/commands_712.c index 27bbc7f..22feb20 100644 --- a/src_features/signMessageEIP712/entrypoint.c +++ b/src_features/signMessageEIP712/commands_712.c @@ -3,8 +3,8 @@ #include #include #include +#include "commands_712.h" #include "apdu_constants.h" // APDU response codes -#include "eip712.h" #include "context.h" #include "field_hash.h" #include "path.h" @@ -164,13 +164,14 @@ bool handle_eip712_filtering(const uint8_t *const apdu_buf) bool handle_eip712_sign(const uint8_t *const apdu_buf) { bool ret = false; + uint8_t length = apdu_buf[OFFSET_LC]; if (eip712_context == NULL) { apdu_response_code = APDU_RESPONSE_CONDITION_NOT_SATISFIED; } else if (parseBip32(&apdu_buf[OFFSET_CDATA], - &apdu_buf[OFFSET_LC], + &length, &tmpCtx.messageSigningContext.bip32) != NULL) { if (!N_storage.verbose_eip712 && (ui_712_get_filtering_mode() == EIP712_FILTERING_BASIC)) diff --git a/src_features/signMessageEIP712/eip712.h b/src_features/signMessageEIP712/commands_712.h similarity index 67% rename from src_features/signMessageEIP712/eip712.h rename to src_features/signMessageEIP712/commands_712.h index 7561c03..2814e29 100644 --- a/src_features/signMessageEIP712/eip712.h +++ b/src_features/signMessageEIP712/commands_712.h @@ -6,10 +6,6 @@ #include #include -// APDUs INS -#define INS_STRUCT_DEF 0x18 -#define INS_STRUCT_IMPL 0x1A - // APDUs P1 #define P1_COMPLETE 0x00 #define P1_PARTIAL 0xFF @@ -24,17 +20,13 @@ #define P2_KEY 0x00 #define P2_VALUE 0xFF -typedef enum -{ - EIP712_TYPE_HASH, - EIP712_FIELD_HASH, - EIP712_STRUCT_HASH -} e_eip712_hash_type; - -#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) - #define DOMAIN_STRUCT_NAME "EIP712Domain" +bool handle_eip712_struct_def(const uint8_t *const apdu_buf); +bool handle_eip712_struct_impl(const uint8_t *const apdu_buf); +bool handle_eip712_sign(const uint8_t *const apdu_buf); +bool handle_eip712_filtering(const uint8_t *const apdu_buf); + #endif // HAVE_EIP712_FULL_SUPPORT #endif // EIP712_H_ diff --git a/src_features/signMessageEIP712/context.c b/src_features/signMessageEIP712/context.c index 8d30e20..8902797 100644 --- a/src_features/signMessageEIP712/context.c +++ b/src_features/signMessageEIP712/context.c @@ -3,7 +3,6 @@ #include #include #include "context.h" -#include "eip712.h" #include "mem.h" #include "mem_utils.h" #include "sol_typenames.h" diff --git a/src_features/signMessageEIP712/encode_field.c b/src_features/signMessageEIP712/encode_field.c index a4d0f2b..a48d0fa 100644 --- a/src_features/signMessageEIP712/encode_field.c +++ b/src_features/signMessageEIP712/encode_field.c @@ -4,7 +4,6 @@ #include #include "encode_field.h" #include "mem.h" -#include "eip712.h" #include "shared_context.h" #include "apdu_constants.h" // APDU response codes diff --git a/src_features/signMessageEIP712/field_hash.c b/src_features/signMessageEIP712/field_hash.c index 8e2a50b..6a838ed 100644 --- a/src_features/signMessageEIP712/field_hash.c +++ b/src_features/signMessageEIP712/field_hash.c @@ -6,7 +6,6 @@ #include "path.h" #include "mem.h" #include "mem_utils.h" -#include "eip712.h" #include "shared_context.h" #include "ui_logic.h" #include "ethUtils.h" // KECCAK256_HASH_BYTESIZE diff --git a/src_features/signMessageEIP712/filtering.c b/src_features/signMessageEIP712/filtering.c index 7f36e50..5050e31 100644 --- a/src_features/signMessageEIP712/filtering.c +++ b/src_features/signMessageEIP712/filtering.c @@ -5,7 +5,7 @@ #include "ethUstream.h" // INT256_LENGTH #include "apdu_constants.h" // APDU return codes #include "context.h" -#include "eip712.h" +#include "commands_712.h" #include "typed_data.h" #include "path.h" #include "ui_logic.h" diff --git a/src_features/signMessageEIP712/format_hash_field_type.c b/src_features/signMessageEIP712/format_hash_field_type.c index a520abf..7c0a549 100644 --- a/src_features/signMessageEIP712/format_hash_field_type.c +++ b/src_features/signMessageEIP712/format_hash_field_type.c @@ -3,7 +3,7 @@ #include "format_hash_field_type.h" #include "mem.h" #include "mem_utils.h" -#include "eip712.h" +#include "commands_712.h" #include "hash_bytes.h" #include "apdu_constants.h" // APDU response codes #include "typed_data.h" diff --git a/src_features/signMessageEIP712/path.c b/src_features/signMessageEIP712/path.c index 20c3baf..12d802d 100644 --- a/src_features/signMessageEIP712/path.c +++ b/src_features/signMessageEIP712/path.c @@ -5,7 +5,7 @@ #include "path.h" #include "mem.h" #include "context.h" -#include "eip712.h" +#include "commands_712.h" #include "type_hash.h" #include "shared_context.h" #include "ethUtils.h" diff --git a/src_features/signMessageEIP712/sol_typenames.c b/src_features/signMessageEIP712/sol_typenames.c index 6fedb06..50b595b 100644 --- a/src_features/signMessageEIP712/sol_typenames.c +++ b/src_features/signMessageEIP712/sol_typenames.c @@ -3,12 +3,12 @@ #include #include #include "sol_typenames.h" -#include "eip712.h" #include "context.h" #include "mem.h" #include "os_pic.h" #include "apdu_constants.h" // APDU response codes #include "typed_data.h" +#include "utils.h" // ARRAY_SIZE // Bit indicating they are more types associated to this typename #define TYPENAME_MORE_TYPE (1 << 7) diff --git a/src_features/signMessageEIP712/type_hash.c b/src_features/signMessageEIP712/type_hash.c index 0de3adc..5f972a1 100644 --- a/src_features/signMessageEIP712/type_hash.c +++ b/src_features/signMessageEIP712/type_hash.c @@ -5,7 +5,6 @@ #include #include "mem.h" #include "mem_utils.h" -#include "eip712.h" #include "type_hash.h" #include "shared_context.h" #include "ethUtils.h" // KECCAK256_HASH_BYTESIZE diff --git a/src_features/signMessageEIP712/ui_logic.c b/src_features/signMessageEIP712/ui_logic.c index c66bdf2..e6f68aa 100644 --- a/src_features/signMessageEIP712/ui_logic.c +++ b/src_features/signMessageEIP712/ui_logic.c @@ -9,7 +9,6 @@ #include "ux_flow_engine.h" #include "ui_flow_712.h" #include "shared_context.h" -#include "eip712.h" // get_struct_name #include "ethUtils.h" // getEthDisplayableAddress #include "utils.h" // uint256_to_decimal #include "common_712.h" diff --git a/src_features/signMessageEIP712_v0/cmd_signMessage712.c b/src_features/signMessageEIP712_v0/cmd_signMessage712.c index 6865b3a..b878f0a 100644 --- a/src_features/signMessageEIP712_v0/cmd_signMessage712.c +++ b/src_features/signMessageEIP712_v0/cmd_signMessage712.c @@ -2,7 +2,6 @@ #include "apdu_constants.h" #include "utils.h" #include "ui_flow.h" -#include "eip712.h" #include "common_712.h" #include "ethUtils.h"