security_km
KM (Key Management) 提供密钥管理功能,支持 keyslot 句柄的创建与销毁、明文密钥与硬件密钥的设置。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| uapi_drv_keyslot_setup | 创建一个 keyslot 句柄 |
| uapi_drv_keyslot_teardown | 销毁一个 keyslot 句柄 |
| uapi_drv_keyslot_set_clear_key | 向指定的 keyslot 句柄设置明文密钥 |
| uapi_drv_keyslot_set_hard_key | 向指定的 keyslot 句柄设置硬件密钥 |
Functions
uapi_drv_keyslot_setup
头文件清单
功能说明
- 创建一个 keyslot 句柄,用于后续密钥操作
- 根据 keyslot_type 参数指定 keyslot 的类型(MCIPHER/HMAC/FLASH)
- 创建成功后通过出参 keyslot_handle 返回句柄
前置条件
- 调用时序约束:当前接口需在安全模块初始化完成后调用
- 依赖关系:当前接口依赖安全模块已正常初始化
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| keyslot_type | uapi_drv_keyslot_type_t | keyslot 类型 | UAPI_DRV_KEYSLOT_TYPE_MCIPHER(0) / UAPI_DRV_KEYSLOT_TYPE_HMAC(1) / UAPI_DRV_KEYSLOT_TYPE_FLASH(2) |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| keyslot_handle | uint32_t * | 创建的 keyslot 句柄,由调用方分配内存、函数填充 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 创建 keyslot 句柄成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_SECURITY_UNIFIED_SUPPORT_KM | 编译参与宏 | 控制 km 相关文件参与编译 | n |
uapi_drv_keyslot_teardown
头文件清单
功能说明
- 销毁一个 keyslot 句柄,释放对应的资源
- 销毁后该 keyslot 句柄不再有效
- 调用后对应的 keyslot 资源被释放回收
前置条件
- 调用时序约束:当前接口必须在 uapi_drv_keyslot_setup 成功返回后调用
- 依赖关系:传入的 keyslot_handle 必须为有效的 keyslot 句柄
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| keyslot_handle | uint32_t | 待销毁的 keyslot 句柄 | uapi_drv_keyslot_setup 返回的有效句柄 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 销毁 keyslot 句柄成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_SECURITY_UNIFIED_SUPPORT_KM | 编译参与宏 | 控制 km 相关文件参与编译 | n |
uapi_drv_keyslot_set_clear_key
errcode_t uapi_drv_keyslot_set_clear_key(uint32_t keyslot_handle, uapi_drv_klad_engine_t klad_engine,
const uint8_t *key, uint32_t key_len)
头文件清单
功能说明
- 向指定的 keyslot 句柄设置明文密钥
- 通过 klad_engine 参数指定密钥对应的算法引擎
- 密钥长度根据目标算法引擎类型有不同约束
前置条件
- 调用时序约束:当前接口必须在 uapi_drv_keyslot_setup 成功返回后调用
- 依赖关系:传入的 keyslot_handle 必须为有效的 keyslot 句柄
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| keyslot_handle | uint32_t | 指定的 keyslot 句柄 | uapi_drv_keyslot_setup 返回的有效句柄 |
| klad_engine | uapi_drv_klad_engine_t | 指定的算法引擎 | UAPI_DRV_KLAD_ENGINE_AES(0x20) / UAPI_DRV_KLAD_ENGINE_LAE(0x40) / UAPI_DRV_KLAD_ENGINE_SM4(0x50) / UAPI_DRV_KLAD_ENGINE_TDES(0x70) / UAPI_DRV_KLAD_ENGINE_SHA1_HMAC(0xA0) / UAPI_DRV_KLAD_ENGINE_SHA2_HMAC(0xA1) / UAPI_DRV_KLAD_ENGINE_SM3_HMAC(0xA2) |
| key | const uint8_t * | 明文密钥 | 不为NULL |
| key_len | uint32_t | 明文密钥的长度,单位是 byte | MCIPHER/FLASH: 16、24、32;HMAC: 1 ~ 128 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 设置明文密钥成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_SECURITY_UNIFIED_SUPPORT_KM | 编译参与宏 | 控制 km 相关文件参与编译 | n |
uapi_drv_keyslot_set_hard_key
errcode_t uapi_drv_keyslot_set_hard_key(uint32_t keyslot_handle,
uapi_drv_keyslot_hard_key_type_t hard_key_type, uapi_drv_klad_engine_t klad_engine,
const uint8_t *salt, uint32_t salt_len, uint32_t key_len)
头文件清单
功能说明
- 向指定的 keyslot 句柄设置硬件密钥
- 通过 hard_key_type 参数选择硬件密钥类型
- 通过 salt 参数提供盐值用于派生工作密钥
前置条件
- 调用时序约束:当前接口必须在 uapi_drv_keyslot_setup 成功返回后调用
- 依赖关系:传入的 keyslot_handle 必须为有效的 keyslot 句柄
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| keyslot_handle | uint32_t | 指定的 keyslot 句柄 | uapi_drv_keyslot_setup 返回的有效句柄 |
| hard_key_type | uapi_drv_keyslot_hard_key_type_t | 选择的硬件密钥类型 | UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_BOOT_REE(0) / UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_BOOT_HISI(1) / UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_BOOT_TEE(2) / UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_SEC_STORE(3) / UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_ODRK_REE(4) / UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_ODRK_TEE(5) / UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_USER_REE(6) / UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_USER_TEE(7) |
| klad_engine | uapi_drv_klad_engine_t | 指定的算法引擎 | UAPI_DRV_KLAD_ENGINE_AES(0x20) / UAPI_DRV_KLAD_ENGINE_LAE(0x40) / UAPI_DRV_KLAD_ENGINE_SM4(0x50) / UAPI_DRV_KLAD_ENGINE_TDES(0x70) / UAPI_DRV_KLAD_ENGINE_SHA1_HMAC(0xA0) / UAPI_DRV_KLAD_ENGINE_SHA2_HMAC(0xA1) / UAPI_DRV_KLAD_ENGINE_SM3_HMAC(0xA2) |
| salt | const uint8_t * | 盐值,用于派生工作密钥 | 不为NULL |
| salt_len | uint32_t | 盐值的长度,单位是 byte | 0 ~ 28 |
| key_len | uint32_t | 派生的工作密钥长度,单位是 byte | 16、24、32 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 设置硬件密钥成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_SECURITY_UNIFIED_SUPPORT_KM | 编译参与宏 | 控制 km 相关文件参与编译 | n |
Type definitions
errcode_t
使用说明
作为本模块所有对外接口的返回值类型 [SDK公共基础类型]
Enumerations
uapi_drv_keyslot_hard_key_type_t
typedef enum {
UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_BOOT_REE = 0,
UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_BOOT_HISI,
UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_BOOT_TEE,
UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_SEC_STORE,
UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_ODRK_REE,
UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_ODRK_TEE,
UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_USER_REE,
UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_USER_TEE,
UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_INVALID = 0xFFFFFFFF
} uapi_drv_keyslot_hard_key_type_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_BOOT_REE | 0 | BOOT REE 硬件密钥类型 |
| UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_BOOT_HISI | 1 | BOOT HISI 硬件密钥类型 |
| UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_BOOT_TEE | 2 | BOOT TEE 硬件密钥类型 |
| UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_SEC_STORE | 3 | 安全存储硬件密钥类型 |
| UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_ODRK_REE | 4 | ODRK REE 硬件密钥类型 |
| UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_ODRK_TEE | 5 | ODRK TEE 硬件密钥类型 |
| UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_USER_REE | 6 | USER REE 硬件密钥类型 |
| UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_USER_TEE | 7 | USER TEE 硬件密钥类型 |
| UAPI_DRV_KEYSLOT_HARD_KEY_TYPE_INVALID | 0xFFFFFFFF | 无效硬件密钥类型 |
uapi_drv_keyslot_type_t
typedef enum {
UAPI_DRV_KEYSLOT_TYPE_MCIPHER = 0,
UAPI_DRV_KEYSLOT_TYPE_HMAC,
UAPI_DRV_KEYSLOT_TYPE_FLASH,
} uapi_drv_keyslot_type_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| UAPI_DRV_KEYSLOT_TYPE_MCIPHER | 0 | 对称加解密 keyslot 类型 |
| UAPI_DRV_KEYSLOT_TYPE_HMAC | 1 | HMAC keyslot 类型 |
| UAPI_DRV_KEYSLOT_TYPE_FLASH | 2 | Flash 在线解密 keyslot 类型 |
uapi_drv_klad_engine_t
typedef enum {
UAPI_DRV_KLAD_ENGINE_AES = 0x20,
UAPI_DRV_KLAD_ENGINE_LAE = 0x40,
UAPI_DRV_KLAD_ENGINE_SM4 = 0x50,
UAPI_DRV_KLAD_ENGINE_TDES = 0x70,
UAPI_DRV_KLAD_ENGINE_SHA1_HMAC = 0xA0,
UAPI_DRV_KLAD_ENGINE_SHA2_HMAC = 0xA1,
UAPI_DRV_KLAD_ENGINE_SM3_HMAC = 0xA2,
UAPI_DRV_KLAD_ENGINE_MAX,
UAPI_DRV_KLAD_ENGINE_INVALID = 0xffffffff,
} uapi_drv_klad_engine_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| UAPI_DRV_KLAD_ENGINE_AES | 0x20 | AES 算法引擎 |
| UAPI_DRV_KLAD_ENGINE_LAE | 0x40 | LAE 算法引擎 |
| UAPI_DRV_KLAD_ENGINE_SM4 | 0x50 | SM4 算法引擎 |
| UAPI_DRV_KLAD_ENGINE_TDES | 0x70 | TDES 算法引擎 |
| UAPI_DRV_KLAD_ENGINE_SHA1_HMAC | 0xA0 | SHA1 HMAC 算法引擎 |
| UAPI_DRV_KLAD_ENGINE_SHA2_HMAC | 0xA1 | SHA2 HMAC 算法引擎 |
| UAPI_DRV_KLAD_ENGINE_SM3_HMAC | 0xA2 | SM3 HMAC 算法引擎 |
| UAPI_DRV_KLAD_ENGINE_MAX | 0xA3 | 算法引擎最大值 |
| UAPI_DRV_KLAD_ENGINE_INVALID | 0xFFFFFFFF | 无效算法引擎 |