1# 通用密钥库系统 2 3> **说明** 4> 5> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 6 7向应用提供密钥库能力,包括密钥管理及密钥的密码学操作等功能。 8HUKS所管理的密钥可以由应用导入或者由应用调用HUKS接口生成。 9 10## 导入模块 11 12```js 13import huks from '@ohos.security.huks' 14``` 15## HuksErrorCode 16 17表示错误码的枚举。 18 19**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 20 21| 名称 | 值 | 说明 | 22| -------------------------- | ----- | ---- | 23| HUKS_SUCCESS | 0 |表示成功。| 24| HUKS_FAILURE | -1 |表示失败。| 25| HUKS_ERROR_BAD_STATE | -2 |表示错误的状态。| 26| HUKS_ERROR_INVALID_ARGUMENT | -3 |表示无效的数据。| 27| HUKS_ERROR_NOT_SUPPORTED | -4 |表示不支持。| 28| HUKS_ERROR_NO_PERMISSION | -5 |表示没有许可。| 29| HUKS_ERROR_INSUFFICIENT_DATA | -6 |表示数据不足。| 30| HUKS_ERROR_BUFFER_TOO_SMALL | -7 |表示缓冲区太小。| 31| HUKS_ERROR_INSUFFICIENT_MEMORY | -8 |表示内存不足。| 32| HUKS_ERROR_COMMUNICATION_FAILURE | -9 |表示通讯失败。| 33| HUKS_ERROR_STORAGE_FAILURE | -10 |表示存储故障。| 34| HUKS_ERROR_HARDWARE_FAILURE | -11 |表示硬件故障。| 35| HUKS_ERROR_ALREADY_EXISTS | -12 |表示已经存在。| 36| HUKS_ERROR_NOT_EXIST | -13 |表示不存在。| 37| HUKS_ERROR_NULL_POINTER | -14 |表示空指针。| 38| HUKS_ERROR_FILE_SIZE_FAIL | -15 |表示文件大小失败。| 39| HUKS_ERROR_READ_FILE_FAIL | -16 |表示读取文件失败。| 40| HUKS_ERROR_INVALID_PUBLIC_KEY | -17 |表示无效的公钥。| 41| HUKS_ERROR_INVALID_PRIVATE_KEY | -18 |表示无效的私钥。| 42| HUKS_ERROR_INVALID_KEY_INFO | -19 |表示无效的密钥信息。| 43| HUKS_ERROR_HASH_NOT_EQUAL | -20 |表示哈希不相等。| 44| HUKS_ERROR_MALLOC_FAIL | -21 |表示MALLOC 失败。| 45| HUKS_ERROR_WRITE_FILE_FAIL | -22 |表示写文件失败。| 46| HUKS_ERROR_REMOVE_FILE_FAIL | -23 |表示删除文件失败。| 47| HUKS_ERROR_OPEN_FILE_FAIL | -24 |表示打开文件失败。| 48| HUKS_ERROR_CLOSE_FILE_FAIL | -25 |表示关闭文件失败。| 49| HUKS_ERROR_MAKE_DIR_FAIL | -26 |表示创建目录失败。| 50| HUKS_ERROR_INVALID_KEY_FILE | -27 |表示无效的密钥文件。| 51| HUKS_ERROR_IPC_MSG_FAIL | -28 |表示IPC 信息失败。| 52| HUKS_ERROR_REQUEST_OVERFLOWS | -29 |表示请求溢出。| 53| HUKS_ERROR_PARAM_NOT_EXIST | -30 |表示参数不存在。| 54| HUKS_ERROR_CRYPTO_ENGINE_ERROR | -31 |表示CRYPTO ENGINE错误。| 55| HUKS_ERROR_COMMUNICATION_TIMEOUT | -32 |表示通讯超时。| 56| HUKS_ERROR_IPC_INIT_FAIL | -33 |表示IPC 初始化失败。| 57| HUKS_ERROR_IPC_DLOPEN_FAIL | -34 |表示IPC DLOPEN 失败。| 58| HUKS_ERROR_EFUSE_READ_FAIL | -35 |表示EFUSE 读取失败。| 59| HUKS_ERROR_NEW_ROOT_KEY_MATERIAL_EXIST | -36 |表示存在新的根密钥材料。| 60| HUKS_ERROR_UPDATE_ROOT_KEY_MATERIAL_FAIL | -37 |表示更新根密钥材料失败。| 61| HUKS_ERROR_VERIFICATION_FAILED | -38 |表示验证证书链失败。| 62| HUKS_ERROR_CHECK_GET_ALG_FAIL | -100 |表示检查获取 ALG 失败。| 63| HUKS_ERROR_CHECK_GET_KEY_SIZE_FAIL | -101 |表示检查获取密钥大小失败。| 64| HUKS_ERROR_CHECK_GET_PADDING_FAIL | -102 |表示检查获取填充失败。| 65| HUKS_ERROR_CHECK_GET_PURPOSE_FAIL | -103 |表示检查获取目的失败。| 66| HUKS_ERROR_CHECK_GET_DIGEST_FAIL | -104 |表示检查获取摘要失败。| 67| HUKS_ERROR_CHECK_GET_MODE_FAIL | -105 |表示检查获取模式失败。| 68| HUKS_ERROR_CHECK_GET_NONCE_FAIL | -106 |表示检查获取随机数失败。| 69| HUKS_ERROR_CHECK_GET_AAD_FAIL | -107 |表示检查获取 AAD 失败。| 70| HUKS_ERROR_CHECK_GET_IV_FAIL | -108 |表示检查 GET IV 失败。| 71| HUKS_ERROR_CHECK_GET_AE_TAG_FAIL | -109 |表示检查获取 AE 标记失败。| 72| HUKS_ERROR_CHECK_GET_SALT_FAIL | -110 |表示检查获取SALT失败。| 73| HUKS_ERROR_CHECK_GET_ITERATION_FAIL | -111 |表示检查获取迭代失败。| 74| HUKS_ERROR_INVALID_ALGORITHM | -112 |表示无效的算法。| 75| HUKS_ERROR_INVALID_KEY_SIZE | -113 |表示无效的密钥大小。| 76| HUKS_ERROR_INVALID_PADDING | -114 |表示无效的填充。| 77| HUKS_ERROR_INVALID_PURPOSE | -115 |表示无效的目的。| 78| HUKS_ERROR_INVALID_MODE | -116 |表示无效模式。| 79| HUKS_ERROR_INVALID_DIGEST | -117 |表示无效的摘要。| 80| HUKS_ERROR_INVALID_SIGNATURE_SIZE | -118 |表示签名大小无效。| 81| HUKS_ERROR_INVALID_IV | -119 |表示无效的 IV。| 82| HUKS_ERROR_INVALID_AAD | -120 |表示无效的 AAD。| 83| HUKS_ERROR_INVALID_NONCE | -121 |表示无效的随机数。| 84| HUKS_ERROR_INVALID_AE_TAG | -122 |表示无效的 AE 标签。| 85| HUKS_ERROR_INVALID_SALT | -123 |表示无效SALT。| 86| HUKS_ERROR_INVALID_ITERATION | -124 |表示无效的迭代。| 87| HUKS_ERROR_INVALID_OPERATION | -125 |表示无效操作。| 88| HUKS_ERROR_INTERNAL_ERROR | -999 |表示内部错误。| 89| HUKS_ERROR_UNKNOWN_ERROR | -1000 |表示未知错误。| 90 91 92## HuksKeyPurpose 93 94表示密钥用途。 95 96**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 97 98| 名称 | 值 | 说明 | 99| ------------------------ | ---- | -------------------------------- | 100| HUKS_KEY_PURPOSE_ENCRYPT | 1 | 表示密钥用于对明文进行加密操作。 | 101| HUKS_KEY_PURPOSE_DECRYPT | 2 | 表示密钥用于对密文进行解密操作。 | 102| HUKS_KEY_PURPOSE_SIGN | 4 | 表示密钥用于对数据进行签名。 | 103| HUKS_KEY_PURPOSE_VERIFY | 8 | 表示密钥用于验证签名后的数据。 | 104| HUKS_KEY_PURPOSE_DERIVE | 16 | 表示密钥用于派生密钥。 | 105| HUKS_KEY_PURPOSE_WRAP | 32 | 表示密钥用于加密导入。 | 106| HUKS_KEY_PURPOSE_UNWRAP | 64 | 表示密钥加密导出。 | 107| HUKS_KEY_PURPOSE_MAC | 128 | 表示密钥用于生成mac消息验证码。 | 108| HUKS_KEY_PURPOSE_AGREE | 256 | 表示密钥用于进行密钥协商。 | 109 110## HuksKeyDigest 111 112表示摘要算法。 113 114**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 115 116| 名称 | 值 | 说明 | 117| ---------------------- | ---- | ---------------------------------------- | 118| HUKS_DIGEST_NONE | 0 | 表示无摘要算法。 | 119| HUKS_DIGEST_MD5 | 1 | 表示MD5摘要算法。 | 120| HUKS_DIGEST_SHA1 | 10 | 表示SHA1摘要算法。 | 121| HUKS_DIGEST_SHA224 | 11 | 表示SHA224摘要算法。 | 122| HUKS_DIGEST_SHA256 | 12 | 表示SHA256摘要算法。 | 123| HUKS_DIGEST_SHA384 | 13 | 表示SHA384摘要算法。 | 124| HUKS_DIGEST_SHA512 | 14 | 表示SHA512摘要算法。 | 125 126## HuksKeyPadding 127 128表示补齐算法。 129 130**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 131 132| 名称 | 值 | 说明 | 133| ---------------------- | ---- | ---------------------------------------- | 134| HUKS_PADDING_NONE | 0 | 表示不使用补齐算法。 | 135| HUKS_PADDING_OAEP | 1 | 表示使用OAEP补齐算法。 | 136| HUKS_PADDING_PSS | 2 | 表示使用PSS补齐算法。 | 137| HUKS_PADDING_PKCS1_V1_5 | 3 | 表示使用PKCS1_V1_5补齐算法。 | 138| HUKS_PADDING_PKCS5 | 4 | 表示使用PKCS5补齐算法。 | 139| HUKS_PADDING_PKCS7 | 5 | 表示使用PKCS7补齐算法。 | 140 141## HuksCipherMode 142 143表示加密模式。 144 145**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 146 147| 名称 | 值 | 说明 | 148| ------------- | ---- | --------------------- | 149| HUKS_MODE_ECB | 1 | 表示使用ECB加密模式。 | 150| HUKS_MODE_CBC | 2 | 表示使用CBC加密模式。 | 151| HUKS_MODE_CTR | 3 | 表示使用CTR加密模式。 | 152| HUKS_MODE_OFB | 4 | 表示使用OFB加密模式。 | 153| HUKS_MODE_CCM | 31 | 表示使用CCM加密模式。 | 154| HUKS_MODE_GCM | 32 | 表示使用GCM加密模式。 | 155 156## HuksKeySize 157 158表示密钥长度。 159 160**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 161 162| 名称 | 值 | 说明 | 163| ---------------------------- | ---- | ------------------------------------------ | 164| HUKS_RSA_KEY_SIZE_512 | 512 | 表示使用RSA算法的密钥长度为512bit。 | 165| HUKS_RSA_KEY_SIZE_768 | 768 | 表示使用RSA算法的密钥长度为768bit。 | 166| HUKS_RSA_KEY_SIZE_1024 | 1024 | 表示使用RSA算法的密钥长度为1024bit。 | 167| HUKS_RSA_KEY_SIZE_2048 | 2048 | 表示使用RSA算法的密钥长度为2048bit。 | 168| HUKS_RSA_KEY_SIZE_3072 | 3072 | 表示使用RSA算法的密钥长度为3072bit。 | 169| HUKS_RSA_KEY_SIZE_4096 | 4096 | 表示使用RSA算法的密钥长度为4096bit。 | 170| HUKS_ECC_KEY_SIZE_224 | 224 | 表示使用ECC算法的密钥长度为224bit。 | 171| HUKS_ECC_KEY_SIZE_256 | 256 | 表示使用ECC算法的密钥长度为256bit。 | 172| HUKS_ECC_KEY_SIZE_384 | 384 | 表示使用ECC算法的密钥长度为384bit。 | 173| HUKS_ECC_KEY_SIZE_521 | 521 | 表示使用ECC算法的密钥长度为521bit。 | 174| HUKS_AES_KEY_SIZE_128 | 128 | 表示使用AES算法的密钥长度为128bit。 | 175| HUKS_AES_KEY_SIZE_192 | 196 | 表示使用AES算法的密钥长度为196bit。 | 176| HUKS_AES_KEY_SIZE_256 | 256 | 表示使用AES算法的密钥长度为256bit。 | 177| HUKS_AES_KEY_SIZE_512 | 512 | 表示使用AES算法的密钥长度为512bit。 | 178| HUKS_CURVE25519_KEY_SIZE_256 | 256 | 表示使用CURVE25519算法的密钥长度为256bit。 | 179| HUKS_DH_KEY_SIZE_2048 | 2048 | 表示使用DH算法的密钥长度为2048bit。 | 180| HUKS_DH_KEY_SIZE_3072 | 3072 | 表示使用DH算法的密钥长度为3072bit。 | 181| HUKS_DH_KEY_SIZE_4096 | 4096 | 表示使用DH算法的密钥长度为4096bit。 | 182 183## HuksKeyAlg 184 185表示密钥使用的算法。 186 187**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 188 189| 名称 | 值 | 说明 | 190| ---------------- | ---- | --------------------- | 191| HUKS_ALG_RSA | 1 | 表示使用RSA算法。 | 192| HUKS_ALG_ECC | 2 | 表示使用ECC算法。 | 193| HUKS_ALG_DSA | 3 | 表示使用DSA算法。 | 194| HUKS_ALG_AES | 20 | 表示使用AES算法。 | 195| HUKS_ALG_HMAC | 50 | 表示使用HMAC算法。 | 196| HUKS_ALG_HKDF | 51 | 表示使用HKDF算法。 | 197| HUKS_ALG_PBKDF2 | 52 | 表示使用PBKDF2算法。 | 198| HUKS_ALG_ECDH | 100 | 表示使用ECDH算法。 | 199| HUKS_ALG_X25519 | 101 | 表示使用X25519算法。 | 200| HUKS_ALG_ED25519 | 102 | 表示使用ED25519算法。 | 201| HUKS_ALG_DH | 103 | 表示使用DH算法。 | 202 203## HuksKeyGenerateType 204 205表示生成密钥的类型。 206 207**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 208 209| 名称 | 值 | 说明 | 210| ------------------------------ | ---- | ---------------- | 211| HUKS_KEY_GENERATE_TYPE_DEFAULT | 0 | 默认生成的密钥。 | 212| HUKS_KEY_GENERATE_TYPE_DERIVE | 1 | 派生生成的密钥。 | 213| HUKS_KEY_GENERATE_TYPE_AGREE | 2 | 协商生成的密钥。 | 214 215## HuksKeyFlag 216 217表示密钥的产生方式。 218 219**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 220 221| 名称 | 值 | 说明 | 222| -------------------------- | ---- | ------------------------------------ | 223| HUKS_KEY_FLAG_IMPORT_KEY | 1 | 表示通过导入公钥接口导入的密钥。 | 224| HUKS_KEY_FLAG_GENERATE_KEY | 2 | 表示通过生成密钥接口生成的密钥。 | 225| HUKS_KEY_FLAG_AGREE_KEY | 3 | 表示通过生成密钥协商接口生成的密钥。 | 226| HUKS_KEY_FLAG_DERIVE_KEY | 4 | 表示通过生成密钥派生接口生成的密钥。 | 227 228## HuksKeyStorageType 229 230表示密钥存储方式。 231 232**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 233 234| 名称 | 值 | 说明 | 235| ----------------------- | ---- | ------------------------------ | 236| HUKS_STORAGE_TEMP | 0 | 表示通过本地直接管理密钥。 | 237| HUKS_STORAGE_PERSISTENT | 1 | 表示通过HUKS service管理密钥。 | 238 239## HuksSendType 240 241表示发送Tag的方式。 242 243**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 244 245| 名称 | 值 | 说明 | 246| -------------------- | ---- | ----------------- | 247| HUKS_SEND_TYPE_ASYNC | 0 | 表示异步发送TAG。 | 248| HUKS_SEND_TYPE_SYNC | 1 | 表示同步发送TAG。 | 249 250## HuksTagType 251 252表示Tag的数据类型。 253 254**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 255 256 257| 名称 | 值 | 说明 | 258| --------------------- | ------- | --------------------------------------- | 259| HUKS_TAG_TYPE_INVALID | 0 << 28 | 表示非法的Tag类型。 | 260| HUKS_TAG_TYPE_INT | 1 << 28 | 表示该Tag的数据类型为int类型的number。 | 261| HUKS_TAG_TYPE_UINT | 2 << 28 | 表示该Tag的数据类型为uint类型的number。 | 262| HUKS_TAG_TYPE_ULONG | 3 << 28 | 表示该Tag的数据类型为bigint。 | 263| HUKS_TAG_TYPE_BOOL | 4 << 28 | 表示该Tag的数据类型为boolean。 | 264| HUKS_TAG_TYPE_BYTES | 5 << 28 | 表示该Tag的数据类型为Uint8Array。 | 265 266## HuksTag 267 268表示调用参数的Tag。 269 270**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 271 272| 名称 | 值 | 说明 | 273| -------------------------------------- | ---------------------------------------- | -------------------------------------- | 274| HUKS_TAG_INVALID | HuksTagType.HUKS_TAG_TYPE_INVALID \| 0 | 表示非法的Tag。 | 275| HUKS_TAG_ALGORITHM | HUKS_TAG_TYPE_UINT \| 1 | 表示算法的Tag。 | 276| HUKS_TAG_PURPOSE | HuksTagType.HUKS_TAG_TYPE_UINT \| 2 | 表示密钥用途的Tag。 | 277| HUKS_TAG_KEY_SIZE | HuksTagType.HUKS_TAG_TYPE_UINT \| 3 | 表示密钥长度的Tag。 | 278| HUKS_TAG_DIGEST | HuksTagType.HUKS_TAG_TYPE_UINT \| 4 | 表示摘要算法的Tag。 | 279| HUKS_TAG_PADDING | HuksTagType.HUKS_TAG_TYPE_UINT \| 5 | 表示补齐算法的Tag。 | 280| HUKS_TAG_BLOCK_MODE | HuksTagType.HUKS_TAG_TYPE_UINT \| 6 | 表示加密模式的Tag。 | 281| HUKS_TAG_KEY_TYPE | HuksTagType.HUKS_TAG_TYPE_UINT \| 7 | 表示密钥类型的Tag。 | 282| HUKS_TAG_ASSOCIATED_DATA | HuksTagType.HUKS_TAG_TYPE_BYTES \| 8 | 表示附加身份验证数据的Tag。 | 283| HUKS_TAG_NONCE | HuksTagType.HUKS_TAG_TYPE_BYTES \| 9 | 表示密钥加解密的字段。 | 284| HUKS_TAG_IV | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10 | 表示密钥初始化的向量。 | 285| HUKS_TAG_INFO | HuksTagType.HUKS_TAG_TYPE_BYTES \| 11 | 表示密钥派生时的info。 | 286| HUKS_TAG_SALT | HuksTagType.HUKS_TAG_TYPE_BYTES \| 12 | 表示密钥派生时的盐值。 | 287| HUKS_TAG_PWD | HuksTagType.HUKS_TAG_TYPE_BYTES \| 13 | 表示密钥派生时的password。 | 288| HUKS_TAG_ITERATION | HuksTagType.HUKS_TAG_TYPE_UINT \| 14 | 表示密钥派生时的迭代次数。 | 289| HUKS_TAG_KEY_GENERATE_TYPE | HuksTagType.HUKS_TAG_TYPE_UINT \| 15 | 表示生成密钥类型的Tag。 | 290| HUKS_TAG_DERIVE_MAIN_KEY | HuksTagType.HUKS_TAG_TYPE_BYTES \| 16 | 表示密钥派生时的主密钥。 | 291| HUKS_TAG_DERIVE_FACTOR | HuksTagType.HUKS_TAG_TYPE_BYTES \| 17 | 表示密钥派生时的派生因子。 | 292| HUKS_TAG_DERIVE_ALG | HuksTagType.HUKS_TAG_TYPE_UINT \| 18 | 表示密钥派生时的算法类型。 | 293| HUKS_TAG_AGREE_ALG | HuksTagType.HUKS_TAG_TYPE_UINT \| 19 | 表示密钥协商时的算法类型。 | 294| HUKS_TAG_AGREE_PUBLIC_KEY_IS_KEY_ALIAS | HuksTagType.HUKS_TAG_TYPE_BOOL \| 20 | 表示密钥协商时的公钥别名。 | 295| HUKS_TAG_AGREE_PRIVATE_KEY_ALIAS | HuksTagType.HUKS_TAG_TYPE_BYTES \| 21 | 表示密钥协商时的私钥别名。 | 296| HUKS_TAG_AGREE_PUBLIC_KEY | HuksTagType.HUKS_TAG_TYPE_BYTES \| 22 | 表示密钥协商时的公钥。 | 297| HUKS_TAG_KEY_ALIAS | HuksTagType.HUKS_TAG_TYPE_BYTES \| 23 | 表示密钥别名。 | 298| HUKS_TAG_DERIVE_KEY_SIZE | HuksTagType.HUKS_TAG_TYPE_UINT \| 24 | 表示派生密钥的大小。 | 299| HUKS_TAG_ACTIVE_DATETIME | HuksTagType.HUKS_TAG_TYPE_ULONG \| 201 | 预留。 | 300| HUKS_TAG_ORIGINATION_EXPIRE_DATETIME | HuksTagType.HUKS_TAG_TYPE_ULONG \| 202 | 预留。 | 301| HUKS_TAG_USAGE_EXPIRE_DATETIME | HuksTagType.HUKS_TAG_TYPE_ULONG \| 203 | 预留。 | 302| HUKS_TAG_CREATION_DATETIME | HuksTagType.HUKS_TAG_TYPE_ULONG \| 204 | 预留。 | 303| HUKS_TAG_ALL_USERS | ksTagType.HUKS_TAG_TYPE_BOOL \| 301 | 预留。 | 304| HUKS_TAG_USER_ID | HuksTagType.HUKS_TAG_TYPE_UINT \| 302 | 预留。 | 305| HUKS_TAG_NO_AUTH_REQUIRED | HuksTagType.HUKS_TAG_TYPE_BOOL \| 303 | 预留。 | 306| HUKS_TAG_USER_AUTH_TYPE | HuksTagType.HUKS_TAG_TYPE_UINT \| 304 | 预留。 | 307| HUKS_TAG_AUTH_TIMEOUT | HuksTagType.HUKS_TAG_TYPE_UINT \| 305 | 预留。 | 308| HUKS_TAG_AUTH_TOKEN | HuksTagType.HUKS_TAG_TYPE_BYTES \| 306 | 预留。 | 309| HUKS_TAG_ATTESTATION_CHALLENGE | HuksTagType.HUKS_TAG_TYPE_BYTES \| 501 | 表示attestation时的挑战值。 | 310| HUKS_TAG_ATTESTATION_APPLICATION_ID | HuksTagType.HUKS_TAG_TYPE_BYTES \| 502 | 表示attestation时的application Id。 | 311| HUKS_TAG_ATTESTATION_ID_BRAND | HuksTagType.HUKS_TAG_TYPE_BYTES \| 503 | 表示设备的brand。 | 312| HUKS_TAG_ATTESTATION_ID_DEVICE | HuksTagType.HUKS_TAG_TYPE_BYTES \| 504 | 表示设备的device。 | 313| HUKS_TAG_ATTESTATION_ID_PRODUCT | HuksTagType.HUKS_TAG_TYPE_BYTES \| 505 | 表示设备的product。 | 314| HUKS_TAG_ATTESTATION_ID_SERIAL | HuksTagType.HUKS_TAG_TYPE_BYTES \| 506 | 表示设备的SN号。 | 315| HUKS_TAG_ATTESTATION_ID_IMEI | HuksTagType.HUKS_TAG_TYPE_BYTES \| 507 | 表示设备的IMEI号。 | 316| HUKS_TAG_ATTESTATION_ID_MEID | HuksTagType.HUKS_TAG_TYPE_BYTES \| 508 | 表示设备的MEID号。 | 317| HUKS_TAG_ATTESTATION_ID_MANUFACTURER | HuksTagType.HUKS_TAG_TYPE_BYTES \| 509 | 表示设备的制造商。 | 318| HUKS_TAG_ATTESTATION_ID_MODEL | HuksTagType.HUKS_TAG_TYPE_BYTES \| 510 | 表示设备的型号。 | 319| HUKS_TAG_ATTESTATION_ID_ALIAS | HuksTagType.HUKS_TAG_TYPE_BYTES \| 511 | 表示attestation时的密钥别名。 | 320| HUKS_TAG_ATTESTATION_ID_SOCID | HuksTagType.HUKS_TAG_TYPE_BYTES \| 512 | 表示设备的SOCID。 | 321| HUKS_TAG_ATTESTATION_ID_UDID | HuksTagType.HUKS_TAG_TYPE_BYTES \| 513 | 表示设备的UDID。 | 322| HUKS_TAG_ATTESTATION_ID_SEC_LEVEL_INFO | HuksTagType.HUKS_TAG_TYPE_BYTES \| 514 | 表示attestation时的安全凭据。 | 323| HUKS_TAG_ATTESTATION_ID_VERSION_INFO | HuksTagType.HUKS_TAG_TYPE_BYTES \| 515 | 表示attestation时的版本号。 | 324| HUKS_TAG_IS_KEY_ALIAS | HuksTagType.HUKS_TAG_TYPE_BOOL \| 1001 | 表示是否使用生成key时传入的别名的Tag。 | 325| HUKS_TAG_KEY_STORAGE_FLAG | HuksTagType.HUKS_TAG_TYPE_UINT \| 1002 | 表示密钥存储方式的Tag。 | 326| HUKS_TAG_IS_ALLOWED_WRAP | HuksTagType.HUKS_TAG_TYPE_BOOL \| 1003 | 预留。 | 327| HUKS_TAG_KEY_WRAP_TYPE | HuksTagType.HUKS_TAG_TYPE_UINT \| 1004 | 预留。 | 328| HUKS_TAG_KEY_AUTH_ID | HuksTagType.HUKS_TAG_TYPE_BYTES \| 1005 | 预留。 | 329| HUKS_TAG_KEY_ROLE | HuksTagType.HUKS_TAG_TYPE_UINT \| 1006 | 预留。 | 330| HUKS_TAG_KEY_FLAG | HuksTagType.HUKS_TAG_TYPE_UINT \| 1007 | 表示密钥标志的Tag。 | 331| HUKS_TAG_IS_ASYNCHRONIZED | HuksTagType.HUKS_TAG_TYPE_UINT \| 1008 | 预留。 | 332| HUKS_TAG_SECURE_KEY_ALIAS | HuksTagType.HUKS_TAG_TYPE_BOOL \| 1009 | 预留。 | 333| HUKS_TAG_SECURE_KEY_UUID | HuksTagType.HUKS_TAG_TYPE_BYTES \| 1010 | 预留。 | 334| HUKS_TAG_KEY_DOMAIN | HuksTagType.HUKS_TAG_TYPE_UINT \| 1011 | 预留。 | 335| HUKS_TAG_PROCESS_NAME | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10001 | 表示进程名称的Tag。 | 336| HUKS_TAG_PACKAGE_NAME | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10002 | 预留。 | 337| HUKS_TAG_ACCESS_TIME | HuksTagType.HUKS_TAG_TYPE_UINT \| 10003 | 预留。 | 338| HUKS_TAG_USES_TIME | HuksTagType.HUKS_TAG_TYPE_UINT \| 10004 | 预留。 | 339| HUKS_TAG_CRYPTO_CTX | HuksTagType.HUKS_TAG_TYPE_ULONG \| 10005 | 预留。 | 340| HUKS_TAG_KEY | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10006 | 预留。 | 341| HUKS_TAG_KEY_VERSION | HuksTagType.HUKS_TAG_TYPE_UINT \| 10007 | 表示密钥版本的Tag。 | 342| HUKS_TAG_PAYLOAD_LEN | HuksTagType.HUKS_TAG_TYPE_UINT \| 10008 | 预留。 | 343| HUKS_TAG_AE_TAG | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10009 | 预留。 | 344| HUKS_TAG_IS_KEY_HANDLE | HuksTagType.HUKS_TAG_TYPE_ULONG \| 10010 | 预留。 | 345| HUKS_TAG_OS_VERSION | HuksTagType.HUKS_TAG_TYPE_UINT \| 10101 | 表示操作系统版本的Tag。 | 346| HUKS_TAG_OS_PATCHLEVEL | HuksTagType.HUKS_TAG_TYPE_UINT \| 10102 | 表示操作系统补丁级别的Tag。 | 347| HUKS_TAG_SYMMETRIC_KEY_DATA | HuksTagType.HUKS_TAG_TYPE_BYTES \| 20001 | 预留。 | 348| HUKS_TAG_ASYMMETRIC_PUBLIC_KEY_DATA | HuksTagType.HUKS_TAG_TYPE_BYTES \| 20002 | 预留。 | 349| HUKS_TAG_ASYMMETRIC_PRIVATE_KEY_DATA | HuksTagType.HUKS_TAG_TYPE_BYTES \| 20003 | 预留。 | 350 351## huks.generateKey 352 353generateKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void 354 355生成密钥,使用Callback回调异步返回结果。 356 357**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 358 359**参数:** 360 361| 参数名 | 类型 | 必填 | 说明 | 362| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 363| keyAlias | string | 是 | 别名。 | 364| options | [HuksOptions](#huksoptions) | 是 | 用于存放生成key所需TAG。 | 365| callback | AsyncCallback\<[HuksResult](#huksresult)> | 是 | 返回HUKS_SUCCESS时表示接口使用成功,其余结果请参考HuksResult进行错误码查询。 | 366 367**示例:** 368 369```js 370/* 以生成RSA512密钥为例 */ 371var keyAlias = 'keyAlias'; 372var properties = new Array(); 373properties[0] = { 374 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 375 value: huks.HuksKeyAlg.HUKS_ALG_RSA 376}; 377properties[1] = { 378 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 379 value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_512 380}; 381properties[2] = { 382 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 383 value: 384huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | 385huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT 386}; 387properties[3] = { 388 tag: huks.HuksTag.HUKS_TAG_PADDING, 389 value: huks.HuksKeyPadding.HUKS_PADDING_OAEP 390}; 391properties[4] = { 392 tag: huks.HuksTag.HUKS_TAG_DIGEST, 393 value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 394}; 395var options = { 396 properties: properties 397}; 398huks.generateKey(keyAlias, options, function (err, data){}); 399``` 400 401## huks.generateKey 402 403generateKey(keyAlias: string, options: HuksOptions) : Promise\<HuksResult> 404 405生成密钥,使用Promise方式异步返回结果。 406 407**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 408 409**参数:** 410 411| 参数名 | 类型 | 必填 | 说明 | 412| -------- | --------------------------- | ---- | ------------------------ | 413| keyAlias | string | 是 | 密钥别名。 | 414| options | [HuksOptions](#huksoptions) | 是 | 用于存放生成key所需TAG。 | 415 416**返回值**:(可选,如不涉及可删除) 417 418| 类型 | 说明 | 419| ----------------------------------- | -------------------------------------------------- | 420| Promise\<[HuksResult](#huksresult)> | 返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 | 421 422**示例:** 423 424```js 425/* 以生成ECC256密钥为例 */ 426var keyAlias = 'keyAlias'; 427var properties = new Array(); 428properties[0] = { 429 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 430 value: huks.HuksKeyAlg.HUKS_ALG_ECC 431}; 432properties[1] = { 433 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 434 value: huks.HuksKeySize.HUKS_ECC_KEY_SIZE_256 435}; 436properties[2] = { 437 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 438 value: 439huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN | 440huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY 441}; 442properties[3] = { 443 tag: huks.HuksTag.HUKS_TAG_DIGEST, 444 value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 445}; 446var options = { 447 properties: properties 448}; 449var result = huks.generateKey(keyAlias, options); 450``` 451 452## huks.deleteKey 453 454deleteKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void 455 456删除密钥,使用Callback回调异步返回结果。 457 458**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 459 460**参数:** 461 462| 参数名 | 类型 | 必填 | 说明 | 463| -------- | ----------------------------------------- | ---- | -------------------------------------------------- | 464| keyAlias | string | 是 | 密钥别名,应为生成key时传入的别名。 | 465| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 466| callback | AsyncCallback\<[HuksResult](#huksresult)> | 是 | 返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 | 467 468**示例:** 469 470```js 471/* 此处options选择emptyOptions传空 */ 472var keyAlias = 'keyAlias'; 473var emptyOptions = { 474 properties: [] 475}; 476huks.deleteKey(keyAlias, emptyOptions, function (err, data) {}); 477``` 478 479## huks.deleteKey 480 481deleteKey(keyAlias: string, options: HuksOptions) : Promise\<HuksResult> 482 483删除密钥,使用Promise方式异步返回结果。 484 485**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 486 487**参数:** 488 489| 参数名 | 类型 | 必填 | 说明 | 490| -------- | ----------- | ---- | ----------------------------------------------------- | 491| keyAlias | string | 是 | 密钥别名,应为生成key时传入的别名。 | 492| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 493 494**返回值:** 495 496| 类型 | 说明 | 497| ----------------------------------- | -------------------------------------------------- | 498| Promise\<[HuksResult](#huksresult)> | 返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 | 499 500**示例:** 501 502```js 503/* 此处options选择emptyOptions传空 */ 504var keyAlias = 'keyAlias'; 505var emptyOptions = { 506 properties: [] 507}; 508var result = huks.deleteKey(keyAlias, emptyOptions); 509``` 510 511## huks.getSdkVersion 512 513getSdkVersion(options: HuksOptions) : string 514 515获取当前系统sdk版本。 516 517**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 518 519**参数:** 520 521| 参数名 | 类型 | 必填 | 说明 | 522| ------- | ---------- | ---- | ------------------------- | 523| options | [HuksOptions](#huksoptions) | 是 | 空对象,用于存放sdk版本。 | 524 525**返回值:** 526 527| 类型 | 说明 | 528| ------ | ------------- | 529| string | 返回sdk版本。 | 530 531**示例:** 532 533```js 534/* 此处options选择emptyOptions传空 */ 535var emptyOptions = { 536 properties: [] 537}; 538var result = huks.getSdkVersion(emptyOptions); 539``` 540 541## huks.importKey 542 543importKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void 544 545导入密钥,使用Callback方式回调异步返回结果 。 546 547**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 548 549**参数:** 550 551| 参数名 | 类型 | 必填 | 说明 | 552| -------- | ------------------------ | ---- | ------------------------------------------------- | 553| keyAlias | string | 是 | 密钥别名,用于存放所需密钥。 | 554| options | [HuksOptions](#huksoptions) | 是 | 用于导入时所需TAG和需要导入的密钥。 | 555| callback | AsyncCallback\<[HuksResult](#huksresult)> | 是 | 返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 | 556 557**示例:** 558 559```js 560/* 以导入AES256密钥为例 */ 561var plainTextSize32 = makeRandomArr(32); 562function makeRandomArr(size) { 563 var arr = new Uint8Array(size); 564 for (var i = 0; i < size; i++) { 565 arr[i] = Math.floor(Math.random() * 10); 566 } 567 return arr; 568}; 569var keyAlias = 'keyAlias'; 570var properties = new Array(); 571properties[0] = { 572 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 573 value: huks.HuksKeyAlg.HUKS_ALG_AES 574}; 575properties[1] = { 576 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 577 value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256 578}; 579properties[2] = { 580 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 581 value: 582huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT 583}; 584properties[3] = { 585 tag: huks.HuksTag.HUKS_TAG_PADDING, 586 value:huks.HuksKeyPadding.HUKS_PADDING_PKCS7 587}; 588properties[4] = { 589 tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE, 590 value: huks.HuksCipherMode.HUKS_MODE_ECB 591}; 592var options = { 593 properties: properties, 594 inData: plainTextSize32 595}; 596huks.importKey(keyAlias, options, function (err, data){}); 597``` 598 599## huks.importKey 600 601importKey(keyAlias: string, options: HuksOptions) : Promise\<HuksResult> 602 603导入密钥,使用Promise方式异步返回结果。 604 605**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 606 607**参数:** 608 609| 参数名 | 类型 | 必填 | 说明 | 610| -------- | ----------- | ---- | ------------------------------------ | 611| keyAlias | string | 是 | 密钥别名,用于存放所需密钥。 | 612| options | [HuksOptions](#huksoptions) | 是 | 用于导入时所需TAG和需要导入的密钥。 | 613 614**返回值:** 615 616| 类型 | 说明 | 617| ----------------------------------- | -------------------------------------------------- | 618| Promise\<[HuksResult](#huksresult)> | 返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 | 619 620**示例:** 621 622```js 623/* 以导入AES128为例 */ 624var plainTextSize32 = makeRandomArr(32); 625 626function makeRandomArr(size) { 627 var arr = new Uint8Array(size); 628 for (var i = 0; i < size; i++) { 629 arr[i] = Math.floor(Math.random() * 10); 630 } 631 return arr; 632}; 633 634/*第一步:生成密钥*/ 635var keyAlias = 'keyAlias'; 636var properties = new Array(); 637properties[0] = { 638 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 639 value: huks.HuksKeyAlg.HUKS_ALG_AES 640}; 641properties[1] = { 642 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 643 value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_128 644}; 645properties[2] = { 646 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 647 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT 648}; 649properties[3] = { 650 tag: huks.HuksTag.HUKS_TAG_PADDING, 651 value:huks.HuksKeyPadding.HUKS_PADDING_PKCS7 652}; 653properties[4] = { 654 tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE, 655 value: huks.HuksCipherMode.HUKS_MODE_ECB 656}; 657var huksoptions = { 658 properties: properties, 659 inData: plainTextSize32 660}; 661var result = huks.importKey(keyAlias, huksoptions); 662``` 663 664## huks.exportKey 665 666exportKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void 667 668导出密钥,使用Callback方式回调异步返回的结果。 669 670**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 671 672**参数:** 673 674| 参数名 | 类型 | 必填 | 说明 | 675| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 676| keyAlias | string | 是 | 密钥别名,应与所用密钥生成时使用的别名相同。 | 677| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 678| callback | AsyncCallback\<[HuksResult](#huksresult)> | 是 | 返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。outData:返回从密钥中导出的公钥。 | 679 680**示例:** 681 682```js 683/* 此处options选择emptyOptions来传空 */ 684var keyAlias = 'keyAlias'; 685var emptyOptions = { 686 properties: [] 687}; 688huks.exportKey(keyAlias, emptyOptions, function (err, data){}); 689``` 690 691## huks.exportKey 692 693exportKey(keyAlias: string, options: HuksOptions) : Promise\<HuksResult> 694 695导出密钥,使用Promise方式回调异步返回的结果。 696 697**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 698 699**参数:** 700 701| 参数名 | 类型 | 必填 | 说明 | 702| -------- | ----------- | ---- | ------------------------------------------------------------ | 703| keyAlias | string | 是 | 密钥别名,应与所用密钥生成时使用的别名相同。 | 704| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 705 706**返回值:** 707 708| 类型 | 说明 | 709| ----------------------------------- | ------------------------------------------------------------ | 710| Promise\<[HuksResult](#huksresult)> | 返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。outData:返回从密钥中导出的公钥。 | 711 712**示例:** 713 714```js 715/* 此处options选择emptyOptions来传空 */ 716var keyAlias = 'keyAlias'; 717var emptyOptions = { 718 properties: [] 719}; 720var result = huks.exportKey(keyAlias, emptyOptions); 721``` 722 723## huks.getKeyProperties 724 725getKeyProperties(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void 726 727获取密钥属性,使用Callback回调异步返回结果。 728 729**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 730 731**参数:** 732 733| 参数名 | 类型 | 必填 | 说明 | 734| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 735| keyAlias | string | 是 | 密钥别名,应与所用密钥生成时使用的别名相同。 | 736| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 737| callback | AsyncCallback\<[HuksResult](#huksresult)> | 是 | errorCode:返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 | 738 739**示例:** 740 741```js 742/* 此处options选择emptyOptions来传空 */ 743var keyAlias = 'keyAlias'; 744var emptyOptions = { 745 properties: [] 746}; 747huks.getKeyProperties(keyAlias, emptyOptions, function (err, data){}); 748``` 749 750## huks.getKeyProperties 751 752getKeyProperties(keyAlias: string, options: HuksOptions) : Promise\<HuksResult> 753 754获取密钥属性,使用Promise回调异步返回结果。 755 756**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 757 758**参数:** 759 760| 参数名 | 类型 | 必填 | 说明 | 761| -------- | ----------- | ---- | ------------------------------------------------------------ | 762| keyAlias | string | 是 | 密钥别名,应与所用密钥生成时使用的别名相同。 | 763| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 764 765**返回值:** 766 767| 类型 | 说明 | 768| ------------------ | ------------------------------------------------------------ | 769| Promise\<[HuksResult](#huksoptions)> | errorCode:返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。properties:返回值为生成密钥时所需参数。 | 770 771**示例:** 772 773```js 774/* 此处options选择emptyOptions来传空 */ 775var keyAlias = 'keyAlias'; 776var emptyOptions = { 777 properties: [] 778}; 779var result = huks.getKeyProperties(keyAlias, emptyOptions); 780``` 781 782## huks.isKeyExist 783 784isKeyExist(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<boolean>) : void 785 786判断密钥是否存在,使用Callback回调异步返回结果 。 787 788**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 789 790**参数:** 791 792| 参数名 | 类型 | 必填 | 说明 | 793| -------- | ---------------------- | ---- | ------------------------------------- | 794| keyAlias | string | 是 | 所需查找的密钥的别名。 | 795| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 796| callback | AsyncCallback\<boolean> | 是 | FALSE代表密钥不存在,TRUE代表密钥存在。 | 797 798**示例:** 799 800```js 801/* 此处options选择emptyOptions来传空 */ 802var keyAlias = 'keyAlias'; 803var emptyOptions = { 804 properties: [] 805}; 806huks.isKeyExist(keyAlias, emptyOptions, function (err, data){}); 807``` 808 809## huks.isKeyExist 810 811isKeyExist(keyAlias: string, options: HuksOptions) : Promise\<boolean> 812 813判断密钥是否存在,使用Promise回调异步返回结果 。 814 815**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 816 817**参数:** 818 819| 参数名 | 类型 | 必填 | 说明 | 820| -------- | ----------- | ---- | -------------------------------- | 821| keyAlias | string | 是 | 所需查找的密钥的别名。 | 822| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 823 824**返回值:** 825 826| 类型 | 说明 | 827| ----------------- | --------------------------------------- | 828| Promise\<boolean> | FALSE代表密钥不存在,TRUE代表密钥存在。 | 829 830**示例:** 831 832```js 833/* 此处options选择emptyOptions来传空 */ 834var keyAlias = 'keyAlias'; 835var emptyOptions = { 836 properties: [] 837}; 838var result = huks.isKeyExist(keyAlias, emptyOptions); 839``` 840 841 842 843## huks.init 844 845init(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksHandle>) : void 846 847init操作密钥接口,使用Callback回调异步返回结果 。 848 849**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 850 851**参数:** 852 853| 参数名 | 类型 | 必填 | 说明 | 854| -------- | ---------------------- | ---- | ------------------------------------- | 855| keyAlias | string | 是 | Init操作密钥的别名。 | 856| options | [HuksOptions](#huksoptions) | 是 | Init操作的参数集合。 | 857| callback | AsyncCallback\<[HuksHandle](#hukshandle)> | 是 | 将Init操作操作返回的handle添加到密钥管理系统的回调。 | 858 859 860## huks.init 861 862init(keyAlias: string, options: HuksOptions) : Promise\<HuksHandle> 863 864init操作密钥接口,使用Promise方式异步返回结果。 865 866**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 867 868**参数:** 869 870| 参数名 | 类型 | 必填 | 说明 | 871| -------- | ---------------------- | ---- | ------------------------------------- | 872| keyAlias | string | 是 | Init操作密钥的别名。 | 873| options | [HuksOptions](#huksoptions) | 是 | Init参数集合。 | 874| promise | Promise\<[HuksHandle](#hukshandle)> | 是 | 将Init操作返回的handle添加到密钥管理系统的回调。 | 875 876 877## huks.update 878 879update(handle: number, token?: Uint8Array, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void 880 881update操作密钥接口,使用Callback回调异步返回结果 。 882 883**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 884 885**参数:** 886 887| 参数名 | 类型 | 必填 | 说明 | 888| -------- | ---------------------- | ---- | ------------------------------------- | 889| handle | number | 是 | Update操作的handle。 | 890| token | Uint8Array | 否 | Update操作的token。 | 891| options | [HuksOptions](#huksoptions) | 是 | Update的参数集合。 | 892| callback | AsyncCallback\<[HuksResult](#huksresult)> | 是 | 将Update操作的结果添加到密钥管理系统的回调。 | 893 894 895## huks.update 896 897update(handle: number, token?: Uint8Array, options: HuksOptions) : Promise\<HuksResult> 898 899update操作密钥接口,使用Promise方式异步返回结果。 900 901**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 902 903**参数:** 904 905| 参数名 | 类型 | 必填 | 说明 | 906| -------- | ---------------------- | ---- | ------------------------------------- | 907| handle | number | 是 | Update操作的handle。 | 908| token | Uint8Array | 否 | Update操作的token。 | 909| options | [HuksOptions](#huksoptions) | 是 | Update操作的参数集合。 | 910| promise | Promise\<[HuksResult](#huksresult)> | 是 | 将Update操作的结果添加到密钥管理系统的回调。 | 911 912 913## huks.finish 914 915finish(handle: number, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void 916 917finish操作密钥接口,使用Callback回调异步返回结果 。 918 919**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 920 921**参数:** 922 923| 参数名 | 类型 | 必填 | 说明 | 924| -------- | ---------------------- | ---- | ------------------------------------- | 925| handle | number | 是 | Finish操作的handle。 | 926| options | [HuksOptions](#huksoptions) | 是 | Finish的参数集合。 | 927| callback | AsyncCallback\<[HuksResult](#huksresult)> | 是 | 将Finish操作的结果添加到密钥管理系统的回调。 | 928 929 930## huks.finish 931 932finish(handle: number, options: HuksOptions) : Promise\<HuksResult> 933 934finish操作密钥接口,使用Promise方式异步返回结果。 935 936**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 937 938**参数:** 939 940| 参数名 | 类型 | 必填 | 说明 | 941| -------- | ---------------------- | ---- | ------------------------------------- | 942| handle | number | 是 | Finish操作的handle。 | 943| options | [HuksOptions](#huksoptions) | 是 | Finish操作的参数集合。 | 944| promise | Promise\<[HuksResult](#HuksResult)> | 是 | promise实例,用于获取异步返回结果。 | 945 946 947## huks.abort 948 949abort(handle: number, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void 950 951abort操作密钥接口,使用Callback回调异步返回结果 。 952 953**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 954 955**参数:** 956 957| 参数名 | 类型 | 必填 | 说明 | 958| -------- | ---------------------- | ---- | ------------------------------------- | 959| handle | number | 是 | Abort操作的handle。 | 960| options | [HuksOptions](#huksoptions) | 是 | Abort操作的参数集合。 | 961| callback | AsyncCallback\<[HuksResult](#huksresult)> | 是 | 将Abort操作的结果添加到密钥管理系统的回调。 | 962 963**示例:** 964 965```js 966/* huks.init, huks.update, huks.finish为三段式接口,需要一起使用,当huks.init和huks.update 967 * 以及huks.finish操作中的任一阶段发生错误时,都需要调用huks.abort来终止密钥的使用。 968 * 969 * 以下以RSA1024密钥的callback操作使用为例 970 */ 971import router from '@system.router'; 972import huks from '@ohos.security.huks'; 973 974async function routePage() { 975 let options = { 976 uri: 'pages/second' 977 } 978 try { 979 await router.push(options) 980 } catch (err) { 981 console.error(`fail callback, code: ${err.code}, msg: ${err.msg}`) 982 } 983} 984var keyalias = "HuksDemoRSA"; 985var properties = new Array(); 986var options = { 987 properties: properties, 988 inData: new Uint8Array(0) 989}; 990var handle; 991var resultMessage = ""; 992async function generateKey() { 993 properties[0] = { 994 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 995 value: huks.HuksKeyAlg.HUKS_ALG_RSA 996 }; 997 properties[1] = { 998 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 999 value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_1024 1000 }; 1001 properties[2] = { 1002 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 1003 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT 1004 }; 1005 properties[3] = { 1006 tag: huks.HuksTag.HUKS_TAG_PADDING, 1007 value: huks.HuksKeyPadding.HUKS_PADDING_OAEP 1008 }; 1009 properties[4] = { 1010 tag: huks.HuksTag.HUKS_TAG_DIGEST, 1011 value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 1012 }; 1013 huks.generateKey(keyalias, options); 1014} 1015function stringToUint8Array(str) { 1016 var arr = []; 1017 for (var i = 0, j = str.length; i < j; ++i) { 1018 arr.push(str.charCodeAt(i)); 1019 } 1020 var tmpUint8Array = new Uint8Array(arr); 1021 return tmpUint8Array; 1022} 1023async function huksInit() { 1024 await huks.init(keyalias, options).then((data) => { 1025 console.log(`test init data: ${JSON.stringify(data)}`); 1026 handle = data.handle; 1027 }).catch((err) => { 1028 console.log("test init err information: " + JSON.stringify(err)) 1029 }) 1030} 1031async function huksUpdate() { 1032 options.inData = stringToUint8Array("huksHmacTest"); 1033 await huks.update(handle, options).then((data) => { 1034 if (data.errorCode === 0) { 1035 resultMessage += "update success!"; 1036 } else { 1037 resultMessage += "update fail!"; 1038 } 1039 }); 1040 console.log(resultMessage); 1041} 1042function huksFinish() { 1043 options.inData = stringToUint8Array("HuksDemoHMAC"); 1044 huks.finish(handle, options).then((data) => { 1045 if (data.errorCode === 0) { 1046 resultMessage = "finish success!"; 1047 } else { 1048 resultMessage = "finish fail errorCode: " + data.errorCode; 1049 } 1050 }).catch((err) => { 1051 resultMessage = "finish fail, catch errorMessage:" + JSON.stringify(err) 1052 }); 1053 console.log(resultMessage); 1054} 1055async function huksAbort() { 1056 huks.abort(handle, options).then((data) => { 1057 if (data.errorCode === 0) { 1058 resultMessage = "abort success!"; 1059 } else { 1060 resultMessage = "abort fail errorCode: " + data.errorCode; 1061 } 1062 }).catch((err) => { 1063 resultMessage = "abort fail, catch errorMessage:" + JSON.stringify(err) 1064 }); 1065 console.log(resultMessage); 1066} 1067 1068@Entry 1069@Component 1070struct Index { 1071 build() { 1072 Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { 1073 Text('Hello World') 1074 .fontSize(50) 1075 .fontWeight(FontWeight.Bold) 1076 Button() { 1077 Text('Tocallback') 1078 .fontSize(25) 1079 .fontWeight(FontWeight.Bold) 1080 }.type(ButtonType.Capsule) 1081 .margin({ 1082 top: 20 1083 }) 1084 .width('50%') 1085 .height('10%') 1086 .backgroundColor('#0D9FFB') 1087 .onClick(() => { 1088 routePage() 1089 }) 1090 Button() { 1091 Text('generateKey') 1092 .fontSize(25) 1093 .fontWeight(FontWeight.Bold) 1094 }.type(ButtonType.Capsule) 1095 .margin({ 1096 top: 20 1097 }) 1098 .width('50%') 1099 .height('10%') 1100 .backgroundColor('#0D9FFB') 1101 .onClick(() => { 1102 generateKey() 1103 }) 1104 Button() { 1105 Text('Init') 1106 .fontSize(25) 1107 .fontWeight(FontWeight.Bold) 1108 }.type(ButtonType.Capsule) 1109 .margin({ 1110 top: 20 1111 }) 1112 .width('50%') 1113 .height('10%') 1114 .backgroundColor('#0D9FFB') 1115 .onClick(() => { 1116 huksInit() 1117 }) 1118 Button() { 1119 Text('Update') 1120 .fontSize(25) 1121 .fontWeight(FontWeight.Bold) 1122 }.type(ButtonType.Capsule) 1123 .margin({ 1124 top: 20 1125 }) 1126 .width('50%') 1127 .height('10%') 1128 .backgroundColor('#0D9FFB') 1129 .onClick(() => { 1130 huksUpdate() 1131 }) 1132 Button() { 1133 Text('Finish') 1134 .fontSize(25) 1135 .fontWeight(FontWeight.Bold) 1136 }.type(ButtonType.Capsule) 1137 .margin({ 1138 top: 20 1139 }) 1140 .width('50%') 1141 .height('10%') 1142 .backgroundColor('#0D9FFB') 1143 .onClick(() => { 1144 huksFinish() 1145 }) 1146 Button() { 1147 Text('Abort') 1148 .fontSize(25) 1149 .fontWeight(FontWeight.Bold) 1150 }.type(ButtonType.Capsule) 1151 .margin({ 1152 top: 20 1153 }) 1154 .width('50%') 1155 .height('10%') 1156 .backgroundColor('#0D9FFB') 1157 .onClick(() => { 1158 huksAbort() 1159 }) 1160 } 1161 .width('100%') 1162 .height('100%') 1163 } 1164} 1165``` 1166 1167## huks.abort 1168 1169abort(handle: number, options: HuksOptions) : Promise\<HuksResult>; 1170 1171abort操作密钥接口,使用Promise方式异步返回结果。 1172 1173**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 1174 1175**参数:** 1176 1177| 参数名 | 类型 | 必填 | 说明 | 1178| -------- | ---------------------- | ---- | ------------------------------------- | 1179| handle | number | 是 | Abort操作的handle。 | 1180| options | [HuksOptions](#huksoptions) | 是 | Abort操作的参数集合。 | 1181| promise | Promise\<[HuksResult](#huksresult)> | 是 | 将Abort操作的结果添加到密钥管理系统的回调。 | 1182 1183**示例:** 1184 1185```js 1186/* huks.init, huks.update, huks.finish为三段式接口,需要一起使用,当huks.init和huks.update 1187 * 以及huks.finish操作中的任一阶段发生错误时,都需要调用huks.abort来终止密钥的使用。 1188 * 1189 * 以下以RSA1024密钥的promise操作使用为例 1190 */ 1191import router from '@system.router'; 1192import huks from '@ohos.security.huks'; 1193 1194async function routePage() { 1195 let options = { 1196 uri: 'pages/second' 1197 } 1198 try { 1199 await router.push(options) 1200 } catch (err) { 1201 console.error(`fail callback, code: ${err.code}, msg: ${err.msg}`) 1202 } 1203} 1204 1205var keyalias = "HuksDemoRSA"; 1206var properties = new Array(); 1207var options = { 1208 properties: properties, 1209 inData: new Uint8Array(0) 1210}; 1211var handle; 1212var resultMessage = ""; 1213function stringToUint8Array(str) { 1214 var arr = []; 1215 for (var i = 0, j = str.length; i < j; ++i) { 1216 arr.push(str.charCodeAt(i)); 1217 } 1218 var tmpUint8Array = new Uint8Array(arr); 1219 return tmpUint8Array; 1220} 1221 1222async function generateKey() { 1223 properties[0] = { 1224 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 1225 value: huks.HuksKeyAlg.HUKS_ALG_RSA 1226 }; 1227 properties[1] = { 1228 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 1229 value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_1024 1230 }; 1231 properties[2] = { 1232 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 1233 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT 1234 }; 1235 properties[3] = { 1236 tag: huks.HuksTag.HUKS_TAG_PADDING, 1237 value: huks.HuksKeyPadding.HUKS_PADDING_OAEP 1238 }; 1239 properties[4] = { 1240 tag: huks.HuksTag.HUKS_TAG_DIGEST, 1241 value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 1242 }; 1243 huks.generateKey(keyalias, options, function (err, data) { }); 1244} 1245async function huksInit() { 1246 return new Promise((resolve, reject) => { 1247 huks.init(keyalias, options, async function (err, data) { 1248 if (data.errorCode === 0) { 1249 resultMessage = "init success!" 1250 handle = data.handle; 1251 } else { 1252 resultMessage = "init fail errorCode: " + data.errorCode 1253 } 1254 }); 1255 }); 1256} 1257 1258async function huksUpdate() { 1259 options.inData = stringToUint8Array("huksHmacTest"); 1260 new Promise((resolve, reject) => { 1261 huks.update(handle, options, function (err, data) { 1262 if (data.errorCode === 0) { 1263 resultMessage += "update success!"; 1264 } else { 1265 resultMessage += "update fail!"; 1266 } 1267 }); 1268 }); 1269 console.log(resultMessage); 1270 1271} 1272 1273async function huksFinish() { 1274 options.inData = stringToUint8Array("0"); 1275 new Promise((resolve, reject) => { 1276 huks.finish(handle, options, function (err, data) { 1277 if (data.errorCode === 0) { 1278 resultMessage = "finish success!"; 1279 } else { 1280 resultMessage = "finish fail errorCode: " + data.errorCode; 1281 } 1282 }); 1283 }); 1284} 1285 1286function huksAbort() { 1287 new Promise((resolve, reject) => { 1288 huks.abort(handle, options, function (err, data) { 1289 console.log(`Huks_Demo hmac huksAbort1 data ${JSON.stringify(data)}`); 1290 console.log(`Huks_Demo hmac huksAbort1 err ${JSON.stringify(err)}`); 1291 }); 1292 }); 1293} 1294@Entry 1295@Component 1296struct Index { 1297 build() { 1298 Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { 1299 Text('Hello World') 1300 .fontSize(50) 1301 .fontWeight(FontWeight.Bold) 1302 Button() { 1303 Text('to Promise') 1304 .fontSize(20) 1305 .fontWeight(FontWeight.Bold) 1306 }.type(ButtonType.Capsule) 1307 .margin({ 1308 top: 20 1309 }) 1310 .width('50%') 1311 .height('10%') 1312 .backgroundColor('#0D9FFB') 1313 .onClick(() => { 1314 router.back() 1315 }) 1316 Button() { 1317 Text('generateKey') 1318 .fontSize(25) 1319 .fontWeight(FontWeight.Bold) 1320 }.type(ButtonType.Capsule) 1321 .margin({ 1322 top: 20 1323 }) 1324 .width('50%') 1325 .height('10%') 1326 .backgroundColor('#0D9FFB') 1327 .onClick(() => { 1328 generateKey() 1329 }) 1330 Button() { 1331 Text('Init') 1332 .fontSize(25) 1333 .fontWeight(FontWeight.Bold) 1334 }.type(ButtonType.Capsule) 1335 .margin({ 1336 top: 20 1337 }) 1338 .width('50%') 1339 .height('10%') 1340 .backgroundColor('#0D9FFB') 1341 .onClick(() => { 1342 huksInit() 1343 }) 1344 Button() { 1345 Text('Update') 1346 .fontSize(25) 1347 .fontWeight(FontWeight.Bold) 1348 }.type(ButtonType.Capsule) 1349 .margin({ 1350 top: 20 1351 }) 1352 .width('50%') 1353 .height('10%') 1354 .backgroundColor('#0D9FFB') 1355 .onClick(() => { 1356 huksUpdate() 1357 }) 1358 Button() { 1359 Text('Finish') 1360 .fontSize(25) 1361 .fontWeight(FontWeight.Bold) 1362 }.type(ButtonType.Capsule) 1363 .margin({ 1364 top: 20 1365 }) 1366 .width('50%') 1367 .height('10%') 1368 .backgroundColor('#0D9FFB') 1369 .onClick(() => { 1370 huksFinish() 1371 }) 1372 Button() { 1373 Text('Abort') 1374 .fontSize(25) 1375 .fontWeight(FontWeight.Bold) 1376 }.type(ButtonType.Capsule) 1377 .margin({ 1378 top: 20 1379 }) 1380 .width('50%') 1381 .height('10%') 1382 .backgroundColor('#0D9FFB') 1383 .onClick(() => { 1384 huksAbort() 1385 }) 1386 } 1387 .width('100%') 1388 .height('100%') 1389 } 1390} 1391``` 1392 1393## HuksParam 1394 1395调用接口使用的options中的properties数组中的param。 1396 1397**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 1398 1399| 参数名 | 类型 | 必填 | 说明 | 1400| ------ | ----------------------------------- | ---- | ---------- | 1401| tag | HuksTag | 是 | 标签 | 1402| value | boolean\|number\|bigint\|Uint8Array | 是 | 标签对应值 | 1403 1404## HuksOptions 1405 1406调用接口使用的options。 1407 1408**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 1409 1410| 参数名 | 类型 | 必填 | 说明 | 1411| ---------- | ----------------- | ---- | ------------------------ | 1412| properties | Array\<HuksParam> | 否 | 属性,存HuksParam的数组。 | 1413| inData | Uint8Array | 否 | 输入数据。 | 1414 1415## HuksHandle 1416 1417huks Handle结构体。 1418 1419**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 1420 1421| 参数名 | 类型 | 必填 | 说明 | 1422| ---------- | ---------------- | ---- | -------- | 1423| errorCode | number | 是 | 错误码 | 1424| handle | number | 是 | handle值 | 1425| token | Uint8Array | 否 | 预留字段 | 1426 1427 1428## HuksResult 1429 1430调用接口返回的result。 1431 1432**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。 1433 1434 1435 1436| 参数名 | 类型 | 必填 | 说明 | 1437| ---------- | ----------------- | ---- | -------- | 1438| errorCode | number | 是 | 错误码 | 1439| outData | Uint8Array | 否 | 输出数据 | 1440| properties | Array\<HuksParam> | 否 | 属性 | 1441| certChains | Array\<string> | 否 | 预留字段 | 1442 1443