55#include <stddef.h>
66#include <stdint.h>
77
8+ // clang-format off
89/** Certificate field with a variable length */
9- #define CERTIFICATE_FIELD_VAR_LEN (0xFF)
10+ #define CERTIFICATE_FIELD_VAR_LEN (0xFF)
1011/** Certificate field with a non predefined value */
11- #define CERTIFICATE_FIELD_UNKNOWN_VALUE (0xFFFFFFFF)
12+ #define CERTIFICATE_FIELD_UNKNOWN_VALUE (0xFFFFFFFF)
1213/** Certificate validity index minimum value */
13- #define CERTIFICATE_VALIDITY_INDEX (0x00000001)
14+ #define CERTIFICATE_VALIDITY_INDEX (0x00000001)
1415/** Certificate structure type */
1516#define CERTIFICATE_STRUCTURE_TYPE_CERTIFICATE (0x01)
1617/** Maximum certificate trusted name length */
17- #define CERTIFICATE_TRUSTED_NAME_MAXLEN (32)
18+ #define CERTIFICATE_TRUSTED_NAME_MAXLEN (32)
1819
1920// Fake OS version
2021#define VERSION "1.0.0"
2122
2223/** Certificate tags associated to each certificate field */
23- // clang-format off
2424typedef enum {
25- CERTIFICATE_TAG_STRUCTURE_TYPE = 0x01 , ///< Structure type
26- CERTIFICATE_TAG_VERSION = 0x02 , ///< Certificate version
27- CERTIFICATE_TAG_VALIDITY = 0x10 , ///< Certificate validity
28- CERTIFICATE_TAG_VALIDITY_INDEX = 0x11 , ///< Certificate validity index
29- CERTIFICATE_TAG_CHALLENGE = 0x12 , ///< Challenge value
30- CERTIFICATE_TAG_SIGNER_KEY_ID = 0x13 , ///< Signer key ID
31- CERTIFICATE_TAG_SIGN_ALGO_ID = 0x14 , ///< Signature algorithm with the signer key
32- CERTIFICATE_TAG_SIGNATURE = 0x15 , ///< Signature
33- CERTIFICATE_TAG_TIME_VALIDITY = 0x16 , ///< Time validity
34- CERTIFICATE_TAG_TRUSTED_NAME = 0x20 , ///< Trusted name
35- CERTIFICATE_TAG_PUBLIC_KEY_ID = 0x30 , ///< Public key ID
36- CERTIFICATE_TAG_PUBLIC_KEY_USAGE = 0x31 , ///< Public key usage
37- CERTIFICATE_TAG_PUBLIC_KEY_CURVE_ID = 0x32 , ///< Curve ID on which the public key is defined
38- CERTIFICATE_TAG_COMPRESSED_PUBLIC_KEY = 0x33 , ///< Public key in compressed form
39- CERTIFICATE_TAG_PK_SIGN_ALGO_ID = 0x34 , ///< Signature algorithm with the public key
40- CERTIFICATE_TAG_TARGET_DEVICE = 0x35 , ///< Target device
41- CERTIFICATE_TAG_DEPTH = 0x36 ///< Certificate depth
25+ CERTIFICATE_TAG_STRUCTURE_TYPE = 0x01 , ///< Structure type
26+ CERTIFICATE_TAG_VERSION = 0x02 , ///< Certificate version
27+ CERTIFICATE_TAG_VALIDITY = 0x10 , ///< Certificate validity
28+ CERTIFICATE_TAG_VALIDITY_INDEX = 0x11 , ///< Certificate validity index
29+ CERTIFICATE_TAG_CHALLENGE = 0x12 , ///< Challenge value
30+ CERTIFICATE_TAG_SIGNER_KEY_ID = 0x13 , ///< Signer key ID
31+ CERTIFICATE_TAG_SIGN_ALGO_ID = 0x14 , ///< Signature algorithm with the signer key
32+ CERTIFICATE_TAG_SIGNATURE = 0x15 , ///< Signature
33+ CERTIFICATE_TAG_TIME_VALIDITY = 0x16 , ///< Time validity
34+ CERTIFICATE_TAG_TRUSTED_NAME = 0x20 , ///< Trusted name
35+ CERTIFICATE_TAG_PUBLIC_KEY_ID = 0x30 , ///< Public key ID
36+ CERTIFICATE_TAG_PUBLIC_KEY_USAGE = 0x31 , ///< Public key usage
37+ CERTIFICATE_TAG_PUBLIC_KEY_CURVE_ID = 0x32 , ///< Curve ID on which the public key is defined
38+ CERTIFICATE_TAG_COMPRESSED_PUBLIC_KEY = 0x33 , ///< Public key in compressed form
39+ CERTIFICATE_TAG_PK_SIGN_ALGO_ID = 0x34 , ///< Signature algorithm with the public key
40+ CERTIFICATE_TAG_TARGET_DEVICE = 0x35 , ///< Target device
41+ CERTIFICATE_TAG_DEPTH = 0x36 ///< Certificate depth
4242} os_pki_tag_t ;
43- // clang-format on
4443
4544/** Certificate version possible values */
4645enum {
47- CERTIFICATE_VERSION_02 = 0x02 , ///< Certificate version 2
46+ CERTIFICATE_VERSION_02 = 0x02 , ///< Certificate version 2
4847 CERTIFICATE_VERSION_UNKNOWN
4948};
5049
@@ -58,16 +57,19 @@ enum {
5857 CERTIFICATE_KEY_ID_PARTNER_METADATA ,
5958 CERTIFICATE_KEY_ID_ERC20_METADATA ,
6059 CERTIFICATE_KEY_ID_DOMAIN_METADATA ,
60+ CERTIFICATE_KEY_ID_CAL_CALLDATA ,
61+ CERTIFICATE_KEY_ID_CAL_TRUSTED_NAME ,
62+ CERTIFICATE_KEY_ID_CAL_NETWORK ,
6163 CERTIFICATE_KEY_ID_UNKNOWN
6264};
6365
6466/** Signature algorithm possible values */
6567enum {
66- CERTIFICATE_SIGN_ALGO_ID_ECDSA_SHA256 = 0x01 ,
67- CERTIFICATE_SIGN_ALGO_ID_ECDSA_SHA3_256 = 0x02 ,
68+ CERTIFICATE_SIGN_ALGO_ID_ECDSA_SHA256 = 0x01 ,
69+ CERTIFICATE_SIGN_ALGO_ID_ECDSA_SHA3_256 = 0x02 ,
6870 CERTIFICATE_SIGN_ALGO_ID_ECDSA_KECCAK_256 = 0x03 ,
69- CERTIFICATE_SIGN_ALGO_ID_ECDSA_RIPEMD160 = 0x04 ,
70- CERTIFICATE_SIGN_ALGO_ID_EDDSA_SHA512 = 0x10 ,
71+ CERTIFICATE_SIGN_ALGO_ID_ECDSA_RIPEMD160 = 0x04 ,
72+ CERTIFICATE_SIGN_ALGO_ID_EDDSA_SHA512 = 0x10 ,
7173 CERTIFICATE_SIGN_ALGO_ID_UNKNOWN
7274};
7375
@@ -82,6 +84,11 @@ enum {
8284 CERTIFICATE_PUBLIC_KEY_USAGE_PLUGIN_METADATA ,
8385 CERTIFICATE_PUBLIC_KEY_USAGE_COIN_META ,
8486 CERTIFICATE_PUBLIC_KEY_USAGE_SEED_ID_AUTH ,
87+ CERTIFICATE_PUBLIC_KEY_USAGE_TX_SIMU_SIGNER ,
88+ CERTIFICATE_PUBLIC_KEY_USAGE_CALLDATA ,
89+ CERTIFICATE_PUBLIC_KEY_USAGE_NETWORK ,
90+ CERTIFICATE_PUBLIC_KEY_USAGE_SWAP_TEMPLATE ,
91+ CERTIFICATE_PUBLIC_KEY_USAGE_LES_MULTISIG ,
8592 CERTIFICATE_PUBLIC_KEY_USAGE_UNKNOWN ,
8693};
8794
9299 CERTIFICATE_TARGET_DEVICE_NANOSP ,
93100 CERTIFICATE_TARGET_DEVICE_STAX ,
94101 CERTIFICATE_TARGET_DEVICE_FLEX ,
102+ CERTIFICATE_TARGET_DEVICE_APEX_P ,
103+ CERTIFICATE_TARGET_DEVICE_APEX_M ,
95104 CERTIFICATE_TARGET_DEVICE_UNKNOWN
96105};
97106
@@ -101,7 +110,6 @@ typedef struct {
101110 uint8_t field_len ;
102111} os_pki_certificate_tag_info_t ;
103112
104- // clang-format off
105113/** Array of field length and field maximum value corresponding to each tag */
106114static const os_pki_certificate_tag_info_t C_os_pki_certificate_tag_info [] = {
107115 [CERTIFICATE_TAG_STRUCTURE_TYPE ] = {CERTIFICATE_STRUCTURE_TYPE_CERTIFICATE , 0x01 },
@@ -122,15 +130,15 @@ static const os_pki_certificate_tag_info_t C_os_pki_certificate_tag_info[] = {
122130 [CERTIFICATE_TAG_SIGNATURE ] = {CERTIFICATE_FIELD_UNKNOWN_VALUE , CERTIFICATE_FIELD_VAR_LEN },
123131 [CERTIFICATE_TAG_DEPTH ] = {CERTIFICATE_FIELD_UNKNOWN_VALUE , 0x01 },
124132};
125- // clang-format on
126133
127134static const cx_md_t C_os_sign_algo_hash_info [] = {
128- [CERTIFICATE_SIGN_ALGO_ID_ECDSA_SHA256 ] = CX_SHA256 ,
129- [CERTIFICATE_SIGN_ALGO_ID_ECDSA_SHA3_256 ] = CX_SHA3_256 ,
135+ [CERTIFICATE_SIGN_ALGO_ID_ECDSA_SHA256 ] = CX_SHA256 ,
136+ [CERTIFICATE_SIGN_ALGO_ID_ECDSA_SHA3_256 ] = CX_SHA3_256 ,
130137 [CERTIFICATE_SIGN_ALGO_ID_ECDSA_KECCAK_256 ] = CX_KECCAK ,
131- [CERTIFICATE_SIGN_ALGO_ID_ECDSA_RIPEMD160 ] = CX_RIPEMD160 ,
132- [CERTIFICATE_SIGN_ALGO_ID_EDDSA_SHA512 ] = CX_SHA512
138+ [CERTIFICATE_SIGN_ALGO_ID_ECDSA_RIPEMD160 ] = CX_RIPEMD160 ,
139+ [CERTIFICATE_SIGN_ALGO_ID_EDDSA_SHA512 ] = CX_SHA512
133140};
141+ // clang-format on
134142
135143uint32_t sys_os_pki_load_certificate (uint8_t expected_key_usage ,
136144 uint8_t * certificate ,
0 commit comments