鸿蒙开发:Universal Keystore Kit(密钥管理服务)【密钥导出(C/C++)】

密钥导出(C/C++)

业务需要获取持久化存储的非对称密钥的公钥时使用,当前支持ECC/RSA/ED25519/X25519的公钥导出。

在CMake脚本中链接相关动态库

复制代码
   target_link_libraries(entry PUBLIC libhuks_ndk.z.so)

开发步骤

  1. 构造对应参数。

    • keyAlias:密钥别名,封装成[OH_Huks_Blob]结构,密钥别名最大长度为64字节。
    • paramSetIn:预留参数,暂不需要处理,传空即可。
    • key:用于放置导出的公钥,为[OH_Huks_Blob]类型对象,需要业务提前申请好内存,需申请足够容纳获取到的密钥属性集的内存大小。
  2. 调用接口[OH_Huks_GetKeyItemParamSet],传入上述参数。

  3. 返回值为成功码/错误码,导出公钥以标准的X.509规范的DER格式封装在参数key中,具体请参考[公钥材料格式]。

    #include "huks/native_huks_api.h"
    #include "huks/native_huks_param.h"
    #include <string.h>
    static napi_value ExportKey(napi_env env, napi_callback_info info)
    {
    /* 1. 参数构造:确定密钥别名 */
    const char *alias = "test_key";
    struct OH_Huks_Blob aliasBlob = { .size = (uint32_t)strlen(alias), .data = (uint8_t )alias };
    /
    构造参数:为待导出公钥申请内存 */
    uint8_t *pubKey = (uint8_t *)malloc(512); // 请业务按实际密钥大小评估申请
    if (pubKey == nullptr) {
    return nullptr;
    }
    struct OH_Huks_Blob keyBlob = { 256, pubKey };
    struct OH_Huks_Result ohResult;
    do {
    ohResult = OH_Huks_ExportPublicKeyItem(&aliasBlob, nullptr, &keyBlob);
    if (ohResult.errorCode != OH_HUKS_SUCCESS) {
    break;
    }
    } while (0);
    free(pubKey);
    napi_value ret;
    napi_create_int32(env, ohResult.errorCode, &ret);
    return ret;
    }

相关推荐
修己xj1 天前
三月,我只想做好这四件事
程序员
不要秃头啊1 天前
别再谈提效了:AI 时代的开发范式本质变了
前端·后端·程序员
jonjia2 天前
引入新维度化解权衡难题
程序员
jonjia2 天前
优秀的工程师如何打破规则
程序员
jonjia2 天前
在大厂交付大型项目的策略
程序员
jonjia2 天前
RFC 与设计文档
程序员
jonjia2 天前
为什么你(或任何人)应该成为一名研发经理?
程序员
jonjia2 天前
管理技术质量 (Manage Technical Quality)
程序员
jonjia2 天前
大厂软件工程师职业发展路径
程序员