libtropic
C library for TROPIC01 chip
libtropic_common.h File Reference

Shared definitions and functions commonly used by more libtropic's layers. More...

#include "libtropic_macros.h"
#include "stdint.h"
#include "tropic01_application_co.h"
#include "tropic01_bootloader_co.h"
Include dependency graph for libtropic_common.h:
This graph shows which files directly or indirectly include this file:

Data Structures

struct  lt_l3_gen_frame_t
 Generic L3 command and result frame. More...
 
struct  lt_l2_state_t
 
struct  lt_l3_state_t
 
struct  lt_handle_t
 
struct  lt_cert_store_t
 Certificate store contents. More...
 
struct  lt_ser_num_t
 Structure used to parse content of CHIP_ID field. More...
 
struct  lt_chip_id_t
 Data in this struct comes from BP (batch package) yml file. CHIP_INFO is read into this struct. More...
 
struct  header_boot_v1_t
 When in MAINTENANCE mode, it is possible to read firmware header from a firmware bank. Returned data differs based on bootloader version. This header layout is returned by bootloader version v1.0.1. More...
 
struct  header_boot_v2_t
 When in MAINTENANCE mode, it is possible to read firmware header from a firmware bank. Returned data differs based on bootloader version. This header layout is returned by bootloader version v1.0.1. More...
 
struct  session_state_t
 Structure used to store variables used during establishment of a secure session. More...
 
struct  lt_config_obj_desc_t
 This structure is used in this example to simplify looping through all config addresses and printing out them into debug. More...
 
struct  lt_config_t
 Structure to hold all configuration objects. More...
 

Macros

#define LT_STATIC   static
 
#define SESSION_ON   0xA5A55A5A
 This particular value means that secure session was successfully established and it is currently ON.
 
#define SESSION_OFF   0x0
 This particular value means that secure session is currently OFF.
 
#define L3_ID_SIZE   1u
 Size of l3 ID field.
 
#define L3_TAG_SIZE   16u
 Size of l3 TAG field.
 
#define L3_IV_SIZE   12u
 Size of IV.
 
#define L3_RES_SIZE_SIZE   2
 Size of RES_SIZE field.
 
#define L3_CMD_SIZE_SIZE   2
 Size of CMD_SIZE field.
 
#define L3_CMD_ID_SIZE   (1)
 Size of l3 CMD_ID field.
 
#define L3_CMD_DATA_SIZE_MAX   (4111)
 Maximal size of l3 RES/RSP DATA field.
 
#define L2_CHUNK_MAX_DATA_SIZE   252u
 Maximal size of data field in one L2 transfer.
 
#define L2_MAX_FRAME_SIZE   (1 + 1 + L2_CHUNK_MAX_DATA_SIZE + 2)
 Maximal size of one l2 frame.
 
#define LT_L1_LEN_MIN   1
 Maximal number of data bytes in one L1 transfer.
 
#define LT_L1_LEN_MAX   (1 + 1 + 1 + L2_CHUNK_MAX_DATA_SIZE + 2)
 Maximal number of data bytes in one L1 transfer.
 
#define L3_CYPHERTEXT_MAX_SIZE   (L3_CMD_ID_SIZE + L3_CMD_DATA_SIZE_MAX)
 Maximum size of l3 ciphertext (or decrypted l3 packet)
 
#define L3_PACKET_MAX_SIZE   (L3_RES_SIZE_SIZE + L3_CYPHERTEXT_MAX_SIZE + 13 + L3_TAG_SIZE)
 Max size of one unit of transport on l3 layer. More...
 
#define LT_SIZE_OF_L3_BUFF   L3_PACKET_MAX_SIZE
 
#define LT_TROPIC01_REBOOT_DELAY_MS   250
 
#define LT_L2_GET_INFO_REQ_CERT_SIZE_TOTAL   3840
 Maximal size of TROPIC01's certificate.
 
#define LT_L2_GET_INFO_REQ_CERT_SIZE_SINGLE   700
 
#define LT_CERT_STORE_VERSION   1
 
#define LT_NUM_CERTIFICATES   4
 
#define LT_L2_GET_INFO_CHIP_ID_SIZE   128
 Maximal size of returned CHIP ID.
 
#define CHIP_PKG_BARE_SILICON_ID   0x8000
 Package type ID for bare silicon.
 
#define CHIP_PKG_QFN32_ID   0x80AA
 Package type ID for QFN32.
 
#define FAB_ID_TROPIC_SQUARE_LAB   0xF00
 
#define FAB_ID_EPS_BRNO   0x001
 
#define LT_L2_GET_INFO_RISCV_FW_SIZE   4
 Maximal size of returned RISCV fw version.
 
#define LT_L2_GET_INFO_SPECT_FW_SIZE   4
 Maximal size of returned SPECT fw version.
 
#define LT_L2_GET_INFO_FW_HEADER_SIZE_BOOT_V1   20
 Maximal size of returned fw header.
 
#define LT_L2_GET_INFO_FW_HEADER_SIZE_BOOT_V2   52
 
#define LT_L2_GET_INFO_FW_HEADER_SIZE_BOOT_V2_EMPTY_BANK   0
 
#define LT_L2_GET_INFO_FW_HEADER_SIZE   LT_L2_GET_INFO_FW_HEADER_SIZE_BOOT_V2
 Maximal size of returned fw header.
 
#define LT_L2_SLEEP_KIND_SLEEP   0x05
 Basic sleep mode.
 
#define LT_L2_SLEEP_KIND_DEEP_SLEEP   0x0a
 Deep sleep mode.
 
#define LT_MODE_APP   0x01
 Reboot TROPIC01 chip.
 
#define LT_MODE_MAINTENANCE   0x03
 Reboot TROPIC01 chip and stay in maintenance mode.
 
#define GET_LOG_MAX_MSG_LEN   255
 Maximal length of TROPIC01's log message.
 
#define PING_LEN_MAX   4096
 Maximal length of Ping command message.
 
#define R_MEM_DATA_SIZE_MIN   (1)
 Minimal size of one data slot in bytes.
 
#define R_MEM_DATA_SIZE_MAX   (444)
 Maximal size of one data slot in bytes.
 
#define R_MEM_DATA_SLOT_MAX   (511)
 Index of last data slot. TROPIC01 contains 512 slots indexed 0-511.
 
#define RANDOM_VALUE_GET_LEN_MAX   255
 Maximum number of random bytes requested at once.
 
#define MAC_AND_DESTROY_DATA_SIZE   32u
 Maximal size of returned MAC-and-Destroy data.
 
#define MACANDD_ROUNDS_MAX   128
 Maximal number of Mac And Destroy tries possible with TROPIC01.
 
#define SERIAL_CODE_SIZE   32u
 Maximal size of returned serial code.
 
#define TO_PAIRING_KEY_SH0(x)   ((x) << 0)
 Macro to control which session can access command targeting content of pairing key SH0.
 
#define TO_PAIRING_KEY_SH1(x)   ((x) << 8)
 Macro to control which session can access command targeting content of pairing key SH1.
 
#define TO_PAIRING_KEY_SH2(x)   ((x) << 16)
 Macro to control which session can access command targeting content of pairing key SH2.
 
#define TO_PAIRING_KEY_SH3(x)   ((x) << 24)
 Macro to control which session can access command targeting content of pairing key SH3.
 
#define TO_LT_MCOUNTER_0_3(x)   ((x) << 0)
 Macro to control which session can access command targeting counter 0-3.
 
#define TO_LT_MCOUNTER_4_7(x)   ((x) << 8)
 Macro to control which session can access command targeting counter 4-7.
 
#define TO_LT_MCOUNTER_8_11(x)   ((x) << 16)
 Macro to control which session can access command targeting counter 8-11.
 
#define TO_LT_MCOUNTER_12_15(x)   ((x) << 24)
 Macro to control which session can access command targeting counter 12-15.
 
#define TO_ECC_KEY_SLOT_0_7(x)   ((x) << 0)
 Macro to control which session can access command targeting ECC_SLOT 0-7.
 
#define TO_ECC_KEY_SLOT_8_15(x)   ((x) << 8)
 Macro to control which session can access command targeting ECC_SLOT 8-15.
 
#define TO_ECC_KEY_SLOT_16_23(x)   ((x) << 16)
 Macro to control which session can access command targeting ECC_SLOT 16-23.
 
#define TO_ECC_KEY_SLOT_24_31(x)   ((x) << 24)
 Macro to control which session can access command targeting ECC_SLOT 24-31.
 
#define TO_MACANDD_SLOT_0_31(x)   ((x) << APPLICATION_CO_CFG_UAP_MAC_AND_DESTROY_MACANDD_0_31_POS)
 Macro to control which session can access command targeting MACANDD slot 0-31.
 
#define TO_MACANDD_SLOT_32_63(x)   ((x) << APPLICATION_CO_CFG_UAP_MAC_AND_DESTROY_MACANDD_32_63_POS)
 Macro to control which session can access command targeting MACANDD slot 32-63.
 
#define TO_MACANDD_SLOT_64_95(x)   ((x) << APPLICATION_CO_CFG_UAP_MAC_AND_DESTROY_MACANDD_64_95_POS)
 Macro to control which session can access command targeting MACANDD slot 64-95.
 
#define TO_MACANDD_SLOT_96_127(x)   ((x) << APPLICATION_CO_CFG_UAP_MAC_AND_DESTROY_MACANDD_96_127_POS)
 Macro to control which session can access command targeting MACANDD slot 96-127.
 
#define SESSION_SH0_HAS_ACCESS   (uint8_t)0x01
 Macro to control if session SH0 has access to a specific command.
 
#define SESSION_SH1_HAS_ACCESS   (uint8_t)0x02
 Macro to control if session SH1 has access to a specific command.
 
#define SESSION_SH2_HAS_ACCESS   (uint8_t)0x04
 Macro to control if session SH2 has access to a specific command.
 
#define SESSION_SH3_HAS_ACCESS   (uint8_t)0x08
 Macro to control if session SH3 has access to a specific command.
 
#define LT_CONFIG_OBJ_CNT   27
 Number of configuration objects in lt_config_t.
 

Typedefs

typedef struct lt_l3_gen_frame_t lt_l3_gen_frame_t
 Generic L3 command and result frame.
 
typedef struct lt_l2_state_t lt_l2_state_t
 
typedef struct lt_l3_state_t lt_l3_state_t
 
typedef struct lt_handle_t lt_handle_t
 
typedef enum lt_ret_t lt_ret_t
 Enum return type. More...
 
typedef enum lt_cert_kind_t lt_cert_kind_t
 
typedef struct lt_cert_store_t lt_cert_store_t
 Certificate store contents.
 
typedef struct lt_ser_num_t lt_ser_num_t
 Structure used to parse content of CHIP_ID field. More...
 
typedef struct lt_chip_id_t lt_chip_id_t
 Data in this struct comes from BP (batch package) yml file. CHIP_INFO is read into this struct.
 
typedef enum bank_id_t bank_id_t
 BANK ID.
 
typedef struct header_boot_v1_t header_boot_v1_t
 When in MAINTENANCE mode, it is possible to read firmware header from a firmware bank. Returned data differs based on bootloader version. This header layout is returned by bootloader version v1.0.1.
 
typedef struct header_boot_v2_t header_boot_v2_t
 When in MAINTENANCE mode, it is possible to read firmware header from a firmware bank. Returned data differs based on bootloader version. This header layout is returned by bootloader version v1.0.1.
 
typedef enum pkey_index_t pkey_index_t
 Pairing key indexes corresponds to S_HiPub.
 
typedef struct session_state_t session_state_t
 Structure used to store variables used during establishment of a secure session.
 
typedef enum pairing_key_slot_t pairing_key_slot_t
 ECC key slot indexes.
 
typedef enum CONFIGURATION_OBJECTS_REGS CONFIGURATION_OBJECTS_REGS
 CONFIGURATION_OBJECTS_REGISTERS memory map.
 
typedef enum CONFIGURATION_OBJECTS_REGS_IDX CONFIGURATION_OBJECTS_REGS_IDX
 CONFIGURATION_OBJECTS_REGISTERS index map to lt_config_t. More...
 
typedef enum ecc_slot_t ecc_slot_t
 ECC key slot indexes.
 
typedef enum lt_ecc_curve_type_t lt_ecc_curve_type_t
 ECC key type.
 
typedef enum ecc_key_origin_t ecc_key_origin_t
 ECC key origin.
 
typedef enum lt_mcounter_index_t lt_mcounter_index_t
 Use to choose one from 16 counters.
 
typedef enum mac_and_destroy_slot_t mac_and_destroy_slot_t
 Mac-and-Destroy slot indexes.
 
typedef struct lt_config_obj_desc_t lt_config_obj_desc_t
 This structure is used in this example to simplify looping through all config addresses and printing out them into debug.
 
typedef struct lt_config_t lt_config_t
 Structure to hold all configuration objects.
 

Enumerations

enum  lt_ret_t {
  LT_OK = 0 , LT_FAIL = 1 , LT_HOST_NO_SESSION = 2 , LT_PARAM_ERR = 3 ,
  LT_CRYPTO_ERR = 4 , LT_L1_SPI_ERROR = 5 , LT_L1_DATA_LEN_ERROR = 6 , LT_L1_CHIP_STARTUP_MODE = 7 ,
  LT_L1_CHIP_ALARM_MODE = 8 , LT_L1_CHIP_BUSY = 9 , LT_L1_INT_TIMEOUT = 10 , LT_L3_R_MEM_DATA_READ_SLOT_EMPTY = 11 ,
  LT_L3_R_MEM_DATA_WRITE_WRITE_FAIL = 12 , LT_L3_R_MEM_DATA_WRITE_SLOT_EXPIRED = 13 , LT_L3_ECC_INVALID_KEY = 14 , LT_L3_MCOUNTER_UPDATE_UPDATE_ERR = 15 ,
  LT_L3_COUNTER_INVALID = 16 , LT_L3_PAIRING_KEY_EMPTY = 17 , LT_L3_PAIRING_KEY_INVALID = 18 , LT_L3_OK = 19 ,
  LT_L3_FAIL = 20 , LT_L3_UNAUTHORIZED = 21 , LT_L3_INVALID_CMD = 22 , LT_L3_DATA_LEN_ERROR = 23 ,
  LT_L2_IN_CRC_ERR = 24 , LT_L2_REQ_CONT = 25 , LT_L2_RES_CONT = 26 , LT_L2_RESP_DISABLED = 27 ,
  LT_L2_HSK_ERR = 28 , LT_L2_NO_SESSION = 29 , LT_L2_TAG_ERR = 30 , LT_L2_CRC_ERR = 31 ,
  LT_L2_GEN_ERR = 32 , LT_L2_NO_RESP = 33 , LT_L2_UNKNOWN_REQ = 34 , LT_L2_STATUS_NOT_RECOGNIZED = 35 ,
  LT_L2_DATA_LEN_ERROR = 36 , LT_CERT_STORE_INVALID = 37 , LT_CERT_UNSUPPORTED = 38 , LT_CERT_ITEM_NOT_FOUND = 39 ,
  LT_NONCE_OVERFLOW = 40 , LT_RET_T_LAST_VALUE = 41
}
 Enum return type. More...
 
enum  lt_cert_kind_t { LT_CERT_KIND_DEVICE = 0 , LT_CERT_KIND_XXXX = 1 , LT_CERT_KIND_TROPIC01 = 2 , LT_CERT_KIND_TROPIC_ROOT = 3 }
 
enum  bank_id_t { FW_BANK_FW1 = 1 , FW_BANK_FW2 = 2 , FW_BANK_SPECT1 = 17 , FW_BANK_SPECT2 = 18 }
 BANK ID.
 
enum  pkey_index_t { PAIRING_KEY_SLOT_INDEX_0 , PAIRING_KEY_SLOT_INDEX_1 , PAIRING_KEY_SLOT_INDEX_2 , PAIRING_KEY_SLOT_INDEX_3 }
 Pairing key indexes corresponds to S_HiPub.
 
enum  pairing_key_slot_t { SH0PUB = 0 , SH1PUB , SH2PUB , SH3PUB }
 ECC key slot indexes.
 
enum  CONFIGURATION_OBJECTS_REGS {
  CONFIGURATION_OBJECTS_CFG_START_UP_ADDR = BOOTLOADER_CO_CFG_START_UP_ADDR , CONFIGURATION_OBJECTS_CFG_SENSORS_ADDR = BOOTLOADER_CO_CFG_SENSORS_ADDR , CONFIGURATION_OBJECTS_CFG_DEBUG_ADDR = BOOTLOADER_CO_CFG_DEBUG_ADDR , CONFIGURATION_OBJECTS_CFG_GPO_ADDR = APPLICATION_CO_CFG_GPO_ADDR ,
  CONFIGURATION_OBJECTS_CFG_SLEEP_MODE_ADDR = APPLICATION_CO_CFG_SLEEP_MODE_ADDR , CONFIGURATION_OBJECTS_CFG_UAP_PAIRING_KEY_WRITE_ADDR = APPLICATION_CO_CFG_UAP_PAIRING_KEY_WRITE_ADDR , CONFIGURATION_OBJECTS_CFG_UAP_PAIRING_KEY_READ_ADDR = APPLICATION_CO_CFG_UAP_PAIRING_KEY_READ_ADDR , CONFIGURATION_OBJECTS_CFG_UAP_PAIRING_KEY_INVALIDATE_ADDR = APPLICATION_CO_CFG_UAP_PAIRING_KEY_INVALIDATE_ADDR ,
  CONFIGURATION_OBJECTS_CFG_UAP_R_CONFIG_WRITE_ERASE_ADDR = APPLICATION_CO_CFG_UAP_R_CONFIG_WRITE_ERASE_ADDR , CONFIGURATION_OBJECTS_CFG_UAP_R_CONFIG_READ_ADDR = APPLICATION_CO_CFG_UAP_R_CONFIG_READ_ADDR , CONFIGURATION_OBJECTS_CFG_UAP_I_CONFIG_WRITE_ADDR = APPLICATION_CO_CFG_UAP_I_CONFIG_WRITE_ADDR , CONFIGURATION_OBJECTS_CFG_UAP_I_CONFIG_READ_ADDR = APPLICATION_CO_CFG_UAP_I_CONFIG_READ_ADDR ,
  CONFIGURATION_OBJECTS_CFG_UAP_PING_ADDR = APPLICATION_CO_CFG_UAP_PING_ADDR , CONFIGURATION_OBJECTS_CFG_UAP_R_MEM_DATA_WRITE_ADDR = APPLICATION_CO_CFG_UAP_R_MEM_DATA_WRITE_ADDR , CONFIGURATION_OBJECTS_CFG_UAP_R_MEM_DATA_READ_ADDR = APPLICATION_CO_CFG_UAP_R_MEM_DATA_READ_ADDR , CONFIGURATION_OBJECTS_CFG_UAP_R_MEM_DATA_ERASE_ADDR = APPLICATION_CO_CFG_UAP_R_MEM_DATA_ERASE_ADDR ,
  CONFIGURATION_OBJECTS_CFG_UAP_RANDOM_VALUE_GET_ADDR = APPLICATION_CO_CFG_UAP_RANDOM_VALUE_GET_ADDR , CONFIGURATION_OBJECTS_CFG_UAP_ECC_KEY_GENERATE_ADDR = APPLICATION_CO_CFG_UAP_ECC_KEY_GENERATE_ADDR , CONFIGURATION_OBJECTS_CFG_UAP_ECC_KEY_STORE_ADDR = APPLICATION_CO_CFG_UAP_ECC_KEY_STORE_ADDR , CONFIGURATION_OBJECTS_CFG_UAP_ECC_KEY_READ_ADDR = APPLICATION_CO_CFG_UAP_ECC_KEY_READ_ADDR ,
  CONFIGURATION_OBJECTS_CFG_UAP_ECC_KEY_ERASE_ADDR = APPLICATION_CO_CFG_UAP_ECC_KEY_ERASE_ADDR , CONFIGURATION_OBJECTS_CFG_UAP_ECDSA_SIGN_ADDR = APPLICATION_CO_CFG_UAP_ECDSA_SIGN_ADDR , CONFIGURATION_OBJECTS_CFG_UAP_EDDSA_SIGN_ADDR = APPLICATION_CO_CFG_UAP_EDDSA_SIGN_ADDR , CONFIGURATION_OBJECTS_CFG_UAP_MCOUNTER_INIT_ADDR = APPLICATION_CO_CFG_UAP_MCOUNTER_INIT_ADDR ,
  CONFIGURATION_OBJECTS_CFG_UAP_MCOUNTER_GET_ADDR = APPLICATION_CO_CFG_UAP_MCOUNTER_GET_ADDR , CONFIGURATION_OBJECTS_CFG_UAP_MCOUNTER_UPDATE_ADDR = APPLICATION_CO_CFG_UAP_MCOUNTER_UPDATE_ADDR , CONFIGURATION_OBJECTS_CFG_UAP_MAC_AND_DESTROY_ADDR = APPLICATION_CO_CFG_UAP_MAC_AND_DESTROY_ADDR
}
 CONFIGURATION_OBJECTS_REGISTERS memory map.
 
enum  CONFIGURATION_OBJECTS_REGS_IDX {
  CONFIGURATION_OBJECTS_CFG_START_UP_IDX = 0 , CONFIGURATION_OBJECTS_CFG_SENSORS_IDX , CONFIGURATION_OBJECTS_CFG_DEBUG_IDX , CONFIGURATION_OBJECTS_CFG_GPO_IDX ,
  CONFIGURATION_OBJECTS_CFG_SLEEP_MODE_IDX , CONFIGURATION_OBJECTS_CFG_UAP_PAIRING_KEY_WRITE_IDX , CONFIGURATION_OBJECTS_CFG_UAP_PAIRING_KEY_READ_IDX , CONFIGURATION_OBJECTS_CFG_UAP_PAIRING_KEY_INVALIDATE_IDX ,
  CONFIGURATION_OBJECTS_CFG_UAP_R_CONFIG_WRITE_ERASE_IDX , CONFIGURATION_OBJECTS_CFG_UAP_R_CONFIG_READ_IDX , CONFIGURATION_OBJECTS_CFG_UAP_I_CONFIG_WRITE_IDX , CONFIGURATION_OBJECTS_CFG_UAP_I_CONFIG_READ_IDX ,
  CONFIGURATION_OBJECTS_CFG_UAP_PING_IDX , CONFIGURATION_OBJECTS_CFG_UAP_R_MEM_DATA_WRITE_IDX , CONFIGURATION_OBJECTS_CFG_UAP_R_MEM_DATA_READ_IDX , CONFIGURATION_OBJECTS_CFG_UAP_R_MEM_DATA_ERASE_IDX ,
  CONFIGURATION_OBJECTS_CFG_UAP_RANDOM_VALUE_GET_IDX , CONFIGURATION_OBJECTS_CFG_UAP_ECC_KEY_GENERATE_IDX , CONFIGURATION_OBJECTS_CFG_UAP_ECC_KEY_STORE_IDX , CONFIGURATION_OBJECTS_CFG_UAP_ECC_KEY_READ_IDX ,
  CONFIGURATION_OBJECTS_CFG_UAP_ECC_KEY_ERASE_IDX , CONFIGURATION_OBJECTS_CFG_UAP_ECDSA_SIGN_IDX , CONFIGURATION_OBJECTS_CFG_UAP_EDDSA_SIGN_IDX , CONFIGURATION_OBJECTS_CFG_UAP_MCOUNTER_INIT_IDX ,
  CONFIGURATION_OBJECTS_CFG_UAP_MCOUNTER_GET_IDX , CONFIGURATION_OBJECTS_CFG_UAP_MCOUNTER_UPDATE_IDX , CONFIGURATION_OBJECTS_CFG_UAP_MAC_AND_DESTROY_IDX
}
 CONFIGURATION_OBJECTS_REGISTERS index map to lt_config_t. More...
 
enum  ecc_slot_t {
  ECC_SLOT_0 = 0 , ECC_SLOT_1 , ECC_SLOT_2 , ECC_SLOT_3 ,
  ECC_SLOT_4 , ECC_SLOT_5 , ECC_SLOT_6 , ECC_SLOT_7 ,
  ECC_SLOT_8 , ECC_SLOT_9 , ECC_SLOT_10 , ECC_SLOT_11 ,
  ECC_SLOT_12 , ECC_SLOT_13 , ECC_SLOT_14 , ECC_SLOT_15 ,
  ECC_SLOT_16 , ECC_SLOT_17 , ECC_SLOT_18 , ECC_SLOT_19 ,
  ECC_SLOT_20 , ECC_SLOT_21 , ECC_SLOT_22 , ECC_SLOT_23 ,
  ECC_SLOT_24 , ECC_SLOT_25 , ECC_SLOT_26 , ECC_SLOT_27 ,
  ECC_SLOT_28 , ECC_SLOT_29 , ECC_SLOT_30 , ECC_SLOT_31
}
 ECC key slot indexes.
 
enum  lt_ecc_curve_type_t { CURVE_P256 = 1 , CURVE_ED25519 }
 ECC key type.
 
enum  ecc_key_origin_t { CURVE_GENERATED = 1 , CURVE_STORED }
 ECC key origin.
 
enum  lt_mcounter_index_t {
  MCOUNTER_INDEX_0 = 0 , MCOUNTER_INDEX_1 = 1 , MCOUNTER_INDEX_2 = 2 , MCOUNTER_INDEX_3 = 3 ,
  MCOUNTER_INDEX_4 = 4 , MCOUNTER_INDEX_5 = 5 , MCOUNTER_INDEX_6 = 6 , MCOUNTER_INDEX_7 = 7 ,
  MCOUNTER_INDEX_8 = 8 , MCOUNTER_INDEX_9 = 9 , MCOUNTER_INDEX_10 = 10 , MCOUNTER_INDEX_11 = 11 ,
  MCOUNTER_INDEX_12 = 12 , MCOUNTER_INDEX_13 = 13 , MCOUNTER_INDEX_14 = 14 , MCOUNTER_INDEX_15 = 15
}
 Use to choose one from 16 counters.
 
enum  mac_and_destroy_slot_t {
  MAC_AND_DESTROY_SLOT_0 = 0 , MAC_AND_DESTROY_SLOT_1 , MAC_AND_DESTROY_SLOT_2 , MAC_AND_DESTROY_SLOT_3 ,
  MAC_AND_DESTROY_SLOT_4 , MAC_AND_DESTROY_SLOT_5 , MAC_AND_DESTROY_SLOT_6 , MAC_AND_DESTROY_SLOT_7 ,
  MAC_AND_DESTROY_SLOT_8 , MAC_AND_DESTROY_SLOT_9 , MAC_AND_DESTROY_SLOT_10 , MAC_AND_DESTROY_SLOT_11 ,
  MAC_AND_DESTROY_SLOT_12 , MAC_AND_DESTROY_SLOT_13 , MAC_AND_DESTROY_SLOT_14 , MAC_AND_DESTROY_SLOT_15 ,
  MAC_AND_DESTROY_SLOT_16 , MAC_AND_DESTROY_SLOT_17 , MAC_AND_DESTROY_SLOT_18 , MAC_AND_DESTROY_SLOT_19 ,
  MAC_AND_DESTROY_SLOT_20 , MAC_AND_DESTROY_SLOT_21 , MAC_AND_DESTROY_SLOT_22 , MAC_AND_DESTROY_SLOT_23 ,
  MAC_AND_DESTROY_SLOT_24 , MAC_AND_DESTROY_SLOT_25 , MAC_AND_DESTROY_SLOT_26 , MAC_AND_DESTROY_SLOT_27 ,
  MAC_AND_DESTROY_SLOT_28 , MAC_AND_DESTROY_SLOT_29 , MAC_AND_DESTROY_SLOT_30 , MAC_AND_DESTROY_SLOT_31 ,
  MAC_AND_DESTROY_SLOT_32 , MAC_AND_DESTROY_SLOT_33 , MAC_AND_DESTROY_SLOT_34 , MAC_AND_DESTROY_SLOT_35 ,
  MAC_AND_DESTROY_SLOT_36 , MAC_AND_DESTROY_SLOT_37 , MAC_AND_DESTROY_SLOT_38 , MAC_AND_DESTROY_SLOT_39 ,
  MAC_AND_DESTROY_SLOT_40 , MAC_AND_DESTROY_SLOT_41 , MAC_AND_DESTROY_SLOT_42 , MAC_AND_DESTROY_SLOT_43 ,
  MAC_AND_DESTROY_SLOT_44 , MAC_AND_DESTROY_SLOT_45 , MAC_AND_DESTROY_SLOT_46 , MAC_AND_DESTROY_SLOT_47 ,
  MAC_AND_DESTROY_SLOT_48 , MAC_AND_DESTROY_SLOT_49 , MAC_AND_DESTROY_SLOT_50 , MAC_AND_DESTROY_SLOT_51 ,
  MAC_AND_DESTROY_SLOT_52 , MAC_AND_DESTROY_SLOT_53 , MAC_AND_DESTROY_SLOT_54 , MAC_AND_DESTROY_SLOT_55 ,
  MAC_AND_DESTROY_SLOT_56 , MAC_AND_DESTROY_SLOT_57 , MAC_AND_DESTROY_SLOT_58 , MAC_AND_DESTROY_SLOT_59 ,
  MAC_AND_DESTROY_SLOT_60 , MAC_AND_DESTROY_SLOT_61 , MAC_AND_DESTROY_SLOT_62 , MAC_AND_DESTROY_SLOT_63 ,
  MAC_AND_DESTROY_SLOT_64 , MAC_AND_DESTROY_SLOT_65 , MAC_AND_DESTROY_SLOT_66 , MAC_AND_DESTROY_SLOT_67 ,
  MAC_AND_DESTROY_SLOT_68 , MAC_AND_DESTROY_SLOT_69 , MAC_AND_DESTROY_SLOT_70 , MAC_AND_DESTROY_SLOT_71 ,
  MAC_AND_DESTROY_SLOT_72 , MAC_AND_DESTROY_SLOT_73 , MAC_AND_DESTROY_SLOT_74 , MAC_AND_DESTROY_SLOT_75 ,
  MAC_AND_DESTROY_SLOT_76 , MAC_AND_DESTROY_SLOT_77 , MAC_AND_DESTROY_SLOT_78 , MAC_AND_DESTROY_SLOT_79 ,
  MAC_AND_DESTROY_SLOT_80 , MAC_AND_DESTROY_SLOT_81 , MAC_AND_DESTROY_SLOT_82 , MAC_AND_DESTROY_SLOT_83 ,
  MAC_AND_DESTROY_SLOT_84 , MAC_AND_DESTROY_SLOT_85 , MAC_AND_DESTROY_SLOT_86 , MAC_AND_DESTROY_SLOT_87 ,
  MAC_AND_DESTROY_SLOT_88 , MAC_AND_DESTROY_SLOT_89 , MAC_AND_DESTROY_SLOT_90 , MAC_AND_DESTROY_SLOT_91 ,
  MAC_AND_DESTROY_SLOT_92 , MAC_AND_DESTROY_SLOT_93 , MAC_AND_DESTROY_SLOT_94 , MAC_AND_DESTROY_SLOT_95 ,
  MAC_AND_DESTROY_SLOT_96 , MAC_AND_DESTROY_SLOT_97 , MAC_AND_DESTROY_SLOT_98 , MAC_AND_DESTROY_SLOT_99 ,
  MAC_AND_DESTROY_SLOT_100 , MAC_AND_DESTROY_SLOT_101 , MAC_AND_DESTROY_SLOT_102 , MAC_AND_DESTROY_SLOT_103 ,
  MAC_AND_DESTROY_SLOT_104 , MAC_AND_DESTROY_SLOT_105 , MAC_AND_DESTROY_SLOT_106 , MAC_AND_DESTROY_SLOT_107 ,
  MAC_AND_DESTROY_SLOT_108 , MAC_AND_DESTROY_SLOT_109 , MAC_AND_DESTROY_SLOT_110 , MAC_AND_DESTROY_SLOT_111 ,
  MAC_AND_DESTROY_SLOT_112 , MAC_AND_DESTROY_SLOT_113 , MAC_AND_DESTROY_SLOT_114 , MAC_AND_DESTROY_SLOT_115 ,
  MAC_AND_DESTROY_SLOT_116 , MAC_AND_DESTROY_SLOT_117 , MAC_AND_DESTROY_SLOT_118 , MAC_AND_DESTROY_SLOT_119 ,
  MAC_AND_DESTROY_SLOT_120 , MAC_AND_DESTROY_SLOT_121 , MAC_AND_DESTROY_SLOT_122 , MAC_AND_DESTROY_SLOT_123 ,
  MAC_AND_DESTROY_SLOT_124 , MAC_AND_DESTROY_SLOT_125 , MAC_AND_DESTROY_SLOT_126 , MAC_AND_DESTROY_SLOT_127
}
 Mac-and-Destroy slot indexes.
 

Detailed Description

Author
Tropic Square s.r.o. *
License
For the license see file LICENSE.txt file in the root directory of this source tree.

Data Structure Documentation

◆ lt_l3_gen_frame_t

struct lt_l3_gen_frame_t
Data Fields
uint16_t cmd_size RES_SIZE or CMD_SIZE value.
uint8_t data[L3_PACKET_MAX_SIZE - L3_RES_SIZE_SIZE] Command or result data including ID and TAG.

◆ lt_l2_state_t

struct lt_l2_state_t
Data Fields
void * device
uint8_t mode
uint8_t buff[1+L2_MAX_FRAME_SIZE]

◆ lt_l3_state_t

struct lt_l3_state_t
Data Fields
uint32_t session
uint8_t encryption_IV[12]
uint8_t decryption_IV[12]
uint8_t encrypt[352]
uint8_t decrypt[352]
uint8_t buff[LT_SIZE_OF_L3_BUFF]

Buffer for L3 commands and results

uint16_t buff_len

Length of the buffer

◆ lt_handle_t

struct lt_handle_t

This structure holds data related to one physical chip. Contains AESGCM contexts for encrypting and decrypting L3 commands, nonce and device void pointer, which can be used for passing arbitrary data.

Data Fields
lt_l2_state_t l2
lt_l3_state_t l3

◆ lt_cert_store_t

struct lt_cert_store_t
Data Fields
uint8_t * certs[LT_NUM_CERTIFICATES]
uint16_t buf_len[LT_NUM_CERTIFICATES]

Certificates

uint16_t cert_len[LT_NUM_CERTIFICATES]

Length of buffers for certificates

◆ lt_ser_num_t

struct lt_ser_num_t

This structure contains fields for parsing the chip's serial number data.

Data Fields
uint8_t sn

8 bits for serial number

uint8_t fab_data[3]

12 bits fab ID, 12 bits part number ID

uint16_t fab_date

16 bits for fabrication date

uint8_t lot_id[5]

40 bits for lot ID

uint8_t wafer_id

8 bits for wafer ID

uint16_t x_coord

16 bits for x-coordinate

uint16_t y_coord

16 bits for y-coordinate

◆ lt_chip_id_t

struct lt_chip_id_t
Data Fields
uint8_t chip_id_ver[4] CHIP_ID structure versioning (32 bits), defined by Tropic Square in BP.

Example encoding: v1.2.3.4 = 0x01,0x02,0x03,0x04

uint8_t fl_chip_info[16] Factory level test info (128 bits), structure retrieved from silicon provider.

The exact copy of FL_PROD_DATA structure. If missing, it is filled with 0x00.

uint8_t func_test_info[8] Manufacturing level test info (128 bits), structure retrieved from test line and BP.

The exact copy of first two words of MAN_FUNC_TEST structure. In case of missing, it is filled with 0x00

uint8_t silicon_rev[4] Silicon revision (32 bits).

ASCII encoded string value defined by Tropic Square. Example: ’ACAB’ = 0x41434142

uint8_t packg_type_id[2] Package Type ID defined by Tropic Square.
uint8_t rfu_1[2] Reserved field 1 (16 bits).
uint8_t prov_ver_fab_id_pn[4] Provisioning info (128 bits), filled by the provisioning station.
  • 8 bits: Provisioning info version.
  • 12 bits: Fabrication ID.
  • 12 bits: Part Number ID.
uint8_t provisioning_date[2] Provisioning date (16 bits).
uint8_t hsm_ver[4] HSM version (32 bits).

Byte 0: RFU, Byte 1: Major version, Byte 2: Minor version, Byte 3: Patch version

uint8_t prog_ver[4] Program version (32 bits).
uint8_t rfu_2[2] Reserved field 2 (16 bits).
struct lt_ser_num_t ser_num Serial Number (128 bits).
uint8_t part_num_data[16] Part Number (128 bits), defined by Tropic Square in BP.

Part number data.

uint8_t prov_templ_ver[2] Provisioning Data version (160 bits), defined by Tropic Square for each batch in BP.

Provisioning template version.

uint8_t prov_templ_tag[4]

Provisioning template tag.

uint8_t prov_spec_ver[2]

Provisioning specification version.

uint8_t prov_spec_tag[4]

Provisioning specification tag.

uint8_t batch_id[5] Batch ID (40 bits).
uint8_t rfu_3[3] Reserved field 3 (24 bits).
uint8_t rfu_4[24] Padding (192 bits).

◆ header_boot_v1_t

struct header_boot_v1_t
Data Fields
uint8_t type[4]
uint8_t version[4]
uint8_t size[4]
uint8_t git_hash[4]
uint8_t hash[4]

◆ header_boot_v2_t

struct header_boot_v2_t
Data Fields
uint16_t type Currently only two types supported: 1 == FW for RISCV coprocessor. 2 == FW for SPECT coprocessor.
uint8_t padding
uint8_t header_version This header version.
uint32_t ver FW version, the same number as TS_L2_GET_INFO_REQ_OBJECT_ID_RISCV_FW_VERSION or TS_L2_GET_INFO_REQ_OBJECT_ID_SPECT_ROM_ID.
uint32_t size FW size in bytes (always aligned to uint32_t).
uint32_t git_hash GIT hash of the underlying FW repository.
uint8_t hash[32] Hash for data integrity (SHA256, 32B).
uint32_t pair_version Other FW version compatibility. In case RISCV FW there may be SPECT version to match. Zero means any version.

◆ session_state_t

struct session_state_t
Data Fields
uint8_t ehpriv[32]
uint8_t ehpub[32]

◆ lt_config_obj_desc_t

struct lt_config_obj_desc_t
Data Fields
char desc[60]
enum CONFIGURATION_OBJECTS_REGS addr

◆ lt_config_t

struct lt_config_t
Data Fields
uint32_t obj[LT_CONFIG_OBJ_CNT]