0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙開發(fā)接口安全:【@ohos.security.huks (通用密鑰庫系統(tǒng))】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-06-05 17:40 ? 次閱讀

通用密鑰庫系統(tǒng)

說明
開發(fā)前請熟悉鴻蒙開發(fā)指導(dǎo)文檔 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]
本模塊首批接口從API version 8開始支持。后續(xù)版本的新增接口,采用上角標(biāo)單獨(dú)標(biāo)記接口的起始版本。

向應(yīng)用提供密鑰庫能力,包括密鑰管理及密鑰的密碼學(xué)操作等功能。 HUKS所管理的密鑰可以由應(yīng)用導(dǎo)入或者由應(yīng)用調(diào)用HUKS接口生成。

導(dǎo)入模塊

import huks from '@ohos.security.huks'

HuksErrorCode

表示錯誤碼的枚舉。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

名稱說明
HUKS_SUCCESS0表示成功。
HUKS_FAILURE-1表示失敗。
HUKS_ERROR_BAD_STATE-2表示錯誤的狀態(tài)。
HUKS_ERROR_INVALID_ARGUMENT-3表示無效的數(shù)據(jù)。
HUKS_ERROR_NOT_SUPPORTED-4表示不支持。
HUKS_ERROR_NO_PERMISSION-5表示沒有許可。
HUKS_ERROR_INSUFFICIENT_DATA-6表示數(shù)據(jù)不足。
HUKS_ERROR_BUFFER_TOO_SMALL-7表示緩沖區(qū)太小。
HUKS_ERROR_INSUFFICIENT_MEMORY-8表示內(nèi)存不足。
HUKS_ERROR_COMMUNICATION_FAILURE-9表示通訊失敗。
HUKS_ERROR_STORAGE_FAILURE-10表示存儲故障。
HUKS_ERROR_HARDWARE_FAILURE-11表示硬件故障。
HUKS_ERROR_ALREADY_EXISTS-12表示已經(jīng)存在。
HUKS_ERROR_NOT_EXIST-13表示不存在。
HUKS_ERROR_NULL_POINTER-14表示空指針。
HUKS_ERROR_FILE_SIZE_FAIL-15表示文件大小失敗。
HUKS_ERROR_READ_FILE_FAIL-16表示讀取文件失敗。
HUKS_ERROR_INVALID_PUBLIC_KEY-17表示無效的公鑰。
HUKS_ERROR_INVALID_PRIVATE_KEY-18表示無效的私鑰。
HUKS_ERROR_INVALID_KEY_INFO-19表示無效的密鑰信息。
HUKS_ERROR_HASH_NOT_EQUAL-20表示哈希不相等。
HUKS_ERROR_MALLOC_FAIL-21表示MALLOC 失敗。
HUKS_ERROR_WRITE_FILE_FAIL-22表示寫文件失敗。
HUKS_ERROR_REMOVE_FILE_FAIL-23表示刪除文件失敗。
HUKS_ERROR_OPEN_FILE_FAIL-24表示打開文件失敗。
HUKS_ERROR_CLOSE_FILE_FAIL-25表示關(guān)閉文件失敗。
HUKS_ERROR_MAKE_DIR_FAIL-26表示創(chuàng)建目錄失敗。
HUKS_ERROR_INVALID_KEY_FILE-27表示無效的密鑰文件。
HUKS_ERROR_IPC_MSG_FAIL-28表示IPC 信息失敗。
HUKS_ERROR_REQUEST_OVERFLOWS-29表示請求溢出。
HUKS_ERROR_PARAM_NOT_EXIST-30表示參數(shù)不存在。
HUKS_ERROR_CRYPTO_ENGINE_ERROR-31表示CRYPTO ENGINE錯誤。
HUKS_ERROR_COMMUNICATION_TIMEOUT-32表示通訊超時(shí)。
HUKS_ERROR_IPC_INIT_FAIL-33表示IPC 初始化失敗。
HUKS_ERROR_IPC_DLOPEN_FAIL-34表示IPC DLOPEN 失敗。
HUKS_ERROR_EFUSE_READ_FAIL-35表示EFUSE 讀取失敗。
HUKS_ERROR_NEW_ROOT_KEY_MATERIAL_EXIST-36表示存在新的根密鑰材料。
HUKS_ERROR_UPDATE_ROOT_KEY_MATERIAL_FAIL-37表示更新根密鑰材料失敗。
HUKS_ERROR_VERIFICATION_FAILED-38表示驗(yàn)證證書鏈?zhǔn) ?/td>
HUKS_ERROR_CHECK_GET_ALG_FAIL-100表示檢查獲取 ALG 失敗。
HUKS_ERROR_CHECK_GET_KEY_SIZE_FAIL-101表示檢查獲取密鑰大小失敗。
HUKS_ERROR_CHECK_GET_PADDING_FAIL-102表示檢查獲取填充失敗。
HUKS_ERROR_CHECK_GET_PURPOSE_FAIL-103表示檢查獲取目的失敗。
HUKS_ERROR_CHECK_GET_DIGEST_FAIL-104表示檢查獲取摘要失敗。
HUKS_ERROR_CHECK_GET_MODE_FAIL-105表示檢查獲取模式失敗。
HUKS_ERROR_CHECK_GET_NONCE_FAIL-106表示檢查獲取隨機(jī)數(shù)失敗。
HUKS_ERROR_CHECK_GET_AAD_FAIL-107表示檢查獲取 AAD 失敗。
HUKS_ERROR_CHECK_GET_IV_FAIL-108表示檢查 GET IV 失敗。
HUKS_ERROR_CHECK_GET_AE_TAG_FAIL-109表示檢查獲取 AE 標(biāo)記失敗。
HUKS_ERROR_CHECK_GET_SALT_FAIL-110表示檢查獲取SALT失敗。
HUKS_ERROR_CHECK_GET_ITERATION_FAIL-111表示檢查獲取迭代失敗。
HUKS_ERROR_INVALID_ALGORITHM-112表示無效的算法。
HUKS_ERROR_INVALID_KEY_SIZE-113表示無效的密鑰大小。
HUKS_ERROR_INVALID_PADDING-114表示無效的填充。
HUKS_ERROR_INVALID_PURPOSE-115表示無效的目的。
HUKS_ERROR_INVALID_MODE-116表示無效模式。
HUKS_ERROR_INVALID_DIGEST-117表示無效的摘要。
HUKS_ERROR_INVALID_SIGNATURE_SIZE-118表示簽名大小無效。
HUKS_ERROR_INVALID_IV-119表示無效的 IV。
HUKS_ERROR_INVALID_AAD-120表示無效的 AAD。
HUKS_ERROR_INVALID_NONCE-121表示無效的隨機(jī)數(shù)。
HUKS_ERROR_INVALID_AE_TAG-122表示無效的 AE 標(biāo)簽。
HUKS_ERROR_INVALID_SALT-123表示無效SALT。
HUKS_ERROR_INVALID_ITERATION-124表示無效的迭代。
HUKS_ERROR_INVALID_OPERATION-125表示無效操作。
HUKS_ERROR_INTERNAL_ERROR-999表示內(nèi)部錯誤。
HUKS_ERROR_UNKNOWN_ERROR-1000表示未知錯誤。

HuksKeyPurpose

表示密鑰用途。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

名稱說明
HUKS_KEY_PURPOSE_ENCRYPT1表示密鑰用于對明文進(jìn)行加密操作。
HUKS_KEY_PURPOSE_DECRYPT2表示密鑰用于對密文進(jìn)行解密操作。
HUKS_KEY_PURPOSE_SIGN4表示密鑰用于對數(shù)據(jù)進(jìn)行簽名。
HUKS_KEY_PURPOSE_VERIFY8表示密鑰用于驗(yàn)證簽名后的數(shù)據(jù)。
HUKS_KEY_PURPOSE_DERIVE16表示密鑰用于派生密鑰。
HUKS_KEY_PURPOSE_WRAP32表示密鑰用于加密導(dǎo)入。
HUKS_KEY_PURPOSE_UNWRAP64表示密鑰加密導(dǎo)出。
HUKS_KEY_PURPOSE_MAC128表示密鑰用于生成mac消息驗(yàn)證碼。
HUKS_KEY_PURPOSE_AGREE256表示密鑰用于進(jìn)行密鑰協(xié)商。

HuksKeyDigest

表示摘要算法。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

名稱說明
HUKS_DIGEST_NONE0表示無摘要算法。
HUKS_DIGEST_MD51表示MD5摘要算法。
HUKS_DIGEST_SHA110表示SHA1摘要算法。
HUKS_DIGEST_SHA22411表示SHA224摘要算法。
HUKS_DIGEST_SHA25612表示SHA256摘要算法。
HUKS_DIGEST_SHA38413表示SHA384摘要算法。
HUKS_DIGEST_SHA51214表示SHA512摘要算法。

HuksKeyPadding

表示補(bǔ)齊算法。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

名稱說明
HUKS_PADDING_NONE0表示不使用補(bǔ)齊算法。
HUKS_PADDING_OAEP1表示使用OAEP補(bǔ)齊算法。
HUKS_PADDING_PSS2表示使用PSS補(bǔ)齊算法。
HUKS_PADDING_PKCS1_V1_53表示使用PKCS1_V1_5補(bǔ)齊算法。
HUKS_PADDING_PKCS54表示使用PKCS5補(bǔ)齊算法。
HUKS_PADDING_PKCS75表示使用PKCS7補(bǔ)齊算法。

HuksCipherMode

表示加密模式。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

名稱說明
HUKS_MODE_ECB1表示使用ECB加密模式。
HUKS_MODE_CBC2表示使用CBC加密模式。
HUKS_MODE_CTR3表示使用CTR加密模式。
HUKS_MODE_OFB4表示使用OFB加密模式。
HUKS_MODE_CCM31表示使用CCM加密模式。
HUKS_MODE_GCM32表示使用GCM加密模式。

HuksKeySize

表示密鑰長度。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

名稱說明
HUKS_RSA_KEY_SIZE_512512表示使用RSA算法的密鑰長度為512bit。
HUKS_RSA_KEY_SIZE_768768表示使用RSA算法的密鑰長度為768bit。
HUKS_RSA_KEY_SIZE_10241024表示使用RSA算法的密鑰長度為1024bit。
HUKS_RSA_KEY_SIZE_20482048表示使用RSA算法的密鑰長度為2048bit。
HUKS_RSA_KEY_SIZE_30723072表示使用RSA算法的密鑰長度為3072bit。
HUKS_RSA_KEY_SIZE_40964096表示使用RSA算法的密鑰長度為4096bit。
HUKS_ECC_KEY_SIZE_224224表示使用ECC算法的密鑰長度為224bit。
HUKS_ECC_KEY_SIZE_256256表示使用ECC算法的密鑰長度為256bit。
HUKS_ECC_KEY_SIZE_384384表示使用ECC算法的密鑰長度為384bit。
HUKS_ECC_KEY_SIZE_521521表示使用ECC算法的密鑰長度為521bit。
HUKS_AES_KEY_SIZE_128128表示使用AES算法的密鑰長度為128bit。
HUKS_AES_KEY_SIZE_192196表示使用AES算法的密鑰長度為196bit。
HUKS_AES_KEY_SIZE_256256表示使用AES算法的密鑰長度為256bit。
HUKS_AES_KEY_SIZE_512512表示使用AES算法的密鑰長度為512bit。
HUKS_CURVE25519_KEY_SIZE_256256表示使用CURVE25519算法的密鑰長度為256bit。
HUKS_DH_KEY_SIZE_20482048表示使用DH算法的密鑰長度為2048bit。
HUKS_DH_KEY_SIZE_30723072表示使用DH算法的密鑰長度為3072bit。
HUKS_DH_KEY_SIZE_40964096表示使用DH算法的密鑰長度為4096bit。

HuksKeyAlg

表示密鑰使用的算法。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

名稱說明
HUKS_ALG_RSA1表示使用RSA算法。
HUKS_ALG_ECC2表示使用ECC算法。
HUKS_ALG_DSA3表示使用DSA算法。
HUKS_ALG_AES20表示使用AES算法。
HUKS_ALG_HMAC50表示使用HMAC算法。
HUKS_ALG_HKDF51表示使用HKDF算法。
HUKS_ALG_PBKDF252表示使用PBKDF2算法。
HUKS_ALG_ECDH100表示使用ECDH算法。
HUKS_ALG_X25519101表示使用X25519算法。
HUKS_ALG_ED25519102表示使用ED25519算法。
HUKS_ALG_DH103表示使用DH算法。

HuksKeyGenerateType

表示生成密鑰的類型。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

名稱說明
HUKS_KEY_GENERATE_TYPE_DEFAULT0默認(rèn)生成的密鑰。
HUKS_KEY_GENERATE_TYPE_DERIVE1派生生成的密鑰。
HUKS_KEY_GENERATE_TYPE_AGREE2協(xié)商生成的密鑰。

HuksKeyFlag

表示密鑰的產(chǎn)生方式。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

名稱說明
HUKS_KEY_FLAG_IMPORT_KEY1表示通過導(dǎo)入公鑰接口導(dǎo)入的密鑰。
HUKS_KEY_FLAG_GENERATE_KEY2表示通過生成密鑰接口生成的密鑰。
HUKS_KEY_FLAG_AGREE_KEY3表示通過生成密鑰協(xié)商接口生成的密鑰。
HUKS_KEY_FLAG_DERIVE_KEY4表示通過生成密鑰派生接口生成的密鑰。

HuksKeyStorageType

表示密鑰存儲方式。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

名稱說明
HUKS_STORAGE_TEMP0表示通過本地直接管理密鑰。
HUKS_STORAGE_PERSISTENT1表示通過HUKS service管理密鑰。

HuksSendType

表示發(fā)送Tag的方式。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

名稱說明
HUKS_SEND_TYPE_ASYNC0表示異步發(fā)送TAG。
HUKS_SEND_TYPE_SYNC1表示同步發(fā)送TAG。

HuksTagType

表示Tag的數(shù)據(jù)類型。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

名稱說明
HUKS_TAG_TYPE_INVALID0 << 28表示非法的Tag類型。
HUKS_TAG_TYPE_INT1 << 28表示該Tag的數(shù)據(jù)類型為int類型的number。
HUKS_TAG_TYPE_UINT2 << 28表示該Tag的數(shù)據(jù)類型為uint類型的number。
HUKS_TAG_TYPE_ULONG3 << 28表示該Tag的數(shù)據(jù)類型為bigint。
HUKS_TAG_TYPE_BOOL4 << 28表示該Tag的數(shù)據(jù)類型為boolean。
HUKS_TAG_TYPE_BYTES5 << 28表示該Tag的數(shù)據(jù)類型為Uint8Array。

HuksTag

表示調(diào)用參數(shù)的Tag。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

名稱說明
HUKS_TAG_INVALIDHuksTagType.HUKS_TAG_TYPE_INVALID0
HUKS_TAG_ALGORITHMHUKS_TAG_TYPE_UINT1
HUKS_TAG_PURPOSEHuksTagType.HUKS_TAG_TYPE_UINT2
HUKS_TAG_KEY_SIZEHuksTagType.HUKS_TAG_TYPE_UINT3
HUKS_TAG_DIGESTHuksTagType.HUKS_TAG_TYPE_UINT4
HUKS_TAG_PADDINGHuksTagType.HUKS_TAG_TYPE_UINT5
HUKS_TAG_BLOCK_MODEHuksTagType.HUKS_TAG_TYPE_UINT6
HUKS_TAG_KEY_TYPEHuksTagType.HUKS_TAG_TYPE_UINT7
HUKS_TAG_ASSOCIATED_DATAHuksTagType.HUKS_TAG_TYPE_BYTES8
HUKS_TAG_NONCEHuksTagType.HUKS_TAG_TYPE_BYTES9
HUKS_TAG_IVHuksTagType.HUKS_TAG_TYPE_BYTES10
HUKS_TAG_INFOHuksTagType.HUKS_TAG_TYPE_BYTES11
HUKS_TAG_SALTHuksTagType.HUKS_TAG_TYPE_BYTES12
HUKS_TAG_PWDHuksTagType.HUKS_TAG_TYPE_BYTES13
HUKS_TAG_ITERATIONHuksTagType.HUKS_TAG_TYPE_UINT14
HUKS_TAG_KEY_GENERATE_TYPEHuksTagType.HUKS_TAG_TYPE_UINT15
HUKS_TAG_DERIVE_MAIN_KEYHuksTagType.HUKS_TAG_TYPE_BYTES16
HUKS_TAG_DERIVE_FACTORHuksTagType.HUKS_TAG_TYPE_BYTES17
HUKS_TAG_DERIVE_ALGHuksTagType.HUKS_TAG_TYPE_UINT18
HUKS_TAG_AGREE_ALGHuksTagType.HUKS_TAG_TYPE_UINT19
HUKS_TAG_AGREE_PUBLIC_KEY_IS_KEY_ALIASHuksTagType.HUKS_TAG_TYPE_BOOL20
HUKS_TAG_AGREE_PRIVATE_KEY_ALIASHuksTagType.HUKS_TAG_TYPE_BYTES21
HUKS_TAG_AGREE_PUBLIC_KEYHuksTagType.HUKS_TAG_TYPE_BYTES22
HUKS_TAG_KEY_ALIASHuksTagType.HUKS_TAG_TYPE_BYTES23
HUKS_TAG_DERIVE_KEY_SIZEHuksTagType.HUKS_TAG_TYPE_UINT24
HUKS_TAG_ACTIVE_DATETIMEHuksTagType.HUKS_TAG_TYPE_ULONG201
HUKS_TAG_ORIGINATION_EXPIRE_DATETIMEHuksTagType.HUKS_TAG_TYPE_ULONG202
HUKS_TAG_USAGE_EXPIRE_DATETIMEHuksTagType.HUKS_TAG_TYPE_ULONG203
HUKS_TAG_CREATION_DATETIMEHuksTagType.HUKS_TAG_TYPE_ULONG204
HUKS_TAG_ALL_USERSksTagType.HUKS_TAG_TYPE_BOOL301
HUKS_TAG_USER_IDHuksTagType.HUKS_TAG_TYPE_UINT302
HUKS_TAG_NO_AUTH_REQUIREDHuksTagType.HUKS_TAG_TYPE_BOOL303
HUKS_TAG_USER_AUTH_TYPEHuksTagType.HUKS_TAG_TYPE_UINT304
HUKS_TAG_AUTH_TIMEOUTHuksTagType.HUKS_TAG_TYPE_UINT305
HUKS_TAG_AUTH_TOKENHuksTagType.HUKS_TAG_TYPE_BYTES306
HUKS_TAG_ATTESTATION_CHALLENGEHuksTagType.HUKS_TAG_TYPE_BYTES501
HUKS_TAG_ATTESTATION_APPLICATION_IDHuksTagType.HUKS_TAG_TYPE_BYTES502
HUKS_TAG_ATTESTATION_ID_BRANDHuksTagType.HUKS_TAG_TYPE_BYTES503
HUKS_TAG_ATTESTATION_ID_DEVICEHuksTagType.HUKS_TAG_TYPE_BYTES504
HUKS_TAG_ATTESTATION_ID_PRODUCTHuksTagType.HUKS_TAG_TYPE_BYTES505
HUKS_TAG_ATTESTATION_ID_SERIALHuksTagType.HUKS_TAG_TYPE_BYTES506
HUKS_TAG_ATTESTATION_ID_IMEIHuksTagType.HUKS_TAG_TYPE_BYTES507
HUKS_TAG_ATTESTATION_ID_MEIDHuksTagType.HUKS_TAG_TYPE_BYTES508
HUKS_TAG_ATTESTATION_ID_MANUFACTURERHuksTagType.HUKS_TAG_TYPE_BYTES509
HUKS_TAG_ATTESTATION_ID_MODELHuksTagType.HUKS_TAG_TYPE_BYTES510
HUKS_TAG_ATTESTATION_ID_ALIASHuksTagType.HUKS_TAG_TYPE_BYTES511
HUKS_TAG_ATTESTATION_ID_SOCIDHuksTagType.HUKS_TAG_TYPE_BYTES512
HUKS_TAG_ATTESTATION_ID_UDIDHuksTagType.HUKS_TAG_TYPE_BYTES513
HUKS_TAG_ATTESTATION_ID_SEC_LEVEL_INFOHuksTagType.HUKS_TAG_TYPE_BYTES514
HUKS_TAG_ATTESTATION_ID_VERSION_INFOHuksTagType.HUKS_TAG_TYPE_BYTES515
HUKS_TAG_IS_KEY_ALIASHuksTagType.HUKS_TAG_TYPE_BOOL1001
HUKS_TAG_KEY_STORAGE_FLAGHuksTagType.HUKS_TAG_TYPE_UINT1002
HUKS_TAG_IS_ALLOWED_WRAPHuksTagType.HUKS_TAG_TYPE_BOOL1003
HUKS_TAG_KEY_WRAP_TYPEHuksTagType.HUKS_TAG_TYPE_UINT1004
HUKS_TAG_KEY_AUTH_IDHuksTagType.HUKS_TAG_TYPE_BYTES1005
HUKS_TAG_KEY_ROLEHuksTagType.HUKS_TAG_TYPE_UINT1006
HUKS_TAG_KEY_FLAGHuksTagType.HUKS_TAG_TYPE_UINT1007
HUKS_TAG_IS_ASYNCHRONIZEDHuksTagType.HUKS_TAG_TYPE_UINT1008
HUKS_TAG_SECURE_KEY_ALIASHuksTagType.HUKS_TAG_TYPE_BOOL1009
HUKS_TAG_SECURE_KEY_UUIDHuksTagType.HUKS_TAG_TYPE_BYTES1010
HUKS_TAG_KEY_DOMAINHuksTagType.HUKS_TAG_TYPE_UINT1011
HUKS_TAG_PROCESS_NAMEHuksTagType.HUKS_TAG_TYPE_BYTES10001
HUKS_TAG_PACKAGE_NAMEHuksTagType.HUKS_TAG_TYPE_BYTES10002
HUKS_TAG_ACCESS_TIMEHuksTagType.HUKS_TAG_TYPE_UINT10003
HUKS_TAG_USES_TIMEHuksTagType.HUKS_TAG_TYPE_UINT10004
HUKS_TAG_CRYPTO_CTXHuksTagType.HUKS_TAG_TYPE_ULONG10005
HUKS_TAG_KEYHuksTagType.HUKS_TAG_TYPE_BYTES10006
HUKS_TAG_KEY_VERSIONHuksTagType.HUKS_TAG_TYPE_UINT10007
HUKS_TAG_PAYLOAD_LENHuksTagType.HUKS_TAG_TYPE_UINT10008
HUKS_TAG_AE_TAGHuksTagType.HUKS_TAG_TYPE_BYTES10009
HUKS_TAG_IS_KEY_HANDLEHuksTagType.HUKS_TAG_TYPE_ULONG10010
HUKS_TAG_OS_VERSIONHuksTagType.HUKS_TAG_TYPE_UINT10101
HUKS_TAG_OS_PATCHLEVELHuksTagType.HUKS_TAG_TYPE_UINT10102
HUKS_TAG_SYMMETRIC_KEY_DATAHuksTagType.HUKS_TAG_TYPE_BYTES20001
HUKS_TAG_ASYMMETRIC_PUBLIC_KEY_DATAHuksTagType.HUKS_TAG_TYPE_BYTES20002
HUKS_TAG_ASYMMETRIC_PRIVATE_KEY_DATAHuksTagType.HUKS_TAG_TYPE_BYTES20003

huks.generateKey

generateKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback) : void

生成密鑰,使用Callback回調(diào)異步返回結(jié)果。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù):

參數(shù)名類型必填說明
keyAliasstring別名。
options[HuksOptions]用于存放生成key所需TAG。
callbackAsyncCallback<[HuksResult]>返回HUKS_SUCCESS時(shí)表示接口使用成功,其余結(jié)果請參考HuksResult進(jìn)行錯誤碼查詢。

示例:

/* 以生成RSA512密鑰為例 */
var keyAlias = 'keyAlias';
var properties = new Array();
properties[0] = {
  tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
  value: huks.HuksKeyAlg.HUKS_ALG_RSA
};
properties[1] = {
  tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
  value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_512
};
properties[2] = {
  tag: huks.HuksTag.HUKS_TAG_PURPOSE,
  value:
huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT |
huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT
};
properties[3] = {
  tag: huks.HuksTag.HUKS_TAG_PADDING,
  value: huks.HuksKeyPadding.HUKS_PADDING_OAEP
};
properties[4] = {
  tag: huks.HuksTag.HUKS_TAG_DIGEST,
  value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
};
var options = {
  properties: properties
};
huks.generateKey(keyAlias, options, function (err, data){});

huks.generateKey

generateKey(keyAlias: string, options: HuksOptions) : Promise

生成密鑰,使用Promise方式異步返回結(jié)果。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù):

參數(shù)名類型必填說明
keyAliasstring密鑰別名。
options[HuksOptions]用于存放生成key所需TAG。

返回值 :(可選,如不涉及可刪除)

類型說明
Promise<[HuksResult]>返回HUKS_SUCCESS時(shí)表示接口使用成功,其他時(shí)為錯誤。

示例:

/* 以生成ECC256密鑰為例 */
var keyAlias = 'keyAlias';
var properties = new Array();
properties[0] = {
  tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
  value: huks.HuksKeyAlg.HUKS_ALG_ECC
};
properties[1] = {
  tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
  value: huks.HuksKeySize.HUKS_ECC_KEY_SIZE_256
};
properties[2] = {
  tag: huks.HuksTag.HUKS_TAG_PURPOSE,
  value:
huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN |
huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY
};
properties[3] = {
  tag: huks.HuksTag.HUKS_TAG_DIGEST,
  value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
};
var options = {
  properties: properties
};
var result = huks.generateKey(keyAlias, options);

huks.deleteKey

deleteKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback) : void

刪除密鑰,使用Callback回調(diào)異步返回結(jié)果。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù):

參數(shù)名類型必填說明
keyAliasstring密鑰別名,應(yīng)為生成key時(shí)傳入的別名。
options[HuksOptions]空對象(此處傳空即可)。
callbackAsyncCallback<[HuksResult]>返回HUKS_SUCCESS時(shí)表示接口使用成功,其他時(shí)為錯誤。

示例:

/* 此處options選擇emptyOptions傳空 */
var keyAlias = 'keyAlias';
var emptyOptions = {
  properties: []
};
huks.deleteKey(keyAlias, emptyOptions, function (err, data) {});

huks.deleteKey

deleteKey(keyAlias: string, options: HuksOptions) : Promise

刪除密鑰,使用Promise方式異步返回結(jié)果。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù):

參數(shù)名類型必填說明
keyAliasstring密鑰別名,應(yīng)為生成key時(shí)傳入的別名。
options[HuksOptions]空對象(此處傳空即可)。

返回值:

類型說明
Promise<[HuksResult]>返回HUKS_SUCCESS時(shí)表示接口使用成功,其他時(shí)為錯誤。

示例:

/* 此處options選擇emptyOptions傳空 */
var keyAlias = 'keyAlias';
var emptyOptions = {
  properties: []
};
var result = huks.deleteKey(keyAlias, emptyOptions);

huks.getSdkVersion

getSdkVersion(options: HuksOptions) : string

獲取當(dāng)前系統(tǒng)sdk版本。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù):

參數(shù)名類型必填說明
options[HuksOptions]空對象,用于存放sdk版本。

返回值:

類型說明
string返回sdk版本。

示例:

/* 此處options選擇emptyOptions傳空 */
var emptyOptions = {
  properties: []
};
var result = huks.getSdkVersion(emptyOptions);

huks.importKey

importKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback) : void

導(dǎo)入密鑰,使用Callback方式回調(diào)異步返回結(jié)果 。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù):

參數(shù)名類型必填說明
keyAliasstring密鑰別名,用于存放所需密鑰。
options[HuksOptions]用于導(dǎo)入時(shí)所需TAG和需要導(dǎo)入的密鑰。
callbackAsyncCallback<[HuksResult]>返回HUKS_SUCCESS時(shí)表示接口使用成功,其他時(shí)為錯誤。

示例:

/* 以導(dǎo)入AES256密鑰為例 */
var plainTextSize32 = makeRandomArr(32);
function makeRandomArr(size) {
    var arr = new Uint8Array(size);
    for (var i = 0; i < size; i++) {
        arr[i] = Math.floor(Math.random() * 10);
    }
    return arr;
};
var keyAlias = 'keyAlias';
var properties = new Array();
properties[0] = {
  tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
  value: huks.HuksKeyAlg.HUKS_ALG_AES
};
properties[1] = {
  tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
  value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256
};
properties[2] = {
  tag: huks.HuksTag.HUKS_TAG_PURPOSE,
  value:
huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT
};
properties[3] = {
  tag: huks.HuksTag.HUKS_TAG_PADDING,
  value:huks.HuksKeyPadding.HUKS_PADDING_PKCS7
};
properties[4] = {
  tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
  value: huks.HuksCipherMode.HUKS_MODE_ECB
};
var options = {
  properties: properties,
  inData: plainTextSize32
};
huks.importKey(keyAlias, options, function (err, data){});

huks.importKey

importKey(keyAlias: string, options: HuksOptions) : Promise

導(dǎo)入密鑰,使用Promise方式異步返回結(jié)果。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù):

參數(shù)名類型必填說明
keyAliasstring密鑰別名,用于存放所需密鑰。
options[HuksOptions]用于導(dǎo)入時(shí)所需TAG和需要導(dǎo)入的密鑰。

返回值:

類型說明
Promise<[HuksResult]>返回HUKS_SUCCESS時(shí)表示接口使用成功,其他時(shí)為錯誤。

示例:

/* 以導(dǎo)入AES128為例 */
var plainTextSize32 = makeRandomArr(32);

function makeRandomArr(size) {
    var arr = new Uint8Array(size);
    for (var i = 0; i < size; i++) {
        arr[i] = Math.floor(Math.random() * 10);
    }
    return arr;
};

/*第一步:生成密鑰*/
var keyAlias = 'keyAlias';
var properties = new Array();
properties[0] = {
  tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
  value: huks.HuksKeyAlg.HUKS_ALG_AES
};
properties[1] = {
  tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
  value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_128
};
properties[2] = {
  tag: huks.HuksTag.HUKS_TAG_PURPOSE,
  value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT
};
properties[3] = {
  tag: huks.HuksTag.HUKS_TAG_PADDING,
  value:huks.HuksKeyPadding.HUKS_PADDING_PKCS7
};
properties[4] = {
  tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
  value: huks.HuksCipherMode.HUKS_MODE_ECB
};
var huksoptions = {
  properties: properties,
  inData: plainTextSize32
};
var result = huks.importKey(keyAlias, huksoptions);

huks.exportKey

exportKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback) : void

導(dǎo)出密鑰,使用Callback方式回調(diào)異步返回的結(jié)果。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù):

參數(shù)名類型必填說明
keyAliasstring密鑰別名,應(yīng)與所用密鑰生成時(shí)使用的別名相同。
options[HuksOptions]空對象(此處傳空即可)。
callbackAsyncCallback<[HuksResult]>返回HUKS_SUCCESS時(shí)表示接口使用成功,其他時(shí)為錯誤。outData:返回從密鑰中導(dǎo)出的公鑰。

示例:

/* 此處options選擇emptyOptions來傳空 */
var keyAlias = 'keyAlias';
var emptyOptions = {
  properties: []
};
huks.exportKey(keyAlias, emptyOptions, function (err, data){});

huks.exportKey

exportKey(keyAlias: string, options: HuksOptions) : Promise

導(dǎo)出密鑰,使用Promise方式回調(diào)異步返回的結(jié)果。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù):

參數(shù)名類型必填說明
keyAliasstring密鑰別名,應(yīng)與所用密鑰生成時(shí)使用的別名相同。
options[HuksOptions]空對象(此處傳空即可)。

返回值:

類型說明
Promise<[HuksResult]>返回HUKS_SUCCESS時(shí)表示接口使用成功,其他時(shí)為錯誤。outData:返回從密鑰中導(dǎo)出的公鑰。

示例:

/* 此處options選擇emptyOptions來傳空 */
var keyAlias = 'keyAlias';
var emptyOptions = {
  properties: []
};
var result = huks.exportKey(keyAlias, emptyOptions);

huks.getKeyProperties

getKeyProperties(keyAlias: string, options: HuksOptions, callback: AsyncCallback) : void

獲取密鑰屬性,使用Callback回調(diào)異步返回結(jié)果。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù):

參數(shù)名類型必填說明
keyAliasstring密鑰別名,應(yīng)與所用密鑰生成時(shí)使用的別名相同。
options[HuksOptions]空對象(此處傳空即可)。
callbackAsyncCallback<[HuksResult]>errorCode:返回HUKS_SUCCESS時(shí)表示接口使用成功,其他時(shí)為錯誤。

示例:

/* 此處options選擇emptyOptions來傳空 */
var keyAlias = 'keyAlias';
var emptyOptions = {
  properties: []
};
huks.getKeyProperties(keyAlias, emptyOptions, function (err, data){});

huks.getKeyProperties

getKeyProperties(keyAlias: string, options: HuksOptions) : Promise

獲取密鑰屬性,使用Promise回調(diào)異步返回結(jié)果。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù):

參數(shù)名類型必填說明
keyAliasstring密鑰別名,應(yīng)與所用密鑰生成時(shí)使用的別名相同。
options[HuksOptions]空對象(此處傳空即可)。

返回值:

類型說明
Promise<[HuksResult]>errorCode:返回HUKS_SUCCESS時(shí)表示接口使用成功,其他時(shí)為錯誤。properties:返回值為生成密鑰時(shí)所需參數(shù)。

示例:

/* 此處options選擇emptyOptions來傳空 */
var keyAlias = 'keyAlias';
var emptyOptions = {
  properties: []
};
var result = huks.getKeyProperties(keyAlias, emptyOptions);

huks.isKeyExist

isKeyExist(keyAlias: string, options: HuksOptions, callback: AsyncCallback) : void

判斷密鑰是否存在,使用Callback回調(diào)異步返回結(jié)果 。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù):

參數(shù)名類型必填說明
keyAliasstring所需查找的密鑰的別名。
options[HuksOptions]空對象(此處傳空即可)。
callbackAsyncCallbackFALSE代表密鑰不存在,TRUE代表密鑰存在。

示例:

/* 此處options選擇emptyOptions來傳空 */
var keyAlias = 'keyAlias';
var emptyOptions = {
  properties: []
};
huks.isKeyExist(keyAlias, emptyOptions, function (err, data){});

huks.isKeyExist

isKeyExist(keyAlias: string, options: HuksOptions) : Promise

判斷密鑰是否存在,使用Promise回調(diào)異步返回結(jié)果 。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù):

參數(shù)名類型必填說明
keyAliasstring所需查找的密鑰的別名。
options[HuksOptions]空對象(此處傳空即可)。

返回值:

類型說明
PromiseFALSE代表密鑰不存在,TRUE代表密鑰存在。

示例:

/* 此處options選擇emptyOptions來傳空 */
var keyAlias = 'keyAlias';
var emptyOptions = {
  properties: []
};
var result = huks.isKeyExist(keyAlias, emptyOptions);

huks.init

init(keyAlias: string, options: HuksOptions, callback: AsyncCallback) : void

init操作密鑰接口,使用Callback回調(diào)異步返回結(jié)果 。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù):

參數(shù)名類型必填說明
keyAliasstringInit操作密鑰的別名。
options[HuksOptions]Init操作的參數(shù)集合。
callbackAsyncCallback<[HuksHandle]>將Init操作操作返回的handle添加到密鑰管理系統(tǒng)的回調(diào)。

huks.init

init(keyAlias: string, options: HuksOptions) : Promise

init操作密鑰接口,使用Promise方式異步返回結(jié)果。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù):

參數(shù)名類型必填說明
keyAliasstringInit操作密鑰的別名。
options[HuksOptions]Init參數(shù)集合。
promisePromise<[HuksHandle]>將Init操作返回的handle添加到密鑰管理系統(tǒng)的回調(diào)。

huks.update

update(handle: number, token?: Uint8Array, options: HuksOptions, callback: AsyncCallback) : void

update操作密鑰接口,使用Callback回調(diào)異步返回結(jié)果 。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù):

參數(shù)名類型必填說明
handlenumberUpdate操作的handle。
tokenUint8ArrayUpdate操作的token。
options[HuksOptions]Update的參數(shù)集合。
callbackAsyncCallback<[HuksResult]>將Update操作的結(jié)果添加到密鑰管理系統(tǒng)的回調(diào)。

huks.update

update(handle: number, token?: Uint8Array, options: HuksOptions) : Promise

update操作密鑰接口,使用Promise方式異步返回結(jié)果。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù):

參數(shù)名類型必填說明
handlenumberUpdate操作的handle。
tokenUint8ArrayUpdate操作的token。
options[HuksOptions]Update操作的參數(shù)集合。
promisePromise<[HuksResult]>將Update操作的結(jié)果添加到密鑰管理系統(tǒng)的回調(diào)。

huks.finish

finish(handle: number, options: HuksOptions, callback: AsyncCallback) : void

finish操作密鑰接口,使用Callback回調(diào)異步返回結(jié)果 。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù):

參數(shù)名類型必填說明
handlenumberFinish操作的handle。
options[HuksOptions]Finish的參數(shù)集合。
callbackAsyncCallback<[HuksResult]>將Finish操作的結(jié)果添加到密鑰管理系統(tǒng)的回調(diào)。

huks.finish

finish(handle: number, options: HuksOptions) : Promise

finish操作密鑰接口,使用Promise方式異步返回結(jié)果。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù):

參數(shù)名類型必填說明
handlenumberFinish操作的handle。
options[HuksOptions]Finish操作的參數(shù)集合。
promisePromise<[HuksResult]>promise實(shí)例,用于獲取異步返回結(jié)果。

huks.abort

abort(handle: number, options: HuksOptions, callback: AsyncCallback) : void

abort操作密鑰接口,使用Callback回調(diào)異步返回結(jié)果 。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù):

參數(shù)名類型必填說明
handlenumberAbort操作的handle。
options[HuksOptions]Abort操作的參數(shù)集合。
callbackAsyncCallback<[HuksResult]>將Abort操作的結(jié)果添加到密鑰管理系統(tǒng)的回調(diào)。

示例:

/* huks.init, huks.update, huks.finish為三段式接口,需要一起使用,當(dāng)huks.init和huks.update
 * 以及huks.finish操作中的任一階段發(fā)生錯誤時(shí),都需要調(diào)用huks.abort來終止密鑰的使用。
 *
 * 以下以RSA1024密鑰的callback操作使用為例
 */
import router from '@system.router';
import huks from '@ohos.security.huks';

async function routePage() {
  let options = {
    uri: 'pages/second'
  }
  try {
    await router.push(options)
  } catch (err) {
    console.error(`fail callback, code: ${err.code}, msg: ${err.msg}`)
  }
}
var keyalias = "HuksDemoRSA";
var properties = new Array();
var options = {
  properties: properties,
  inData: new Uint8Array(0)
};
var handle;
var resultMessage = "";
async function generateKey() {
  properties[0] = {
    tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
    value: huks.HuksKeyAlg.HUKS_ALG_RSA
  };
  properties[1] = {
    tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
    value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_1024
  };
  properties[2] = {
    tag: huks.HuksTag.HUKS_TAG_PURPOSE,
    value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT
  };
  properties[3] = {
    tag: huks.HuksTag.HUKS_TAG_PADDING,
    value: huks.HuksKeyPadding.HUKS_PADDING_OAEP
  };
  properties[4] = {
    tag: huks.HuksTag.HUKS_TAG_DIGEST,
    value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
  };
  huks.generateKey(keyalias, options);
}
function stringToUint8Array(str) {
  var arr = [];
  for (var i = 0, j = str.length; i < j; ++i) {
    arr.push(str.charCodeAt(i));
  }
  var tmpUint8Array = new Uint8Array(arr);
  return tmpUint8Array;
}
async function huksInit() {
  await huks.init(keyalias, options).then((data) = > {
    console.log(`test init data: ${JSON.stringify(data)}`);
    handle = data.handle;
  }).catch((err) = > {
    console.log("test init err information: " + JSON.stringify(err))
  })
}
async function huksUpdate() {
    options.inData = stringToUint8Array("huksHmacTest");
    await huks.update(handle, options).then((data) = > {
      if (data.errorCode === 0) {
        resultMessage += "update success!";
      } else {
        resultMessage += "update fail!";
      }
    });
    console.log(resultMessage);
}
function huksFinish() {
  options.inData = stringToUint8Array("HuksDemoHMAC");
  huks.finish(handle, options).then((data) = > {
    if (data.errorCode === 0) {
      resultMessage = "finish success!";
    } else {
      resultMessage = "finish fail errorCode: " + data.errorCode;
    }
  }).catch((err) = > {
    resultMessage = "finish fail, catch errorMessage:" + JSON.stringify(err)
  });
  console.log(resultMessage);
}
async function huksAbort() {
  huks.abort(handle, options).then((data) = > {
    if (data.errorCode === 0) {
      resultMessage = "abort success!";
    } else {
      resultMessage = "abort fail errorCode: " + data.errorCode;
    }
  }).catch((err) = > {
    resultMessage = "abort fail, catch errorMessage:" + JSON.stringify(err)
  });
  console.log(resultMessage);
}

@Entry
@Component
struct Index {
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Text('Hello World')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
      Button() {
        Text('Tocallback')
          .fontSize(25)
          .fontWeight(FontWeight.Bold)
      }.type(ButtonType.Capsule)
      .margin({
        top: 20
      })
      .width('50%')
      .height('10%')
      .backgroundColor('#0D9FFB')
      .onClick(() = > {
        routePage()
      })
      Button() {
        Text('generateKey')
          .fontSize(25)
          .fontWeight(FontWeight.Bold)
      }.type(ButtonType.Capsule)
      .margin({
        top: 20
      })
      .width('50%')
      .height('10%')
      .backgroundColor('#0D9FFB')
      .onClick(() = > {
        generateKey()
      })
      Button() {
        Text('Init')
          .fontSize(25)
          .fontWeight(FontWeight.Bold)
      }.type(ButtonType.Capsule)
      .margin({
        top: 20
      })
      .width('50%')
      .height('10%')
      .backgroundColor('#0D9FFB')
      .onClick(() = > {
        huksInit()
      })
      Button() {
        Text('Update')
          .fontSize(25)
          .fontWeight(FontWeight.Bold)
      }.type(ButtonType.Capsule)
      .margin({
        top: 20
      })
      .width('50%')
      .height('10%')
      .backgroundColor('#0D9FFB')
      .onClick(() = > {
        huksUpdate()
      })
      Button() {
        Text('Finish')
          .fontSize(25)
          .fontWeight(FontWeight.Bold)
      }.type(ButtonType.Capsule)
      .margin({
        top: 20
      })
      .width('50%')
      .height('10%')
      .backgroundColor('#0D9FFB')
      .onClick(() = > {
        huksFinish()
      })
      Button() {
        Text('Abort')
          .fontSize(25)
          .fontWeight(FontWeight.Bold)
      }.type(ButtonType.Capsule)
      .margin({
        top: 20
      })
      .width('50%')
      .height('10%')
      .backgroundColor('#0D9FFB')
      .onClick(() = > {
        huksAbort()
      })
    }
    .width('100%')
    .height('100%')
  }
}

huks.abort

abort(handle: number, options: HuksOptions) : Promise;

abort操作密鑰接口,使用Promise方式異步返回結(jié)果。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù):

參數(shù)名類型必填說明
handlenumberAbort操作的handle。
options[HuksOptions]Abort操作的參數(shù)集合。
promisePromise<[HuksResult]>將Abort操作的結(jié)果添加到密鑰管理系統(tǒng)的回調(diào)。

示例:

/* huks.init, huks.update, huks.finish為三段式接口,需要一起使用,當(dāng)huks.init和huks.update
 * 以及huks.finish操作中的任一階段發(fā)生錯誤時(shí),都需要調(diào)用huks.abort來終止密鑰的使用。
 *
 * 以下以RSA1024密鑰的promise操作使用為例
 */
import router from '@system.router';
import huks from '@ohos.security.huks';

async function routePage() {
  let options = {
    uri: 'pages/second'
  }
  try {
    await router.push(options)
  } catch (err) {
    console.error(`fail callback, code: ${err.code}, msg: ${err.msg}`)
  }
}

var keyalias = "HuksDemoRSA";
var properties = new Array();
var options = {
  properties: properties,
  inData: new Uint8Array(0)
};
var handle;
var resultMessage = "";
function stringToUint8Array(str) {
  var arr = [];
  for (var i = 0, j = str.length; i < j; ++i) {
    arr.push(str.charCodeAt(i));
  }
  var tmpUint8Array = new Uint8Array(arr);
  return tmpUint8Array;
}

async function generateKey() {
  properties[0] = {
    tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
    value: huks.HuksKeyAlg.HUKS_ALG_RSA
  };
  properties[1] = {
    tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
    value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_1024
  };
  properties[2] = {
    tag: huks.HuksTag.HUKS_TAG_PURPOSE,
    value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT
  };
  properties[3] = {
    tag: huks.HuksTag.HUKS_TAG_PADDING,
    value: huks.HuksKeyPadding.HUKS_PADDING_OAEP
  };
  properties[4] = {
    tag: huks.HuksTag.HUKS_TAG_DIGEST,
    value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
  };
  huks.generateKey(keyalias, options, function (err, data) { });
}
async function huksInit() {
  return new Promise((resolve, reject) = > {
    huks.init(keyalias, options, async function (err, data) {
      if (data.errorCode === 0) {
        resultMessage = "init success!"
        handle = data.handle;
      } else {
        resultMessage = "init fail errorCode: " + data.errorCode
      }
    });
  });
}

async function huksUpdate() {
    options.inData = stringToUint8Array("huksHmacTest");
    new Promise((resolve, reject) = > {
      huks.update(handle, options, function (err, data) {
        if (data.errorCode === 0) {
          resultMessage += "update success!";
        } else {
          resultMessage += "update fail!";
        }
      });
    });
    console.log(resultMessage);

}

async function huksFinish() {
  options.inData = stringToUint8Array("0");
  new Promise((resolve, reject) = > {
    huks.finish(handle, options, function (err, data) {
      if (data.errorCode === 0) {
        resultMessage = "finish success!";
      } else {
        resultMessage =  "finish fail errorCode: " + data.errorCode;
      }
    });
  });
}

function huksAbort() {
  new Promise((resolve, reject) = > {
    huks.abort(handle, options, function (err, data) {
      console.log(`Huks_Demo hmac huksAbort1 data ${JSON.stringify(data)}`);
      console.log(`Huks_Demo hmac huksAbort1 err ${JSON.stringify(err)}`);
    });
  });
}
@Entry
@Component
struct Index {
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Text('Hello World')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
      Button() {
        Text('to Promise')
          .fontSize(20)
          .fontWeight(FontWeight.Bold)
      }.type(ButtonType.Capsule)
      .margin({
        top: 20
      })
      .width('50%')
      .height('10%')
      .backgroundColor('#0D9FFB')
      .onClick(() = > {
        router.back()
      })
      Button() {
        Text('generateKey')
          .fontSize(25)
          .fontWeight(FontWeight.Bold)
      }.type(ButtonType.Capsule)
      .margin({
        top: 20
      })
      .width('50%')
      .height('10%')
      .backgroundColor('#0D9FFB')
      .onClick(() = > {
        generateKey()
      })
      Button() {
        Text('Init')
          .fontSize(25)
          .fontWeight(FontWeight.Bold)
      }.type(ButtonType.Capsule)
      .margin({
        top: 20
      })
      .width('50%')
      .height('10%')
      .backgroundColor('#0D9FFB')
      .onClick(() = > {
        huksInit()
      })
      Button() {
        Text('Update')
          .fontSize(25)
          .fontWeight(FontWeight.Bold)
      }.type(ButtonType.Capsule)
      .margin({
        top: 20
      })
      .width('50%')
      .height('10%')
      .backgroundColor('#0D9FFB')
      .onClick(() = > {
        huksUpdate()
      })
      Button() {
        Text('Finish')
          .fontSize(25)
          .fontWeight(FontWeight.Bold)
      }.type(ButtonType.Capsule)
      .margin({
        top: 20
      })
      .width('50%')
      .height('10%')
      .backgroundColor('#0D9FFB')
      .onClick(() = > {
        huksFinish()
      })
      Button() {
        Text('Abort')
          .fontSize(25)
          .fontWeight(FontWeight.Bold)
      }.type(ButtonType.Capsule)
      .margin({
        top: 20
      })
      .width('50%')
      .height('10%')
      .backgroundColor('#0D9FFB')
      .onClick(() = > {
        huksAbort()
      })
    }
    .width('100%')
    .height('100%')
  }
}

HuksParam

調(diào)用接口使用的options中的properties數(shù)組中的param。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù)名類型必填說明
tagHuksTag標(biāo)簽
valuebooleannumberbigint

HuksOptions

調(diào)用接口使用的options。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù)名類型必填說明
propertiesArray屬性,存HuksParam的數(shù)組。
inDataUint8Array輸入數(shù)據(jù)。

HuksHandle

huks Handle結(jié)構(gòu)體。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù)名類型必填說明
errorCodenumber錯誤碼
handlenumberhandle值
tokenHarmonyOSOpenHarmony鴻蒙文檔籽料:mau123789是v直接拿Uint8Array預(yù)留字段
鴻蒙文檔.png

HuksResult

調(diào)用接口返回的result。

系統(tǒng)能力 :以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.Security.Huks。

參數(shù)名類型必填說明
errorCodenumber錯誤碼
outDataUint8Array輸出數(shù)據(jù)
propertiesArray屬性

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8441

    瀏覽量

    150697
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2301

    瀏覽量

    42673
收藏 人收藏

    評論

    相關(guān)推薦

    【HarmonyOS】安全指南

    安全概述HarmonyOS操作系統(tǒng)是一個(gè)開放的系統(tǒng),開發(fā)者可以通過HarmonyOS開發(fā)靈活的服務(wù)和應(yīng)用,為
    發(fā)表于 09-16 17:34

    HarmonyOS應(yīng)用開發(fā)-應(yīng)用權(quán)限安全

    HarmonyOS應(yīng)用開發(fā)安全主要分為兩個(gè)方面:應(yīng)用權(quán)限和生物特征識別。應(yīng)用權(quán)限嚴(yán)格按照權(quán)限分類分級模型進(jìn)行定義,如圖1所示,具體過程可分為三步:根據(jù)不同應(yīng)用所需實(shí)現(xiàn)的功能,明確接口是否需要
    發(fā)表于 09-23 14:26

    鴻蒙應(yīng)用開發(fā)者使用的精美圖表控件

    該三方開源從github fork過來,主要將底層接口調(diào)用的實(shí)現(xiàn)修改成鴻蒙接口的實(shí)現(xiàn),將三方鴻蒙
    發(fā)表于 04-01 10:31 ?1次下載

    鴻蒙開發(fā):Universal Keystore Kit密鑰管理服務(wù)簡介

    Universal Keystore Kit(密鑰管理服務(wù),下述簡稱為HUKS)向業(yè)務(wù)/應(yīng)用提供各類密鑰的統(tǒng)一安全操作能力,包括密鑰管理(
    的頭像 發(fā)表于 07-04 14:20 ?320次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>:Universal Keystore Kit<b class='flag-5'>密鑰</b>管理服務(wù)簡介

    鴻蒙開發(fā):Universal Keystore Kit密鑰管理服務(wù) 通用密鑰基礎(chǔ)概念

    在使用通用密鑰完成應(yīng)用開發(fā)前,開發(fā)者需要了解以下相關(guān)概念,以下概念將貫穿整個(gè)開發(fā)過程。
    的頭像 發(fā)表于 07-05 10:57 ?354次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>:Universal Keystore Kit<b class='flag-5'>密鑰</b>管理服務(wù) <b class='flag-5'>通用</b><b class='flag-5'>密鑰</b><b class='flag-5'>庫</b>基礎(chǔ)概念

    鴻蒙開發(fā):Universal Keystore Kit密鑰管理服務(wù) 密鑰生成介紹及算法規(guī)格

    當(dāng)業(yè)務(wù)需要使用HUKS生成隨機(jī)密鑰,并由HUKS進(jìn)行安全保存時(shí),可以調(diào)用HUKS接口生成
    的頭像 發(fā)表于 07-04 21:50 ?284次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>:Universal Keystore Kit<b class='flag-5'>密鑰</b>管理服務(wù) <b class='flag-5'>密鑰</b>生成介紹及算法規(guī)格

    鴻蒙開發(fā):Universal Keystore Kit密鑰管理服務(wù) 密鑰導(dǎo)入介紹及算法規(guī)格

    如果業(yè)務(wù)在HUKS外部生成密鑰(比如應(yīng)用間協(xié)商生成、服務(wù)器端生成),業(yè)務(wù)可以將密鑰導(dǎo)入到HUKS中由HUKS進(jìn)行管理。
    的頭像 發(fā)表于 07-06 10:45 ?614次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>:Universal Keystore Kit<b class='flag-5'>密鑰</b>管理服務(wù) <b class='flag-5'>密鑰</b>導(dǎo)入介紹及算法規(guī)格

    鴻蒙開發(fā):Universal Keystore Kit 密鑰管理服務(wù) 密鑰協(xié)商ArkTS

    以協(xié)商密鑰類型為X25519 256,并密鑰僅在HUKS內(nèi)使用為例,完成密鑰協(xié)商。
    的頭像 發(fā)表于 07-10 09:22 ?269次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>:Universal Keystore Kit <b class='flag-5'>密鑰</b>管理服務(wù) <b class='flag-5'>密鑰</b>協(xié)商ArkTS

    鴻蒙開發(fā):Universal Keystore Kit 密鑰管理服務(wù) 密鑰協(xié)商 C、C++

    以協(xié)商密鑰類型為ECDH,并密鑰僅在HUKS內(nèi)使用為例,完成密鑰協(xié)商。具體的場景介紹及支持的算法規(guī)格,請參考[密鑰生成支持的算法]。
    的頭像 發(fā)表于 07-10 14:27 ?289次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>:Universal Keystore Kit <b class='flag-5'>密鑰</b>管理服務(wù) <b class='flag-5'>密鑰</b>協(xié)商 C、C++

    鴻蒙開發(fā):Universal Keystore Kit密鑰管理服務(wù) 密鑰證明介紹及算法規(guī)格

    HUKS密鑰提供合法性證明能力,主要應(yīng)用于非對稱密鑰的公鑰的證明。
    的頭像 發(fā)表于 07-15 18:28 ?628次閱讀

    鴻蒙開發(fā):Universal Keystore Kit密鑰管理服務(wù) 查詢密鑰是否存在C、C++

    HUKS提供了接口供應(yīng)用查詢指定密鑰是否存在。
    的頭像 發(fā)表于 07-16 09:58 ?243次閱讀

    鴻蒙開發(fā):Universal Keystore Kit密鑰管理服務(wù) 查詢密鑰是否存在C C++

    HUKS提供了接口供應(yīng)用查詢指定密鑰是否存在。
    的頭像 發(fā)表于 07-16 14:21 ?200次閱讀

    鴻蒙開發(fā):Universal Keystore Kit 密鑰管理服務(wù) 獲取密鑰屬性ArkTS

    HUKS提供了接口供業(yè)務(wù)獲取指定密鑰的相關(guān)屬性。在獲取指定密鑰屬性前,需要確保已在HUKS中生成或?qū)氤志没鎯Φ?/div>
    的頭像 發(fā)表于 07-17 10:46 ?275次閱讀

    鴻蒙開發(fā):Universal Keystore Kit 密鑰管理服務(wù) 獲取密鑰屬性C C++

    HUKS提供了接口供業(yè)務(wù)獲取指定密鑰的相關(guān)屬性。在獲取指定密鑰屬性前,需要確保已在HUKS中生成或?qū)氤志没鎯Φ?/div>
    的頭像 發(fā)表于 07-17 09:47 ?305次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>:Universal Keystore Kit <b class='flag-5'>密鑰</b>管理服務(wù) 獲取<b class='flag-5'>密鑰</b>屬性C C++

    鴻蒙開發(fā):Universal Keystore Kit 密鑰管理服務(wù) 查詢密鑰別名集 ArkTS

    HUKS提供了接口供應(yīng)用查詢密鑰別名集。
    的頭像 發(fā)表于 07-18 09:34 ?288次閱讀