1# HuksKeyApi 2 3 4## 概述 5 6描述HUKS向应用提供密钥库能力,包括密钥管理及密钥的密码学操作等功能。 管理的密钥可以由应用导入或者由应用调用HUKS接口生成。 7 8**系统能力:** SystemCapability.Security.Huks 9 10**起始版本:** 9 11 12 13## 汇总 14 15 16### 文件 17 18| 名称 | 描述 | 19| -------- | -------- | 20| [native_huks_api.h](native__huks__api_8h.md) | 声明用于访问HUKS的API。<br>**引用文件**:<huks/native_huks_api.h> <br>**库**:libhuks_ndk.z.so | 21 22 23### 函数 24 25| 名称 | 描述 | 26| -------- | -------- | 27| struct [OH_Huks_Result](_o_h___huks___result.md) [OH_Huks_GetSdkVersion](#oh_huks_getsdkversion) (struct [OH_Huks_Blob](_o_h___huks___blob.md) \*sdkVersion) | 获取当前Huks sdk版本号。 | 28| struct [OH_Huks_Result](_o_h___huks___result.md) [OH_Huks_GenerateKeyItem](#oh_huks_generatekeyitem) (const struct [OH_Huks_Blob](_o_h___huks___blob.md) \*keyAlias, const struct [OH_Huks_ParamSet](_o_h___huks___param_set.md) \*paramSetIn, struct [OH_Huks_ParamSet](_o_h___huks___param_set.md) \*paramSetOut) | 生成密钥。 | 29| struct [OH_Huks_Result](_o_h___huks___result.md) [OH_Huks_ImportKeyItem](#oh_huks_importkeyitem) (const struct [OH_Huks_Blob](_o_h___huks___blob.md) \*keyAlias, const struct [OH_Huks_ParamSet](_o_h___huks___param_set.md) \*paramSet, const struct [OH_Huks_Blob](_o_h___huks___blob.md) \*key) | 导入明文密钥。 | 30| struct [OH_Huks_Result](_o_h___huks___result.md) [OH_Huks_ImportWrappedKeyItem](#oh_huks_importwrappedkeyitem) (const struct [OH_Huks_Blob](_o_h___huks___blob.md) \*keyAlias, const struct [OH_Huks_Blob](_o_h___huks___blob.md) \*wrappingKeyAlias, const struct [OH_Huks_ParamSet](_o_h___huks___param_set.md) \*paramSet, const struct [OH_Huks_Blob](_o_h___huks___blob.md) \*wrappedKeyData) | 导入密文密钥。 | 31| struct [OH_Huks_Result](_o_h___huks___result.md) [OH_Huks_ExportPublicKeyItem](#oh_huks_exportpublickeyitem) (const struct [OH_Huks_Blob](_o_h___huks___blob.md) \*keyAlias, const struct [OH_Huks_ParamSet](_o_h___huks___param_set.md) \*paramSet, struct [OH_Huks_Blob](_o_h___huks___blob.md) \*key) | 导出公钥。 | 32| struct [OH_Huks_Result](_o_h___huks___result.md) [OH_Huks_DeleteKeyItem](#oh_huks_deletekeyitem) (const struct [OH_Huks_Blob](_o_h___huks___blob.md) \*keyAlias, const struct [OH_Huks_ParamSet](_o_h___huks___param_set.md) \*paramSet) | 删除密钥。 | 33| struct [OH_Huks_Result](_o_h___huks___result.md) [OH_Huks_GetKeyItemParamSet](#oh_huks_getkeyitemparamset) (const struct [OH_Huks_Blob](_o_h___huks___blob.md) \*keyAlias, const struct [OH_Huks_ParamSet](_o_h___huks___param_set.md) \*paramSetIn, struct [OH_Huks_ParamSet](_o_h___huks___param_set.md) \*paramSetOut) | 获取密钥的属性集。 | 34| struct [OH_Huks_Result](_o_h___huks___result.md) [OH_Huks_IsKeyItemExist](#oh_huks_iskeyitemexist) (const struct [OH_Huks_Blob](_o_h___huks___blob.md) \*keyAlias, const struct [OH_Huks_ParamSet](_o_h___huks___param_set.md) \*paramSet) | 判断密钥是否存在。 | 35| struct [OH_Huks_Result](_o_h___huks___result.md) [OH_Huks_AttestKeyItem](#oh_huks_attestkeyitem) (const struct [OH_Huks_Blob](_o_h___huks___blob.md) \*keyAlias, const struct [OH_Huks_ParamSet](_o_h___huks___param_set.md) \*paramSet, struct [OH_Huks_CertChain](_o_h___huks___cert_chain.md) \*certChain) | 获取密钥证书链。 | 36| struct [OH_Huks_Result](_o_h___huks___result.md) [OH_Huks_AnonAttestKeyItem](#oh_huks_anonattestkeyitem) (const struct [OH_Huks_Blob](_o_h___huks___blob.md) \*keyAlias, const struct [OH_Huks_ParamSet](_o_h___huks___param_set.md) \*paramSet, struct [OH_Huks_CertChain](_o_h___huks___cert_chain.md) \*certChain) | 获取密钥证书链。 | 37| struct [OH_Huks_Result](_o_h___huks___result.md) [OH_Huks_InitSession](#oh_huks_initsession) (const struct [OH_Huks_Blob](_o_h___huks___blob.md) \*keyAlias, const struct [OH_Huks_ParamSet](_o_h___huks___param_set.md) \*paramSet, struct [OH_Huks_Blob](_o_h___huks___blob.md) \*handle, struct [OH_Huks_Blob](_o_h___huks___blob.md) \*token) | 初始化密钥会话接口,并获取一个句柄(必选)和挑战值(可选)。 | 38| struct [OH_Huks_Result](_o_h___huks___result.md) [OH_Huks_UpdateSession](#oh_huks_updatesession) (const struct [OH_Huks_Blob](_o_h___huks___blob.md) \*handle, const struct [OH_Huks_ParamSet](_o_h___huks___param_set.md) \*paramSet, const struct [OH_Huks_Blob](_o_h___huks___blob.md) \*inData, struct [OH_Huks_Blob](_o_h___huks___blob.md) \*outData) | 分段添加密钥操作的数据并进行相应的密钥操作,输出处理数据。 | 39| struct [OH_Huks_Result](_o_h___huks___result.md) [OH_Huks_FinishSession](#oh_huks_finishsession) (const struct [OH_Huks_Blob](_o_h___huks___blob.md) \*handle, const struct [OH_Huks_ParamSet](_o_h___huks___param_set.md) \*paramSet, const struct [OH_Huks_Blob](_o_h___huks___blob.md) \*inData, struct [OH_Huks_Blob](_o_h___huks___blob.md) \*outData) | 结束密钥会话并进行相应的密钥操作,输出处理数据。 | 40| struct [OH_Huks_Result](_o_h___huks___result.md) [OH_Huks_AbortSession](#oh_huks_abortsession) (const struct [OH_Huks_Blob](_o_h___huks___blob.md) \*handle, const struct [OH_Huks_ParamSet](_o_h___huks___param_set.md) \*paramSet) | 取消密钥会话。 | 41| struct [OH_Huks_Result](_o_h___huks___result.md) [OH_Huks_ListAliases](#oh_huks_listaliases) (const struct [OH_Huks_ParamSet](_o_h___huks___param_set.md) \*paramSet, struct [OH_Huks_KeyAliasSet](_o_h___huks___key_alias_set.md) \*\*outData) | 批量查询密钥别名集。 | 42 43 44## 函数说明 45 46 47### OH_Huks_AbortSession() 48 49``` 50struct OH_Huks_Result OH_Huks_AbortSession (const struct OH_Huks_Blob * handle, const struct OH_Huks_ParamSet * paramSet ) 51``` 52**描述** 53取消密钥会话。 54 55**起始版本:** 9 56 57**参数:** 58 59| 名称 | 描述 | 60| -------- | -------- | 61| handle | 密钥会话句柄,通过[OH_Huks_InitSession](#oh_huks_initsession)接口生成的。 | 62| paramSet | 取消密钥会话需要的输入参数集(默认传空)。 | 63 64**返回:** 65 66返回[OH_HUKS_SUCCESS](_huks_type_api.md#oh_huks_errcode)时接口使用成功,其他时为错误。 67 68**参见:** 69 70[OH_Huks_InitSession](#oh_huks_initsession) 71 72[OH_Huks_UpdateSession](#oh_huks_updatesession) 73 74[OH_Huks_FinishSession](#oh_huks_finishsession) 75 76 77### OH_Huks_AnonAttestKeyItem() 78 79``` 80struct OH_Huks_Result OH_Huks_AnonAttestKeyItem (const struct OH_Huks_Blob * keyAlias, const struct OH_Huks_ParamSet * paramSet, struct OH_Huks_CertChain * certChain ) 81``` 82**描述** 83获取密钥证书链。 84 85<!--RP1--><!--RP1End--> 86 87**起始版本:** 11 88 89**参数:** 90 91| 名称 | 描述 | 92| -------- | -------- | 93| keyAlias | 要获取证书的密钥的别名。 | 94| paramSet | 获取密钥证书需要的参数。 | 95| certChain | 存放输出的密钥证书链。 | 96 97**返回:** 98 99返回[OH_HUKS_SUCCESS](_huks_type_api.md#oh_huks_errcode)时获取成功,其他时为错误。 100 101**注解:** 102 103这是一个涉及网络的耗时接口,调用方可以通过异步线程获取证书链。 104 105 106### OH_Huks_AttestKeyItem() 107 108``` 109struct OH_Huks_Result OH_Huks_AttestKeyItem (const struct OH_Huks_Blob * keyAlias, const struct OH_Huks_ParamSet * paramSet, struct OH_Huks_CertChain * certChain ) 110``` 111 112**描述** 113获取密钥证书链。 114 115**需要权限:** 116ohos.permission.ATTEST_KEY,该权限仅系统应用可申请。 117 118**起始版本:** 9 119 120**参数:** 121 122| 名称 | 描述 | 123| -------- | -------- | 124| keyAlias | 要获取证书的密钥的别名。 | 125| paramSet | 获取密钥证书需要的参数。 | 126| certChain | 存放输出的密钥证书链。 | 127 128**返回:** 129 130返回[OH_HUKS_SUCCESS](_huks_type_api.md#oh_huks_errcode)时获取成功,其他时为错误。 131 132 133### OH_Huks_DeleteKeyItem() 134 135``` 136struct OH_Huks_Result OH_Huks_DeleteKeyItem (const struct OH_Huks_Blob * keyAlias, const struct OH_Huks_ParamSet * paramSet ) 137``` 138**描述** 139删除密钥。 140 141**起始版本:** 9 142 143**参数:** 144 145| 名称 | 描述 | 146| -------- | -------- | 147| keyAlias | 待删除密钥的别名,应与密钥生成时使用的别名相同。 | 148| paramSet | 删除密钥需要属性参数。 若不指定则默认要删除的密钥存储等级为[OH_HUKS_AUTH_STORAGE_LEVEL_CE](_huks_type_api.md#OH_Huks_AuthStorageLevel)。 | 149 150**返回:** 151 152返回[OH_HUKS_SUCCESS](_huks_type_api.md#oh_huks_errcode)时接口使用成功,其他时为错误。 153 154 155### OH_Huks_ExportPublicKeyItem() 156 157``` 158struct OH_Huks_Result OH_Huks_ExportPublicKeyItem (const struct OH_Huks_Blob * keyAlias, const struct OH_Huks_ParamSet * paramSet, struct OH_Huks_Blob * key ) 159``` 160**描述** 161导出公钥。 162 163**起始版本:** 9 164 165**参数:** 166 167| 名称 | 描述 | 168| -------- | -------- | 169| keyAlias | 待导出公钥的密钥别名,应与所用密钥生成时使用的别名相同。 | 170| paramSet | 导出公钥需要的属性参数。 | 171| key | 存放导出的公钥。 | 172 173**返回:** 174 175返回[OH_HUKS_SUCCESS](_huks_type_api.md#oh_huks_errcode)时接口使用成功,其他时为错误。 176 177 178### OH_Huks_FinishSession() 179 180``` 181struct OH_Huks_Result OH_Huks_FinishSession (const struct OH_Huks_Blob * handle, const struct OH_Huks_ParamSet * paramSet, const struct OH_Huks_Blob * inData, struct OH_Huks_Blob * outData ) 182``` 183**描述** 184结束密钥会话并进行相应的密钥操作,输出处理数据。 185 186**起始版本:** 9 187 188**参数:** 189 190| 名称 | 描述 | 191| -------- | -------- | 192| handle | 密钥会话句柄,通过[OH_Huks_InitSession](#oh_huks_initsession)接口生成的。 | 193| paramSet | 密钥操作对应的输入参数集。 | 194| inData | 要处理的输入数据。 | 195| outData | 经过对应的密钥操作后输出的数据。 | 196 197**返回:** 198 199返回[OH_HUKS_SUCCESS](_huks_type_api.md#oh_huks_errcode)时接口使用成功,其他时为错误。 200 201**参见:** 202 203[OH_Huks_InitSession](#oh_huks_initsession) 204 205[OH_Huks_UpdateSession](#oh_huks_updatesession) 206 207[OH_Huks_AbortSession](#oh_huks_abortsession) 208 209 210### OH_Huks_GenerateKeyItem() 211 212``` 213struct OH_Huks_Result OH_Huks_GenerateKeyItem (const struct OH_Huks_Blob * keyAlias, const struct OH_Huks_ParamSet * paramSetIn, struct OH_Huks_ParamSet * paramSetOut ) 214``` 215**描述** 216生成密钥。 217 218**起始版本:** 9 219 220**参数:** 221 222| 名称 | 描述 | 223| -------- | -------- | 224| keyAlias | 给要生成的密钥的别名,需要保证业务所在进程内唯一,否则会发生覆盖。 | 225| paramSetIn | 生成密钥的属性信息的参数集。 | 226| paramSetOut | 生成密钥为临时类型时,存放着密钥数据;非临时类型可为空。 | 227 228**返回:** 229 230返回[OH_HUKS_SUCCESS](_huks_type_api.md#oh_huks_errcode)时接口使用成功,其他时为错误。 231 232 233### OH_Huks_GetKeyItemParamSet() 234 235``` 236struct OH_Huks_Result OH_Huks_GetKeyItemParamSet (const struct OH_Huks_Blob * keyAlias, const struct OH_Huks_ParamSet * paramSetIn, struct OH_Huks_ParamSet * paramSetOut ) 237``` 238**描述** 239获取密钥的属性集。 240 241**起始版本:** 9 242 243**参数:** 244 245| 名称 | 描述 | 246| -------- | -------- | 247| keyAlias | 要获取参数集的密钥别名。 | 248| paramSetIn | 要获取参数集需要的属性TAG(默认传空)。 | 249| paramSetOut | 获取到的输出参数集。 | 250 251**返回:** 252 253返回[OH_HUKS_SUCCESS](_huks_type_api.md#oh_huks_errcode)时获取成功,其他时为失败。 254 255 256### OH_Huks_GetSdkVersion() 257 258``` 259struct OH_Huks_Result OH_Huks_GetSdkVersion (struct OH_Huks_Blob * sdkVersion) 260``` 261**描述** 262获取当前Huks sdk版本号。 263 264**起始版本:** 9 265 266**参数:** 267 268| 名称 | 描述 | 269| -------- | -------- | 270| sdkVersion | 用于存放获取到的版本信息(字符串格式)。 | 271 272**返回:** 273 274返回[OH_HUKS_SUCCESS](_huks_type_api.md#oh_huks_errcode)时接口使用成功,其他时为错误。 275 276 277### OH_Huks_ImportKeyItem() 278 279``` 280struct OH_Huks_Result OH_Huks_ImportKeyItem (const struct OH_Huks_Blob * keyAlias, const struct OH_Huks_ParamSet * paramSet, const struct OH_Huks_Blob * key ) 281``` 282**描述** 283导入明文密钥。 284 285**起始版本:** 9 286 287**参数:** 288 289| 名称 | 描述 | 290| -------- | -------- | 291| keyAlias | 待导入密钥的别名,需要保证业务所在进程内唯一,否则会发生覆盖。 | 292| paramSet | 待导入密钥的属性参数。 | 293| key | 待导入密钥数据,需符合Huks的格式要求,具体见[HuksTypeApi](_huks_type_api.md)。 | 294 295**返回:** 296 297返回[OH_HUKS_SUCCESS](_huks_type_api.md#oh_huks_errcode)时接口使用成功,其他时为错误。 298 299 300### OH_Huks_ImportWrappedKeyItem() 301 302``` 303struct OH_Huks_Result OH_Huks_ImportWrappedKeyItem (const struct OH_Huks_Blob * keyAlias, const struct OH_Huks_Blob * wrappingKeyAlias, const struct OH_Huks_ParamSet * paramSet, const struct OH_Huks_Blob * wrappedKeyData ) 304``` 305**描述** 306导入密文密钥。 307 308**起始版本:** 9 309 310**参数:** 311 312| 名称 | 描述 | 313| -------- | -------- | 314| keyAlias | 待导入密钥的别名,需要保证业务所在进程内唯一,否则会发生覆盖。 | 315| wrappingKeyAlias | 密钥别名,该对应密钥用于密钥协商出密钥解密待导入密钥。 | 316| paramSet | 待导入加密密钥的属性参数。 | 317| wrappedKeyData | 需要导入的加密的密钥数据,需要符合Huks定义的格式,具体见[OH_Huks_AlgSuite](_huks_type_api.md#oh_huks_algsuite) | 318 319**返回:** 320 321返回[OH_HUKS_SUCCESS](_huks_type_api.md#oh_huks_errcode)时接口使用成功,其他时为错误。 322 323 324### OH_Huks_InitSession() 325 326``` 327struct OH_Huks_Result OH_Huks_InitSession (const struct OH_Huks_Blob * keyAlias, const struct OH_Huks_ParamSet * paramSet, struct OH_Huks_Blob * handle, struct OH_Huks_Blob * token ) 328``` 329**描述** 330初始化密钥会话接口,并获取一个句柄(必选)和挑战值(可选)。 331 332**起始版本:** 9 333 334**参数:** 335 336| 名称 | 描述 | 337| -------- | -------- | 338| keyAlias | 操作的密钥的别名。 | 339| paramSet | 初始化操作的密钥参数集合。 | 340| handle | 密钥会话的句柄,后续其他操作时传入该句柄,包括[OH_Huks_UpdateSession](#oh_huks_updatesession), [OH_Huks_FinishSession](#oh_huks_finishsession), [OH_Huks_AbortSession](#oh_huks_abortsession)。 | 341| token | 存放安全访问控制时传回的token | 342 343**返回:** 344 345返回[OH_HUKS_SUCCESS](_huks_type_api.md#oh_huks_errcode)时接口使用成功,其他时为错误。 346 347**参见:** 348 349[OH_Huks_UpdateSession](#oh_huks_updatesession) 350 351[OH_Huks_FinishSession](#oh_huks_finishsession) 352 353[OH_Huks_AbortSession](#oh_huks_abortsession) 354 355 356### OH_Huks_IsKeyItemExist() 357 358``` 359struct OH_Huks_Result OH_Huks_IsKeyItemExist (const struct OH_Huks_Blob * keyAlias, const struct OH_Huks_ParamSet * paramSet ) 360``` 361**描述** 362判断密钥是否存在。 363 364**起始版本:** 9 365 366**参数:** 367 368| 名称 | 描述 | 369| -------- | -------- | 370| keyAlias | 要查找的密钥的别名。 | 371| paramSet | 查询密钥需要的属性TAG(默认传空)。 | 372 373**返回:** 374 375返回[OH_HUKS_SUCCESS](_huks_type_api.md#oh_huks_errcode)时密钥存在, 376 377返回[OH_Huks_ErrCode#OH_HUKS_ERR_CODE_ITEM_NOT_EXIST](_huks_type_api.md#oh_huks_errcode)不存在,返回其他错误在其他情况。 378 379 380### OH_Huks_ListAliases() 381 382``` 383struct OH_Huks_Result OH_Huks_ListAliases (const struct OH_Huks_ParamSet * paramSet, struct OH_Huks_KeyAliasSet ** outData ) 384``` 385**描述** 386批量查询密钥别名集。 387 388**起始版本:** 12 389 390**参数:** 391 392| 名称 | 描述 | 393| -------- | -------- | 394| paramSet | 查询密钥别名需要的属性TAG(默认传空)。 | 395| outData | 经过对应的查询操作后输出的密钥别名集数据。 | 396 397**返回:** 398 399返回[OH_HUKS_SUCCESS](_huks_type_api.md#oh_huks_errcode)时接口使用成功,其他时为错误。 400 401 402### OH_Huks_UpdateSession() 403 404``` 405struct OH_Huks_Result OH_Huks_UpdateSession (const struct OH_Huks_Blob * handle, const struct OH_Huks_ParamSet * paramSet, const struct OH_Huks_Blob * inData, struct OH_Huks_Blob * outData ) 406``` 407**描述** 408分段添加密钥操作的数据并进行相应的密钥操作,输出处理数据。 409 410**起始版本:** 9 411 412**参数:** 413 414| 名称 | 描述 | 415| -------- | -------- | 416| handle | 密钥会话句柄,通过[OH_Huks_InitSession](#oh_huks_initsession)接口生成的。 | 417| paramSet | 密钥操作对应的输入参数集。 | 418| inData | 要处理的输入数据,如果数据过大,可分片多次调用。 | 419| outData | 经过对应的密钥操作后输出的数据。 | 420 421**返回:** 422 423返回[OH_HUKS_SUCCESS](_huks_type_api.md#oh_huks_errcode)时接口使用成功,其他时为错误。 424 425**参见:** 426 427[OH_Huks_InitSession](#oh_huks_initsession) 428 429[OH_Huks_FinishSession](#oh_huks_finishsession) 430 431[OH_Huks_AbortSession](#oh_huks_abortsession) 432