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,失败返回对应的错误码

results matching ""

    No results matching ""