久久精品国产精品国产一区,少妇扒开毛毛自慰喷水,国产精品无码电影在线观看 ,久久天天躁夜夜躁狠狠85麻豆

思澈科技軟件開發(fā)工具包  2.20
Hash

HASH 引擎是一個針對散列數(shù)列算法的運算加速器,用戶可以選擇不同的散列算法計算內(nèi)存中特定數(shù)據(jù)的散列 值。HASH 引擎相比軟件算法速度更快,配置也靈活,用戶也可以通過自定義初始向量,實現(xiàn)多線程HASH 運 算。HASH 引擎支持算法包括

  • SHA1
  • SHA224
  • SHA256
  • SM3

使用 Hash HAL 驅(qū)動程序

Hash可以支持使用輪詢和中斷模式,它們可以調(diào)用不同的HASH接口。

Hash HAL 輪詢使用的示例:

#define SPLIT_THRESHOLD 256
uint32_t hash_config=HASH_ALGO_SHA1;
static uint8_t g_temp[BUFFER_SIZE];
// 輸入數(shù)組為g_hash_input, 長度為length
for (i = 0; i < length; i += SPLIT_THRESHOLD)
{
// 分塊處理
int last = (i + SPLIT_THRESHOLD >= length) ? 1 : 0;
if (i > 0)
{
// 除了第一次,每次需要加載上次 Hash 結(jié)果, 算法使用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, 長度根據(jù)不同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];
// 輸入數(shù)組為g_hash_input, 長度為length
for (i = 0; i < length; i += SPLIT_THRESHOLD)
{
// 分塊處理
int last = (i + SPLIT_THRESHOLD >= length) ? 1 : 0;
if (i > 0)
{
// 除了第一次,每次需要加載上次 Hash 結(jié)果, 算法使用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, 長度根據(jù)不同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