From 561fa90669a7ed67e0b0625d4397bc77a35e91ae Mon Sep 17 00:00:00 2001 From: TuxSH Date: Mon, 21 May 2018 19:05:00 +0200 Subject: [PATCH] Use uintX_t for the SE & copy bugfixed SE struct definition --- exosphere/src/se.c | 4 +- exosphere/src/se.h | 130 ++++++++++++++++----------------- fusee/fusee-primary/src/se.c | 6 +- fusee/fusee-primary/src/se.h | 129 ++++++++++++++++---------------- fusee/fusee-secondary/src/se.c | 6 +- fusee/fusee-secondary/src/se.h | 129 ++++++++++++++++---------------- 6 files changed, 203 insertions(+), 201 deletions(-) diff --git a/exosphere/src/se.c b/exosphere/src/se.c index 9334300e7..fe92958c6 100644 --- a/exosphere/src/se.c +++ b/exosphere/src/se.c @@ -661,11 +661,11 @@ void se_calculate_sha256(void *dst, const void *src, size_t src_size) { /* Setup config for SHA256, size = BITS(src_size) */ SECURITY_ENGINE->CONFIG_REG = (ENCMODE_SHA256 | ALG_SHA | DST_HASHREG); SECURITY_ENGINE->SHA_CONFIG_REG = 1; - SECURITY_ENGINE->SHA_MSG_LENGTH_REG = (unsigned int)(src_size << 3); + SECURITY_ENGINE->SHA_MSG_LENGTH_REG = (uint32_t)(src_size << 3); SECURITY_ENGINE->_0x208 = 0; SECURITY_ENGINE->_0x20C = 0; SECURITY_ENGINE->_0x210 = 0; - SECURITY_ENGINE->SHA_MSG_LEFT_REG = (unsigned int)(src_size << 3); + SECURITY_ENGINE->SHA_MSG_LEFT_REG = (uint32_t)(src_size << 3); SECURITY_ENGINE->_0x218 = 0; SECURITY_ENGINE->_0x21C = 0; SECURITY_ENGINE->_0x220 = 0; diff --git a/exosphere/src/se.h b/exosphere/src/se.h index 85cada943..7164de2e8 100644 --- a/exosphere/src/se.h +++ b/exosphere/src/se.h @@ -82,71 +82,71 @@ #define RSA_2048_BYTES 0x100 typedef struct security_engine { - unsigned int _0x0; - unsigned int _0x4; - unsigned int OPERATION_REG; - unsigned int INT_ENABLE_REG; - unsigned int INT_STATUS_REG; - unsigned int CONFIG_REG; - unsigned int IN_LL_ADDR_REG; - unsigned int _0x1C; - unsigned int _0x20; - unsigned int OUT_LL_ADDR_REG; - unsigned int _0x28; - unsigned int _0x2C; - unsigned char HASH_RESULT_REG[0x20]; - unsigned char _0x50[0x20]; - unsigned int CONTEXT_SAVE_CONFIG_REG; - unsigned char _0x74[0x18C]; - unsigned int SHA_CONFIG_REG; - unsigned int SHA_MSG_LENGTH_REG; - unsigned int _0x208; - unsigned int _0x20C; - unsigned int _0x210; - unsigned int SHA_MSG_LEFT_REG; - unsigned int _0x218; - unsigned int _0x21C; - unsigned int _0x220; - unsigned int _0x224; - unsigned char _0x228[0x5C]; - unsigned int AES_KEY_READ_DISABLE_REG; - unsigned int AES_KEYSLOT_FLAGS[0x10]; - unsigned char _0x2C8[0x38]; - unsigned int _0x300; - unsigned int CRYPTO_REG; - unsigned int CRYPTO_CTR_REG[4]; - unsigned int BLOCK_COUNT_REG; - unsigned int AES_KEYTABLE_ADDR; - unsigned int AES_KEYTABLE_DATA; - unsigned int _0x324; - unsigned int _0x328; - unsigned int _0x32C; - unsigned int CRYPTO_KEYTABLE_DST_REG; - unsigned char _0x334[0xC]; - unsigned int RNG_CONFIG_REG; - unsigned int RNG_SRC_CONFIG_REG; - unsigned int RNG_RESEED_INTERVAL_REG; - unsigned char _0x34C[0xB4]; - unsigned int RSA_CONFIG; - unsigned int RSA_KEY_SIZE_REG; - unsigned int RSA_EXP_SIZE_REG; - unsigned int RSA_KEY_READ_DISABLE_REG; - unsigned int RSA_KEYSLOT_FLAGS[2]; - unsigned int _0x418; - unsigned int _0x41C; - unsigned int RSA_KEYTABLE_ADDR; - unsigned int RSA_KEYTABLE_DATA; - unsigned char RSA_OUTPUT[0x100]; - unsigned char _0x528[0x2D8]; - unsigned int FLAGS_REG; - unsigned int ERR_STATUS_REG; - unsigned int _0x808; - unsigned int _0x80C; - unsigned int _0x810; - unsigned int _0x814; - unsigned int _0x818; - unsigned int _0x81C; - unsigned char _0x820[0x17E0]; + uint32_t _0x0; + uint32_t _0x4; + uint32_t OPERATION_REG; + uint32_t INT_ENABLE_REG; + uint32_t INT_STATUS_REG; + uint32_t CONFIG_REG; + uint32_t IN_LL_ADDR_REG; + uint32_t _0x1C; + uint32_t _0x20; + uint32_t OUT_LL_ADDR_REG; + uint32_t _0x28; + uint32_t _0x2C; + uint8_t HASH_RESULT_REG[0x20]; + uint8_t _0x50[0x20]; + uint32_t CONTEXT_SAVE_CONFIG_REG; + uint8_t _0x74[0x18C]; + uint32_t SHA_CONFIG_REG; + uint32_t SHA_MSG_LENGTH_REG; + uint32_t _0x208; + uint32_t _0x20C; + uint32_t _0x210; + uint32_t SHA_MSG_LEFT_REG; + uint32_t _0x218; + uint32_t _0x21C; + uint32_t _0x220; + uint32_t _0x224; + uint8_t _0x228[0x5C]; + uint32_t AES_KEY_READ_DISABLE_REG; + uint32_t AES_KEYSLOT_FLAGS[0x10]; + uint8_t _0x2C8[0x38]; + uint32_t _0x300; + uint32_t CRYPTO_REG; + uint32_t CRYPTO_CTR_REG[4]; + uint32_t BLOCK_COUNT_REG; + uint32_t AES_KEYTABLE_ADDR; + uint32_t AES_KEYTABLE_DATA; + uint32_t _0x324; + uint32_t _0x328; + uint32_t _0x32C; + uint32_t CRYPTO_KEYTABLE_DST_REG; + uint8_t _0x334[0xC]; + uint32_t RNG_CONFIG_REG; + uint32_t RNG_SRC_CONFIG_REG; + uint32_t RNG_RESEED_INTERVAL_REG; + uint8_t _0x34C[0xB4]; + uint32_t RSA_CONFIG; + uint32_t RSA_KEY_SIZE_REG; + uint32_t RSA_EXP_SIZE_REG; + uint32_t RSA_KEY_READ_DISABLE_REG; + uint32_t RSA_KEYSLOT_FLAGS[2]; + uint32_t _0x418; + uint32_t _0x41C; + uint32_t RSA_KEYTABLE_ADDR; + uint32_t RSA_KEYTABLE_DATA; + uint8_t RSA_OUTPUT[0x100]; + uint8_t _0x528[0x2D8]; + uint32_t FLAGS_REG; + uint32_t ERR_STATUS_REG; + uint32_t _0x808; + uint32_t _0x80C; + uint32_t _0x810; + uint32_t _0x814; + uint32_t _0x818; + uint32_t _0x81C; + uint8_t _0x820[0x17E0]; } security_engine_t; static_assert(sizeof(security_engine_t) == 0x2000, "Mis-defined Security Engine Registers!"); diff --git a/fusee/fusee-primary/src/se.c b/fusee/fusee-primary/src/se.c index 100dd7217..e62757a7d 100644 --- a/fusee/fusee-primary/src/se.c +++ b/fusee/fusee-primary/src/se.c @@ -541,11 +541,11 @@ void se_calculate_sha256(void *dst, const void *src, size_t src_size) { /* Setup config for SHA256, size = BITS(src_size) */ SECURITY_ENGINE->CONFIG_REG = (ENCMODE_SHA256 | ALG_SHA | DST_HASHREG); SECURITY_ENGINE->SHA_CONFIG_REG = 1; - SECURITY_ENGINE->SHA_MSG_LENGTH_REG = (unsigned int)(src_size << 3); + SECURITY_ENGINE->SHA_MSG_LENGTH_REG = (uint32_t)(src_size << 3); SECURITY_ENGINE->_0x20C = 0; SECURITY_ENGINE->_0x210 = 0; SECURITY_ENGINE->SHA_MSG_LEFT_REG = 0; - SECURITY_ENGINE->_0x218 = (unsigned int)(src_size << 3); + SECURITY_ENGINE->_0x218 = (uint32_t)(src_size << 3); SECURITY_ENGINE->_0x21C = 0; SECURITY_ENGINE->_0x220 = 0; SECURITY_ENGINE->_0x224 = 0; @@ -597,4 +597,4 @@ void se_generate_random(unsigned int keyslot, void *dst, size_t size) { se_perform_aes_block_operation(dst + aligned_size, size - aligned_size, NULL, 0); } -} \ No newline at end of file +} diff --git a/fusee/fusee-primary/src/se.h b/fusee/fusee-primary/src/se.h index c6a3fa0de..ad96a8020 100644 --- a/fusee/fusee-primary/src/se.h +++ b/fusee/fusee-primary/src/se.h @@ -73,70 +73,71 @@ #define RSA_2048_BYTES 0x100 typedef struct security_engine { - unsigned int _0x0; - unsigned int _0x4; - unsigned int OPERATION_REG; - unsigned int INT_ENABLE_REG; - unsigned int INT_STATUS_REG; - unsigned int CONFIG_REG; - unsigned int IN_LL_ADDR_REG; - unsigned int _0x1C; - unsigned int _0x20; - unsigned int OUT_LL_ADDR_REG; - unsigned int _0x28; - unsigned int _0x2C; - unsigned char HASH_RESULT_REG[0x20]; - unsigned char _0x50[0x20]; - unsigned int CONTEXT_SAVE_CONFIG_REG; - unsigned char _0x74[0x18C]; - unsigned int SHA_CONFIG_REG; - unsigned int SHA_MSG_LENGTH_REG; - unsigned int _0x20C; - unsigned int _0x210; - unsigned int SHA_MSG_LEFT_REG; - unsigned int _0x218; - unsigned int _0x21C; - unsigned int _0x220; - unsigned int _0x224; - unsigned char _0x228[0x5C]; - unsigned int AES_KEY_READ_DISABLE_REG; - unsigned int AES_KEYSLOT_FLAGS[0x10]; - unsigned char _0x2C4[0x3C]; - unsigned int _0x300; - unsigned int CRYPTO_REG; - unsigned int CRYPTO_CTR_REG[4]; - unsigned int BLOCK_COUNT_REG; - unsigned int AES_KEYTABLE_ADDR; - unsigned int AES_KEYTABLE_DATA; - unsigned int _0x324; - unsigned int _0x328; - unsigned int _0x32C; - unsigned int CRYPTO_KEYTABLE_DST_REG; - unsigned char _0x334[0xC]; - unsigned int RNG_CONFIG_REG; - unsigned int RNG_SRC_CONFIG_REG; - unsigned int RNG_RESEED_INTERVAL_REG; - unsigned char _0x34C[0xB4]; - unsigned int RSA_CONFIG; - unsigned int RSA_KEY_SIZE_REG; - unsigned int RSA_EXP_SIZE_REG; - unsigned int RSA_KEY_READ_DISABLE_REG; - unsigned int RSA_KEYSLOT_FLAGS[2]; - unsigned int _0x418; - unsigned int _0x41C; - unsigned int RSA_KEYTABLE_ADDR; - unsigned int RSA_KEYTABLE_DATA; - unsigned char RSA_OUTPUT[0x100]; - unsigned char _0x528[0x2D8]; - unsigned int FLAGS_REG; - unsigned int ERR_STATUS_REG; - unsigned int _0x808; - unsigned int _0x80C; - unsigned int _0x810; - unsigned int _0x814; - unsigned int _0x818; - unsigned int _0x81C; - unsigned char _0x820[0x17E0]; + uint32_t _0x0; + uint32_t _0x4; + uint32_t OPERATION_REG; + uint32_t INT_ENABLE_REG; + uint32_t INT_STATUS_REG; + uint32_t CONFIG_REG; + uint32_t IN_LL_ADDR_REG; + uint32_t _0x1C; + uint32_t _0x20; + uint32_t OUT_LL_ADDR_REG; + uint32_t _0x28; + uint32_t _0x2C; + uint8_t HASH_RESULT_REG[0x20]; + uint8_t _0x50[0x20]; + uint32_t CONTEXT_SAVE_CONFIG_REG; + uint8_t _0x74[0x18C]; + uint32_t SHA_CONFIG_REG; + uint32_t SHA_MSG_LENGTH_REG; + uint32_t _0x208; + uint32_t _0x20C; + uint32_t _0x210; + uint32_t SHA_MSG_LEFT_REG; + uint32_t _0x218; + uint32_t _0x21C; + uint32_t _0x220; + uint32_t _0x224; + uint8_t _0x228[0x5C]; + uint32_t AES_KEY_READ_DISABLE_REG; + uint32_t AES_KEYSLOT_FLAGS[0x10]; + uint8_t _0x2C8[0x38]; + uint32_t _0x300; + uint32_t CRYPTO_REG; + uint32_t CRYPTO_CTR_REG[4]; + uint32_t BLOCK_COUNT_REG; + uint32_t AES_KEYTABLE_ADDR; + uint32_t AES_KEYTABLE_DATA; + uint32_t _0x324; + uint32_t _0x328; + uint32_t _0x32C; + uint32_t CRYPTO_KEYTABLE_DST_REG; + uint8_t _0x334[0xC]; + uint32_t RNG_CONFIG_REG; + uint32_t RNG_SRC_CONFIG_REG; + uint32_t RNG_RESEED_INTERVAL_REG; + uint8_t _0x34C[0xB4]; + uint32_t RSA_CONFIG; + uint32_t RSA_KEY_SIZE_REG; + uint32_t RSA_EXP_SIZE_REG; + uint32_t RSA_KEY_READ_DISABLE_REG; + uint32_t RSA_KEYSLOT_FLAGS[2]; + uint32_t _0x418; + uint32_t _0x41C; + uint32_t RSA_KEYTABLE_ADDR; + uint32_t RSA_KEYTABLE_DATA; + uint8_t RSA_OUTPUT[0x100]; + uint8_t _0x528[0x2D8]; + uint32_t FLAGS_REG; + uint32_t ERR_STATUS_REG; + uint32_t _0x808; + uint32_t _0x80C; + uint32_t _0x810; + uint32_t _0x814; + uint32_t _0x818; + uint32_t _0x81C; + uint8_t _0x820[0x17E0]; } security_engine_t; static_assert(sizeof(security_engine_t) == 0x2000, "Mis-defined Security Engine Registers!"); diff --git a/fusee/fusee-secondary/src/se.c b/fusee/fusee-secondary/src/se.c index db4c87ce8..eb0d9d80d 100644 --- a/fusee/fusee-secondary/src/se.c +++ b/fusee/fusee-secondary/src/se.c @@ -541,11 +541,11 @@ void se_calculate_sha256(void *dst, const void *src, size_t src_size) { /* Setup config for SHA256, size = BITS(src_size) */ SECURITY_ENGINE->CONFIG_REG = (ENCMODE_SHA256 | ALG_SHA | DST_HASHREG); SECURITY_ENGINE->SHA_CONFIG_REG = 1; - SECURITY_ENGINE->SHA_MSG_LENGTH_REG = (unsigned int)(src_size << 3); + SECURITY_ENGINE->SHA_MSG_LENGTH_REG = (uint32_t)(src_size << 3); SECURITY_ENGINE->_0x20C = 0; SECURITY_ENGINE->_0x210 = 0; SECURITY_ENGINE->SHA_MSG_LEFT_REG = 0; - SECURITY_ENGINE->_0x218 = (unsigned int)(src_size << 3); + SECURITY_ENGINE->_0x218 = (uint32_t)(src_size << 3); SECURITY_ENGINE->_0x21C = 0; SECURITY_ENGINE->_0x220 = 0; SECURITY_ENGINE->_0x224 = 0; @@ -597,4 +597,4 @@ void se_generate_random(unsigned int keyslot, void *dst, size_t size) { se_perform_aes_block_operation(dst + aligned_size, size - aligned_size, NULL, 0); } -} \ No newline at end of file +} diff --git a/fusee/fusee-secondary/src/se.h b/fusee/fusee-secondary/src/se.h index c6a3fa0de..ad96a8020 100644 --- a/fusee/fusee-secondary/src/se.h +++ b/fusee/fusee-secondary/src/se.h @@ -73,70 +73,71 @@ #define RSA_2048_BYTES 0x100 typedef struct security_engine { - unsigned int _0x0; - unsigned int _0x4; - unsigned int OPERATION_REG; - unsigned int INT_ENABLE_REG; - unsigned int INT_STATUS_REG; - unsigned int CONFIG_REG; - unsigned int IN_LL_ADDR_REG; - unsigned int _0x1C; - unsigned int _0x20; - unsigned int OUT_LL_ADDR_REG; - unsigned int _0x28; - unsigned int _0x2C; - unsigned char HASH_RESULT_REG[0x20]; - unsigned char _0x50[0x20]; - unsigned int CONTEXT_SAVE_CONFIG_REG; - unsigned char _0x74[0x18C]; - unsigned int SHA_CONFIG_REG; - unsigned int SHA_MSG_LENGTH_REG; - unsigned int _0x20C; - unsigned int _0x210; - unsigned int SHA_MSG_LEFT_REG; - unsigned int _0x218; - unsigned int _0x21C; - unsigned int _0x220; - unsigned int _0x224; - unsigned char _0x228[0x5C]; - unsigned int AES_KEY_READ_DISABLE_REG; - unsigned int AES_KEYSLOT_FLAGS[0x10]; - unsigned char _0x2C4[0x3C]; - unsigned int _0x300; - unsigned int CRYPTO_REG; - unsigned int CRYPTO_CTR_REG[4]; - unsigned int BLOCK_COUNT_REG; - unsigned int AES_KEYTABLE_ADDR; - unsigned int AES_KEYTABLE_DATA; - unsigned int _0x324; - unsigned int _0x328; - unsigned int _0x32C; - unsigned int CRYPTO_KEYTABLE_DST_REG; - unsigned char _0x334[0xC]; - unsigned int RNG_CONFIG_REG; - unsigned int RNG_SRC_CONFIG_REG; - unsigned int RNG_RESEED_INTERVAL_REG; - unsigned char _0x34C[0xB4]; - unsigned int RSA_CONFIG; - unsigned int RSA_KEY_SIZE_REG; - unsigned int RSA_EXP_SIZE_REG; - unsigned int RSA_KEY_READ_DISABLE_REG; - unsigned int RSA_KEYSLOT_FLAGS[2]; - unsigned int _0x418; - unsigned int _0x41C; - unsigned int RSA_KEYTABLE_ADDR; - unsigned int RSA_KEYTABLE_DATA; - unsigned char RSA_OUTPUT[0x100]; - unsigned char _0x528[0x2D8]; - unsigned int FLAGS_REG; - unsigned int ERR_STATUS_REG; - unsigned int _0x808; - unsigned int _0x80C; - unsigned int _0x810; - unsigned int _0x814; - unsigned int _0x818; - unsigned int _0x81C; - unsigned char _0x820[0x17E0]; + uint32_t _0x0; + uint32_t _0x4; + uint32_t OPERATION_REG; + uint32_t INT_ENABLE_REG; + uint32_t INT_STATUS_REG; + uint32_t CONFIG_REG; + uint32_t IN_LL_ADDR_REG; + uint32_t _0x1C; + uint32_t _0x20; + uint32_t OUT_LL_ADDR_REG; + uint32_t _0x28; + uint32_t _0x2C; + uint8_t HASH_RESULT_REG[0x20]; + uint8_t _0x50[0x20]; + uint32_t CONTEXT_SAVE_CONFIG_REG; + uint8_t _0x74[0x18C]; + uint32_t SHA_CONFIG_REG; + uint32_t SHA_MSG_LENGTH_REG; + uint32_t _0x208; + uint32_t _0x20C; + uint32_t _0x210; + uint32_t SHA_MSG_LEFT_REG; + uint32_t _0x218; + uint32_t _0x21C; + uint32_t _0x220; + uint32_t _0x224; + uint8_t _0x228[0x5C]; + uint32_t AES_KEY_READ_DISABLE_REG; + uint32_t AES_KEYSLOT_FLAGS[0x10]; + uint8_t _0x2C8[0x38]; + uint32_t _0x300; + uint32_t CRYPTO_REG; + uint32_t CRYPTO_CTR_REG[4]; + uint32_t BLOCK_COUNT_REG; + uint32_t AES_KEYTABLE_ADDR; + uint32_t AES_KEYTABLE_DATA; + uint32_t _0x324; + uint32_t _0x328; + uint32_t _0x32C; + uint32_t CRYPTO_KEYTABLE_DST_REG; + uint8_t _0x334[0xC]; + uint32_t RNG_CONFIG_REG; + uint32_t RNG_SRC_CONFIG_REG; + uint32_t RNG_RESEED_INTERVAL_REG; + uint8_t _0x34C[0xB4]; + uint32_t RSA_CONFIG; + uint32_t RSA_KEY_SIZE_REG; + uint32_t RSA_EXP_SIZE_REG; + uint32_t RSA_KEY_READ_DISABLE_REG; + uint32_t RSA_KEYSLOT_FLAGS[2]; + uint32_t _0x418; + uint32_t _0x41C; + uint32_t RSA_KEYTABLE_ADDR; + uint32_t RSA_KEYTABLE_DATA; + uint8_t RSA_OUTPUT[0x100]; + uint8_t _0x528[0x2D8]; + uint32_t FLAGS_REG; + uint32_t ERR_STATUS_REG; + uint32_t _0x808; + uint32_t _0x80C; + uint32_t _0x810; + uint32_t _0x814; + uint32_t _0x818; + uint32_t _0x81C; + uint8_t _0x820[0x17E0]; } security_engine_t; static_assert(sizeof(security_engine_t) == 0x2000, "Mis-defined Security Engine Registers!");