思澈科技软件开发工具包  2.20
Hash

HASH 引擎是一个针对散列数列算法的运算加速器,用户可以选择不同的散列算法计算内存中特定数据的散列 值。HASH 引擎相比软件算法速度更快,配置也灵活,用户也可以通过自定义初始向量,实现多线程HASH 运 算。HASH 引擎支持算法包括

  • SHA1
  • SHA224
  • SHA256
  • SM3

使用 Hash HAL 驱动程序

Hash可以支持使用轮询和中断模式,它们可以调用不同的HASH接口。

Hash HAL 轮询使用的示例:

#define SPLIT_THRESHOLD 256
uint32_t hash_config=HASH_ALGO_SHA1;
static uint8_t g_temp[BUFFER_SIZE];
// 输入数组为g_hash_input, 长度为length
for (i = 0; i < length; i += SPLIT_THRESHOLD)
{
// 分块处理
int last = (i + SPLIT_THRESHOLD >= length) ? 1 : 0;
if (i > 0)
{
// 除了第一次,每次需要加载上次 Hash 结果, 算法使用SHA1
HAL_HASH_init((uint32_t *)g_temp, HASH_ALGO_SHA1, last ? i : 0);
}
HAL_HASH_run(&(g_hash_input[i]), last ? length - i : SPLIT_THRESHOLD, last);
HAL_HASH_result(g_temp);
}
// 输出Hash到g_temp, 长度根据不同Hash算法。
HAL_HASH_result(g_temp);

Hash HAL 轮询使用中断的示例:

// AES和HASH共享一个中断
void AES_IRQHandler(void)
{
rt_interrupt_enter();
// 判断Hash 完成的中断源
if (hwp_aes_acc->IRQ & HASH_DONE_STAT)
{
// Hash 完成信号
rt_sem_release(g_aes_sem);
}
rt_interrupt_leave();
}
....
uint32_t hash_config=HASH_ALGO_SM3;
static uint8_t g_temp[BUFFER_SIZE];
// 输入数组为g_hash_input, 长度为length
for (i = 0; i < length; i += SPLIT_THRESHOLD)
{
// 分块处理
int last = (i + SPLIT_THRESHOLD >= length) ? 1 : 0;
if (i > 0)
{
// 除了第一次,每次需要加载上次 Hash 结果, 算法使用SM3
HAL_HASH_init((uint32_t *)g_temp, HASH_ALGO_SM3, last ? i : 0);
}
HAL_HASH_run_IT(&(g_hash_input[i]), last ? length - i : SPLIT_THRESHOLD, last);
// 等待Hash完成的信号
rt_sem_take(g_aes_sem, RT_TICK_PER_SECOND);
HAL_HASH_result(g_temp);
}
// 输出Hash到g_temp, 长度根据不同Hash算法。
HAL_HASH_result(g_temp);
....
...
HAL_HASH_run_IT
HAL_StatusTypeDef HAL_HASH_run_IT(uint8_t *in_data, int size, int final)
run Hash hardware, return immediately, generate AES HASH interrupt when done.
HAL_HASH_init
int HAL_HASH_init(uint32_t *iv, uint8_t algo, uint32_t length)
Initialize AES Hash hardware block.
HAL_HASH_IRQHandler
void HAL_HASH_IRQHandler(void)
AES HASH IRQ handler.
HAL_HASH_reset
int HAL_HASH_reset(void)
Reset AES HASH hardware block.
HAL_HASH_result
void HAL_HASH_result(uint8_t *out_data)
Get hash result.
HASH_ALGO_SM3
@ HASH_ALGO_SM3
Definition: bf0_hal_aes.h:149
HAL_HASH_run
HAL_StatusTypeDef HAL_HASH_run(uint8_t *in_data, int size, int final)
run Hash hardware
HASH_ALGO_SHA1
@ HASH_ALGO_SHA1
Definition: bf0_hal_aes.h:146