Quellcode durchsuchen

更新MCU工程(sram-nos版本)
1.解决加解密数据超过512KB时加密异常的问题(数据在DDR中必须512KB对齐,且单次计算不得超过512KB)

helen vor 11 Monaten
Ursprung
Commit
c372b1fea3

+ 1 - 0
amt630hv160-mcu/amt630hv160-mcu-sram-nos/amt630hv160.icf

@@ -111,6 +111,7 @@ define exported symbol __IRAM__critical_func_end__          = __region_IRAM_crit
 
 /* Placements. */
 place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
+place at address mem:__ICFEDIT_region_RAM_start__ { section SEC_DDT };
 
 place in ROM_region_privileged      { readonly section privileged_functions };
 place in ROM_region_system_calls    { readonly section freertos_system_calls };

+ 16 - 0
amt630hv160-mcu/amt630hv160-mcu-sram-nos/src/App/secure_funcs.c

@@ -16,17 +16,33 @@
 #include "amt630hv160_lib.h"
 #include "libhsm.h"
 
+#pragma location = "SEC_DDT"
+#define SEC_DDT_SIZE	512
+uint8_t sec_ddts[SEC_DDT_SIZE + 64];
+
 int secure_module_init(void)
 {
+	uint32_t val;
+
 	HSM_Logout(0);
 
 	EFUSE_Init();
 
+	val = MCU_SYSCTRL->V6_EHSE_CLK;
+	val &= ~0xff;
+	val |= (0 << 3) | 1;
+	MCU_SYSCTRL->V6_EHSE_CLK = val;
+
 	if (EHSE_Init() != HSM_OK) {
 		printf("EHSE_Init fail!\n");
 		return -1;
 	}
 
+	if (EHSE_DDT_Init(sec_ddts, SEC_DDT_SIZE) != HSM_OK) {
+		printf("EHSE_DDT_Init fail!\n");
+		return -1;
+	}
+
 	if (PKA_Init() != HSM_OK) {
 		printf("PKA_Init fail!\n");
 		return -1;

BIN
amt630hv160-mcu/amt630hv160-mcu-sram-nos/src/lib/hsm/libhsm.a


+ 10 - 0
amt630hv160-mcu/amt630hv160-mcu-sram-nos/src/lib/hsm/libhsm.h

@@ -12,6 +12,7 @@
 /* Define to prevent recursive inclusion -------------------------------------*/
 #ifndef _LIBHSM_H
 #define _LIBHSM_H
+#include "amt630hv160_lib.h"
 
 /* Includes ------------------------------------------------------------------*/
 
@@ -168,6 +169,15 @@ void HSM_Logout(int debug_on);
  */
 int EHSE_Init(void);
 
+/*
+ * EHSE模块DDT初始化
+ * param [in] pddt DDT表地址,要求8字节对齐
+ * param [in] size DDT表大小,整个pddt内存不能跨越512K地址
+ * return
+ *   - HSM_XXX
+ */
+int EHSE_DDT_Init(void *pddt, uint32_t size);
+
 /*
  * HASH计算
  * param [in] in 输入数据