CN / EN
文档反馈
感谢关注汇顶文档,期待您的宝贵建议!
感谢您的反馈,祝您愉快!

HMAC

HMAC示例实现了HMAC的两种生成摘要模式:SHA-256和HMAC-SHA256。

  • SHA-256对输入消息产生长度为256 bits的哈希值,称为消息摘要,输入信息需要用户按照相关HMAC驱动API规定进行填充。
  • HMAC-SHA256对输入的密钥和消息运用哈希算法生成一段消息摘要,密钥长度为256 bits。

HMAC示例的源代码和工程文件位于SDK_Folder\projects\peripheral\hmac\hmac,其中工程文件在文件夹Keil_5下。

以下章节主要介绍HMAC消息认证的Interrupt、Query、DMA三种实现方式。

代码理解

示例工程流程图如图 13图 14所示:

图 13 HMAC示例工程流程图(SHA-256)
图 14 HMAC示例工程流程图(HMAC-SHA256)
  1. 配置HMAC模块。
    g_hmac_handle.p_instance       = HMAC;
    g_hmac_handle.init.mode        = HMAC_MODE_HMAC;
    g_hmac_handle.init.p_key       = (uint32_t *)hmac_key;
    g_hmac_handle.init.p_user_hash = NULL;
    g_hmac_handle.init.dpa_mode    = DISABLE;
    g_hmac_handle.init.key_fetch_type = HAL_HMAC_KEYTYPE_MCU;
    g_hmac_handle.init.enable_irq = HAL_HMAC_DISABLE_IRQ;
    g_hmac_handle.init.enable_dma_mode = HAL_HMAC_DISABLE_DMA;
    
    • init.mode:HMAC操作模式选择,可选择HMAC_MODE_SHA(SHA-256模式)、HMAC_MODE_HMAC(HMAC-SHA256模式)。
    • init.p_key:密钥,只在HMAC-SHA256计算模式下有效。
    • init.p_user_hash:用户哈希初始值,可根据需要自定义哈希初始值。
    • init.dpa_mode:配置是否使能DPA功能。
    • init.key_fetch_type:Key的来源,可选择HAL_HMAC_KEYTYPE_MCU、HAL_HMAC_KEYTYPE_AHB、HAL_HMAC_KEYTYPE_KRAM。
    • init.enable_irq:配置是否使能IRQ中断方式,可选择HAL_HMAC_ENABLE_IRQ、HAL_HMAC_DISABLE_IRQ。
    • init.enable_dma_mode:配置是否使能DMA模式,可选择HAL_HMAC_ENABLE_DMA、HAL_HMAC_DISABLE_DMA。
  2. 用户可按需选择轮询、中断或DMA计算模式。各计算模式的配置方式如下:
    1. 可根据需要重载自定义哈希初始值p_user_hash和密钥p_key(仅在HMAC-SHA256计算模式生效)。
    2. 按需配置计算模式相关参数。
      • init.enable_irq:HAL_HMAC_DISABLE_IRQ(轮询模式、DMA模式)、HAL_HMAC_ENABLE_IRQ(中断模式)
      • init.enable_dma_mode:HAL_HMAC_DISABLE_DMA(轮询模式、中断模式)、HAL_HMAC_ENABLE_DMA(DMA模式)
      • init.mode:HMAC_MODE_SHA或者HMAC_MODE_HMAC
    3. 使用hal_hmac_sha256_digest()计算消息摘要。若数据流太长无法一次性计算完成,则需将数据分段处理。对于非首段数据的处理,需将自定义的哈希初始值p_user_hash重载为上一次的计算结果。

    对于中断及DMA计算模式,当计算完成时hal_hmac_done_callback()会被调用;计算出错时hal_hmac_error_callback()会被调用,用户可重写该接口。

测试验证

  1. 用GProgrammer下载hmac.bin至开发板。
  2. 将开发板串口连接至PC端,打开并配置GRUart。
  3. 在GRUart的Receive Data窗口中将会显示HMAC计算结果。

扫描关注

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