security_mac
MAC (Message Authentication Code) 提供基于对称加密算法的消息认证码计算能力,支持 CBC MAC 和 CMAC 两种计算模式,涵盖单段计算和分段计算场景。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| uapi_drv_cipher_cbc_mac | CBC MAC 单段计算 |
| uapi_drv_cipher_cbc_mac_start | 初始化 CBC MAC 分段计算的上下文句柄 |
| uapi_drv_cipher_cbc_mac_update | CBC MAC 分段计算 |
| uapi_drv_cipher_cbc_mac_finish | CBC MAC 计算 MAC 值 |
| uapi_drv_cipher_cbc_mac_destroy | 销毁 CBC MAC 句柄 |
| uapi_drv_cipher_cmac | CMAC 单段计算 |
| uapi_drv_cipher_cmac_start | 初始化 CMAC 分段计算的上下文句柄 |
| uapi_drv_cipher_cmac_update | CMAC 分段计算 |
| uapi_drv_cipher_cmac_finish | CMAC 计算 MAC 值 |
| uapi_drv_cipher_cmac_destroy | 销毁 CMAC 句柄 |
Functions
uapi_drv_cipher_cbc_mac
errcode_t uapi_drv_cipher_cbc_mac(uapi_drv_cipher_symc_alg_t alg, const uint8_t *key, uint32_t key_len, uint32_t keyslot_handle, const uint8_t *data, uint32_t data_len, uint8_t out_mac[16])
头文件清单
功能说明
- 提供 CBC MAC 单段计算能力,对消息数据计算 MAC 值
- 支持通过 key/key_len 组合或 keyslot_handle/key_len 组合两种方式设置密钥
- 输出 16 字节 MAC 值
前置条件
- 调用时序约束:当前接口依赖安全加密模块已初始化
- 依赖关系:使用 keyslot_handle 方式时,依赖 KM 模块已创建 keyslot 句柄;若不使用 keyslot,需将 keyslot_handle 设置为 UAPI_DRV_INVALID_KEY_SLOT
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| alg | uapi_drv_cipher_symc_alg_t | 加解密算法 | UAPI_DRV_CIPHER_SYMC_ALG_TDES(0x0) / UAPI_DRV_CIPHER_SYMC_ALG_AES(0x1) / UAPI_DRV_CIPHER_SYMC_ALG_SM4(0x2) / UAPI_DRV_CIPHER_SYMC_ALG_LEA(0x3) / UAPI_DRV_CIPHER_SYMC_ALG_DMA(0x4) / UAPI_DRV_CIPHER_SYMC_ALG_MAX(0x5) / UAPI_DRV_CIPHER_SYMC_ALG_INVALID(0xFFFFFFFF) |
| key | const uint8_t * | 对称密钥 | 使用 key/key_len 组合时传入密钥数据;使用 keyslot_handle 方式时传 NULL |
| key_len | uint32_t | 对称密钥长度,单位 Byte | 1 ~ 4294967295 |
| keyslot_handle | uint32_t | 用于保存 key 的句柄 | 不使用时设置为 UAPI_DRV_INVALID_KEY_SLOT |
| data | const uint8_t * | 消息数据 | 非空指针 |
| data_len | uint32_t | 消息数据长度,单位 Byte | 0 ~ 4294967295 |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| out_mac | uint8_t[16] | 输出的 MAC 值 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 计算成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_SYMC_SUPPORT_CBC_MAC | 功能宏 | 支持 CBC MAC 接口功能 | n |
uapi_drv_cipher_cbc_mac_start
errcode_t uapi_drv_cipher_cbc_mac_start(mac_handle_t *ctx, uapi_drv_cipher_symc_alg_t alg, const uint8_t *key, uint32_t key_len, uint32_t keyslot_handle)
头文件清单
功能说明
- 初始化 CBC MAC 分段计算的上下文句柄
- 支持通过 key/key_len 组合或 keyslot_handle/key_len 组合两种方式设置密钥
- 创建 MAC 句柄用于后续分段计算
前置条件
- 调用时序约束:当前接口依赖安全加密模块已初始化
- 依赖关系:使用 keyslot_handle 方式时,依赖 KM 模块已创建 keyslot 句柄;若不使用 keyslot,需将 keyslot_handle 设置为 UAPI_DRV_INVALID_KEY_SLOT
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| alg | uapi_drv_cipher_symc_alg_t | 加解密算法 | UAPI_DRV_CIPHER_SYMC_ALG_TDES(0x0) / UAPI_DRV_CIPHER_SYMC_ALG_AES(0x1) / UAPI_DRV_CIPHER_SYMC_ALG_SM4(0x2) / UAPI_DRV_CIPHER_SYMC_ALG_LEA(0x3) / UAPI_DRV_CIPHER_SYMC_ALG_DMA(0x4) / UAPI_DRV_CIPHER_SYMC_ALG_MAX(0x5) / UAPI_DRV_CIPHER_SYMC_ALG_INVALID(0xFFFFFFFF) |
| key | const uint8_t * | 对称密钥 | 使用 key/key_len 组合时传入密钥数据;使用 keyslot_handle 方式时传 NULL |
| key_len | uint32_t | 对称密钥长度,单位 Byte | 1 ~ 4294967295 |
| keyslot_handle | uint32_t | 用于保存 key 的句柄 | 不使用时设置为 UAPI_DRV_INVALID_KEY_SLOT |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| ctx | mac_handle_t * | 创建的 MAC 句柄 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 初始化成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_SYMC_SUPPORT_CBC_MAC | 功能宏 | 支持 CBC MAC 接口功能 | n |
uapi_drv_cipher_cbc_mac_update
头文件清单
功能说明
- CBC MAC 分段计算,对消息数据进行分段 MAC 计算
- 需与 uapi_drv_cipher_cbc_mac_start 配合使用
- 可多次调用以处理分段的消息数据
前置条件
- 调用时序约束:当前接口必须在 uapi_drv_cipher_cbc_mac_start 成功返回后调用
- 依赖关系:依赖有效的 MAC 句柄
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| ctx | mac_handle_t | MAC 句柄 | uapi_drv_cipher_cbc_mac_start 创建的有效句柄 |
| data | const uint8_t * | 消息数据 | 非空指针 |
| data_len | uint32_t | 消息数据长度,单位 Byte | 0 ~ 4294967295 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 计算成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_SYMC_SUPPORT_CBC_MAC | 功能宏 | 支持 CBC MAC 接口功能 | n |
uapi_drv_cipher_cbc_mac_finish
头文件清单
功能说明
- CBC MAC 计算 MAC 值,完成分段计算并输出最终 MAC 结果
- 需与 uapi_drv_cipher_cbc_mac_start、uapi_drv_cipher_cbc_mac_update 配合使用
- 输出 16 字节 MAC 值
前置条件
- 调用时序约束:当前接口必须在 uapi_drv_cipher_cbc_mac_start 成功返回后调用
- 依赖关系:依赖有效的 MAC 句柄
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| ctx | mac_handle_t | MAC 句柄 | uapi_drv_cipher_cbc_mac_start 创建的有效句柄 |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| out_mac | uint8_t[16] | 输出的 MAC 值 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 计算成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_SYMC_SUPPORT_CBC_MAC | 功能宏 | 支持 CBC MAC 接口功能 | n |
uapi_drv_cipher_cbc_mac_destroy
头文件清单
功能说明
- 销毁 CBC MAC 句柄,释放资源
- 需与 uapi_drv_cipher_cbc_mac_start 配合使用
- 句柄销毁后不可再用于后续操作
前置条件
- 调用时序约束:当前接口必须在 uapi_drv_cipher_cbc_mac_start 成功返回后调用
- 依赖关系:依赖有效的 MAC 句柄
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| ctx | mac_handle_t | MAC 句柄 | uapi_drv_cipher_cbc_mac_start 创建的有效句柄 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 销毁成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_SYMC_SUPPORT_CBC_MAC | 功能宏 | 支持 CBC MAC 接口功能 | n |
uapi_drv_cipher_cmac
errcode_t uapi_drv_cipher_cmac(uapi_drv_cipher_symc_alg_t alg, const uint8_t *key, uint32_t key_len, uint32_t keyslot_handle, const uint8_t *data, uint32_t data_len, uint8_t out_mac[16])
头文件清单
功能说明
- 提供 CMAC 单段计算能力,对消息数据计算 MAC 值
- 仅支持 AES 算法;不支持传入长度为 0 的消息数据
- 支持通过 key/key_len 组合或 keyslot_handle/key_len 组合两种方式设置密钥
前置条件
- 调用时序约束:当前接口依赖安全加密模块已初始化
- 依赖关系:使用 keyslot_handle 方式时,依赖 KM 模块已创建 keyslot 句柄;若不使用 keyslot,需将 keyslot_handle 设置为 UAPI_DRV_INVALID_KEY_SLOT
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| alg | uapi_drv_cipher_symc_alg_t | 加解密算法,仅支持 AES | UAPI_DRV_CIPHER_SYMC_ALG_AES(0x1) |
| key | const uint8_t * | 对称密钥 | 使用 key/key_len 组合时传入密钥数据;使用 keyslot_handle 方式时传 NULL |
| key_len | uint32_t | 对称密钥长度,单位 Byte | 1 ~ 4294967295 |
| keyslot_handle | uint32_t | 用于保存 key 的句柄 | 不使用时设置为 UAPI_DRV_INVALID_KEY_SLOT |
| data | const uint8_t * | 消息数据 | 非空指针 |
| data_len | uint32_t | 消息数据长度,单位 Byte | 1 ~ 4294967295(CMAC 不支持传入长度为 0) |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| out_mac | uint8_t[16] | 输出的 MAC 值 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 计算成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_SYMC_SUPPORT_CMAC | 功能宏 | 支持 CMAC 接口功能 | n |
uapi_drv_cipher_cmac_start
errcode_t uapi_drv_cipher_cmac_start(mac_handle_t *ctx, uapi_drv_cipher_symc_alg_t alg, const uint8_t *key, uint32_t key_len, uint32_t keyslot_handle)
头文件清单
功能说明
- 初始化 CMAC 分段计算的上下文句柄
- 支持通过 key/key_len 组合或 keyslot_handle/key_len 组合两种方式设置密钥
- 创建 MAC 句柄用于后续分段计算
前置条件
- 调用时序约束:当前接口依赖安全加密模块已初始化
- 依赖关系:使用 keyslot_handle 方式时,依赖 KM 模块已创建 keyslot 句柄;若不使用 keyslot,需将 keyslot_handle 设置为 UAPI_DRV_INVALID_KEY_SLOT
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| alg | uapi_drv_cipher_symc_alg_t | 加解密算法 | UAPI_DRV_CIPHER_SYMC_ALG_TDES(0x0) / UAPI_DRV_CIPHER_SYMC_ALG_AES(0x1) / UAPI_DRV_CIPHER_SYMC_ALG_SM4(0x2) / UAPI_DRV_CIPHER_SYMC_ALG_LEA(0x3) / UAPI_DRV_CIPHER_SYMC_ALG_DMA(0x4) / UAPI_DRV_CIPHER_SYMC_ALG_MAX(0x5) / UAPI_DRV_CIPHER_SYMC_ALG_INVALID(0xFFFFFFFF) |
| key | const uint8_t * | 对称密钥 | 使用 key/key_len 组合时传入密钥数据;使用 keyslot_handle 方式时传 NULL |
| key_len | uint32_t | 对称密钥长度,单位 Byte | 1 ~ 4294967295 |
| keyslot_handle | uint32_t | 用于保存 key 的句柄 | 不使用时设置为 UAPI_DRV_INVALID_KEY_SLOT |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| ctx | mac_handle_t * | 创建的 MAC 句柄 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 初始化成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_SYMC_SUPPORT_CMAC | 功能宏 | 支持 CMAC 接口功能 | n |
uapi_drv_cipher_cmac_update
头文件清单
功能说明
- CMAC 分段计算,对消息数据进行分段 MAC 计算
- 需与 uapi_drv_cipher_cmac_start 配合使用
- 可多次调用以处理分段的消息数据
前置条件
- 调用时序约束:当前接口必须在 uapi_drv_cipher_cmac_start 成功返回后调用
- 依赖关系:依赖有效的 MAC 句柄
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| ctx | mac_handle_t | MAC 句柄 | uapi_drv_cipher_cmac_start 创建的有效句柄 |
| data | const uint8_t * | 消息数据 | 非空指针 |
| data_len | uint32_t | 消息数据长度,单位 Byte | 0 ~ 4294967295 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 计算成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_SYMC_SUPPORT_CMAC | 功能宏 | 支持 CMAC 接口功能 | n |
uapi_drv_cipher_cmac_finish
头文件清单
功能说明
- CMAC 计算 MAC 值,完成分段计算并输出最终 MAC 结果
- 需与 uapi_drv_cipher_cmac_start、uapi_drv_cipher_cmac_update 配合使用
- 输出 16 字节 MAC 值
前置条件
- 调用时序约束:当前接口必须在 uapi_drv_cipher_cmac_start 成功返回后调用
- 依赖关系:依赖有效的 MAC 句柄;若未调用 uapi_drv_cipher_cmac_update 或调用 uapi_drv_cipher_cmac_update 传入的 data_len 为 0,则返回失败
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| ctx | mac_handle_t | MAC 句柄 | uapi_drv_cipher_cmac_start 创建的有效句柄 |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| out_mac | uint8_t[16] | 输出的 MAC 值 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 计算成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_SYMC_SUPPORT_CMAC | 功能宏 | 支持 CMAC 接口功能 | n |
uapi_drv_cipher_cmac_destroy
头文件清单
功能说明
- 销毁 CMAC 句柄,释放资源
- 需与 uapi_drv_cipher_cmac_start 配合使用
- 句柄销毁后不可再用于后续操作
前置条件
- 调用时序约束:当前接口必须在 uapi_drv_cipher_cmac_start 成功返回后调用
- 依赖关系:依赖有效的 MAC 句柄
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| ctx | mac_handle_t | MAC 句柄 | uapi_drv_cipher_cmac_start 创建的有效句柄 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 销毁成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_SYMC_SUPPORT_CMAC | 功能宏 | 支持 CMAC 接口功能 | n |
Type definitions
mac_handle_t
使用说明
作为 CBC MAC 和 CMAC 分段计算接口的上下文句柄类型,用于 start 接口出参创建句柄、update/finish/destroy 接口入参传入句柄
errcode_t
使用说明
作为本模块所有对外接口的返回值类型 [SDK公共基础类型]
Enumerations
uapi_drv_cipher_symc_alg_t
typedef enum {
UAPI_DRV_CIPHER_SYMC_ALG_TDES = 0x0,
UAPI_DRV_CIPHER_SYMC_ALG_AES = 0x1,
UAPI_DRV_CIPHER_SYMC_ALG_SM4 = 0x2,
UAPI_DRV_CIPHER_SYMC_ALG_LEA = 0x3,
UAPI_DRV_CIPHER_SYMC_ALG_DMA = 0x4,
UAPI_DRV_CIPHER_SYMC_ALG_MAX,
UAPI_DRV_CIPHER_SYMC_ALG_INVALID = 0xffffffff,
} uapi_drv_cipher_symc_alg_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| UAPI_DRV_CIPHER_SYMC_ALG_TDES | 0x0 | TDES 算法 |
| UAPI_DRV_CIPHER_SYMC_ALG_AES | 0x1 | AES 算法 |
| UAPI_DRV_CIPHER_SYMC_ALG_SM4 | 0x2 | SM4 算法 |
| UAPI_DRV_CIPHER_SYMC_ALG_LEA | 0x3 | LEA 算法 |
| UAPI_DRV_CIPHER_SYMC_ALG_DMA | 0x4 | DMA 算法 |
| UAPI_DRV_CIPHER_SYMC_ALG_MAX | 0x5 | 算法类型最大值 |
| UAPI_DRV_CIPHER_SYMC_ALG_INVALID | 0xFFFFFFFF | 无效算法类型 |