1# 密钥删除(C/C++) 2 3<!--Kit: Universal Keystore Kit--> 4<!--Subsystem: Security--> 5<!--Owner: @wutiantian-gitee--> 6<!--Designer: @HighLowWorld--> 7<!--Tester: @wxy1234564846--> 8<!--Adviser: @zengyawen--> 9 10为保证数据安全性,当不需要使用该密钥时,应该删除密钥。 11 12## 在CMake脚本中链接相关动态库 13```txt 14target_link_libraries(entry PUBLIC libhuks_ndk.z.so) 15``` 16 17## 开发步骤 18 19以删除HKDF256密钥为例。 20 211. 指定密钥别名,密钥别名命名规范参考[密钥生成介绍及算法规格](huks-key-generation-overview.md)。 22 232. 调用接口[OH_Huks_DeleteKeyItem](../../reference/apis-universal-keystore-kit/capi-native-huks-api-h.md#oh_huks_deletekeyitem),删除密钥。 24 25```c++ 26#include "huks/native_huks_api.h" 27#include "huks/native_huks_param.h" 28#include "napi/native_api.h" 29#include <cstring> 30 31/* 以下以生成ECC密钥为例 */ 32OH_Huks_Result InitParamSet(struct OH_Huks_ParamSet **paramSet, const struct OH_Huks_Param *params, 33 uint32_t paramCount) 34{ 35 OH_Huks_Result ret = OH_Huks_InitParamSet(paramSet); 36 if (ret.errorCode != OH_HUKS_SUCCESS) { 37 return ret; 38 } 39 ret = OH_Huks_AddParams(*paramSet, params, paramCount); 40 if (ret.errorCode != OH_HUKS_SUCCESS) { 41 OH_Huks_FreeParamSet(paramSet); 42 return ret; 43 } 44 ret = OH_Huks_BuildParamSet(paramSet); 45 if (ret.errorCode != OH_HUKS_SUCCESS) { 46 OH_Huks_FreeParamSet(paramSet); 47 return ret; 48 } 49 return ret; 50} 51 52struct OH_Huks_Param g_testGenerateKeyParam[] = {{.tag = OH_HUKS_TAG_ALGORITHM, .uint32Param = OH_HUKS_ALG_ECC}, 53 {.tag = OH_HUKS_TAG_PURPOSE, .uint32Param = OH_HUKS_KEY_PURPOSE_AGREE}, 54 {.tag = OH_HUKS_TAG_KEY_SIZE, .uint32Param = OH_HUKS_ECC_KEY_SIZE_256}, 55 {.tag = OH_HUKS_TAG_DIGEST, .uint32Param = OH_HUKS_DIGEST_NONE}}; 56 57static OH_Huks_Result GenerateKeyHelper(const char *alias) 58{ 59 struct OH_Huks_Blob aliasBlob = {.size = (uint32_t)strlen(alias), .data = (uint8_t *)alias}; 60 struct OH_Huks_ParamSet *testGenerateKeyParamSet = nullptr; 61 struct OH_Huks_Result ohResult; 62 do { 63 /* 1.初始化密钥属性集 */ 64 ohResult = InitParamSet(&testGenerateKeyParamSet, g_testGenerateKeyParam, 65 sizeof(g_testGenerateKeyParam) / sizeof(OH_Huks_Param)); 66 if (ohResult.errorCode != OH_HUKS_SUCCESS) { 67 break; 68 } 69 /* 2.生成密钥 */ 70 ohResult = OH_Huks_GenerateKeyItem(&aliasBlob, testGenerateKeyParamSet, nullptr); 71 } while (0); 72 OH_Huks_FreeParamSet(&testGenerateKeyParamSet); 73 return ohResult; 74} 75 76static napi_value DeleteKey(napi_env env, napi_callback_info info) 77{ 78 /* 1.获取密钥别名 */ 79 const char *alias = "test_key"; 80 struct OH_Huks_Blob keyAlias = { 81 (uint32_t)strlen("test_key"), 82 (uint8_t *)"test_key" 83 }; 84 85 /* 生成密钥 */ 86 OH_Huks_Result genResult = GenerateKeyHelper(alias); 87 if (genResult.errorCode != OH_HUKS_SUCCESS) { 88 napi_value ret; 89 napi_create_int32(env, genResult.errorCode, &ret); 90 return ret; 91 } 92 93 /* 2.调用OH_Huks_DeleteKeyItem删除密钥 */ 94 struct OH_Huks_Result ohResult = OH_Huks_DeleteKeyItem(&keyAlias, nullptr); 95 96 napi_value ret; 97 napi_create_int32(env, ohResult.errorCode, &ret); 98 return ret; 99} 100``` 101