CN / EN
文档反馈
感谢关注汇顶文档,期待您的宝贵建议!
感谢您的反馈,祝您愉快!
无匹配项 共计114个匹配页面

如何使用AES驱动

初始化

初始化AES HAL驱动的方法如下:
  1. 声明一个aes_handle_t句柄结构,例如:aes_handle_t aes_handle。
  2. 重写hal_aes_msp_init()以初始化AES底层资源。若要使用中断模式,则需通过调用相关的NVIC接口来配置:
    • 调用hal_nvic_set_priority()配置AES中断优先级。
    • 调用hal_nvic_enable_irq()使能AES中断。
  3. 配置aes_handle句柄的p_instance和init,包括AES外设实例、密钥长度、加解密块操作模式、密钥指针、CBC模式初始化向量、安全模式以及随机数种子。
  4. 调用hal_aes_init()初始化AES寄存器。

ECB加解密

ECB加解密支持轮询、中断两种计算模式。这两种模式的区别在于计算数据的加载方式和计算完成的判断方式:轮询模式需要循环检测完成状态,而中断模式则通过计算完成中断来实现。两种计算模式的具体使用方法如下:

轮询模式IO操作
  1. 使用hal_aes_ecb_encrypt()加密数据,hal_aes_ecb_decrypt()解密数据。
  2. 直至计算完成或超时返回。若返回错误,可调用hal_aes_get_error()查看错误代码;加解密数据较多时可重复步骤1
中断模式IO操作
  1. 开发者可根据需要实现hal_aes_done_callback()、hal_aes_error_callback()和hal_aes_abort_cplt_callback()。
  2. 使用hal_aes_ecb_encrypt_it()加密数据,hal_aes_ecb_decrypt_it()解密数据。
  3. 计算完成时hal_aes_done_callback()会被调用,若计算出错,则hal_aes_error_callback()会被调用;加解密数据较多时可重复步骤2
  4. 如需中止计算,则可调用hal_aes_abort()和hal_aes_abort_it()。hal_aes_abort()直接中止当前计算,hal_aes_abort_it()中止当前计算后会调用hal_aes_abort_cplt_callback()。

CBC加解密

CBC加解密支持轮询、中断两种计算模式,这两种模式的区别在于计算数据的加载方式和计算完成的判断方式:轮询模式需要循环检测完成状态,而中断模式则通过计算完成中断来实现。两种计算模式具体的使用方法如下:

轮询模式IO操作
  1. 重载初始化向量p_init_vector,并使用hal_aes_cbc_encrypt()加密数据,hal_aes_cbc_decrypt()解密数据。若数据流太长无法一次性加解密完成,则需将数据分段处理。对于非首段数据的处理,加密时p_init_vector为上一次的计算结果的最后16 bytes,解密时p_init_vector为上一次待解密数据的最后16 bytes。
  2. 直至计算完成或超时返回,若返回错误,可调用hal_aes_get_error()查看错误代码;加解密数据较多时可重复步骤1
中断模式IO操作
  1. 开发者可根据需要实现hal_aes_done_callback()、hal_aes_error_callback()和hal_aes_abort_cplt_callback()。
  2. 重载初始化向量p_init_vector,并使用hal_aes_cbc_encrypt_it()加密数据,hal_aes_cbc_decrypt_it()解密数据。若数据流太长无法一次性加解密完成,则需将数据分段处理。对于非首段数据的处理,加密时p_init_vector为上一次的计算结果的最后16 bytes,解密时p_init_vector为上一次待解密数据的最后16 bytes。
  3. 计算完成时hal_aes_done_callback()会被调用,计算出错时hal_aes_error_callback()会被调用;加解密数据较多时可重复步骤2
  4. 如需中止计算可调用hal_aes_abort()和hal_aes_abort_it()。hal_aes_abort()直接中止当前计算,hal_aes_abort_it()中止当前计算后会调用hal_aes_abort_cplt_callback()。

扫描关注

打开微信,使用“扫一扫”即可关注。