key_mgr
概述
key_mgr组件提供平台密钥及敏感数据获取功能,用于获取存储在平台各介质中的敏感数据。从调用者角度分为安全环境、非安全环境两种场景,安全环境为安全组件如bootloader、TEE等提供服务;非安全环境为应用程序、非安全组件等提供服务。
功能
按类型/ID方式获取密钥
按名称方式获取密钥
- 密钥派生
- 密钥导入、导出
- 密钥销毁
- 信息获取
错误码
定义 | 描述 | |
---|---|---|
KM_OK | 正确返回值 | 正确时0值,错误时非零值 |
KM_ERR | 一般错误 | |
KM_ERR_NOT_EXIST | 获取key不存在 | |
KM_ERR_VERSION | 版本错误 | |
KM_ERR_INVALIED_PARAM | 无效参数 | |
KM_ERR_BUF_TOO_SMALL | BUF长度过小 | |
KM_ERR_INVALIED_OPS | 无效操作 | |
KM_ERR_NOT_SUPPORT | 不支持 | |
KM_ERR_DRV | 驱动错误 | |
KM_ERR_TOO_LONG | 数据超长 | |
KM_ERR_PARTITION | 分区操作错误 |
KM接口描述
相关数据结构
typedef enum {
KM_INFO_PRODUCT_NAME = 1,
} km_info_type_e;
typedef uintptr_t key_handle;
typedef enum {
KM_KDF = 1,
KM_INVAILD
} km_derive_alg_e;
km_init
uint32_t km_init(void);
功能描述:初始化km组件。
- 参数
- 无
- 返回值:
- 成功返回0,失败返回对应的错误码
km_uninit
void km_uninit(void);
功能描述:反初始化KM组件。
- 参数
- 无
- 返回值:
- 无
km_update_kp
uint32_t km_update_kp(uint8_t *kp_info, size_t key_size);
功能描述:更新kp信息
- 参数
kp_info
:指向kp信息缓冲区的指针key_size
:指针信息大小
- 返回值:
- 成功返回0,失败返回对应的错误码
km_get_key
uint32_t km_get_key(km_key_type_e key_type, key_handle *key,
uint32_t *key_size);
功能描述:按类型/ID方式获取密钥。
参数
key_type
:密钥类型枚举值,用户可从KEY_ID_USER_DEFINE_BASE开始扩展自定义类型,定义如下:typedef enum { /* kp */ KEY_ID_MNF_TB_V2_ADDR = 1, /* Bootldr Manifest TB V2 store position */ KEY_ID_JTAG_KEY = 2, /* Use for verify jtag re-enable request */ KEY_ID_PUBK_TB = 3, /* Use for verify tb or image signatures */ KEY_ID_CHIPID = 4, /* In new design, it may be ID2ID or CID */ KEY_ID_ID2PRVK = 5, KEY_ID_SOCCONFIG = 6, KEY_ID_LPMRECOVERY = 7, KEY_ID_PUBK_TB_MOD = 8, KEY_ID_EMMC_TRUST_SCRAMBLE_KEY = 9, /* EMMC security key */ KEY_ID_EMMC_NTRUST_SCRAMBLE_KEY = 10, /* EMMC non-security key */ KEY_ID_EFUSE_SECURE_REGIONS = 11, /* eFuse's secure regions info */ KEY_ID_MNF_TB_V3_ADDR = 12, /* Bootldr Manifest TB V3 store position */ KEY_ID_MNF_TB_V3_ADDR_BACKUP = 13, /* Backup-Bootldr Manifest TB V3 store position */ KEY_ID_IMG_DECRYPT_KEY = 14, KEY_ID_CHALLENGE_KEY = 15, KEY_ID_RPMB_KEY = 16, /* yoc */ KEY_ID_MAC = 30, KEY_ID_MESSAGE_AUTH = 31, KEY_ID_PRODUCT_KEY = 32, KEY_ID_PRODUCT_SECRET = 33, KEY_ID_PRODUCT_ID = 34, KEY_ID_DEVICE_NAME = 35, KEY_ID_DEVICE_SECRET = 36, KM_ID_PUBKEY_E = 49, /* user */ KEY_ID_SAD = 59, /* SDK身份验证数据 */ KEY_ID_SDK_PUBKEY = 60, /* SDK公钥 */ KEY_ID_USER_DEFINE_BASE = 64, /* NOTE add user key type here */ } km_key_type_e;
key
:输出密钥句柄。key_size
:输出密钥长度。
返回值:
- 成功返回0,失败返回对应的错误码
km_get_pub_key_by_name
uint32_t km_get_pub_key_by_name(const char *name, key_handle *key,
uint32_t *key_size);
功能描述:按名称方式获取密钥。
- 参数
name
:密钥名称。key
:输出密钥句柄。key_size
:输出密钥长度。
- 返回值:
- 成功返回0,失败返回对应的错误码
km_derive_key
uint32_t km_derive_key(km_derive_alg_e alg, uint8_t *key,
uint32_t key_size,uint8_t *outkey, uint32_t *size);
功能描述:密钥派生。待扩展接口
- 参数
alg
:密钥派生算法枚举值。key
:派生输入密钥指针。key_size
:派生输入密钥长度。outkey
:派生输出密钥指针。size
:派生输出密钥长度。
- 返回值:
- 成功返回0,失败返回对应的错误码
km_import_key
uint32_t km_import_key(km_key_type_e key_type, uint8_t *key,
uint32_t key_size);
功能描述:密钥导入。待扩展接口
- 参数
key_type
:导入密钥类型。key
:导入密钥指针。key_size
:导入密钥长度。
- 返回值:
- 成功返回0,失败返回对应的错误码
km_export_key
uint32_t km_export_key(km_key_type_e key_type, uint8_t *keybuf,
uint32_t buf_size, uint32_t *key_size);
功能描述:密钥导出。待扩展接口
- 参数
key_type
:导出密钥类型。keybuf
:导出密钥buf。buf_size
:导出密钥buf长度。key_size
:输出的导出密钥长度。
- 返回值:
- 成功返回0,失败返回对应的错误码
km_destory_key
uint32_t km_destory_key(km_key_type_e key_type);
功能描述:密钥销毁,该函数从物理介质上销毁指定密钥。待扩展接口
- 参数
key_type
:销毁密钥类型。
- 返回值:
- 成功返回0,失败返回对应的错误码
km_get_info
uint32_t km_get_info(km_info_type_e info_type, uint8_t *info_buf,
uint32_t buf_size, uint32_t *info_size);
功能描述:密钥相关信息获取接口。待扩展接口
- 参数
info_type
:获取信息类型枚举。info_buf
:获取信息buf。buf_size
:获取信息buf长度。info_size
:输出的信息长度。
- 返回值:
- 成功返回0,失败返回对应的错误码