文档管理中心
您当前正在浏览HarmonyOS最新文档,覆盖已发布的所有API版本,可在API参考中筛选您使用的API版本。详细的版本配套关系请参考版本说明
API参考系统安全Crypto Architecture Kit(加解密算法框架服务)ArkTS API@ohos.security.cryptoFramework (加解密算法库框架)

@ohos.security.cryptoFramework (加解密算法库框架)

本文导读
展开章节

提供统一的密码算法库加解密接口,以屏蔽底层硬件和算法库。

说明
  • 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

导入模块

PhonePC/2in1TabletTVWearableLite Wearable
收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';

Result

PhonePC/2in1TabletTVWearableLite Wearable

表示执行结果的枚举。

系统能力: SystemCapability.Security.CryptoFramework

展开
名称 说明
INVALID_PARAMS 401

非法入参。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

模型约束:

API版本12+:此接口可在Stage模型和FA模型下使用。

API版本9-11:此接口仅可在Stage模型下使用。

NOT_SUPPORT 801

操作不支持。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束:

API版本12+:此接口可在Stage模型和FA模型下使用。

API版本9-11:此接口仅可在Stage模型下使用。

ERR_OUT_OF_MEMORY 17620001

内存操作失败。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

模型约束:

API版本12+:此接口可在Stage模型和FA模型下使用。

API版本9-11:此接口仅可在Stage模型下使用。

ERR_RUNTIME_ERROR 17620002

获取Native对象失败或参数转换失败。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束:

API版本12+:此接口可在Stage模型和FA模型下使用。

API版本9-11:此接口仅可在Stage模型下使用。

ERR_PARAMETER_CHECK_FAILED20+ 17620003

表示参数检查失败。

元服务API: 从API version 20开始,该接口支持在元服务中使用。

模型约束: 此接口仅可在Stage模型下使用。

ERR_INVALID_CALL 17620004

表示无效的函数调用。

起始版本: 26.0.0

元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。

模型约束: 此接口仅可在Stage模型下使用。

ERR_CRYPTO_OPERATION 17630001

密码操作错误。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

模型约束:

API版本12+:此接口可在Stage模型和FA模型下使用。

API版本9-11:此接口仅可在Stage模型下使用。

DataBlob

PhonePC/2in1TabletTVWearableLite Wearable

二进制数据的封装接口,核心字段data为Uint8Array类型。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

模型约束:

  • API版本12+:此接口可在Stage模型和FA模型下使用。
  • API版本9-11:此接口仅可在Stage模型下使用。

系统能力: SystemCapability.Security.CryptoFramework

展开
名称 类型 只读 可选 说明
data Uint8Array 数据。
说明

Uint8Array类型数据表示8位无符号整数的数组。

ParamsSpec

PhonePC/2in1TabletTVWearableLite Wearable

加解密参数,在进行对称加解密时需要构造其子类对象,并将子类对象传入init()方法。

适用于需要iv等参数的对称加解密模式(对于无iv等参数的模式如ECB模式,无需构造,在init()中传入null即可)。

说明

iv(Initialization Vector,初始化向量)是用于对称加密模式(如 CBC/CTR/OFB/CFB/GCM/CCM/ChaCha20-Poly1305)中引入随机性或唯一性的字节序列,保证相同明文在相同密钥下产生不同密文。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Cipher
  • API版本9-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
algName string

指明对称加解密参数的算法模式。可选值如下:

- "IvParamsSpec":适用于CBC|CTR|OFB|CFB模式。

- "GcmParamsSpec":适用于GCM模式。

- "CcmParamsSpec":适用于CCM模式。

- "AeadParamsSpec":适用于AES-GCM,AES-CCM,SM4-GCM和ChaCha20-Poly1305算法。

说明

由于init()的params参数是ParamsSpec类型(父类),而实际需要传入具体的子类对象(如IvParamsSpec),因此在构造子类对象时应设置其父类ParamsSpec的algName参数,使算法库在init()时知道传入的是哪种子类对象。

IvParamsSpec

PhonePC/2in1TabletTVWearableLite Wearable

加解密参数ParamsSpec的子类,用于在对称加解密时作为init()方法的参数。

适用于CBC、CTR、OFB、CFB这些需要iv作为参数的加解密模式。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Cipher
  • API版本9-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
iv DataBlob

加密和解密参数iv。常见取值如下:

- AES的CBC|CTR|OFB|CFB模式:iv长度为16字节。

- 3DES的CBC|OFB|CFB模式:iv长度为8字节。

- SM410+的CBC|CTR|OFB|CFB模式:iv长度为16字节。

说明

传入init()方法前需要指定其algName属性(来源于父类ParamsSpec)。

GcmParamsSpec

PhonePC/2in1TabletTVWearableLite Wearable

加解密参数ParamsSpec的子类,封装使用GCM AEAD模式进行加密或解密的参数,需要IV、AAD和认证标签。它是ParamsSpec的子类,用于在对称加解密时作为init()方法的参数。

适用于GCM模式。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Cipher
  • API版本9-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
iv DataBlob 指明加解密参数iv,长度为1~128字节,常用为12字节。
aad DataBlob 指明加解密参数aad,长度为0~INT_MAX字节。
authTag DataBlob

指明加解密参数authTag,长度为16字节。

采用GCM模式加密时,需从doFinal()doFinalSync()输出的DataBlob中提取末尾16字节,作为init()initSync()方法中GcmParamsSpec的authTag。

说明
  1. 传入init()方法前需要指定其algName属性(来源于父类ParamsSpec)。
  2. 当aad参数不需要使用或aad长度为0时,可以将aad的data属性设置为一个空的Uint8Array,来构造GcmParamsSpec,写法为aad: { data: new Uint8Array() }。

CcmParamsSpec

PhonePC/2in1TabletTVWearableLite Wearable

加解密参数ParamsSpec的子类,封装使用CCM AEAD模式进行加密或解密的参数,需要IV、AAD和认证标签。它是ParamsSpec的子类,用于在对称加解密时作为init()方法的参数。

适用于CCM模式。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Cipher
  • API版本9-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
iv DataBlob 指明加解密参数iv,仅支持7字节。若传入iv长度超过7字节,超出范围将被截断。
aad DataBlob 指明加解密参数aad。aad最小长度为1字节,最大为2048字节。
authTag DataBlob

指定加解密参数authTag,长度为12字节。

在CCM模式加密时,需从doFinal()doFinalSync()输出的DataBlob末尾提取12字节,作为init()initSync()方法的参数CcmParamsSpec中的authTag。

说明

传入init()方法前需要指定其algName属性(来源于父类ParamsSpec)。

Poly1305ParamsSpec22+

PhonePC/2in1TabletTVWearable

加解密参数ParamsSpec的子类,封装使用ChaCha20-Poly1305 AEAD模式进行加密或解密的参数,需要nonce、AAD和认证标签。它是ParamsSpec的子类,用于在对称加解密时作为init()方法的参数。

适用于ChaCha20算法Poly1305模式。

元服务API: 从API version 22开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Cipher

展开
名称 类型 只读 可选 说明
iv DataBlob Nonce(通过iv字段传入),长度为12字节。
aad DataBlob 指明加解密参数aad。
authTag DataBlob 指定加解密参数authTag,长度为16字节。
说明

传入init()方法前需要指定其algName属性(来源于父类ParamsSpec)。

在Poly1305模式加密时,需从doFinal()doFinalSync()输出的DataBlob末尾提取16字节,作为解密时init()initSync()方法的参数Poly1305ParamsSpec中的authTag。

AeadParamsSpecBeta

PhonePC/2in1TabletTVWearable

用于AEAD(带附加数据的认证加密)对称加解密的init()方法参数,继承自ParamsSpec

适用于AES算法的CCM/GCM分组模式、SM4算法的GCM模式和ChaCha20算法的Poly1305模式。

说明

在使用AeadParamsSpec加密时:

  • 若加密时指定了tagLen,解密时必须传入相同长度。
  • 当前使用AeadParamsSpec参数,CCM模式下updatedoFinal只能调用其中一个进行加密或者解密。且每个方法只能调用一次。
  • 对于AES算法的GCM模式与SM4算法的GCM模式,tagLen仅支持4、8、12、13、14、15、16,若不填则默认为16。
  • 对于AES算法的CCM模式,tagLen仅支持4、6、8、10、12、14、16,若不填则默认为12。
  • 对于ChaCha20算法的Poly1305模式,tagLen仅支持16。

起始版本: 26.0.0

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Cipher

展开
名称 类型 只读 可选 说明
nonce Uint8Array 指明加解密参数nonce。对于AES算法的CCM模式长度为7-13字节;对于AES算法的GCM模式、SM4算法的GCM模式长度为1-128字节,推荐使用12字节;对于ChaCha20算法的Poly1305模式长度为12字节。
authenticatedData Uint8Array 指定可选的附加认证数据。
tagLen number 指定加解密参数authTag长度,单位为字节。对于AES算法的CCM模式,tagLen仅支持4、6、8、10、12、14、16,若不填则默认为12;对于AES算法的GCM模式与SM4算法的GCM模式,tagLen仅支持4、8、12、13、14、15、16,若不填则默认为16;对于ChaCha20算法的Poly1305模式,tagLen仅支持16。

CryptoMode

PhonePC/2in1TabletTVWearableLite Wearable

枚举加密和解密的密码操作模式。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Cipher
  • API版本9-11:SystemCapability.Security.CryptoFramework
展开
名称 说明
ENCRYPT_MODE 0 表示进行加密操作。
DECRYPT_MODE 1 表示进行解密操作。

AsyKeySpecItem10+

PhonePC/2in1TabletTVWearableLite Wearable

表示密钥参数的枚举。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework
展开
名称 说明
DSA_P_BN 101 DSA算法的素模数p。
DSA_Q_BN 102 DSA算法中密钥参数q(p-1的素因子)。
DSA_G_BN 103 DSA算法的参数g。
DSA_SK_BN 104 DSA算法的私钥sk。
DSA_PK_BN 105 DSA算法的公钥pk。
ECC_FP_P_BN 201 ECC算法中表示椭圆曲线Fp域的素数p。
ECC_A_BN 202 ECC算法中椭圆曲线的第一个系数a。
ECC_B_BN 203 ECC算法中椭圆曲线的第二个系数b。
ECC_G_X_BN 204 ECC算法中基点g的x坐标。
ECC_G_Y_BN 205 ECC算法中基点g的y坐标。
ECC_N_BN 206 ECC算法中基点g的阶n。
ECC_H_NUM 207 ECC算法中的余因子h。
ECC_SK_BN 208 ECC算法中的私钥sk。
ECC_PK_X_BN 209 ECC算法中,公钥pk(椭圆曲线上的一个点)的x坐标。
ECC_PK_Y_BN 210 ECC算法中,公钥pk(椭圆曲线上的一个点)的y坐标。
ECC_FIELD_TYPE_STR 211 ECC算法中,椭圆曲线的域类型(当前只支持Fp域)。
ECC_FIELD_SIZE_NUM 212 ECC算法中域的大小,单位为bits(注:对于Fp域,域的大小为素数p的bits长度)。
ECC_CURVE_NAME_STR 213 ECC算法中的SECG(Standards for Efficient Cryptography Group)曲线名称。
RSA_N_BN 301 RSA算法中的模数n。
RSA_SK_BN 302 RSA算法中的私钥sk(即私钥指数d)。
RSA_PK_BN 303 RSA算法中的公钥pk(即公钥指数e)。
DH_P_BN11+ 401 DH算法中的素数p。
DH_G_BN11+ 402 DH算法中的参数g。
DH_L_NUM11+ 403 DH算法中私钥长度,单位为bits。
DH_SK_BN11+ 404 DH算法中的私钥sk。
DH_PK_BN11+ 405 DH算法中的公钥pk。
ED25519_SK_BN11+ 501 Ed25519算法中的私钥sk。
ED25519_PK_BN11+ 502 Ed25519算法中的公钥pk。
X25519_SK_BN11+ 601 X25519算法中的私钥sk。
X25519_PK_BN11+ 602 X25519算法中的公钥pk。

AsyKeyDataItemBeta

PhonePC/2in1TabletTVWearable

表示非对称密钥数据项类型的枚举。

起始版本: 26.0.0

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

展开
名称 说明
ML_DSA_PRIVATE_SEED 0 表示ML-DSA(Module-Lattice-Based Digital Signature Algorithm)私钥的种子。
ML_DSA_PRIVATE_RAW 1 表示ML-DSA私钥的原始私钥数据。
ML_DSA_PUBLIC_RAW 2 表示ML-DSA公钥的原始公钥数据。
ML_KEM_PRIVATE_SEED 3 表示ML-KEM(Module-Lattice-Based Key-Encapsulation Mechanism)私钥的种子。
ML_KEM_PRIVATE_RAW 4 表示ML-KEM私钥的原始私钥数据。
ML_KEM_PUBLIC_RAW 5 表示ML-KEM公钥的原始公钥数据。
EC_PRIVATE_K 6 表示椭圆曲线(EC)上的私钥标量k。
EC_PRIVATE_04_X_Y_K 7 表示椭圆曲线(EC)密钥的复合编码04||X||Y||K,其中04||X||Y为非压缩公钥点,K为私钥标量。
EC_PUBLIC_X_Y 8 表示椭圆曲线(EC)公钥的 X||Y格式编码数据。
EC_PUBLIC_04_X_Y 9 表示椭圆曲线(EC)公钥的 04||X||Y格式编码数据。
EC_PUBLIC_COMPRESS_X 10 表示椭圆曲线(EC)公钥的 02||X 或 03||X格式编码数据。

AsyKeySpecType10+

PhonePC/2in1TabletTVWearableLite Wearable

表示密钥参数类型的枚举。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework
展开
名称 说明
COMMON_PARAMS_SPEC 0 表示公私钥中包含的公共参数。使用此类型的参数可以调用generateKeyPair随机生成密钥对。
PRIVATE_KEY_SPEC 1 表示私钥中包含的参数。使用此类型的参数可以调用generatePriKey生成指定的私钥。
PUBLIC_KEY_SPEC 2 表示公钥中包含的参数。使用此类型的参数可以调用generatePubKey生成指定的公钥。
KEY_PAIR_SPEC 3 表示公私钥中包含的全量参数。使用此类型的参数可以调用generateKeyPair生成指定的密钥对。

CipherSpecItem10+

PhonePC/2in1TabletTVWearableLite Wearable

表示加解密参数的枚举。这些参数支持通过setCipherSpec接口设置,通过getCipherSpec接口获取。

当前只支持RSA算法和SM2算法,从API version 11开始,增加对SM2_MD_NAME_STR参数的支持,详细规格请参考加解密规格

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Cipher
  • API版本10-11:SystemCapability.Security.CryptoFramework
展开
名称 说明
OAEP_MD_NAME_STR 100 表示RSA算法中,使用PKCS1_OAEP模式时,消息摘要功能的算法名。
OAEP_MGF_NAME_STR 101 表示RSA算法中,使用PKCS1_OAEP模式时,掩码生成算法(目前仅支持MGF1)。
OAEP_MGF1_MD_STR 102 表示RSA算法中,使用PKCS1_OAEP模式时,MGF1掩码生成功能的消息摘要算法。
OAEP_MGF1_PSRC_UINT8ARR 103 表示RSA算法中,使用PKCS1_OAEP模式时,pSource的字节流。
SM2_MD_NAME_STR11+ 104 表示SM2算法中,使用的摘要算法名。

SignSpecItem10+

PhonePC/2in1TabletTVWearableLite Wearable

表示签名验签参数的枚举。这些参数支持通过setSignSpecsetVerifySpec接口设置,通过getSignSpecgetVerifySpec接口获取。

当前只支持RSA算法和SM2算法,从API version 11开始,增加对SM2_USER_ID_UINT8ARR参数的支持。从API版本26.0.0开始,支持ML-DSA算法。详细规格请参考签名验签规格

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Signature
  • API版本10-11:SystemCapability.Security.CryptoFramework
展开
名称 说明
PSS_MD_NAME_STR 100

表示RSA算法中,使用PSS模式时,消息摘要功能的算法名。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

PSS_MGF_NAME_STR 101

表示RSA算法中,使用PSS模式时,掩码生成算法(目前仅支持MGF1)。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

PSS_MGF1_MD_STR 102

表示RSA算法中,使用PSS模式时,MGF1掩码生成功能的消息摘要算法。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

PSS_SALT_LEN_NUM 103

表示RSA算法中,使用PSS模式时,盐值的长度,长度以字节为单位。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

PSS_TRAILER_FIELD_NUM 104

表示RSA算法中,使用PSS模式时,用于编码操作的整数。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

SM2_USER_ID_UINT8ARR11+ 105

表示SM2算法中,用户身份标识字段。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

ML_DSA_DETERMINISTIC_BOOL 106

表示ML-DSA签名和验证过程中是否使用确定性签名。不设置时默认值为false。

起始版本: 26.0.0

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。

ML_DSA_MU_BOOL 107

表示ML-DSA签名和验证过程中的mu参数值。不设置时默认值为false,设置为true时,待签名数据需是64字节的哈希。

起始版本: 26.0.0

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。

ML_DSA_CONTEXT_UINT8ARR 108

表示ML-DSA签名和验证过程中的上下文数据。最大长度为255字节,用于标识签名验签场景,该参数在设置ML_DSA_MU_BOOL为true时无效,不设置时默认值为空字符串。

起始版本: 26.0.0

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。

AsyKeySpec10+

PhonePC/2in1TabletTVWearableLite Wearable

指定非对称密钥参数的基本接口,用于创建密钥生成器。在指定非对称密钥参数时需要构造其子类对象,并将子类对象传入createAsyKeyGeneratorBySpec()方法创建密钥生成器。构造子类对象时,除了RSA密钥采用小端写法外,其他bigint类型的密钥参数均采用大端写法,并使用正数。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
algName string 指定非对称密钥的算法名称,比如"RSA"、"DSA"、"ECC"、"SM2"、"Ed25519"、"X25519"、"DH"。
specType AsyKeySpecType 指定密钥参数类型,用于区分公/私钥参数。

DSACommonParamsSpec10+

PhonePC/2in1TabletTVWearableLite Wearable

密钥参数AsyKeySpec的子类,用于指定DSA算法中公私钥包含的公共参数,随机生成公/私钥。

在使用密钥参数生成密钥时,将其传入createAsyKeyGeneratorBySpec()方法创建密钥生成器。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
p bigint 指定DSA算法的素模数p。
q bigint 指定DSA算法中密钥参数q(p-1的素因子)。
g bigint 指定DSA算法的参数g。

DSAPubKeySpec10+

PhonePC/2in1TabletTVWearableLite Wearable

密钥参数AsyKeySpec的子类,用于指定DSA算法中公钥包含的参数。

在使用密钥参数生成密钥时,将其传入createAsyKeyGeneratorBySpec()方法创建密钥生成器。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
params DSACommonParamsSpec 指定DSA算法中公私钥包含的公共参数。
pk bigint 指定DSA算法的公钥值。

DSAKeyPairSpec10+

PhonePC/2in1TabletTVWearableLite Wearable

密钥参数AsyKeySpec的子类,用于指定DSA算法中公私钥包含的全量参数。

在使用密钥参数生成密钥时,将其传入createAsyKeyGeneratorBySpec()方法创建密钥生成器。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
params DSACommonParamsSpec 指定DSA算法中公私钥都包含的公共参数。
sk bigint 指定DSA算法的私钥值sk。
pk bigint 指定DSA算法的公钥值pk。

ECField10+

PhonePC/2in1TabletTVWearableLite Wearable

指定椭圆曲线的域类型。当前只支持Fp域。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
fieldType string 指定椭圆曲线域的类型,当前只支持"Fp"。

ECFieldFp10+

PhonePC/2in1TabletTVWearableLite Wearable

指定椭圆曲线的素数域。是ECField的子类。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
p bigint 指定素数p的值。

Point10+

PhonePC/2in1TabletTVWearableLite Wearable

指定椭圆曲线上的一个点。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
x bigint 指定椭圆曲线上点的x坐标。
y bigint 指定椭圆曲线上点的y坐标。

ECCCommonParamsSpec10+

PhonePC/2in1TabletTVWearableLite Wearable

密钥参数AsyKeySpec的子类,用于指定ECC算法中公私钥包含的公共参数,随机生成公/私钥。

在使用密钥参数生成密钥时,将其传入createAsyKeyGeneratorBySpec()方法创建密钥生成器。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
field ECField 指定椭圆曲线的域(当前只支持Fp域)。
a bigint 指定椭圆曲线的第一个系数a。
b bigint 指定椭圆曲线的第二个系数b。
g Point 指定基点g。
n bigint 指定基点g的阶数n。
h number 指定余因子h。

ECCPriKeySpec10+

PhonePC/2in1TabletTVWearableLite Wearable

密钥参数AsyKeySpec的子类,用于指定ECC算法中私钥包含的参数。

在使用密钥参数生成密钥时,将其传入createAsyKeyGeneratorBySpec()方法创建密钥生成器。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
params ECCCommonParamsSpec 指定ECC算法中公私钥都包含的公共参数。
sk bigint 指定ECC算法的私钥sk。

ECCPubKeySpec10+

PhonePC/2in1TabletTVWearableLite Wearable

密钥参数AsyKeySpec的子类,用于指定ECC算法中公钥包含的参数。

在使用密钥参数生成密钥时,将其传入createAsyKeyGeneratorBySpec()方法创建密钥生成器。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
params ECCCommonParamsSpec 指定ECC算法中公私钥都包含的公共参数。
pk Point 指定ECC算法的公钥pk。

ECCKeyPairSpec10+

PhonePC/2in1TabletTVWearableLite Wearable

密钥参数AsyKeySpec的子类,用于指定ECC算法中公私钥包含的全量参数。

在使用密钥参数生成密钥时,将其传入createAsyKeyGeneratorBySpec()方法创建密钥生成器。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
params ECCCommonParamsSpec 指定ECC算法中公私钥都包含的公共参数。
sk bigint 指定ECC算法的私钥sk。
pk Point 指定ECC算法的公钥pk。

RSACommonParamsSpec10+

PhonePC/2in1TabletTVWearableLite Wearable

密钥参数AsyKeySpec的子类,用于指定RSA算法中公私钥包含的公共参数,随机生成公/私钥。

在使用密钥参数生成密钥时,将其传入createAsyKeyGeneratorBySpec()方法创建密钥生成器。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
n bigint 指定模数n。

RSAPubKeySpec10+

PhonePC/2in1TabletTVWearableLite Wearable

密钥参数AsyKeySpec的子类,用于指定RSA算法中公钥包含的参数。

在使用密钥参数生成密钥时,将其传入createAsyKeyGeneratorBySpec()方法创建密钥生成器。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
params RSACommonParamsSpec 指定RSA算法中公私钥都包含的公共参数。
pk bigint 指定RSA算法的公钥pk。

RSAKeyPairSpec10+

PhonePC/2in1TabletTVWearableLite Wearable

密钥参数AsyKeySpec的子类,用于指定RSA算法中公私钥包含的全量参数。

在使用密钥参数生成密钥时,将其传入createAsyKeyGeneratorBySpec()方法创建密钥生成器。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
params RSACommonParamsSpec 指定RSA算法中公私钥都包含的公共参数。
sk bigint 指定RSA算法的私钥sk。
pk bigint 指定RSA算法的公钥pk。

ED25519PriKeySpec11+

PhonePC/2in1TabletTVWearableLite Wearable

密钥参数AsyKeySpec的子类,用于指定Ed25519算法中私钥包含的参数。

在使用密钥参数生成密钥时,将其传入createAsyKeyGeneratorBySpec()方法创建密钥生成器。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
sk bigint 指定Ed25519算法的私钥sk。

ED25519PubKeySpec11+

PhonePC/2in1TabletTVWearableLite Wearable

密钥参数AsyKeySpec的子类,用于指定Ed25519算法中公钥包含的参数。

在使用密钥参数生成密钥时,将其传入createAsyKeyGeneratorBySpec()方法创建密钥生成器。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
pk bigint 指定Ed25519算法的公钥pk。

ED25519KeyPairSpec11+

PhonePC/2in1TabletTVWearableLite Wearable

密钥参数AsyKeySpec的子类,用于指定Ed25519算法中公私钥包含的全量参数。

在使用密钥参数生成密钥时,将其传入createAsyKeyGeneratorBySpec()方法创建密钥生成器。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
sk bigint 指定Ed25519算法的私钥sk。
pk bigint 指定Ed25519算法的公钥pk。

X25519PriKeySpec11+

PhonePC/2in1TabletTVWearableLite Wearable

密钥参数AsyKeySpec的子类,用于指定X25519算法中私钥包含的参数。

在使用密钥参数生成密钥时,将其传入createAsyKeyGeneratorBySpec()方法创建密钥生成器。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
sk bigint 指定X25519算法的私钥sk。

X25519PubKeySpec11+

PhonePC/2in1TabletTVWearableLite Wearable

密钥参数AsyKeySpec的子类,用于指定X25519算法中公钥包含的参数。

在使用密钥参数生成密钥时,将其传入createAsyKeyGeneratorBySpec()方法创建密钥生成器。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
pk bigint 指定X25519算法的公钥pk。

X25519KeyPairSpec11+

PhonePC/2in1TabletTVWearableLite Wearable

密钥参数AsyKeySpec的子类,用于指定X25519算法中公私钥包含的全量参数。

在使用密钥参数生成密钥时,将其传入createAsyKeyGeneratorBySpec()方法创建密钥生成器。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
sk bigint 指定X25519算法的私钥sk。
pk bigint 指定X25519算法的公钥pk。

DHCommonParamsSpec11+

PhonePC/2in1TabletTVWearableLite Wearable

密钥参数AsyKeySpec的子类,用于指定DH算法中公私钥包含的公共参数。

在使用密钥参数生成密钥时,将其传入createAsyKeyGeneratorBySpec()方法创建密钥生成器。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
p bigint 指定DH算法中大素数p。
g bigint 指定DH算法中参数g。
l number 指定DH算法中私钥的长度,单位为bits。

DHPriKeySpec11+

PhonePC/2in1TabletTVWearableLite Wearable

密钥参数AsyKeySpec的子类,用于指定DH算法中私钥包含的参数。

在使用密钥参数生成密钥时,将其传入createAsyKeyGeneratorBySpec()方法创建密钥生成器。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
params DHCommonParamsSpec 指定DH算法中公私钥都包含的公共参数。
sk bigint 指定DH算法的私钥sk。

DHPubKeySpec11+

PhonePC/2in1TabletTVWearableLite Wearable

密钥参数AsyKeySpec的子类,用于指定DH算法中公钥包含的参数。

在使用密钥参数生成密钥时,将其传入createAsyKeyGeneratorBySpec()方法创建密钥生成器。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
params DHCommonParamsSpec 指定DH算法中公私钥都包含的公共参数。
pk bigint 指定DH算法的公钥pk。

DHKeyPairSpec11+

PhonePC/2in1TabletTVWearableLite Wearable

密钥参数AsyKeySpec的子类,用于指定DH算法中公私钥包含的全量参数。

在使用密钥参数生成密钥时,将其传入createAsyKeyGeneratorBySpec()方法创建密钥生成器。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
params DHCommonParamsSpec 指定DH算法中公私钥都包含的公共参数。
sk bigint 指定DH算法的私钥sk。
pk bigint 指定DH算法的公钥pk。

KdfSpec11+

PhonePC/2in1TabletTVWearableLite Wearable

密钥派生函数参数,使用密钥派生函数进行密钥派生时,需要构建其子类对象并作为输入。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Kdf
  • API版本11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
algName string 指明密钥派生函数的算法名,如"PBKDF2"。

PBKDF2Spec11+

PhonePC/2in1TabletTVWearableLite Wearable

密钥派生函数参数KdfSpec的子类,作为PBKDF2密钥派生函数进行密钥派生时的输入。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Kdf
  • API版本11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
password string | Uint8Array 用户输入的原始密码。
salt Uint8Array 盐值。
iterations number 迭代次数,需要为正整数。
keySize number 派生得到的密钥字节长度,单位为bytes。
说明

password 是原始密码。如果使用 string 类型,需直接传入用于密钥派生的数据,而不是 HexString 或 base64 等字符串类型,并确保该字符串为 UTF-8 编码,否则派生结果会有差异。

HKDFSpec12+

PhonePC/2in1TabletTVWearable

密钥派生函数参数KdfSpec的子类,作为HKDF密钥派生函数进行密钥派生时的输入。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Kdf

展开
名称 类型 只读 可选 说明
key string | Uint8Array 密钥材料。
salt Uint8Array 盐值。
info Uint8Array 拓展信息。
keySize number 派生得到的密钥字节长度,单位为bytes。
说明

key指的是用户输入的最初的密钥材料。根据模式的不同info与salt可以传空,但是不可不传。

例如:EXTRACT_AND_EXPAND模式需要输入全部的值,EXTRACT_ONLY模式info可以为空,在构建HKDFSpec的时候,info传入null值。

默认的模式为EXTRACT_AND_EXPAND,"HKDF|SHA256|EXTRACT_AND_EXPAND"等价于"HKDF|SHA256"。

ScryptSpec18+

PhonePC/2in1TabletTVWearable

密钥派生函数参数KdfSpec的子类,作为SCRYPT密钥派生函数进行密钥派生时的输入。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Kdf

展开
名称 类型 只读 可选 说明
passphrase string | Uint8Array 用户输入的原始密码。
salt Uint8Array 盐值。
n number CPU/内存开销参数,需要为正整数。
p number 并行化参数,需要为正整数。
r number 块大小参数,需要为正整数。
maxMemory number 最大内存限制参数,需要为正整数,单位为bytes。
keySize number 派生得到的密钥字节长度,需要为正整数,单位为bytes。
说明

passphrase指的是原始密码,如果使用string类型,需要直接传入用于密钥派生的数据,而不是HexString、base64等字符串类型,同时需要确保该字符串为UTF-8编码,否则派生结果会有差异。

X963KdfSpec22+

PhonePC/2in1TabletTVWearable

密钥派生函数参数KdfSpec的子类,作为X963KDF密钥派生函数进行密钥派生时的输入。

元服务API: 从API version 22开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Kdf

展开
名称 类型 只读 可选 说明
key string | Uint8Array 密钥材料。
info Uint8Array 共享信息。
keySize number 派生得到的密钥字节长度,需要为正整数,单位为bytes。
说明

key指的是用户输入的最初的密钥材料。

SM2CipherTextSpec12+

PhonePC/2in1TabletTVWearable

SM2密文参数,使用SM2密文格式转换函数进行格式转换时,需要用到此对象。可以通过指定此参数,生成符合国密标准的ASN.1格式的SM2密文,反之,也可以从ASN.1格式的SM2密文中获取具体参数。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Cipher

展开
名称 类型 只读 可选 说明
xCoordinate bigint x分量。
yCoordinate bigint y分量。
cipherTextData Uint8Array 密文。
hashData Uint8Array 杂凑值。
说明
  • hashData为使用SM3算法对明文数据运算得到的杂凑值,其长度固定为256位。

  • cipherTextData是与明文等长的密文。

  • 在拼接生成C1C3C2格式的密文时,如果x分量(C1_X)或y分量(C1_Y)的长度不足32字节,需要在高位补0,使得x分量和y分量的长度均为32字节。

KeyEncodingConfig18+

PhonePC/2in1TabletTVWearable

RSA私钥编码参数,使用获取私钥字符串时,可以添加此参数,生成指定算法、密码的编码后的私钥字符串。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

展开
名称 类型 只读 可选 说明
password string 密码。
cipherName string 用于编码私钥的对称密码算法。
说明
  • password是必选参数,表示编码用到的密码。

  • cipherName是必选参数,指定编码用到的算法。当前仅支持AES-128-CBC、AES-192-CBC、AES-256-CBC、DES-EDE3-CBC。

MacSpec18+

PhonePC/2in1TabletTVWearable

消息认证码参数,计算HMAC或CMAC时,需要构建子类对象并作为输入参数。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Mac

展开
名称 类型 只读 可选 说明
algName string 消息认证码算法名。
说明

algName是必选参数,表示消息认证码算法。

HmacSpec18+

PhonePC/2in1TabletTVWearable

消息认证码参数MacSpec的子类,作为HMAC计算的输入。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Mac

展开
名称 类型 只读 可选 说明
mdName string 摘要算法名。
说明

mdName是必选参数,表示HMAC摘要算法。

CmacSpec18+

PhonePC/2in1TabletTVWearable

消息认证码参数MacSpec的子类,作为CMAC计算的输入。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Mac

展开
名称 类型 只读 可选 说明
cipherName string CMAC使用的对称密码算法名。
说明

cipherName是必选参数,表示CMAC对称加密算法。

EccSignatureSpec20+

PhonePC/2in1TabletTVWearable

包含(r、s)的ECC/SM2签名数据的对象。

说明

r和s的长度各为256位。

元服务API: 从API version 20开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Signature

展开
名称 类型 只读 可选 说明
r bigint r分量。
s bigint s分量。

Key

PhonePC/2in1TabletTVWearable

密钥(父类),在运行密码算法(如加解密)时需要提前生成其子类对象,并传入Cipher实例的init()方法。

密钥通过子类密钥生成器来生成,详见子类描述。具体子类有:SymKeyPubKeyPriKey

属性

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key
  • API版本9-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
format string 密钥的格式。
algName string 密钥对应的算法名(如果是对称密钥,则含密钥长度,否则不含密钥长度)。

getEncoded

getEncoded(): DataBlob

同步方法,获取密钥数据的字节流。密钥可以是对称密钥、公钥或私钥。公钥格式需符合ASN.1语法、X.509规范和DER编码;私钥格式需符合ASN.1语法、PKCS #8规范和DER编码。

说明

RSA算法使用密钥参数生成私钥时,私钥对象支持getEncoded。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key
  • API版本9-11:SystemCapability.Security.CryptoFramework

返回值:

展开
类型 说明
DataBlob 用于查看密钥的具体内容。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
801 This operation is not supported.
17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. async function testGenerateAesKey() {
  3. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256');
  4. let symKey = await symKeyGenerator.generateSymKey();
  5. let encodedKey = symKey.getEncoded();
  6. console.info('key hex: ' + encodedKey.data);
  7. }

getKeySizeBeta

PhonePC/2in1TabletTVWearable

getKeySize(): number

以同步方式获取密钥的比特长度。密钥可以是对称密钥、公钥或私钥。

起始版本: 26.0.0

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key

返回值:

展开
类型 说明
number 获取密钥的比特长度。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. async function testGenerateAesKey() {
  3. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256');
  4. let symKey = await symKeyGenerator.generateSymKey();
  5. let symKeyLen = symKey.getKeySize();
  6. console.info('keysize is: ' + symKeyLen);
  7. }

SymKey

PhonePC/2in1TabletTVWearableLite Wearable

对称密钥,是Key的子类,在对称加解密时需要将其对象传入Cipher实例的init()方法使用。

对称密钥通过对称密钥生成器SymKeyGenerator来生成。

clearMem

clearMem(): void

同步方法,将系统底层内存中的密钥数据清零。建议在不再使用对称密钥实例时调用此函数,避免密钥数据在内存中存留过久。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.SymKey
  • API版本9-11:SystemCapability.Security.CryptoFramework

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. async function testGenerateAesKeyFun() {
  3. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256');
  4. let key = await symKeyGenerator.generateSymKey();
  5. let encodedKey = key.getEncoded();
  6. console.info('key blob: '+ encodedKey.data);
  7. key.clearMem();
  8. encodedKey = key.getEncoded();
  9. console.info('key blob: ' + encodedKey.data);
  10. }

PubKey

PhonePC/2in1TabletTVWearable

公钥,是Key的子类,在非对称加密、签名验证、密钥协商时需要将其对象作为输入使用。

公钥可以通过非对称密钥生成器AsyKeyGeneratorAsyKeyGeneratorBySpec来生成。

getAsyKeySpec10+

getAsyKeySpec(itemType: AsyKeySpecItem): bigint | string | number

同步方法,获取密钥参数。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
itemType AsyKeySpecItem 指定的密钥参数。

返回值:

展开
类型 说明
bigint | string | number 用于查看密钥参数的具体内容。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

801

This operation is not supported.

适用版本:12+

17620001 Memory operation failed.
17630001 Crypto operation error.
17620003

Parameter check failed.

适用版本:26.0.0+

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. // 根据关键规范构造EccCommonSpec结构体。EccCommonSpec结构体定义了ECC私钥和公钥的公共参数。
  3. function genEccCommonSpec(): cryptoFramework.ECCCommonParamsSpec {
  4. let fieldFp: cryptoFramework.ECFieldFp = {
  5. fieldType: 'Fp',
  6. p: BigInt('0xffffffffffffffffffffffffffffffff000000000000000000000001')
  7. }
  8. let G: cryptoFramework.Point = {
  9. x: BigInt('0xb70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21'),
  10. y: BigInt('0xbd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34')
  11. }
  12. let eccCommonSpec: cryptoFramework.ECCCommonParamsSpec = {
  13. algName: 'ECC',
  14. specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC,
  15. field: fieldFp,
  16. a: BigInt('0xfffffffffffffffffffffffffffffffefffffffffffffffffffffffe'),
  17. b: BigInt('0xb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4'),
  18. g: G,
  19. n: BigInt('0xffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d'),
  20. h: 1
  21. }
  22. return eccCommonSpec;
  23. }
  24. async function testgetAsyKeySpec() {
  25. let commKeySpec = genEccCommonSpec(); // 使用参数属性,构造ECC公私钥公共密钥参数对象。
  26. let generatorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(commKeySpec); // 使用密钥参数对象创建生成器。
  27. let keyPair = await generatorBySpec.generateKeyPair();
  28. let key = keyPair.pubKey;
  29. let p = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_FP_P_BN);
  30. console.info('ecc item --- p: ' + p.toString(16));
  31. }

getEncodedDer12+

PhonePC/2in1TabletTVWearable

getEncodedDer(format: string): DataBlob

支持根据指定的密钥格式(如规范、压缩状态等),获取符合ASN.1语法和DER编码的公钥数据。

说明

本接口和Key.getEncoded()的区别是:

  1. 本接口可根据入参决定数据的输出格式。
  2. Key.getEncoded()接口,不支持指定获取密钥数据的格式。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

参数:

展开
参数名 类型 必填 说明
format string

用于指定当前密钥格式。支持EC密钥,format取值支持"X509|COMPRESSED"和"X509|UNCOMPRESSED"。

从API版本26.0.0开始,支持RSA密钥,format取值支持"PKCS1"和"X509"。

从API版本26.0.0开始,支持ML-DSA和ML-KEM密钥,format取值支持"X509"。

返回值:

展开
类型 说明
DataBlob 返回满足ASN.1语法和DER编码的指定密钥格式的公钥数据。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.
17620003

Parameter check failed.

适用版本:26.0.0+

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. async function testGetEncodedDer() {
  3. let pkData = new Uint8Array([48, 90, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43, 36, 3, 3, 2, 8, 1, 1, 7, 3, 66, 0, 4, 143, 39, 57, 249, 145, 50, 63, 222, 35, 70, 178, 121, 202, 154, 21, 146, 129, 75, 76, 63, 8, 195, 157, 111, 40, 217, 215, 148, 120, 224, 205, 82, 83, 92, 185, 21, 211, 184, 5, 19, 114, 33, 86, 85, 228, 123, 242, 206, 200, 98, 178, 184, 130, 35, 232, 45, 5, 202, 189, 11, 46, 163, 156, 152]);
  4. let pubKeyBlob: cryptoFramework.DataBlob = { data: pkData };
  5. let generator = cryptoFramework.createAsyKeyGenerator('ECC_BrainPoolP256r1');
  6. let keyPair = await generator.convertKey(pubKeyBlob, null);
  7. let key = keyPair.pubKey;
  8. let returnBlob = key.getEncodedDer('X509|UNCOMPRESSED');
  9. console.info('returnBlob data:' + returnBlob.data);
  10. }

getEncodedPem12+

PhonePC/2in1TabletTVWearable

getEncodedPem(format: string): string

同步方法,获取密钥数据的字符串。密钥可以是RSA公钥或私钥。公钥需符合X.509、PKCS #1规范,并采用PEM编码。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

参数:

展开
参数名 类型 必填 说明
format string

指定的获取密钥字符串的编码格式。支持RSA密钥,format取值支持'X509'或'PKCS1'。

从API版本26.0.0起,支持EC、ML-DSA和ML-KEM密钥,format取值支持'X509'。

返回值:

展开
类型 说明
string 用于获取指定密钥格式的具体内容。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.
17620003

Parameter check failed.

适用版本:26.0.0+

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. let publicPkcs1Str1024: string =
  3. '-----BEGIN RSA PUBLIC KEY-----\n'
  4. + 'MIGJAoGBALAg3eavbX433pOjGdWdpL7HIr1w1EAeIcaCtuMfDpECPdX6X5ZjrwiE\n'
  5. + 'h7cO51WXMT2gyN45DCQySr/8cLE2UiUVHo7qlrSatdLA9ETtgob3sJ4qTaBg5Lxg\n'
  6. + 'SHy2gC+bvEpuIuRe64yXGuM/aP+ZvmIj9QBIVI9mJD8jLEOvQBBpAgMBAAE=\n'
  7. + '-----END RSA PUBLIC KEY-----\n';
  8. function TestPubKeyPkcs1ToX509BySync1024() {
  9. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
  10. let keyPair = rsaGenerator.convertPemKeySync(publicPkcs1Str1024, null);
  11. let pubPemKey = keyPair.pubKey;
  12. let pubString = pubPemKey.getEncodedPem('X509');
  13. console.info('[sync]TestPubKeyPkcs1ToX509BySync1024 pubString output = ' + pubString);
  14. }

getKeyDataBeta

PhonePC/2in1TabletTVWearable

getKeyData(itemType: AsyKeyDataItem): Promise<Uint8Array>

指定密钥数据项类型,获取对应类型的公钥数据。使用Promise异步回调。

起始版本: 26.0.0

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

参数:

展开
参数名 类型 必填 说明
itemType AsyKeyDataItem 指定密钥数据项类型。

返回值:

展开
类型 说明
Promise<Uint8Array> Promise对象,返回指定密钥数据项类型的公钥数据。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620003 Parameter check failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. async function eccGetKeyDataTest() {
  3. let eccGenerator = cryptoFramework.createAsyKeyGenerator('ECC_BrainPoolP256r1');
  4. let keyPair = await eccGenerator.generateKeyPair();
  5. let returnBlob = await keyPair.pubKey.getKeyData(cryptoFramework.AsyKeyDataItem.EC_PUBLIC_X_Y);
  6. console.info('EC_PUBLIC_X_Y data: ' + returnBlob);
  7. }

getKeyDataSyncBeta

PhonePC/2in1TabletTVWearable

getKeyDataSync(itemType: AsyKeyDataItem): Uint8Array

同步方法,指定密钥数据项类型,获取对应类型的公钥数据。

起始版本: 26.0.0

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

参数:

展开
参数名 类型 必填 说明
itemType AsyKeyDataItem 指定密钥数据项类型。

返回值:

展开
类型 说明
Uint8Array 返回指定密钥数据项类型的公钥数据。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620003 Parameter check failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. function eccGetKeyDataTest() {
  3. let eccGenerator = cryptoFramework.createAsyKeyGenerator('ECC_BrainPoolP256r1');
  4. let keyPair = eccGenerator.generateKeyPairSync();
  5. let returnBlob = keyPair.pubKey.getKeyDataSync(cryptoFramework.AsyKeyDataItem.EC_PUBLIC_X_Y);
  6. console.info('EC_PUBLIC_X_Y data: ' + returnBlob);
  7. }

PriKey

PhonePC/2in1TabletTVWearable

私钥,是Key的子类,在非对称解密、签名、密钥协商时需要将其作为输入使用。

私钥可以通过非对称密钥生成器AsyKeyGeneratorAsyKeyGeneratorBySpec来生成。

clearMem

clearMem(): void

同步方法,清零系统底层内存中的密钥数据。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本9-11:SystemCapability.Security.CryptoFramework

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. async function testClearMem() {
  3. let eccGenerator = cryptoFramework.createAsyKeyGenerator('ECC256');
  4. // 使用密钥生成器随机生成非对称密钥对。
  5. let keyGenPromise = eccGenerator.generateKeyPair();
  6. keyGenPromise.then(keyPair => {
  7. let priKey = keyPair.priKey;
  8. let returnBlob = priKey.getEncodedDer('PKCS8');
  9. console.info('returnBlob data:' + returnBlob.data);
  10. priKey.clearMem(); // 对于非对称私钥,clearMem()释放内部密钥结构。执行clearMem后,不支持getEncoded()。
  11. });
  12. }

getAsyKeySpec10+

getAsyKeySpec(itemType: AsyKeySpecItem): bigint | string | number

同步方法,获取密钥参数。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
itemType AsyKeySpecItem 指定的密钥参数类型。

返回值:

展开
类型 说明
bigint | string | number 用于查看密钥参数的具体内容。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

801 This operation is not supported.
17620001 Memory operation failed.
17630001 Crypto operation error.
17620003

Parameter check failed.

适用版本:26.0.0+

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. // 根据关键规范构造EccCommonSpec结构体。EccCommonSpec结构体定义了ECC私钥和公钥的公共参数。
  3. function genEccCommonSpec(): cryptoFramework.ECCCommonParamsSpec {
  4. let fieldFp: cryptoFramework.ECFieldFp = {
  5. fieldType: 'Fp',
  6. p: BigInt('0xffffffffffffffffffffffffffffffff000000000000000000000001')
  7. }
  8. let G: cryptoFramework.Point = {
  9. x: BigInt('0xb70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21'),
  10. y: BigInt('0xbd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34')
  11. }
  12. let eccCommonSpec: cryptoFramework.ECCCommonParamsSpec = {
  13. algName: 'ECC',
  14. specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC,
  15. field: fieldFp,
  16. a: BigInt('0xfffffffffffffffffffffffffffffffefffffffffffffffffffffffe'),
  17. b: BigInt('0xb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4'),
  18. g: G,
  19. n: BigInt('0xffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d'),
  20. h: 1
  21. }
  22. return eccCommonSpec;
  23. }
  24. async function testgetAsyKeySpec() {
  25. let commKeySpec = genEccCommonSpec(); // 使用参数属性,构造ECC公私钥公共密钥参数对象。
  26. let generatorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(commKeySpec); // 使用密钥参数对象创建生成器。
  27. let keyPair = await generatorBySpec.generateKeyPair();
  28. let key = keyPair.priKey;
  29. let p = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_FP_P_BN);
  30. console.info('ecc item --- p: ' + p.toString(16));
  31. }

getEncodedDer12+

PhonePC/2in1TabletTVWearable

getEncodedDer(format: string): DataBlob

支持根据指定的密钥格式(如采用哪个规范),获取满足ASN.1语法、DER编码的私钥数据。

说明

本接口和Key.getEncoded()的区别是:

  1. 本接口可根据入参决定数据的输出格式。
  2. Key.getEncoded()接口,不支持指定密钥格式。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

参数:

展开
参数名 类型 必填 说明
format string

用于指定当前密钥格式。支持EC密钥,format取值支持"PKCS8"。

从API版本26.0.0开始,支持RSA密钥,format取值支持"PKCS1"和"PKCS8"。

从API版本26.0.0开始,支持ML-DSA和ML-KEM密钥,format取值支持"PKCS8"。

返回值:

展开
类型 说明
DataBlob 返回满足ASN.1语法和DER编码的指定密钥格式的ECC私钥数据。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.
17620003

Parameter check failed.

适用版本:26.0.0+

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. async function testGetEncodedDer() {
  3. let eccGenerator = cryptoFramework.createAsyKeyGenerator('ECC256');
  4. // 使用密钥生成器随机生成非对称密钥对。
  5. let keyGenPromise = eccGenerator.generateKeyPair();
  6. keyGenPromise.then(keyPair => {
  7. let priKey = keyPair.priKey;
  8. let returnBlob = priKey.getEncodedDer('PKCS8');
  9. console.info('returnBlob data:' + returnBlob.data);
  10. });
  11. }

getEncodedPem12+

PhonePC/2in1TabletTVWearable

getEncodedPem(format: string): string

同步方法,获取密钥数据的字符串。密钥可以是RSA公钥或私钥。私钥格式需符合PKCS #8、PKCS #1规范,并采用PEM编码。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

参数:

展开
参数名 类型 必填 说明
format string

指定的获取密钥字符串的编码格式。支持RSA密钥,format取值支持'PKCS8'或'PKCS1'。

从API版本26.0.0起,支持EC密钥,format取值支持'PKCS8'或'EC'。

从API版本26.0.0起,支持ML-DSA和ML-KEM密钥,format取值支持'PKCS8'。

返回值:

展开
类型 说明
string 用于获取指定密钥格式的具体内容。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.
17620003

Parameter check failed.

适用版本:26.0.0+

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. let priKeyPkcs1Str1024: string =
  3. '-----BEGIN RSA PRIVATE KEY-----\n'
  4. + 'MIICXQIBAAKBgQCwIN3mr21+N96ToxnVnaS+xyK9cNRAHiHGgrbjHw6RAj3V+l+W\n'
  5. + 'Y68IhIe3DudVlzE9oMjeOQwkMkq//HCxNlIlFR6O6pa0mrXSwPRE7YKG97CeKk2g\n'
  6. + 'YOS8YEh8toAvm7xKbiLkXuuMlxrjP2j/mb5iI/UASFSPZiQ/IyxDr0AQaQIDAQAB\n'
  7. + 'AoGAEvBFzBNa+7J4PXnRQlYEK/tvsd0bBZX33ceacMubHl6WVZbphltLq+fMTBPP\n'
  8. + 'LjXmtpC+aJ7Lvmyl+wTi/TsxE9vxW5JnbuRT48rnZ/Xwq0eozDeEeIBRrpsr7Rvr\n'
  9. + '7ctrgzr4m4yMHq9aDgpxj8IR7oHkfwnmWr0wM3FuiVlj650CQQDineeNZ1hUTkj4\n'
  10. + 'D3O+iCi3mxEVEeJrpqrmSFolRMb+iozrIRKuJlgcOs+Gqi2fHfOTTL7LkpYe8SVg\n'
  11. + 'e3JxUdVLAkEAxvcZXk+byMFoetrnlcMR13VHUpoVeoV9qkv6CAWLlbMdgf7uKmgp\n'
  12. + 'a1Yp3QPDNQQqkPvrqtfR19JWZ4uy1qREmwJALTU3BjyBoH/liqb6fh4HkWk75Som\n'
  13. + 'MzeSjFIOubSYxhq5tgZpBZjcpvUMhV7Zrw54kwASZ+YcUJvmyvKViAm9NQJBAKF7\n'
  14. + 'DyXSKrem8Ws0m1ybM7HQx5As6l3EVhePDmDQT1eyRbKp+xaD74nkJpnwYdB3jyyY\n'
  15. + 'qc7A1tj5J5NmeEFolR0CQQCn76Xp8HCjGgLHw9vg7YyIL28y/XyfFyaZAzzK+Yia\n'
  16. + 'akNwQ6NeGtXSsuGCcyyfpacHp9xy8qXQNKSkw03/5vDO\n'
  17. + '-----END RSA PRIVATE KEY-----\n';
  18. function TestPriKeyPkcs1ToPkcs8BySync1024() {
  19. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
  20. let keyPair = rsaGenerator.convertPemKeySync(null, priKeyPkcs1Str1024);
  21. let priPemKey = keyPair.priKey;
  22. let priString = priPemKey.getEncodedPem('PKCS8');
  23. console.info('[sync]TestPriKeyPkcs1ToPkcs8BySync1024 priString output = ' + priString);
  24. }

getEncodedPem18+

PhonePC/2in1TabletTVWearable

getEncodedPem(format: string, config: KeyEncodingConfig): string

同步方法,获取密钥数据的字符串。支持RSA公钥和私钥。私钥格式满足PKCS #8规范、PKCS #1规范和PEM编码方式。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

参数:

展开
参数名 类型 必填 说明
format string 指定的获取密钥字符串的编码格式。其中,私钥可为'PKCS1' 或'PKCS8'格式。
config KeyEncodingConfig 指定编码的算法和口令,对私钥进行编码操作。

返回值:

展开
类型 说明
string 用于获取指定密钥格式的具体内容。如果填了config参数,则获取编码后的内容。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

801 This operation is not supported.
17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. let priKeyPkcs1Str1024: string =
  3. '-----BEGIN RSA PRIVATE KEY-----\n'
  4. + 'MIICXQIBAAKBgQCwIN3mr21+N96ToxnVnaS+xyK9cNRAHiHGgrbjHw6RAj3V+l+W\n'
  5. + 'Y68IhIe3DudVlzE9oMjeOQwkMkq//HCxNlIlFR6O6pa0mrXSwPRE7YKG97CeKk2g\n'
  6. + 'YOS8YEh8toAvm7xKbiLkXuuMlxrjP2j/mb5iI/UASFSPZiQ/IyxDr0AQaQIDAQAB\n'
  7. + 'AoGAEvBFzBNa+7J4PXnRQlYEK/tvsd0bBZX33ceacMubHl6WVZbphltLq+fMTBPP\n'
  8. + 'LjXmtpC+aJ7Lvmyl+wTi/TsxE9vxW5JnbuRT48rnZ/Xwq0eozDeEeIBRrpsr7Rvr\n'
  9. + '7ctrgzr4m4yMHq9aDgpxj8IR7oHkfwnmWr0wM3FuiVlj650CQQDineeNZ1hUTkj4\n'
  10. + 'D3O+iCi3mxEVEeJrpqrmSFolRMb+iozrIRKuJlgcOs+Gqi2fHfOTTL7LkpYe8SVg\n'
  11. + 'e3JxUdVLAkEAxvcZXk+byMFoetrnlcMR13VHUpoVeoV9qkv6CAWLlbMdgf7uKmgp\n'
  12. + 'a1Yp3QPDNQQqkPvrqtfR19JWZ4uy1qREmwJALTU3BjyBoH/liqb6fh4HkWk75Som\n'
  13. + 'MzeSjFIOubSYxhq5tgZpBZjcpvUMhV7Zrw54kwASZ+YcUJvmyvKViAm9NQJBAKF7\n'
  14. + 'DyXSKrem8Ws0m1ybM7HQx5As6l3EVhePDmDQT1eyRbKp+xaD74nkJpnwYdB3jyyY\n'
  15. + 'qc7A1tj5J5NmeEFolR0CQQCn76Xp8HCjGgLHw9vg7YyIL28y/XyfFyaZAzzK+Yia\n'
  16. + 'akNwQ6NeGtXSsuGCcyyfpacHp9xy8qXQNKSkw03/5vDO\n'
  17. + '-----END RSA PRIVATE KEY-----\n';
  18. function TestPriKeyPkcs1Encoded() {
  19. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
  20. let keyPair = rsaGenerator.convertPemKeySync(null, priKeyPkcs1Str1024);
  21. let options: cryptoFramework.KeyEncodingConfig = {
  22. password: '123456',
  23. cipherName: 'AES-128-CBC'
  24. }
  25. let priPemKey = keyPair.priKey;
  26. let priString = priPemKey.getEncodedPem('PKCS1', options);
  27. console.info('[sync]TestPriKeyPkcs1Encoded priString output = ' + priString);
  28. }

getPubKey23+

PhonePC/2in1TabletTVWearable

getPubKey(): Promise<PubKey>

从私钥对象中获取公钥对象。使用Promise异步回调。

元服务API: 从API version 23开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

返回值:

展开
类型 说明
Promise<PubKey> Promise对象,返回公钥对象PubKey。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { buffer } from '@kit.ArkTS';
  3. function compareUint8Array(a: Uint8Array, b: Uint8Array): boolean {
  4. let buf1 = buffer.from(a);
  5. let buf2 = buffer.from(b);
  6. if (buf1.compare(buf2, 0, b.length, 0, a.length) == 0) {
  7. return true;
  8. } else {
  9. return false;
  10. }
  11. }
  12. async function generateAsyKey() {
  13. let skData =
  14. new Uint8Array([48, 130, 2, 119, 2, 1, 0, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 4, 130, 2, 97, 48,
  15. 130, 2, 93, 2, 1, 0, 2, 129, 129, 0, 199, 32, 218, 8, 4, 63, 103, 229, 64, 128, 83, 31, 23, 156, 30, 168, 101, 22,
  16. 80, 100, 197, 243, 217, 60, 127, 110, 127, 242, 8, 251, 87, 127, 235, 38, 226, 149, 149, 108, 54, 202, 53, 1, 21,
  17. 91, 118, 246, 97, 93, 147, 117, 162, 71, 215, 70, 9, 175, 205, 241, 230, 187, 64, 170, 154, 67, 67, 254, 71, 1,
  18. 114, 10, 91, 195, 34, 199, 85, 172, 255, 87, 95, 159, 43, 117, 73, 73, 199, 97, 198, 117, 217, 7, 188, 196, 30,
  19. 248, 9, 181, 150, 243, 41, 145, 91, 8, 226, 161, 251, 12, 120, 28, 36, 146, 3, 196, 48, 243, 136, 201, 207, 131,
  20. 171, 22, 15, 7, 12, 172, 135, 196, 30, 93, 2, 3, 1, 0, 1, 2, 129, 128, 109, 100, 83, 194, 225, 170, 127, 134, 6,
  21. 184, 56, 113, 181, 67, 179, 231, 232, 152, 168, 147, 163, 215, 193, 56, 165, 252, 235, 86, 232, 174, 67, 52, 103,
  22. 215, 149, 212, 125, 32, 212, 188, 162, 255, 180, 94, 233, 236, 146, 50, 153, 6, 159, 158, 253, 217, 97, 10, 238,
  23. 133, 124, 174, 211, 232, 165, 19, 100, 186, 218, 62, 46, 124, 30, 19, 251, 3, 206, 105, 255, 236, 224, 178, 148,
  24. 103, 44, 132, 71, 83, 28, 221, 27, 189, 72, 44, 59, 253, 139, 232, 234, 14, 112, 121, 43, 142, 193, 179, 140, 200,
  25. 97, 234, 110, 63, 205, 24, 88, 116, 86, 184, 8, 19, 254, 204, 77, 84, 66, 238, 240, 69, 72, 21, 2, 65, 0, 233,
  26. 103, 239, 11, 215, 10, 103, 66, 46, 155, 193, 79, 37, 64, 90, 12, 167, 189, 129, 8, 131, 94, 195, 8, 210, 236, 87,
  27. 158, 140, 2, 82, 105, 80, 253, 13, 26, 140, 202, 194, 117, 59, 57, 197, 108, 50, 20, 46, 89, 248, 132, 120, 30,
  28. 149, 180, 135, 134, 196, 156, 160, 123, 38, 253, 15, 7, 2, 65, 0, 218, 103, 122, 117, 154, 149, 213, 110, 24, 149,
  29. 175, 208, 136, 249, 88, 91, 89, 180, 30, 243, 69, 130, 97, 252, 177, 216, 55, 46, 67, 15, 124, 56, 113, 57, 242,
  30. 233, 185, 193, 254, 218, 76, 165, 184, 16, 109, 190, 93, 195, 227, 37, 58, 110, 243, 142, 152, 252, 226, 91, 59,
  31. 145, 218, 35, 106, 123, 2, 65, 0, 210, 131, 88, 58, 32, 144, 148, 131, 63, 144, 97, 112, 165, 211, 125, 164, 110,
  32. 97, 224, 16, 50, 148, 116, 105, 239, 251, 20, 39, 190, 117, 149, 168, 193, 80, 10, 210, 136, 107, 147, 169, 178,
  33. 106, 47, 162, 159, 36, 78, 141, 253, 52, 85, 54, 152, 165, 131, 154, 204, 151, 203, 178, 103, 126, 212, 95, 2, 65,
  34. 0, 193, 254, 80, 3, 205, 255, 112, 200, 142, 5, 199, 88, 207, 145, 203, 45, 185, 12, 8, 193, 196, 231, 254, 233,
  35. 89, 126, 215, 228, 187, 164, 49, 142, 96, 228, 60, 35, 230, 223, 173, 227, 113, 89, 113, 153, 6, 33, 165, 95, 173,
  36. 143, 15, 204, 37, 130, 111, 217, 143, 165, 193, 207, 215, 150, 197, 169, 2, 64, 7, 37, 152, 14, 232, 168, 102,
  37. 169, 167, 97, 161, 33, 86, 178, 77, 140, 12, 114, 78, 129, 47, 103, 87, 217, 177, 80, 156, 91, 240, 149, 254, 90,
  38. 69, 232, 10, 56, 232, 63, 59, 148, 254, 101, 63, 146, 66, 96, 25, 31, 37, 154, 77, 145, 201, 213, 122, 245, 90,
  39. 251, 219, 42, 131, 248, 148, 151
  40. ])
  41. let expectPkdata =
  42. new Uint8Array([48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0, 48, 129, 137,
  43. 2, 129, 129, 0, 199, 32, 218, 8, 4, 63, 103, 229, 64, 128, 83, 31, 23, 156, 30, 168, 101, 22, 80, 100, 197, 243,
  44. 217, 60, 127, 110, 127, 242, 8, 251, 87, 127, 235, 38, 226, 149, 149, 108, 54, 202, 53, 1, 21, 91, 118, 246, 97,
  45. 93, 147, 117, 162, 71, 215, 70, 9, 175, 205, 241, 230, 187, 64, 170, 154, 67, 67, 254, 71, 1, 114, 10, 91, 195,
  46. 34, 199, 85, 172, 255, 87, 95, 159, 43, 117, 73, 73, 199, 97, 198, 117, 217, 7, 188, 196, 30, 248, 9, 181, 150,
  47. 243, 41, 145, 91, 8, 226, 161, 251, 12, 120, 28, 36, 146, 3, 196, 48, 243, 136, 201, 207, 131, 171, 22, 15, 7, 12,
  48. 172, 135, 196, 30, 93, 2, 3, 1, 0, 1
  49. ])
  50. let skDataBlob: cryptoFramework.DataBlob = { data: skData };
  51. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
  52. try {
  53. let keyPair = rsaGenerator.convertKeySync(null, skDataBlob);
  54. let priKey = keyPair.priKey;
  55. let pubkey = await priKey.getPubKey();
  56. let pkBlob = pubkey.getEncoded();
  57. console.info('pk1 bin data ' + pkBlob.data);
  58. let ret: boolean = compareUint8Array(pkBlob.data, expectPkdata);
  59. console.info('result = ' + ret);
  60. } catch (e) {
  61. console.error(`get pubkey from prikey failed, ${e.code}, ${e.message}`);
  62. }
  63. }

getPubKeySync23+

PhonePC/2in1TabletTVWearable

getPubKeySync(): PubKey

以同步方式,从私钥对象中获取公钥对象。

元服务API: 从API version 23开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

返回值:

展开
类型 说明
PubKey 公钥对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { buffer } from '@kit.ArkTS';
  3. function compareUint8Array(a: Uint8Array, b: Uint8Array): boolean {
  4. let buf1 = buffer.from(a);
  5. let buf2 = buffer.from(b);
  6. if (buf1.compare(buf2, 0, b.length, 0, a.length) == 0) {
  7. return true;
  8. } else {
  9. return false;
  10. }
  11. }
  12. function generateAsyKey() {
  13. let skData =
  14. new Uint8Array([48, 130, 2, 119, 2, 1, 0, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 4, 130, 2, 97, 48,
  15. 130, 2, 93, 2, 1, 0, 2, 129, 129, 0, 199, 32, 218, 8, 4, 63, 103, 229, 64, 128, 83, 31, 23, 156, 30, 168, 101, 22,
  16. 80, 100, 197, 243, 217, 60, 127, 110, 127, 242, 8, 251, 87, 127, 235, 38, 226, 149, 149, 108, 54, 202, 53, 1, 21,
  17. 91, 118, 246, 97, 93, 147, 117, 162, 71, 215, 70, 9, 175, 205, 241, 230, 187, 64, 170, 154, 67, 67, 254, 71, 1,
  18. 114, 10, 91, 195, 34, 199, 85, 172, 255, 87, 95, 159, 43, 117, 73, 73, 199, 97, 198, 117, 217, 7, 188, 196, 30,
  19. 248, 9, 181, 150, 243, 41, 145, 91, 8, 226, 161, 251, 12, 120, 28, 36, 146, 3, 196, 48, 243, 136, 201, 207, 131,
  20. 171, 22, 15, 7, 12, 172, 135, 196, 30, 93, 2, 3, 1, 0, 1, 2, 129, 128, 109, 100, 83, 194, 225, 170, 127, 134, 6,
  21. 184, 56, 113, 181, 67, 179, 231, 232, 152, 168, 147, 163, 215, 193, 56, 165, 252, 235, 86, 232, 174, 67, 52, 103,
  22. 215, 149, 212, 125, 32, 212, 188, 162, 255, 180, 94, 233, 236, 146, 50, 153, 6, 159, 158, 253, 217, 97, 10, 238,
  23. 133, 124, 174, 211, 232, 165, 19, 100, 186, 218, 62, 46, 124, 30, 19, 251, 3, 206, 105, 255, 236, 224, 178, 148,
  24. 103, 44, 132, 71, 83, 28, 221, 27, 189, 72, 44, 59, 253, 139, 232, 234, 14, 112, 121, 43, 142, 193, 179, 140, 200,
  25. 97, 234, 110, 63, 205, 24, 88, 116, 86, 184, 8, 19, 254, 204, 77, 84, 66, 238, 240, 69, 72, 21, 2, 65, 0, 233,
  26. 103, 239, 11, 215, 10, 103, 66, 46, 155, 193, 79, 37, 64, 90, 12, 167, 189, 129, 8, 131, 94, 195, 8, 210, 236, 87,
  27. 158, 140, 2, 82, 105, 80, 253, 13, 26, 140, 202, 194, 117, 59, 57, 197, 108, 50, 20, 46, 89, 248, 132, 120, 30,
  28. 149, 180, 135, 134, 196, 156, 160, 123, 38, 253, 15, 7, 2, 65, 0, 218, 103, 122, 117, 154, 149, 213, 110, 24, 149,
  29. 175, 208, 136, 249, 88, 91, 89, 180, 30, 243, 69, 130, 97, 252, 177, 216, 55, 46, 67, 15, 124, 56, 113, 57, 242,
  30. 233, 185, 193, 254, 218, 76, 165, 184, 16, 109, 190, 93, 195, 227, 37, 58, 110, 243, 142, 152, 252, 226, 91, 59,
  31. 145, 218, 35, 106, 123, 2, 65, 0, 210, 131, 88, 58, 32, 144, 148, 131, 63, 144, 97, 112, 165, 211, 125, 164, 110,
  32. 97, 224, 16, 50, 148, 116, 105, 239, 251, 20, 39, 190, 117, 149, 168, 193, 80, 10, 210, 136, 107, 147, 169, 178,
  33. 106, 47, 162, 159, 36, 78, 141, 253, 52, 85, 54, 152, 165, 131, 154, 204, 151, 203, 178, 103, 126, 212, 95, 2, 65,
  34. 0, 193, 254, 80, 3, 205, 255, 112, 200, 142, 5, 199, 88, 207, 145, 203, 45, 185, 12, 8, 193, 196, 231, 254, 233,
  35. 89, 126, 215, 228, 187, 164, 49, 142, 96, 228, 60, 35, 230, 223, 173, 227, 113, 89, 113, 153, 6, 33, 165, 95, 173,
  36. 143, 15, 204, 37, 130, 111, 217, 143, 165, 193, 207, 215, 150, 197, 169, 2, 64, 7, 37, 152, 14, 232, 168, 102,
  37. 169, 167, 97, 161, 33, 86, 178, 77, 140, 12, 114, 78, 129, 47, 103, 87, 217, 177, 80, 156, 91, 240, 149, 254, 90,
  38. 69, 232, 10, 56, 232, 63, 59, 148, 254, 101, 63, 146, 66, 96, 25, 31, 37, 154, 77, 145, 201, 213, 122, 245, 90,
  39. 251, 219, 42, 131, 248, 148, 151
  40. ])
  41. let expectPkdata =
  42. new Uint8Array([48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0, 48, 129, 137,
  43. 2, 129, 129, 0, 199, 32, 218, 8, 4, 63, 103, 229, 64, 128, 83, 31, 23, 156, 30, 168, 101, 22, 80, 100, 197, 243,
  44. 217, 60, 127, 110, 127, 242, 8, 251, 87, 127, 235, 38, 226, 149, 149, 108, 54, 202, 53, 1, 21, 91, 118, 246, 97,
  45. 93, 147, 117, 162, 71, 215, 70, 9, 175, 205, 241, 230, 187, 64, 170, 154, 67, 67, 254, 71, 1, 114, 10, 91, 195,
  46. 34, 199, 85, 172, 255, 87, 95, 159, 43, 117, 73, 73, 199, 97, 198, 117, 217, 7, 188, 196, 30, 248, 9, 181, 150,
  47. 243, 41, 145, 91, 8, 226, 161, 251, 12, 120, 28, 36, 146, 3, 196, 48, 243, 136, 201, 207, 131, 171, 22, 15, 7, 12,
  48. 172, 135, 196, 30, 93, 2, 3, 1, 0, 1
  49. ])
  50. let skDataBlob: cryptoFramework.DataBlob = { data: skData };
  51. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
  52. try {
  53. let keyPair = rsaGenerator.convertKeySync(null, skDataBlob);
  54. let priKey = keyPair.priKey;
  55. let pubkey = priKey.getPubKeySync();
  56. let pkBlob = pubkey.getEncoded();
  57. console.info('pk1 bin data' + pkBlob.data);
  58. let ret: boolean = compareUint8Array(pkBlob.data, expectPkdata);
  59. console.info('result = ' + ret);
  60. } catch (e) {
  61. console.error(`get pubkey from prikey failed, ${e.code}, ${e.message}`);
  62. }
  63. }

getKeyDataBeta

PhonePC/2in1TabletTVWearable

getKeyData(itemType: AsyKeyDataItem): Promise<Uint8Array>

指定密钥数据项类型,获取对应类型的公钥数据。使用Promise异步回调。

起始版本: 26.0.0

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

参数:

展开
参数名 类型 必填 说明
itemType AsyKeyDataItem 指定密钥数据项类型。

返回值:

展开
类型 说明
Promise<Uint8Array> Promise对象,返回指定密钥数据项类型的私钥数据。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620003 Parameter check failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. async function eccGetKeyDataTest() {
  3. let eccGenerator = cryptoFramework.createAsyKeyGenerator('ECC_BrainPoolP256r1');
  4. let keyPair = await eccGenerator.generateKeyPair();
  5. let returnBlob = await keyPair.priKey.getKeyData(cryptoFramework.AsyKeyDataItem.EC_PRIVATE_04_X_Y_K);
  6. console.info('EC_PRIVATE_04_X_Y_K data: ' + returnBlob);
  7. }

getKeyDataSyncBeta

PhonePC/2in1TabletTVWearable

getKeyDataSync(itemType: AsyKeyDataItem): Uint8Array

同步方法,指定密钥数据项类型,获取对应类型的私钥数据。

起始版本: 26.0.0

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

参数:

展开
参数名 类型 必填 说明
itemType AsyKeyDataItem 指定密钥数据项类型。

返回值:

展开
类型 说明
Uint8Array 返回指定密钥数据项类型的私钥数据。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620003 Parameter check failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. function eccGetKeyDataTest() {
  3. let eccGenerator = cryptoFramework.createAsyKeyGenerator('ECC_BrainPoolP256r1');
  4. let keyPair = eccGenerator.generateKeyPairSync();
  5. let returnBlob = keyPair.priKey.getKeyDataSync(cryptoFramework.AsyKeyDataItem.EC_PRIVATE_04_X_Y_K);
  6. console.info('EC_PRIVATE_04_X_Y_K data: ' + returnBlob);
  7. }

KeyPair

PhonePC/2in1TabletTVWearableLite Wearable

非对称密钥对包含公钥和私钥。

可以通过非对称密钥生成器AsyKeyGeneratorAsyKeyGeneratorBySpec来生成。

说明

KeyPair对象中的pubKey对象和priKey对象是KeyPair对象的成员。当KeyPair对象超出作用域时,其内部的pubKey对象和priKey对象将被析构。

业务方使用时应持有KeyPair对象的引用,而非内部pubKey或priKey对象的引用。

属性

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本9-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
priKey PriKey 私钥。
pubKey PubKey 公钥。

cryptoFramework.createSymKeyGenerator

PhonePC/2in1TabletTVWearableLite Wearable

createSymKeyGenerator(algName: string): SymKeyGenerator

通过指定算法名称获取相应的对称密钥生成器实例。

支持的规格详见对称密钥生成和转换规格

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
algName string

待生成对称密钥生成器的算法名称。

具体取值详见对称密钥生成和转换规格一节中的“字符串参数”。

返回值:

展开
类型 说明
SymKeyGenerator 返回对称密钥生成器的对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

801 This operation is not supported.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('3DES192');

SymKeyGenerator

PhonePC/2in1TabletTVWearable

对称密钥生成器。

在使用该类的方法前,先使用createSymKeyGenerator构建SymKeyGenerator实例。

属性

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.SymKey
  • API版本9-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
algName string 对称密钥生成器指定的算法名称。

generateSymKey

generateSymKey(callback: AsyncCallback<SymKey>): void

获取对称密钥生成器随机生成的密钥。使用callback异步回调。

必须在使用createSymKeyGenerator创建对称密钥生成器后,才能使用本函数。

目前支持使用OpenSSL的RAND_priv_bytes()作为底层能力生成随机密钥。

说明

对于HMAC算法的对称密钥,如果在创建对称密钥生成器时指定了具体哈希算法(如"HMAC|SHA256"),则会随机生成与哈希长度一致的二进制密钥数据(如256位的密钥数据)。如果未指定具体哈希算法,如仅指定"HMAC",则不支持随机生成对称密钥数据,可通过convertKey方式生成对称密钥数据。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.SymKey
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
callback AsyncCallback<SymKey> 回调函数。当生成对称密钥成功,err为undefined,data为获取到的SymKey;否则为错误对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17620001 Memory operation failed.
17620004

Invalid function call.

适用版本:26.0.0+

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('3DES192');
  3. symKeyGenerator.generateSymKey((err, symKey) => {
  4. console.info('Generate symKey result: success, algName:' + symKey.algName);
  5. });

generateSymKey

generateSymKey(): Promise<SymKey>

获取该对称密钥生成器随机生成的密钥。使用Promise异步回调。

必须在使用createSymKeyGenerator创建对称密钥生成器后,才能使用本函数。

目前支持使用OpenSSL的RAND_priv_bytes()作为底层能力生成随机密钥。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.SymKey
  • API版本9-11:SystemCapability.Security.CryptoFramework

返回值:

展开
类型 说明
Promise<SymKey> Promise对象,返回对称密钥SymKey。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17620001 Memory operation failed.
17620004

Invalid function call.

适用版本:26.0.0+

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
  4. symKeyGenerator.generateSymKey()
  5. .then(symKey => {
  6. console.info('Generate symKey result: success, algName: ' + symKey.algName);
  7. }).catch((error: BusinessError) => {
  8. console.error(`Generate symKey failed, ${error.code}, ${error.message}`);
  9. });

generateSymKeySync12+

PhonePC/2in1TabletTVWearable

generateSymKeySync(): SymKey

同步获取对称密钥生成器随机生成的密钥。

必须在使用createSymKeyGenerator创建对称密钥生成器后,才能使用本函数。

目前支持使用OpenSSL的RAND_priv_bytes()作为底层能力生成随机密钥。

说明

对于HMAC算法的对称密钥,如果已经在创建对称密钥生成器时指定了具体哈希算法(如指定"HMAC|SHA256"),则会随机生成与哈希长度一致的二进制密钥数据(如指定"HMAC|SHA256"会随机生成256位的密钥数据)。

如果在创建对称密钥生成器时没有指定具体哈希算法,如仅指定"HMAC",则不支持随机生成对称密钥数据,可通过convertKeySync方式生成对称密钥数据。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.SymKey

返回值:

展开
类型 说明
SymKey 返回对称密钥SymKey。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17620001 Memory operation failed.
17620004

Invalid function call.

适用版本:26.0.0+

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. function testGenerateSymKeySync() {
  3. // 创建SymKeyGenerator实例。
  4. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256');
  5. // 使用密钥生成器随机生成对称密钥。
  6. let key = symKeyGenerator.generateSymKeySync();
  7. let encodedKey = key.getEncoded();
  8. console.info('key hex:' + encodedKey.data);
  9. }

convertKey

convertKey(key: DataBlob, callback: AsyncCallback<SymKey>): void

将指定数据转换为对称密钥。使用callback异步回调。

必须在使用createSymKeyGenerator创建对称密钥生成器后,才能使用本函数。

说明

对于HMAC算法的对称密钥,如果已经在创建对称密钥生成器时指定了具体哈希算法(如指定"HMAC|SHA256"),则需要传入与哈希长度一致的二进制密钥数据(如传入SHA256对应256位的密钥数据)。

如果在创建对称密钥生成器时没有指定具体哈希算法,如仅指定"HMAC",则支持传入长度在[1,4096]范围内(单位为bytes)的任意二进制密钥数据。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.SymKey
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
key DataBlob 指定的对称密钥材料。
callback AsyncCallback<SymKey> 回调函数。当生成对称密钥成功,err为undefined,data为获取到的SymKey;否则为错误对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620003

Parameter check failed.

适用版本:26.0.0+

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. function genKeyMaterialBlob(): cryptoFramework.DataBlob {
  3. let arr = [
  4. 0xba, 0x3d, 0xc2, 0x71, 0x21, 0x1e, 0x30, 0x56,
  5. 0xad, 0x47, 0xfc, 0x5a, 0x46, 0x39, 0xee, 0x7c,
  6. 0xba, 0x3b, 0xc2, 0x71, 0xab, 0xa0, 0x30, 0x72]; // keyLen = 192 (24 bytes)
  7. let keyMaterial = new Uint8Array(arr);
  8. return { data: keyMaterial };
  9. }
  10. function testConvertKey() {
  11. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('3DES192');
  12. let keyMaterialBlob = genKeyMaterialBlob();
  13. symKeyGenerator.convertKey(keyMaterialBlob, (err, symKey) => {
  14. console.info('Convert symKey result: success, algName: ' + symKey.algName);
  15. });
  16. }

convertKey

convertKey(key: DataBlob): Promise<SymKey>

将指定数据转换为对称密钥。使用Promise异步回调。

在使用本函数前,需先通过createSymKeyGenerator创建对称密钥生成器。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.SymKey
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
key DataBlob 指定的密钥材料数据。

返回值:

展开
类型 说明
Promise<SymKey> Promise对象,返回对称密钥SymKey。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620003

Parameter check failed.

适用版本:26.0.0+

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. function genKeyMaterialBlob(): cryptoFramework.DataBlob {
  4. let arr = [
  5. 0xba, 0x3d, 0xc2, 0x71, 0x21, 0x1e, 0x30, 0x56,
  6. 0xad, 0x47, 0xfc, 0x5a, 0x46, 0x39, 0xee, 0x7c,
  7. 0xba, 0x3b, 0xc2, 0x71, 0xab, 0xa0, 0x30, 0x72]; // keyLen = 192 (24 bytes)
  8. let keyMaterial = new Uint8Array(arr);
  9. return { data: keyMaterial };
  10. }
  11. function testConvertKey() {
  12. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('3DES192');
  13. let keyMaterialBlob = genKeyMaterialBlob();
  14. symKeyGenerator.convertKey(keyMaterialBlob)
  15. .then(symKey => {
  16. console.info('Convert symKey result: success, algName:' + symKey.algName);
  17. }).catch((error: BusinessError) => {
  18. console.error(`Convert symKey failed, ${error.code}, ${error.message}`);
  19. });
  20. }

convertKeySync12+

PhonePC/2in1TabletTVWearable

convertKeySync(key: DataBlob): SymKey

将指定数据转换为对称密钥。

必须在使用createSymKeyGenerator创建对称密钥生成器后,才能使用本函数。

说明

对于HMAC算法的对称密钥,如果在创建对称密钥生成器时指定了具体哈希算法(如"HMAC|SHA256"),则需要传入与哈希长度一致的二进制密钥数据(如SHA256对应的256位密钥数据)。如果在创建对称密钥生成器时未指定具体哈希算法,如仅指定"HMAC",则支持传入长度在1到4096字节范围内的任意二进制密钥数据。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.SymKey

参数:

展开
参数名 类型 必填 说明
key DataBlob 指定的对称密钥材料。

返回值:

展开
类型 说明
SymKey 对称密钥。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620003

Parameter check failed.

适用版本:26.0.0+

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { buffer } from '@kit.ArkTS';
  3. function testConvertKeySync() {
  4. // 对称密钥长度为64字节,512比特。
  5. let keyMessage = '87654321abcdefgh87654321abcdefgh87654321abcdefgh87654321abcdefgh';
  6. let keyBlob: cryptoFramework.DataBlob = {
  7. data : new Uint8Array(buffer.from(keyMessage, 'utf-8').buffer)
  8. }
  9. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('HMAC');
  10. let key = symKeyGenerator.convertKeySync(keyBlob);
  11. let encodedKey = key.getEncoded();
  12. console.info('key encoded data: ' + encodedKey.data);
  13. }

cryptoFramework.createAsyKeyGenerator

PhonePC/2in1TabletTVWearableLite Wearable

createAsyKeyGenerator(algName: string): AsyKeyGenerator

通过指定算法名称的字符串,获取相应的非对称密钥生成器实例。

支持的规格详见非对称密钥生成和转换规格

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
algName string 非对称密钥生成支持的算法名。详见非对称密钥生成和转换规格中的字符串参数。

返回值:

展开
类型 说明
AsyKeyGenerator 返回非对称密钥生成器。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

801 This operation is not supported.
17620001 Memory operation failed.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('ECC256');

AsyKeyGenerator

PhonePC/2in1TabletTVWearable

非对称密钥生成器。在使用该类的方法前,需要先使用createAsyKeyGenerator方法构建一个AsyKeyGenerator实例。

属性

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本9-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
algName string 非对称密钥生成器指定的算法名称。

generateKeyPair

generateKeyPair(callback: AsyncCallback<KeyPair>): void

获取非对称密钥生成器随机生成的密钥。使用callback异步回调。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
callback AsyncCallback<KeyPair> 回调函数。当获取非对称密钥成功,err为undefined,data为获取到的KeyPair;否则为错误对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

Incorrect parameter types;

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('ECC256');
  3. asyKeyGenerator.generateKeyPair((err, keyPair) => {
  4. if (err) {
  5. console.error(`generateKeyPair failed, errCode: ${err.code}, errMsg: ${err.message}`);
  6. return;
  7. }
  8. console.info('generateKeyPair result: success.');
  9. })

generateKeyPair

generateKeyPair(): Promise<KeyPair>

获取非对称密钥生成器随机生成的密钥。使用Promise异步回调。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本9-11:SystemCapability.Security.CryptoFramework

返回值:

展开
类型 说明
Promise<KeyPair> Promise对象,返回非对称密钥KeyPair。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('ECC256');
  4. let keyGenPromise = asyKeyGenerator.generateKeyPair();
  5. keyGenPromise.then(keyPair => {
  6. console.info('generateKeyPair result: success.');
  7. }).catch((error: BusinessError) => {
  8. console.error(`generateKeyPair failed, ${error.code}, ${error.message}`);
  9. });

generateKeyPairSync12+

PhonePC/2in1TabletTVWearable

generateKeyPairSync(): KeyPair

同步获取非对称密钥生成器随机生成的密钥。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

返回值:

展开
类型 说明
KeyPair 非对称密钥。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('ECC256');
  3. try {
  4. let keyPairData = asyKeyGenerator.generateKeyPairSync();
  5. if (keyPairData != null) {
  6. console.info('[Sync]: key pair result: success.');
  7. } else {
  8. console.error('[Sync]: get key pair result: fail.');
  9. }
  10. } catch (e) {
  11. console.error(`sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
  12. }

convertKey

convertKey(pubKey: DataBlob | null, priKey: DataBlob | null, callback: AsyncCallback<KeyPair>): void

解析密钥数据,生成非对称密钥对象。使用callback异步回调。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
pubKey DataBlob | null10+ 指定的公钥材料。如果公钥不需要转换,请传入null。API 10之前只支持DataBlob, API 10之后增加支持null。
priKey DataBlob | null10+ 指定的私钥材料。如果私钥不需要转换,请传入null。API 10之前只支持DataBlob, API 10之后增加支持null。
callback AsyncCallback<KeyPair> 回调函数。当获取非对称密钥成功,err为undefined,data为获取到的KeyPair;否则为错误对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. let pubKeyArray =
  3. new Uint8Array([48, 89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7, 3, 66, 0, 4,
  4. 83, 96, 142, 9, 86, 214, 126, 106, 247, 233, 92, 125, 4, 128, 138, 105, 246, 162, 215, 71, 81, 58, 202, 121, 26,
  5. 105, 211, 55, 130, 45, 236, 143, 55, 16, 248, 75, 167, 160, 167, 106, 2, 152, 243, 44, 68, 66, 0, 167, 99, 92, 235,
  6. 215, 159, 239, 28, 106, 124, 171, 34, 145, 124, 174, 57, 92]);
  7. let priKeyArray =
  8. new Uint8Array([48, 49, 2, 1, 1, 4, 32, 115, 56, 137, 35, 207, 0, 60, 191, 90, 61, 136, 105, 210, 16, 27, 4, 171, 57,
  9. 10, 61, 123, 40, 189, 28, 34, 207, 236, 22, 45, 223, 10, 189, 160, 10, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7]);
  10. let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyArray }; // 公钥二进制数据。
  11. let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyArray }; // 私钥二进制数据。
  12. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('ECC256');
  13. asyKeyGenerator.convertKey(pubKeyBlob, priKeyBlob, (err, keyPair) => {
  14. if (err) {
  15. console.error(`convertKey failed, errCode: ${err.code}, errMsg: ${err.message}`);
  16. return;
  17. }
  18. console.info('convertKey result: success.');
  19. });

convertKey

convertKey(pubKey: DataBlob | null, priKey: DataBlob | null): Promise<KeyPair>

解析密钥数据,生成非对称密钥对象。使用Promise异步回调。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
pubKey DataBlob | null10+ 指定的公钥材料。如果公钥不需要转换,请传入null。API 10之前只支持DataBlob, API 10之后增加支持null。
priKey DataBlob | null10+ 指定的私钥材料。如果私钥不需要转换,请传入null。API 10之前只支持DataBlob, API 10之后增加支持null。

返回值:

展开
类型 说明
Promise<KeyPair> Promise对象,返回非对称密钥KeyPair。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. let pubKeyArray =
  4. new Uint8Array([48, 89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7, 3, 66, 0, 4,
  5. 83, 96, 142, 9, 86, 214, 126, 106, 247, 233, 92, 125, 4, 128, 138, 105, 246, 162, 215, 71, 81, 58, 202, 121, 26,
  6. 105, 211, 55, 130, 45, 236, 143, 55, 16, 248, 75, 167, 160, 167, 106, 2, 152, 243, 44, 68, 66, 0, 167, 99, 92, 235,
  7. 215, 159, 239, 28, 106, 124, 171, 34, 145, 124, 174, 57, 92]);
  8. let priKeyArray =
  9. new Uint8Array([48, 49, 2, 1, 1, 4, 32, 115, 56, 137, 35, 207, 0, 60, 191, 90, 61, 136, 105, 210, 16, 27, 4, 171, 57,
  10. 10, 61, 123, 40, 189, 28, 34, 207, 236, 22, 45, 223, 10, 189, 160, 10, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7]);
  11. let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyArray }; // 公钥二进制数据。
  12. let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyArray }; // 私钥二进制数据。
  13. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('ECC256');
  14. let keyGenPromise = asyKeyGenerator.convertKey(pubKeyBlob, priKeyBlob);
  15. keyGenPromise.then(keyPair => {
  16. console.info('convertKey result: success.');
  17. }).catch((error: BusinessError) => {
  18. console.error(`convertKey failed, errCode: ${error.code}, errMsg: ${error.message}`);
  19. });

convertKeySync12+

PhonePC/2in1TabletTVWearable

convertKeySync(pubKey: DataBlob | null, priKey: DataBlob | null): KeyPair

解析密钥数据,生成非对称密钥对象。使用同步方法。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

参数:

展开
参数名 类型 必填 说明
pubKey DataBlob | null10+ 指定公钥材料。如果公钥无需转换,请传入null。API 10前仅支持DataBlob,API 10起支持传入null。
priKey DataBlob | null10+ 指定私钥材料。如果私钥无需转换,请传入null。API 10前仅支持DataBlob,API 10起支持传入null。

返回值:

展开
类型 说明
KeyPair 非对称密钥。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. let pubKeyArray =
  3. new Uint8Array([48, 89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7, 3, 66, 0, 4,
  4. 83, 96, 142, 9, 86, 214, 126, 106, 247, 233, 92, 125, 4, 128, 138, 105, 246, 162, 215, 71, 81, 58, 202, 121, 26,
  5. 105, 211, 55, 130, 45, 236, 143, 55, 16, 248, 75, 167, 160, 167, 106, 2, 152, 243, 44, 68, 66, 0, 167, 99, 92, 235,
  6. 215, 159, 239, 28, 106, 124, 171, 34, 145, 124, 174, 57, 92]);
  7. let priKeyArray =
  8. new Uint8Array([48, 49, 2, 1, 1, 4, 32, 115, 56, 137, 35, 207, 0, 60, 191, 90, 61, 136, 105, 210, 16, 27, 4, 171, 57,
  9. 10, 61, 123, 40, 189, 28, 34, 207, 236, 22, 45, 223, 10, 189, 160, 10, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7]);
  10. let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyArray }; // 公钥二进制数据。
  11. let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyArray }; // 私钥二进制数据。
  12. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('ECC256');
  13. try {
  14. let keyPairData = asyKeyGenerator.convertKeySync(pubKeyBlob, priKeyBlob);
  15. if (keyPairData != null) {
  16. console.info('[Sync]: key pair result: success.');
  17. } else {
  18. console.error('[Sync]: convert key pair result: fail.');
  19. }
  20. } catch (e) {
  21. console.error(`sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
  22. }

convertPemKey12+

PhonePC/2in1TabletTVWearable

convertPemKey(pubKey: string | null, priKey: string | null): Promise<KeyPair>

解析密钥数据,生成非对称密钥对象。使用Promise异步回调。

说明
  1. 当调用convertPemKey方法将外来字符串数据转换为算法库非对称密钥对象时,公钥应满足ASN.1语法、X.509规范、PEM编码格式,私钥应满足ASN.1语法、PKCS #8规范、PEM编码格式。
  2. convertPemKey方法中,公钥和私钥字符串数据为非必选项,可单独传入公钥或私钥的数据,生成对应只包含公钥或私钥的KeyPair对象。
  3. convertPemKey方法将外来字符串数据转换为算法库非对称密钥对象时,不会校验生成的密钥对象的规格与创建非对称密钥生成器时指定的密钥规格是否一致。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

参数:

展开
参数名 类型 必填 说明
pubKey string | null 指定的公钥材料。如果公钥不需要转换,请传入null。
priKey string | null

指定的私钥材料。如果私钥不需要转换,请传入null。

说明:公钥和私钥材料不能同时为null或空字符串。

返回值:

展开
类型 说明
Promise<KeyPair> Promise对象,返回非对称密钥KeyPair。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. let priKeyPkcs1Str1024: string =
  4. '-----BEGIN RSA PRIVATE KEY-----\n'
  5. + 'MIICXQIBAAKBgQCwIN3mr21+N96ToxnVnaS+xyK9cNRAHiHGgrbjHw6RAj3V+l+W\n'
  6. + 'Y68IhIe3DudVlzE9oMjeOQwkMkq//HCxNlIlFR6O6pa0mrXSwPRE7YKG97CeKk2g\n'
  7. + 'YOS8YEh8toAvm7xKbiLkXuuMlxrjP2j/mb5iI/UASFSPZiQ/IyxDr0AQaQIDAQAB\n'
  8. + 'AoGAEvBFzBNa+7J4PXnRQlYEK/tvsd0bBZX33ceacMubHl6WVZbphltLq+fMTBPP\n'
  9. + 'LjXmtpC+aJ7Lvmyl+wTi/TsxE9vxW5JnbuRT48rnZ/Xwq0eozDeEeIBRrpsr7Rvr\n'
  10. + '7ctrgzr4m4yMHq9aDgpxj8IR7oHkfwnmWr0wM3FuiVlj650CQQDineeNZ1hUTkj4\n'
  11. + 'D3O+iCi3mxEVEeJrpqrmSFolRMb+iozrIRKuJlgcOs+Gqi2fHfOTTL7LkpYe8SVg\n'
  12. + 'e3JxUdVLAkEAxvcZXk+byMFoetrnlcMR13VHUpoVeoV9qkv6CAWLlbMdgf7uKmgp\n'
  13. + 'a1Yp3QPDNQQqkPvrqtfR19JWZ4uy1qREmwJALTU3BjyBoH/liqb6fh4HkWk75Som\n'
  14. + 'MzeSjFIOubSYxhq5tgZpBZjcpvUMhV7Zrw54kwASZ+YcUJvmyvKViAm9NQJBAKF7\n'
  15. + 'DyXSKrem8Ws0m1ybM7HQx5As6l3EVhePDmDQT1eyRbKp+xaD74nkJpnwYdB3jyyY\n'
  16. + 'qc7A1tj5J5NmeEFolR0CQQCn76Xp8HCjGgLHw9vg7YyIL28y/XyfFyaZAzzK+Yia\n'
  17. + 'akNwQ6NeGtXSsuGCcyyfpacHp9xy8qXQNKSkw03/5vDO\n'
  18. + '-----END RSA PRIVATE KEY-----\n';
  19. let publicPkcs1Str1024: string =
  20. '-----BEGIN RSA PUBLIC KEY-----\n'
  21. + 'MIGJAoGBALAg3eavbX433pOjGdWdpL7HIr1w1EAeIcaCtuMfDpECPdX6X5ZjrwiE\n'
  22. + 'h7cO51WXMT2gyN45DCQySr/8cLE2UiUVHo7qlrSatdLA9ETtgob3sJ4qTaBg5Lxg\n'
  23. + 'SHy2gC+bvEpuIuRe64yXGuM/aP+ZvmIj9QBIVI9mJD8jLEOvQBBpAgMBAAE=\n'
  24. + '-----END RSA PUBLIC KEY-----\n';
  25. async function TestConvertPemKeyByPromise() {
  26. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
  27. asyKeyGenerator.convertPemKey(publicPkcs1Str1024, priKeyPkcs1Str1024)
  28. .then(keyPair => {
  29. console.info('convertPemKey result: success.');
  30. }).catch((error: BusinessError) => {
  31. console.error(`convertPemKey failed: errCode: ${error.code}, errMsg: ${error.message}`);
  32. });
  33. }

convertPemKey18+

PhonePC/2in1TabletTVWearable

convertPemKey(pubKey: string | null, priKey: string | null, password: string): Promise<KeyPair>

解析密钥数据,生成非对称密钥对象。支持加密的私钥,同步传入私钥口令解密私钥。使用Promise异步回调。

说明
  1. 当调用convertPemKey方法将外来字符串数据转换为算法库非对称密钥对象时,公钥应满足ASN.1语法、X.509规范、PEM编码格式,私钥应满足ASN.1语法、PKCS #8规范、PEM编码格式。
  2. convertPemKey方法中,公钥和私钥字符串数据为非必选项,可单独传入公钥或私钥的数据,生成对应只包含公钥或私钥的KeyPair对象。
  3. convertPemKey方法将外来字符串数据转换为算法库非对称密钥对象时,不会校验生成的密钥对象的规格与创建非对称密钥生成器时指定的密钥规格是否一致。
  4. password为口令,传入后可以解密加密后的私钥。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

参数:

展开
参数名 类型 必填 说明
pubKey string | null 指定的公钥材料。如果公钥不需要转换,请传入null。
priKey string | null

指定的私钥材料。如果私钥不需要转换,请传入null。

说明:公钥和私钥材料不能同时为null或空字符串。

password string 指定口令,用于解密私钥。

返回值:

展开
类型 说明
Promise<KeyPair> Promise对象,返回非对称密钥KeyPair。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. let priKeyPkcs1EncodingStr: string =
  4. '-----BEGIN RSA PRIVATE KEY-----\n'
  5. + 'Proc-Type: 4,ENCRYPTED\n'
  6. + 'DEK-Info: AES-128-CBC,815A066131BF05CF87CE610A59CC69AE\n\n'
  7. + '7Jd0vmOmYGFZ2yRY8fqRl3+6rQlFtNcMILvcb5KWHDSrxA0ULmJE7CW0DSRikHoA\n'
  8. + 't0KgafhYXeQXh0dRy9lvVRAFSLHCLJVjchx90V7ZSivBFEq7+iTozVp4AlbgYsJP\n'
  9. + 'vx/1sfZD2WAcyMJ7IDmJyft7xnpVSXsyWGTT4f3eaHJIh1dqjwrso7ucAW0FK6rp\n'
  10. + '/TONyOoXNfXtRbVtxNyCWBxt4HCSclDZFvS9y8fz9ZwmCUV7jei/YdzyQI2wnE13\n'
  11. + 'W8cKlpzRFL6BWi8XPrUtAw5MWeHBAPUgPWMfcmiaeyi5BJFhQCrHLi+Gj4EEJvp7\n'
  12. + 'mP5cbnQAx6+paV5z9m71SKrI/WSc4ixsYYdVmlL/qwAK9YliFfoPl030YJWW6rFf\n'
  13. + 'T7J9BUlHGUJ0RB2lURNNLakM+UZRkeE9TByzCzgTxuQtyv5Lwsh2mAk3ia5x0kUO\n'
  14. + 'LHg3Eoabhdh+YZA5hHaxnpF7VjspB78E0F9Btq+A41rSJ6zDOdToHey4MJ2nxdey\n'
  15. + 'Z3bi81TZ6Fp4IuROrvZ2B/Xl3uNKR7n+AHRKnaAO87ywzyltvjwSh2y3xhJueiRs\n'
  16. + 'BiYkyL3/fnocD3pexTdN6h3JgQGgO5GV8zw/NrxA85mw8o9im0HreuFObmNj36T9\n'
  17. + 'k5N+R/QIXW83cIQOLaWK1ThYcluytf0tDRiMoKqULiaA6HvDMigExLxuhCtnoF8I\n'
  18. + 'iOLN1cPdEVQjzwDHLqXP2DbWW1z9iRepLZlEm1hLRLEmOrTGKezYupVv306SSa6J\n'
  19. + 'OA55lAeXMbyjFaYCr54HWrpt4NwNBX1efMUURc+1LcHpzFrBTTLbfjIyq6as49pH\n'
  20. + '-----END RSA PRIVATE KEY-----\n'
  21. async function TestConvertPemKeyByPromise() {
  22. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
  23. asyKeyGenerator.convertPemKey(null, priKeyPkcs1EncodingStr, '123456')
  24. .then(keyPair => {
  25. console.info('convertPemKey result: success.');
  26. }).catch((error: BusinessError) => {
  27. console.error(`convertPemKey failed: errCode: ${error.code}, errMsg: ${error.message}`);
  28. });
  29. }

convertPemKeySync12+

PhonePC/2in1TabletTVWearable

convertPemKeySync(pubKey: string | null, priKey: string | null): KeyPair

同步获取指定数据,生成非对称密钥。

说明

convertPemKeySync接口与convertPemKey接口注意事项相同,见convertPemKey接口说明。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

参数:

展开
参数名 类型 必填 说明
pubKey string | null 指定的公钥材料。如果公钥不需要转换,请传入null。
priKey string | null

指定私钥材料。私钥无需转换时,请传入null。

说明:公钥和私钥材料不能同时为null或空字符串。

返回值:

展开
类型 说明
KeyPair 非对称密钥。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. let priKeyPkcs1Str1024: string =
  3. '-----BEGIN RSA PRIVATE KEY-----\n'
  4. + 'MIICXQIBAAKBgQCwIN3mr21+N96ToxnVnaS+xyK9cNRAHiHGgrbjHw6RAj3V+l+W\n'
  5. + 'Y68IhIe3DudVlzE9oMjeOQwkMkq//HCxNlIlFR6O6pa0mrXSwPRE7YKG97CeKk2g\n'
  6. + 'YOS8YEh8toAvm7xKbiLkXuuMlxrjP2j/mb5iI/UASFSPZiQ/IyxDr0AQaQIDAQAB\n'
  7. + 'AoGAEvBFzBNa+7J4PXnRQlYEK/tvsd0bBZX33ceacMubHl6WVZbphltLq+fMTBPP\n'
  8. + 'LjXmtpC+aJ7Lvmyl+wTi/TsxE9vxW5JnbuRT48rnZ/Xwq0eozDeEeIBRrpsr7Rvr\n'
  9. + '7ctrgzr4m4yMHq9aDgpxj8IR7oHkfwnmWr0wM3FuiVlj650CQQDineeNZ1hUTkj4\n'
  10. + 'D3O+iCi3mxEVEeJrpqrmSFolRMb+iozrIRKuJlgcOs+Gqi2fHfOTTL7LkpYe8SVg\n'
  11. + 'e3JxUdVLAkEAxvcZXk+byMFoetrnlcMR13VHUpoVeoV9qkv6CAWLlbMdgf7uKmgp\n'
  12. + 'a1Yp3QPDNQQqkPvrqtfR19JWZ4uy1qREmwJALTU3BjyBoH/liqb6fh4HkWk75Som\n'
  13. + 'MzeSjFIOubSYxhq5tgZpBZjcpvUMhV7Zrw54kwASZ+YcUJvmyvKViAm9NQJBAKF7\n'
  14. + 'DyXSKrem8Ws0m1ybM7HQx5As6l3EVhePDmDQT1eyRbKp+xaD74nkJpnwYdB3jyyY\n'
  15. + 'qc7A1tj5J5NmeEFolR0CQQCn76Xp8HCjGgLHw9vg7YyIL28y/XyfFyaZAzzK+Yia\n'
  16. + 'akNwQ6NeGtXSsuGCcyyfpacHp9xy8qXQNKSkw03/5vDO\n'
  17. + '-----END RSA PRIVATE KEY-----\n';
  18. let publicPkcs1Str1024: string =
  19. '-----BEGIN RSA PUBLIC KEY-----\n'
  20. + 'MIGJAoGBALAg3eavbX433pOjGdWdpL7HIr1w1EAeIcaCtuMfDpECPdX6X5ZjrwiE\n'
  21. + 'h7cO51WXMT2gyN45DCQySr/8cLE2UiUVHo7qlrSatdLA9ETtgob3sJ4qTaBg5Lxg\n'
  22. + 'SHy2gC+bvEpuIuRe64yXGuM/aP+ZvmIj9QBIVI9mJD8jLEOvQBBpAgMBAAE=\n'
  23. + '-----END RSA PUBLIC KEY-----\n';
  24. function TestConvertPemKeyBySync() {
  25. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
  26. try {
  27. let keyPairData = asyKeyGenerator.convertPemKeySync(publicPkcs1Str1024, priKeyPkcs1Str1024);
  28. if (keyPairData != null) {
  29. console.info('[Sync]: convert pem key pair result: success.');
  30. } else {
  31. console.error('[Sync]: convert pem key pair result: fail.');
  32. }
  33. } catch (e) {
  34. console.error(`Sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
  35. }
  36. }

convertPemKeySync18+

PhonePC/2in1TabletTVWearable

convertPemKeySync(pubKey: string | null, priKey: string | null, password: string): KeyPair

解析密钥数据,生成非对称密钥对象。支持加密的私钥,同步传入私钥口令解密私钥。使用同步方法。

说明

convertPemKeySync接口与convertPemKey接口注意事项相同,见convertPemKey接口说明。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

参数:

展开
参数名 类型 必填 说明
pubKey string | null 指定的公钥材料。如果公钥不需要转换,请传入null。
priKey string | null 指定私钥材料。若无需转换,请传入 null。注意:公钥与私钥材料不可同时为 null。
password string 指定口令,用于解密私钥。

返回值:

展开
类型 说明
KeyPair 非对称密钥。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. let priKeyPkcs1EncodingStr: string =
  3. '-----BEGIN RSA PRIVATE KEY-----\n'
  4. + 'Proc-Type: 4,ENCRYPTED\n'
  5. + 'DEK-Info: AES-128-CBC,815A066131BF05CF87CE610A59CC69AE\n\n'
  6. + '7Jd0vmOmYGFZ2yRY8fqRl3+6rQlFtNcMILvcb5KWHDSrxA0ULmJE7CW0DSRikHoA\n'
  7. + 't0KgafhYXeQXh0dRy9lvVRAFSLHCLJVjchx90V7ZSivBFEq7+iTozVp4AlbgYsJP\n'
  8. + 'vx/1sfZD2WAcyMJ7IDmJyft7xnpVSXsyWGTT4f3eaHJIh1dqjwrso7ucAW0FK6rp\n'
  9. + '/TONyOoXNfXtRbVtxNyCWBxt4HCSclDZFvS9y8fz9ZwmCUV7jei/YdzyQI2wnE13\n'
  10. + 'W8cKlpzRFL6BWi8XPrUtAw5MWeHBAPUgPWMfcmiaeyi5BJFhQCrHLi+Gj4EEJvp7\n'
  11. + 'mP5cbnQAx6+paV5z9m71SKrI/WSc4ixsYYdVmlL/qwAK9YliFfoPl030YJWW6rFf\n'
  12. + 'T7J9BUlHGUJ0RB2lURNNLakM+UZRkeE9TByzCzgTxuQtyv5Lwsh2mAk3ia5x0kUO\n'
  13. + 'LHg3Eoabhdh+YZA5hHaxnpF7VjspB78E0F9Btq+A41rSJ6zDOdToHey4MJ2nxdey\n'
  14. + 'Z3bi81TZ6Fp4IuROrvZ2B/Xl3uNKR7n+AHRKnaAO87ywzyltvjwSh2y3xhJueiRs\n'
  15. + 'BiYkyL3/fnocD3pexTdN6h3JgQGgO5GV8zw/NrxA85mw8o9im0HreuFObmNj36T9\n'
  16. + 'k5N+R/QIXW83cIQOLaWK1ThYcluytf0tDRiMoKqULiaA6HvDMigExLxuhCtnoF8I\n'
  17. + 'iOLN1cPdEVQjzwDHLqXP2DbWW1z9iRepLZlEm1hLRLEmOrTGKezYupVv306SSa6J\n'
  18. + 'OA55lAeXMbyjFaYCr54HWrpt4NwNBX1efMUURc+1LcHpzFrBTTLbfjIyq6as49pH\n'
  19. + '-----END RSA PRIVATE KEY-----\n'
  20. function TestConvertPemKeyBySync() {
  21. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
  22. try {
  23. let keyPairData = asyKeyGenerator.convertPemKeySync(null, priKeyPkcs1EncodingStr, '123456');
  24. if (keyPairData != null) {
  25. console.info('[Sync]: convert pem key pair result: success.');
  26. } else {
  27. console.error('[Sync]: convert pem key pair result: fail.');
  28. }
  29. } catch (e) {
  30. console.error(`Sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
  31. }
  32. }

cryptoFramework.createAsyKeyGeneratorBySpec10+

PhonePC/2in1TabletTVWearableLite Wearable

createAsyKeyGeneratorBySpec(asyKeySpec: AsyKeySpec): AsyKeyGeneratorBySpec

指定密钥参数,获取AsyKeyGeneratorBySpec非对称密钥生成器实例。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
asyKeySpec AsyKeySpec

密钥参数。非对称密钥生成器根据指定的这些参数生成公/私钥。

支持的规格详见非对称密钥生成和转换规格

返回值:

展开
类型 说明
AsyKeyGeneratorBySpec 返回AsyKeyGeneratorBySpec非对称密钥生成器实例。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

801 This operation is not supported.
17620001 Memory operation failed.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. // 配置DSA1024公钥和私钥中包含的公共参数。
  3. function genDsa1024CommonSpecBigE() {
  4. let dsaCommonSpec: cryptoFramework.DSACommonParamsSpec = {
  5. algName: 'DSA',
  6. specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC,
  7. p: BigInt('0xed1501551b8ab3547f6355ffdc2913856ddeca198833dbd04f020e5f25e47c50e0b3894f7690a0d2ea5ed3a7be25c54292a698e1f086eb3a97deb4dbf04fcad2dafd94a9f35c3ae338ab35477e16981ded6a5b13d5ff20bf55f1b262303ad3a80af71aa6aa2354d20e9c82647664bdb6b333b7bea0a5f49d55ca40bc312a1729'),
  8. q: BigInt('0xd23304044019d5d382cfeabf351636c7ab219694ac845051f60b047b'),
  9. g: BigInt('0x2cc266d8bd33c3009bd67f285a257ba74f0c3a7e12b722864632a0ac3f2c17c91c2f3f67eb2d57071ef47aaa8f8e17a21ad2c1072ee1ce281362aad01dcbcd3876455cd17e1dd55d4ed36fa011db40f0bbb8cba01d066f392b5eaa9404bfcb775f2196a6bc20eeec3db32d54e94d87ecdb7a0310a5a017c5cdb8ac78597778bd'),
  10. }
  11. return dsaCommonSpec;
  12. }
  13. // 设置DSA1024密钥对中包含的全参数。
  14. function genDsa1024KeyPairSpecBigE() {
  15. let dsaCommonSpec = genDsa1024CommonSpecBigE();
  16. let dsaKeyPairSpec: cryptoFramework.DSAKeyPairSpec = {
  17. algName: 'DSA',
  18. specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC,
  19. params: dsaCommonSpec,
  20. sk: BigInt('0xa2dd2adb2d11392c2541930f61f1165c370aabd2d78d00342e0a2fd9'),
  21. pk: BigInt('0xae6b5d5042e758f3fc9a02d009d896df115811a75b5f7b382d8526270dbb3c029403fafb8573ba4ef0314ea86f09d01e82a14d1ebb67b0c331f41049bd6b1842658b0592e706a5e4d20c14b67977e17df7bdd464cce14b5f13bae6607760fcdf394e0b73ac70aaf141fa4dafd736bd0364b1d6e6c0d7683a5de6b9221e7f2d6b'),
  22. }
  23. return dsaKeyPairSpec;
  24. }
  25. let asyKeyPairSpec = genDsa1024KeyPairSpecBigE(); // JS输入必须是大端格式的正数。
  26. let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);

AsyKeyGeneratorBySpec10+

PhonePC/2in1TabletTVWearable

AsyKeyGeneratorBySpec非对称密钥生成器。在使用该类的方法前,需要先使用createAsyKeyGeneratorBySpec()方法构建一个AsyKeyGeneratorBySpec实例。

属性

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
algName string 非对称密钥生成器的算法名。

generateKeyPair10+

generateKeyPair(callback: AsyncCallback<KeyPair>): void

获取非对称密钥生成器生成的密钥。使用callback异步回调。

当使用COMMON_PARAMS_SPEC类型的密钥参数来创建密钥生成器时,可以得到随机生成的密钥对;当使用KEY_PAIR_SPEC类型的密钥参数来创建密钥生成器时,可以得到各项数据与密钥参数一致的密钥对。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
callback AsyncCallback<KeyPair> 回调函数。当获取非对称密钥成功,err为undefined,data为获取到的KeyPair;否则为错误对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

Incorrect parameter types;

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. // 配置DSA1024公钥和私钥中包含的公共参数。
  3. function genDsa1024CommonSpecBigE() {
  4. let dsaCommonSpec: cryptoFramework.DSACommonParamsSpec = {
  5. algName: 'DSA',
  6. specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC,
  7. p: BigInt('0xed1501551b8ab3547f6355ffdc2913856ddeca198833dbd04f020e5f25e47c50e0b3894f7690a0d2ea5ed3a7be25c54292a698e1f086eb3a97deb4dbf04fcad2dafd94a9f35c3ae338ab35477e16981ded6a5b13d5ff20bf55f1b262303ad3a80af71aa6aa2354d20e9c82647664bdb6b333b7bea0a5f49d55ca40bc312a1729'),
  8. q: BigInt('0xd23304044019d5d382cfeabf351636c7ab219694ac845051f60b047b'),
  9. g: BigInt('0x2cc266d8bd33c3009bd67f285a257ba74f0c3a7e12b722864632a0ac3f2c17c91c2f3f67eb2d57071ef47aaa8f8e17a21ad2c1072ee1ce281362aad01dcbcd3876455cd17e1dd55d4ed36fa011db40f0bbb8cba01d066f392b5eaa9404bfcb775f2196a6bc20eeec3db32d54e94d87ecdb7a0310a5a017c5cdb8ac78597778bd'),
  10. }
  11. return dsaCommonSpec;
  12. }
  13. // 设置DSA1024密钥对中包含的全参数。
  14. function genDsa1024KeyPairSpecBigE() {
  15. let dsaCommonSpec = genDsa1024CommonSpecBigE();
  16. let dsaKeyPairSpec: cryptoFramework.DSAKeyPairSpec = {
  17. algName: 'DSA',
  18. specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC,
  19. params: dsaCommonSpec,
  20. sk: BigInt('0xa2dd2adb2d11392c2541930f61f1165c370aabd2d78d00342e0a2fd9'),
  21. pk: BigInt('0xae6b5d5042e758f3fc9a02d009d896df115811a75b5f7b382d8526270dbb3c029403fafb8573ba4ef0314ea86f09d01e82a14d1ebb67b0c331f41049bd6b1842658b0592e706a5e4d20c14b67977e17df7bdd464cce14b5f13bae6607760fcdf394e0b73ac70aaf141fa4dafd736bd0364b1d6e6c0d7683a5de6b9221e7f2d6b'),
  22. }
  23. return dsaKeyPairSpec;
  24. }
  25. function testGenerateKeyPair() {
  26. let asyKeyPairSpec = genDsa1024KeyPairSpecBigE(); // JS输入必须是大端格式的正数。
  27. let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
  28. asyKeyGeneratorBySpec.generateKeyPair((err, keyPair) => {
  29. if (err) {
  30. console.error(`generateKeyPair failed, errCode: ${err.code}, errMsg: ${err.message}`);
  31. return;
  32. }
  33. console.info('generateKeyPair result: success.');
  34. })
  35. }

generateKeyPair10+

generateKeyPair(): Promise<KeyPair>

获取该非对称密钥生成器生成的密钥。使用Promise异步回调。

当使用COMMON_PARAMS_SPEC类型的密钥参数来创建密钥生成器时,可以得到随机生成的密钥对;当使用KEY_PAIR_SPEC类型的密钥参数来创建密钥生成器时,可以得到各项数据与密钥参数一致的密钥对。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework

返回值:

展开
类型 说明
Promise<KeyPair> Promise对象,返回非对称密钥KeyPair。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. // 配置DSA1024公钥和私钥中包含的公共参数。
  4. function genDsa1024CommonSpecBigE() {
  5. let dsaCommonSpec: cryptoFramework.DSACommonParamsSpec = {
  6. algName: 'DSA',
  7. specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC,
  8. p: BigInt('0xed1501551b8ab3547f6355ffdc2913856ddeca198833dbd04f020e5f25e47c50e0b3894f7690a0d2ea5ed3a7be25c54292a698e1f086eb3a97deb4dbf04fcad2dafd94a9f35c3ae338ab35477e16981ded6a5b13d5ff20bf55f1b262303ad3a80af71aa6aa2354d20e9c82647664bdb6b333b7bea0a5f49d55ca40bc312a1729'),
  9. q: BigInt('0xd23304044019d5d382cfeabf351636c7ab219694ac845051f60b047b'),
  10. g: BigInt('0x2cc266d8bd33c3009bd67f285a257ba74f0c3a7e12b722864632a0ac3f2c17c91c2f3f67eb2d57071ef47aaa8f8e17a21ad2c1072ee1ce281362aad01dcbcd3876455cd17e1dd55d4ed36fa011db40f0bbb8cba01d066f392b5eaa9404bfcb775f2196a6bc20eeec3db32d54e94d87ecdb7a0310a5a017c5cdb8ac78597778bd'),
  11. }
  12. return dsaCommonSpec;
  13. }
  14. // 设置DSA1024密钥对中包含的全参数。
  15. function genDsa1024KeyPairSpecBigE() {
  16. let dsaCommonSpec = genDsa1024CommonSpecBigE();
  17. let dsaKeyPairSpec: cryptoFramework.DSAKeyPairSpec = {
  18. algName: 'DSA',
  19. specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC,
  20. params: dsaCommonSpec,
  21. sk: BigInt('0xa2dd2adb2d11392c2541930f61f1165c370aabd2d78d00342e0a2fd9'),
  22. pk: BigInt('0xae6b5d5042e758f3fc9a02d009d896df115811a75b5f7b382d8526270dbb3c029403fafb8573ba4ef0314ea86f09d01e82a14d1ebb67b0c331f41049bd6b1842658b0592e706a5e4d20c14b67977e17df7bdd464cce14b5f13bae6607760fcdf394e0b73ac70aaf141fa4dafd736bd0364b1d6e6c0d7683a5de6b9221e7f2d6b'),
  23. }
  24. return dsaKeyPairSpec;
  25. }
  26. function testGenerateKeyPair() {
  27. let asyKeyPairSpec = genDsa1024KeyPairSpecBigE(); // JS输入必须是大端格式的正数。
  28. let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
  29. let keyGenPromise = asyKeyGeneratorBySpec.generateKeyPair();
  30. keyGenPromise.then(keyPair => {
  31. console.info('generateKeyPair result: success.');
  32. }).catch((error: BusinessError) => {
  33. console.error(`generateKeyPair failed: errCode: ${error.code}, errMsg: ${error.message}`);
  34. });
  35. }

generateKeyPairSync12+

PhonePC/2in1TabletTVWearable

generateKeyPairSync(): KeyPair

同步获取该非对称密钥生成器生成的密钥。

当使用COMMON_PARAMS_SPEC类型的密钥参数来创建密钥生成器时,可以得到随机生成的密钥对;当使用KEY_PAIR_SPEC类型的密钥参数来创建密钥生成器时,可以得到各项数据与密钥参数一致的密钥对。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

返回值:

展开
类型 说明
KeyPair 非对称密钥。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. // 配置DSA1024公钥和私钥中包含的公共参数。
  4. function genDsa1024CommonSpecBigE() {
  5. let dsaCommonSpec: cryptoFramework.DSACommonParamsSpec = {
  6. algName: 'DSA',
  7. specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC,
  8. p: BigInt('0xed1501551b8ab3547f6355ffdc2913856ddeca198833dbd04f020e5f25e47c50e0b3894f7690a0d2ea5ed3a7be25c54292a698e1f086eb3a97deb4dbf04fcad2dafd94a9f35c3ae338ab35477e16981ded6a5b13d5ff20bf55f1b262303ad3a80af71aa6aa2354d20e9c82647664bdb6b333b7bea0a5f49d55ca40bc312a1729'),
  9. q: BigInt('0xd23304044019d5d382cfeabf351636c7ab219694ac845051f60b047b'),
  10. g: BigInt('0x2cc266d8bd33c3009bd67f285a257ba74f0c3a7e12b722864632a0ac3f2c17c91c2f3f67eb2d57071ef47aaa8f8e17a21ad2c1072ee1ce281362aad01dcbcd3876455cd17e1dd55d4ed36fa011db40f0bbb8cba01d066f392b5eaa9404bfcb775f2196a6bc20eeec3db32d54e94d87ecdb7a0310a5a017c5cdb8ac78597778bd'),
  11. }
  12. return dsaCommonSpec;
  13. }
  14. // 设置DSA1024密钥对中包含的全参数。
  15. function genDsa1024KeyPairSpecBigE() {
  16. let dsaCommonSpec = genDsa1024CommonSpecBigE();
  17. let dsaKeyPairSpec: cryptoFramework.DSAKeyPairSpec = {
  18. algName: 'DSA',
  19. specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC,
  20. params: dsaCommonSpec,
  21. sk: BigInt('0xa2dd2adb2d11392c2541930f61f1165c370aabd2d78d00342e0a2fd9'),
  22. pk: BigInt('0xae6b5d5042e758f3fc9a02d009d896df115811a75b5f7b382d8526270dbb3c029403fafb8573ba4ef0314ea86f09d01e82a14d1ebb67b0c331f41049bd6b1842658b0592e706a5e4d20c14b67977e17df7bdd464cce14b5f13bae6607760fcdf394e0b73ac70aaf141fa4dafd736bd0364b1d6e6c0d7683a5de6b9221e7f2d6b'),
  23. }
  24. return dsaKeyPairSpec;
  25. }
  26. function testGenerateKeyPairSync() {
  27. let asyKeyPairSpec = genDsa1024KeyPairSpecBigE(); // JS输入必须是大端格式的正数。
  28. let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
  29. try {
  30. let keyPairData = asyKeyGeneratorBySpec.generateKeyPairSync();
  31. if (keyPairData != null) {
  32. console.info('[Sync]: key pair result: success.');
  33. } else {
  34. console.error('[Sync]: get key pair result: fail.');
  35. }
  36. } catch (error) {
  37. let e: BusinessError = error as BusinessError;
  38. console.error(`sync failed: errCode: ${error.code}, errMsg: ${error.message}`);
  39. }
  40. }

generatePriKey10+

generatePriKey(callback: AsyncCallback<PriKey>): void

获取非对称密钥生成器生成的密钥。使用callback异步回调。

使用PRIVATE_KEY_SPEC类型密钥参数创建密钥生成器,生成指定私钥。使用KEY_PAIR_SPEC类型密钥参数创建密钥生成器,从生成的密钥对中获取指定私钥。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
callback AsyncCallback<PriKey> 回调函数。当获取非对称密钥成功,err为undefined,data为获取到的PriKey;否则为错误对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

Mandatory parameters are left unspecified;

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. // 配置DSA1024公钥和私钥中包含的公共参数。
  3. function genDsa1024CommonSpecBigE() {
  4. let dsaCommonSpec: cryptoFramework.DSACommonParamsSpec = {
  5. algName: 'DSA',
  6. specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC,
  7. p: BigInt('0xed1501551b8ab3547f6355ffdc2913856ddeca198833dbd04f020e5f25e47c50e0b3894f7690a0d2ea5ed3a7be25c54292a698e1f086eb3a97deb4dbf04fcad2dafd94a9f35c3ae338ab35477e16981ded6a5b13d5ff20bf55f1b262303ad3a80af71aa6aa2354d20e9c82647664bdb6b333b7bea0a5f49d55ca40bc312a1729'),
  8. q: BigInt('0xd23304044019d5d382cfeabf351636c7ab219694ac845051f60b047b'),
  9. g: BigInt('0x2cc266d8bd33c3009bd67f285a257ba74f0c3a7e12b722864632a0ac3f2c17c91c2f3f67eb2d57071ef47aaa8f8e17a21ad2c1072ee1ce281362aad01dcbcd3876455cd17e1dd55d4ed36fa011db40f0bbb8cba01d066f392b5eaa9404bfcb775f2196a6bc20eeec3db32d54e94d87ecdb7a0310a5a017c5cdb8ac78597778bd'),
  10. }
  11. return dsaCommonSpec;
  12. }
  13. // 设置DSA1024密钥对中包含的全参数。
  14. function genDsa1024KeyPairSpecBigE() {
  15. let dsaCommonSpec = genDsa1024CommonSpecBigE();
  16. let dsaKeyPairSpec: cryptoFramework.DSAKeyPairSpec = {
  17. algName: 'DSA',
  18. specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC,
  19. params: dsaCommonSpec,
  20. sk: BigInt('0xa2dd2adb2d11392c2541930f61f1165c370aabd2d78d00342e0a2fd9'),
  21. pk: BigInt('0xae6b5d5042e758f3fc9a02d009d896df115811a75b5f7b382d8526270dbb3c029403fafb8573ba4ef0314ea86f09d01e82a14d1ebb67b0c331f41049bd6b1842658b0592e706a5e4d20c14b67977e17df7bdd464cce14b5f13bae6607760fcdf394e0b73ac70aaf141fa4dafd736bd0364b1d6e6c0d7683a5de6b9221e7f2d6b'),
  22. }
  23. return dsaKeyPairSpec;
  24. }
  25. function testGeneratePriKey() {
  26. let asyKeyPairSpec = genDsa1024KeyPairSpecBigE(); // JS输入必须是大端格式的正数。
  27. let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
  28. asyKeyGeneratorBySpec.generatePriKey((err, prikey) => {
  29. if (err) {
  30. console.error(`generateKeyPair failed, errCode: ${err.code}, errMsg: ${err.message}`);
  31. return;
  32. }
  33. console.info('generatePriKey result: success.');
  34. })
  35. }

generatePriKey10+

generatePriKey(): Promise<PriKey>

获取该非对称密钥生成器生成的密钥。使用Promise异步回调。

当使用PRIVATE_KEY_SPEC类型的密钥参数来创建密钥生成器时,可以得到指定的私钥;当使用KEY_PAIR_SPEC类型的密钥参数来创建密钥生成器时,可以从生成的密钥对中获取指定的私钥。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework

返回值:

展开
类型 说明
Promise<PriKey> Promise对象,返回非对称密钥的私钥PriKey。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. // 配置DSA1024公钥和私钥中包含的公共参数。
  4. function genDsa1024CommonSpecBigE() {
  5. let dsaCommonSpec: cryptoFramework.DSACommonParamsSpec = {
  6. algName: 'DSA',
  7. specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC,
  8. p: BigInt('0xed1501551b8ab3547f6355ffdc2913856ddeca198833dbd04f020e5f25e47c50e0b3894f7690a0d2ea5ed3a7be25c54292a698e1f086eb3a97deb4dbf04fcad2dafd94a9f35c3ae338ab35477e16981ded6a5b13d5ff20bf55f1b262303ad3a80af71aa6aa2354d20e9c82647664bdb6b333b7bea0a5f49d55ca40bc312a1729'),
  9. q: BigInt('0xd23304044019d5d382cfeabf351636c7ab219694ac845051f60b047b'),
  10. g: BigInt('0x2cc266d8bd33c3009bd67f285a257ba74f0c3a7e12b722864632a0ac3f2c17c91c2f3f67eb2d57071ef47aaa8f8e17a21ad2c1072ee1ce281362aad01dcbcd3876455cd17e1dd55d4ed36fa011db40f0bbb8cba01d066f392b5eaa9404bfcb775f2196a6bc20eeec3db32d54e94d87ecdb7a0310a5a017c5cdb8ac78597778bd'),
  11. }
  12. return dsaCommonSpec;
  13. }
  14. // 设置DSA1024密钥对中包含的全参数。
  15. function genDsa1024KeyPairSpecBigE() {
  16. let dsaCommonSpec = genDsa1024CommonSpecBigE();
  17. let dsaKeyPairSpec: cryptoFramework.DSAKeyPairSpec = {
  18. algName: 'DSA',
  19. specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC,
  20. params: dsaCommonSpec,
  21. sk: BigInt('0xa2dd2adb2d11392c2541930f61f1165c370aabd2d78d00342e0a2fd9'),
  22. pk: BigInt('0xae6b5d5042e758f3fc9a02d009d896df115811a75b5f7b382d8526270dbb3c029403fafb8573ba4ef0314ea86f09d01e82a14d1ebb67b0c331f41049bd6b1842658b0592e706a5e4d20c14b67977e17df7bdd464cce14b5f13bae6607760fcdf394e0b73ac70aaf141fa4dafd736bd0364b1d6e6c0d7683a5de6b9221e7f2d6b'),
  23. }
  24. return dsaKeyPairSpec;
  25. }
  26. function testGeneratePriKey() {
  27. let asyKeyPairSpec = genDsa1024KeyPairSpecBigE(); // JS输入必须是大端格式的正数。
  28. let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
  29. let keyGenPromise = asyKeyGeneratorBySpec.generatePriKey();
  30. keyGenPromise.then(priKey => {
  31. console.info('generatePriKey result: success.');
  32. }).catch((error: BusinessError) => {
  33. console.error(`generatePriKey failed: errCode: ${error.code}, errMsg: ${error.message}`);
  34. });
  35. }

generatePriKeySync12+

PhonePC/2in1TabletTVWearable

generatePriKeySync(): PriKey

同步获取该非对称密钥生成器生成的密钥。

当使用PRIVATE_KEY_SPEC类型的密钥参数来创建密钥生成器时,可以得到指定的私钥;当使用KEY_PAIR_SPEC类型的密钥参数来创建密钥生成器时,可以从生成的密钥对中获取指定的私钥。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

返回值:

展开
类型 说明
PriKey 非对称密钥。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. // 配置DSA1024公钥和私钥中包含的公共参数。
  3. function genDsa1024CommonSpecBigE() {
  4. let dsaCommonSpec: cryptoFramework.DSACommonParamsSpec = {
  5. algName: 'DSA',
  6. specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC,
  7. p: BigInt('0xed1501551b8ab3547f6355ffdc2913856ddeca198833dbd04f020e5f25e47c50e0b3894f7690a0d2ea5ed3a7be25c54292a698e1f086eb3a97deb4dbf04fcad2dafd94a9f35c3ae338ab35477e16981ded6a5b13d5ff20bf55f1b262303ad3a80af71aa6aa2354d20e9c82647664bdb6b333b7bea0a5f49d55ca40bc312a1729'),
  8. q: BigInt('0xd23304044019d5d382cfeabf351636c7ab219694ac845051f60b047b'),
  9. g: BigInt('0x2cc266d8bd33c3009bd67f285a257ba74f0c3a7e12b722864632a0ac3f2c17c91c2f3f67eb2d57071ef47aaa8f8e17a21ad2c1072ee1ce281362aad01dcbcd3876455cd17e1dd55d4ed36fa011db40f0bbb8cba01d066f392b5eaa9404bfcb775f2196a6bc20eeec3db32d54e94d87ecdb7a0310a5a017c5cdb8ac78597778bd'),
  10. }
  11. return dsaCommonSpec;
  12. }
  13. // 设置DSA1024密钥对中包含的全参数。
  14. function genDsa1024KeyPairSpecBigE() {
  15. let dsaCommonSpec = genDsa1024CommonSpecBigE();
  16. let dsaKeyPairSpec: cryptoFramework.DSAKeyPairSpec = {
  17. algName: 'DSA',
  18. specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC,
  19. params: dsaCommonSpec,
  20. sk: BigInt('0xa2dd2adb2d11392c2541930f61f1165c370aabd2d78d00342e0a2fd9'),
  21. pk: BigInt('0xae6b5d5042e758f3fc9a02d009d896df115811a75b5f7b382d8526270dbb3c029403fafb8573ba4ef0314ea86f09d01e82a14d1ebb67b0c331f41049bd6b1842658b0592e706a5e4d20c14b67977e17df7bdd464cce14b5f13bae6607760fcdf394e0b73ac70aaf141fa4dafd736bd0364b1d6e6c0d7683a5de6b9221e7f2d6b'),
  22. }
  23. return dsaKeyPairSpec;
  24. }
  25. function testGeneratePriKeySync() {
  26. let asyKeyPairSpec = genDsa1024KeyPairSpecBigE(); // JS输入必须是大端格式的正数。
  27. let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
  28. try {
  29. let priKeyData = asyKeyGeneratorBySpec.generatePriKeySync();
  30. if (priKeyData != null) {
  31. console.info('[Sync]: pri key result: success.');
  32. } else {
  33. console.error('[Sync]: get pri key result: fail.');
  34. }
  35. } catch (e) {
  36. console.error(`sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
  37. }
  38. }

generatePubKey10+

generatePubKey(callback: AsyncCallback<PubKey>): void

获取非对称密钥生成器生成的密钥。使用callback异步回调。

当使用PUBLIC_KEY_SPEC类型的密钥参数来创建密钥生成器时,可以得到指定的公钥;当使用KEY_PAIR_SPEC类型的密钥参数来创建密钥生成器时,可以从生成的密钥对中获取指定的公钥。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
callback AsyncCallback<PubKey> 回调函数。当获取非对称密钥成功,err为undefined,data为获取到的PubKey;否则为错误对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

Incorrect parameter types;

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. // 配置DSA1024公钥和私钥中包含的公共参数。
  3. function genDsa1024CommonSpecBigE() {
  4. let dsaCommonSpec: cryptoFramework.DSACommonParamsSpec = {
  5. algName: 'DSA',
  6. specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC,
  7. p: BigInt('0xed1501551b8ab3547f6355ffdc2913856ddeca198833dbd04f020e5f25e47c50e0b3894f7690a0d2ea5ed3a7be25c54292a698e1f086eb3a97deb4dbf04fcad2dafd94a9f35c3ae338ab35477e16981ded6a5b13d5ff20bf55f1b262303ad3a80af71aa6aa2354d20e9c82647664bdb6b333b7bea0a5f49d55ca40bc312a1729'),
  8. q: BigInt('0xd23304044019d5d382cfeabf351636c7ab219694ac845051f60b047b'),
  9. g: BigInt('0x2cc266d8bd33c3009bd67f285a257ba74f0c3a7e12b722864632a0ac3f2c17c91c2f3f67eb2d57071ef47aaa8f8e17a21ad2c1072ee1ce281362aad01dcbcd3876455cd17e1dd55d4ed36fa011db40f0bbb8cba01d066f392b5eaa9404bfcb775f2196a6bc20eeec3db32d54e94d87ecdb7a0310a5a017c5cdb8ac78597778bd'),
  10. }
  11. return dsaCommonSpec;
  12. }
  13. // 设置DSA1024密钥对中包含的全参数。
  14. function genDsa1024KeyPairSpecBigE() {
  15. let dsaCommonSpec = genDsa1024CommonSpecBigE();
  16. let dsaKeyPairSpec: cryptoFramework.DSAKeyPairSpec = {
  17. algName: 'DSA',
  18. specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC,
  19. params: dsaCommonSpec,
  20. sk: BigInt('0xa2dd2adb2d11392c2541930f61f1165c370aabd2d78d00342e0a2fd9'),
  21. pk: BigInt('0xae6b5d5042e758f3fc9a02d009d896df115811a75b5f7b382d8526270dbb3c029403fafb8573ba4ef0314ea86f09d01e82a14d1ebb67b0c331f41049bd6b1842658b0592e706a5e4d20c14b67977e17df7bdd464cce14b5f13bae6607760fcdf394e0b73ac70aaf141fa4dafd736bd0364b1d6e6c0d7683a5de6b9221e7f2d6b'),
  22. }
  23. return dsaKeyPairSpec;
  24. }
  25. function testGeneratePubKey() {
  26. let asyKeyPairSpec = genDsa1024KeyPairSpecBigE(); // JS输入必须是大端格式的正数。
  27. let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
  28. asyKeyGeneratorBySpec.generatePubKey((err, pubKey) => {
  29. if (err) {
  30. console.error(`generatePubKey failed, errCode: ${err.code}, errMsg: ${err.message}`);
  31. return;
  32. }
  33. console.info('generatePubKey result: success.');
  34. })
  35. }

generatePubKey10+

generatePubKey(): Promise<PubKey>

获取该非对称密钥生成器生成的密钥。使用Promise异步回调。

当使用PUBLIC_KEY_SPEC类型的密钥参数来创建密钥生成器时,可以得到指定的公钥;当使用KEY_PAIR_SPEC类型的密钥参数来创建密钥生成器时,可以从生成的密钥对中获取指定的公钥。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本10-11:SystemCapability.Security.CryptoFramework

返回值:

展开
类型 说明
Promise<PubKey> Promise对象,返回非对称密钥的公钥PubKey。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. // 配置DSA1024公钥和私钥中包含的公共参数。
  4. function genDsa1024CommonSpecBigE() {
  5. let dsaCommonSpec: cryptoFramework.DSACommonParamsSpec = {
  6. algName: 'DSA',
  7. specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC,
  8. p: BigInt('0xed1501551b8ab3547f6355ffdc2913856ddeca198833dbd04f020e5f25e47c50e0b3894f7690a0d2ea5ed3a7be25c54292a698e1f086eb3a97deb4dbf04fcad2dafd94a9f35c3ae338ab35477e16981ded6a5b13d5ff20bf55f1b262303ad3a80af71aa6aa2354d20e9c82647664bdb6b333b7bea0a5f49d55ca40bc312a1729'),
  9. q: BigInt('0xd23304044019d5d382cfeabf351636c7ab219694ac845051f60b047b'),
  10. g: BigInt('0x2cc266d8bd33c3009bd67f285a257ba74f0c3a7e12b722864632a0ac3f2c17c91c2f3f67eb2d57071ef47aaa8f8e17a21ad2c1072ee1ce281362aad01dcbcd3876455cd17e1dd55d4ed36fa011db40f0bbb8cba01d066f392b5eaa9404bfcb775f2196a6bc20eeec3db32d54e94d87ecdb7a0310a5a017c5cdb8ac78597778bd'),
  11. }
  12. return dsaCommonSpec;
  13. }
  14. // 设置DSA1024密钥对中包含的全参数。
  15. function genDsa1024KeyPairSpecBigE() {
  16. let dsaCommonSpec = genDsa1024CommonSpecBigE();
  17. let dsaKeyPairSpec: cryptoFramework.DSAKeyPairSpec = {
  18. algName: 'DSA',
  19. specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC,
  20. params: dsaCommonSpec,
  21. sk: BigInt('0xa2dd2adb2d11392c2541930f61f1165c370aabd2d78d00342e0a2fd9'),
  22. pk: BigInt('0xae6b5d5042e758f3fc9a02d009d896df115811a75b5f7b382d8526270dbb3c029403fafb8573ba4ef0314ea86f09d01e82a14d1ebb67b0c331f41049bd6b1842658b0592e706a5e4d20c14b67977e17df7bdd464cce14b5f13bae6607760fcdf394e0b73ac70aaf141fa4dafd736bd0364b1d6e6c0d7683a5de6b9221e7f2d6b'),
  23. }
  24. return dsaKeyPairSpec;
  25. }
  26. function testGeneratePubKey() {
  27. let asyKeyPairSpec = genDsa1024KeyPairSpecBigE(); // JS输入必须是大端格式的正数。
  28. let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
  29. let keyGenPromise = asyKeyGeneratorBySpec.generatePubKey();
  30. keyGenPromise.then(pubKey => {
  31. console.info('generatePubKey result: success.');
  32. }).catch((error: BusinessError) => {
  33. console.error(`generatePubKey failed: errCode: ${error.code}, errMsg: ${error.message}`);
  34. });
  35. }

generatePubKeySync12+

PhonePC/2in1TabletTVWearable

generatePubKeySync(): PubKey

同步获取该非对称密钥生成器生成的密钥。

当使用PUBLIC_KEY_SPEC类型的密钥参数来创建密钥生成器时,可以得到指定的公钥;使用KEY_PAIR_SPEC类型的密钥参数时,可以从生成的密钥对中获取指定的公钥。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

返回值:

展开
类型 说明
PubKey 非对称密钥。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. // 配置DSA1024公钥和私钥中包含的公共参数。
  3. function genDsa1024CommonSpecBigE() {
  4. let dsaCommonSpec: cryptoFramework.DSACommonParamsSpec = {
  5. algName: 'DSA',
  6. specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC,
  7. p: BigInt('0xed1501551b8ab3547f6355ffdc2913856ddeca198833dbd04f020e5f25e47c50e0b3894f7690a0d2ea5ed3a7be25c54292a698e1f086eb3a97deb4dbf04fcad2dafd94a9f35c3ae338ab35477e16981ded6a5b13d5ff20bf55f1b262303ad3a80af71aa6aa2354d20e9c82647664bdb6b333b7bea0a5f49d55ca40bc312a1729'),
  8. q: BigInt('0xd23304044019d5d382cfeabf351636c7ab219694ac845051f60b047b'),
  9. g: BigInt('0x2cc266d8bd33c3009bd67f285a257ba74f0c3a7e12b722864632a0ac3f2c17c91c2f3f67eb2d57071ef47aaa8f8e17a21ad2c1072ee1ce281362aad01dcbcd3876455cd17e1dd55d4ed36fa011db40f0bbb8cba01d066f392b5eaa9404bfcb775f2196a6bc20eeec3db32d54e94d87ecdb7a0310a5a017c5cdb8ac78597778bd'),
  10. }
  11. return dsaCommonSpec;
  12. }
  13. // 设置DSA1024密钥对中包含的全参数。
  14. function genDsa1024KeyPairSpecBigE() {
  15. let dsaCommonSpec = genDsa1024CommonSpecBigE();
  16. let dsaKeyPairSpec: cryptoFramework.DSAKeyPairSpec = {
  17. algName: 'DSA',
  18. specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC,
  19. params: dsaCommonSpec,
  20. sk: BigInt('0xa2dd2adb2d11392c2541930f61f1165c370aabd2d78d00342e0a2fd9'),
  21. pk: BigInt('0xae6b5d5042e758f3fc9a02d009d896df115811a75b5f7b382d8526270dbb3c029403fafb8573ba4ef0314ea86f09d01e82a14d1ebb67b0c331f41049bd6b1842658b0592e706a5e4d20c14b67977e17df7bdd464cce14b5f13bae6607760fcdf394e0b73ac70aaf141fa4dafd736bd0364b1d6e6c0d7683a5de6b9221e7f2d6b'),
  22. }
  23. return dsaKeyPairSpec;
  24. }
  25. function testGeneratePubKeySync() {
  26. let asyKeyPairSpec = genDsa1024KeyPairSpecBigE(); // JS输入必须是大端格式的正数。
  27. let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
  28. try {
  29. let pubKeyData = asyKeyGeneratorBySpec.generatePubKeySync();
  30. if (pubKeyData != null) {
  31. console.info('[Sync]: pub key result: success.');
  32. } else {
  33. console.error('[Sync]: get pub key result: fail.');
  34. }
  35. } catch (e) {
  36. console.error(`sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
  37. }
  38. }

ECCKeyUtil11+

PhonePC/2in1TabletTVWearable

提供ECC密钥参数生成和基于指定椭圆曲线的点转换工具。

genECCCommonParamsSpec11+

static genECCCommonParamsSpec(curveName: string): ECCCommonParamsSpec

根据椭圆曲线相应的NID(Name Identifier)字符串名称生成相应的非对称公共密钥参数。详见ECC密钥生成规格SM2密钥生成规格

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
curveName string 椭圆曲线相应的NID(Name Identifier)字符串名称。

返回值:

展开
类型 说明
ECCCommonParamsSpec 返回ECC公共密钥参数。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

801 This operation is not supported.
17620001 Memory operation failed.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. try {
  4. let ECCCommonParamsSpec = cryptoFramework.ECCKeyUtil.genECCCommonParamsSpec('NID_brainpoolP160r1');
  5. console.info('genECCCommonParamsSpec result: success.');
  6. } catch (err) {
  7. let e: BusinessError = err as BusinessError;
  8. console.error(`genECCCommonParamsSpec failed: errCode: ${e.code}, errMsg: ${e.message}`);
  9. }

convertPoint12+

PhonePC/2in1TabletTVWearable

static convertPoint(curveName: string, encodedPoint: Uint8Array): Point

根据椭圆曲线的曲线名,即相应的NID(Name Identifier),将指定的点数据转换为Point对象。当前支持压缩/非压缩格式的点数据。

说明

根据RFC5480规范中第2.2节的描述:

  1. 非压缩的点数据,表示为:前缀0x04|x坐标|y坐标;
  2. 压缩的点数据,对于Fp素数域上的点(当前暂不支持F2m域),表示为:前缀0x03|x坐标 (坐标y是奇数时),前缀0x02|x坐标 (坐标y是偶数时)。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

参数:

展开
参数名 类型 必填 说明
curveName string 椭圆曲线的曲线名,即相应的NID(Name Identifier)。
encodedPoint Uint8Array 指定的ECC椭圆曲线上的点的数据。

返回值:

展开
类型 说明
Point 返回ECC的Point对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. // 随机生成的非压缩点数据。
  3. let pkData =
  4. new Uint8Array([4, 143, 39, 57, 249, 145, 50, 63, 222, 35, 70, 178, 121, 202, 154, 21, 146, 129, 75, 76, 63, 8, 195,
  5. 157, 111, 40, 217, 215, 148, 120, 224, 205, 82, 83, 92, 185, 21, 211, 184, 5, 19, 114, 33, 86, 85, 228, 123, 242,
  6. 206, 200, 98, 178, 184, 130, 35, 232, 45, 5, 202, 189, 11, 46, 163, 156, 152]);
  7. let returnPoint = cryptoFramework.ECCKeyUtil.convertPoint('NID_brainpoolP256r1', pkData);
  8. console.info('returnPoint: ' + returnPoint.x.toString(16));

getEncodedPoint12+

PhonePC/2in1TabletTVWearable

static getEncodedPoint(curveName: string, point: Point, format: string): Uint8Array

根据椭圆曲线的曲线名,即相应的NID(Name Identifier),按照指定的点数据格式,将Point对象转换为点数据。当前支持压缩/非压缩格式的点数据。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Key.AsymKey

参数:

展开
参数名 类型 必填 说明
curveName string 椭圆曲线的曲线名,即相应的NID(Name Identifier)。
point Point 椭圆曲线上的Point点对象。
format string 需要获取的点数据格式,当前支持"COMPRESSED"或"UNCOMPRESSED"。

返回值:

展开
类型 说明
Uint8Array 返回指定格式的点数据。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. async function doTest() {
  3. let generator = cryptoFramework.createAsyKeyGenerator('ECC_BrainPoolP256r1');
  4. let keyPair = await generator.generateKeyPair();
  5. let eccPkX = keyPair.pubKey.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_PK_X_BN);
  6. let eccPkY = keyPair.pubKey.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_PK_Y_BN);
  7. console.info('ECC_PK_X_BN 16: ' + eccPkX.toString(16));
  8. console.info('ECC_PK_Y_BN 16: ' + eccPkY.toString(16));
  9. // 将eccPkX.toString(16)结果放入x,eccPkY.toString(16)结果放入y。
  10. let returnPoint: cryptoFramework.Point = {
  11. x: BigInt('0x' + eccPkX.toString(16)),
  12. y: BigInt('0x' + eccPkY.toString(16))
  13. };
  14. let returnData = cryptoFramework.ECCKeyUtil.getEncodedPoint('NID_brainpoolP256r1', returnPoint, 'UNCOMPRESSED');
  15. console.info('returnData: ' + returnData);
  16. }

DHKeyUtil11+

PhonePC/2in1TabletTVWearableLite Wearable

根据素数P的长度和私钥长度(bit位数)生成DH公共密钥参数。

genDHCommonParamsSpec11+

static genDHCommonParamsSpec(pLen: number, skLen?: number): DHCommonParamsSpec

根据素数P的长度和私钥长度(bit位数)生成DH公共密钥参数。详见DH密钥生成规格

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Key.AsymKey
  • API版本11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
pLen number 用于指定DH公共密钥参数中素数P的长度,单位为bits。
skLen number

用于指定生成DH私钥的最大长度,单位为bits,默认值为0。

当参数值设置为0时,生成DH私钥的最大长度为:

ffdhe2048:255 bits。

ffdhe3072:275 bits。

ffdhe4096:325 bits。

ffdhe6144:375 bits。

ffdhe8192:400 bits。

返回值:

展开
类型 说明
DHCommonParamsSpec 返回DH公共密钥参数。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

801 This operation is not supported.
17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. try {
  4. let DHCommonParamsSpec = cryptoFramework.DHKeyUtil.genDHCommonParamsSpec(2048);
  5. console.info('genDHCommonParamsSpec result: success.');
  6. } catch (err) {
  7. let e: BusinessError = err as BusinessError;
  8. console.error(`genDHCommonParamsSpec failed: errCode: ${e.code}, errMsg: ${e.message}`);
  9. }

SM2CryptoUtil12+

PhonePC/2in1TabletTVWearable

用于SM2密码学运算的工具类。

genCipherTextBySpec12+

PhonePC/2in1TabletTVWearable

static genCipherTextBySpec(spec: SM2CipherTextSpec, mode?: string): DataBlob

根据指定的SM2密文参数,生成符合国密标准的ASN.1格式SM2密文。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Cipher

参数:

展开
参数名 类型 必填 说明
spec SM2CipherTextSpec 指定的SM2密文参数。
mode string 可选的密文转换模式,可用于指定密文参数的拼接顺序,当前仅支持默认值"C1C3C2"。为空或空字符串时使用默认值。

返回值:

展开
类型 说明
DataBlob 返回符合国密标准的ASN.1格式的SM2密文。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. try {
  4. let spec: cryptoFramework.SM2CipherTextSpec = {
  5. xCoordinate: BigInt('20625015362595980457695435345498579729138244358573902431560627260141789922999'),
  6. yCoordinate: BigInt('48563164792857017065725892921053777369510340820930241057309844352421738767712'),
  7. cipherTextData: new Uint8Array([100, 227, 78, 195, 249, 179, 43, 70, 242, 69, 169, 10, 65, 123]),
  8. hashData: new Uint8Array([87, 167, 167, 247, 88, 146, 203, 234, 83, 126, 117, 129, 52, 142, 82, 54, 152, 226, 201,
  9. 111, 143, 115, 169, 125, 128, 42, 157, 31, 114, 198, 109, 244]),
  10. }
  11. let data = cryptoFramework.SM2CryptoUtil.genCipherTextBySpec(spec, 'C1C3C2');
  12. console.info('genCipherTextBySpec result: success.');
  13. } catch (err) {
  14. let e: BusinessError = err as BusinessError;
  15. console.error(`genCipherTextBySpec failed: errCode: ${e.code}, errMsg: ${e.message}`);
  16. }

getCipherTextSpec12+

PhonePC/2in1TabletTVWearable

static getCipherTextSpec(cipherText: DataBlob, mode?: string): SM2CipherTextSpec

从符合国密标准的ASN.1格式的SM2密文中,获取具体的SM2密文参数。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Cipher

参数:

展开
参数名 类型 必填 说明
cipherText DataBlob 符合国密标准的ASN.1格式的SM2密文。
mode string 可选的密文转换模式,可用于指定密文参数的拼接顺序,当前仅支持默认值"C1C3C2"。为空或空字符串时使用默认值。

返回值:

展开
类型 说明
SM2CipherTextSpec 返回SM2密文参数。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.
收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. try {
  4. let cipherTextArray =
  5. new Uint8Array([48, 118, 2, 32, 45, 153, 88, 82, 104, 221, 226, 43, 174, 21, 122, 248, 5, 232, 105, 41, 92, 95, 102,
  6. 224, 216, 149, 85, 236, 110, 6, 64, 188, 149, 70, 70, 183, 2, 32, 107, 93, 198, 247, 119, 18, 40, 110, 90, 156,
  7. 193, 158, 205, 113, 170, 128, 146, 109, 75, 17, 181, 109, 110, 91, 149, 5, 110, 233, 209, 78, 229, 96, 4, 32, 87,
  8. 167, 167, 247, 88, 146, 203, 234, 83, 126, 117, 129, 52, 142, 82, 54, 152, 226, 201, 111, 143, 115, 169, 125, 128,
  9. 42, 157, 31, 114, 198, 109, 244, 4, 14, 100, 227, 78, 195, 249, 179, 43, 70, 242, 69, 169, 10, 65, 123]);
  10. let cipherText: cryptoFramework.DataBlob = { data: cipherTextArray };
  11. let spec: cryptoFramework.SM2CipherTextSpec = cryptoFramework.SM2CryptoUtil.getCipherTextSpec(cipherText, 'C1C3C2');
  12. console.info('getCipherTextSpec result: success.');
  13. } catch (err) {
  14. let e: BusinessError = err as BusinessError;
  15. console.error(`getCipherTextSpec failed: errCode: ${e.code}, errMsg: ${e.message}`);
  16. }

cryptoFramework.createCipher

PhonePC/2in1TabletTVWearableLite Wearable

createCipher(transformation: string): Cipher

通过指定算法名称,获取相应的Cipher实例。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Cipher
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
transformation string

待生成Cipher的算法名称(含密钥长度)、加密模式以及填充方法的组合。

支持的规格详见对称密钥加解密算法规格非对称密钥加解密算法规格

说明

目前对称加解密中,PKCS #5和PKCS #7的实现相同,其padding长度和分组长度保持一致。在3DES中均按8字节填充,在AES中均按16字节填充。另有NoPadding表示不填充。

开发者需要自行了解密码学不同分组模式的差异,以便选择合适的参数规格。例如选择ECB和CBC模式时,建议启用填充,否则必须确保明文长度是分组大小的整数倍;选择其他模式时,可以不启用填充,此时密文长度和明文长度一致(即可能不是分组大小的整数倍)。

返回值:

展开
类型 说明
Cipher 返回加解密生成器的对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

801 This operation is not supported.
17620001 Memory operation failed.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. let cipherAlgName = '3DES192|ECB|PKCS7';
  4. try {
  5. let cipher = cryptoFramework.createCipher(cipherAlgName);
  6. console.info('cipher algName: ' + cipher.algName);
  7. } catch (error) {
  8. let e: BusinessError = error as BusinessError;
  9. console.error(`sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
  10. }

Cipher

PhonePC/2in1TabletTVWearable

提供加解密的算法操作功能,按序调用本类中的init()update()doFinal()方法,可以实现对称加密/对称解密/非对称加密/非对称解密。

完整的加解密流程示例可参考开发指南

一次完整的加/解密流程在对称加密和非对称加密中略有不同:

  • 对称加解密:init为必选,update为可选(且允许多次update加/解密大数据),doFinal为必选;doFinal结束后可以重新init开始新一轮加/解密流程。
  • RSA、SM2非对称加解密:init为必选,不支持update操作,doFinal为必选(允许连续多次doFinal加/解密大数据);RSA不支持重复init,切换加解密模式或填充方式时,需要重新创建Cipher对象。

属性

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Cipher
  • API版本9-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
algName string 加解密生成器指定的算法名称。

init

init(opMode: CryptoMode, key: Key, params: ParamsSpec | null, callback: AsyncCallback<void>): void

初始化加解密的cipher对象,使用callback异步回调获取结果。init、update、doFinal为三段式接口,需要成组使用。其中init和doFinal必选,update可选。

必须在使用createCipher创建Cipher实例后,才能使用本函数。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Cipher
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
opMode CryptoMode 要执行的操作(加密或解密)。
key Key 用于加密或解密的密钥。
params ParamsSpec | null10+ 指定加密或解密的参数,对于ECB等没有参数的算法模式,请传入null。API 10之前只支持ParamsSpec, API 10之后增加支持null。
callback AsyncCallback<void> 回调函数。当加解密初始化成功,err为undefined,否则为错误对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620003

Parameter check failed. Possible causes:

1. Invalid opMode value;

2. Invalid iv length;

3. Invalid key length.

17630001 Crypto operation error.

init

init(opMode: CryptoMode, key: Key, params: ParamsSpec | null): Promise<void>

初始化加解密的cipher对象。使用Promise异步回调。init、update、doFinal为三段式接口,需要成组使用。其中init和doFinal必选,update可选。

必须在使用createCipher创建Cipher实例后,才能使用本函数。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Cipher
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
opMode CryptoMode 要执行的操作(加密或解密)。
key Key 用于加密或解密的密钥。
params ParamsSpec | null10+ 指定加密或解密的参数,对于ECB等没有参数的算法模式,请传入null。API 10之前仅支持ParamsSpec,从API 10开始增加对null的支持。

返回值:

展开
类型 说明
Promise<void> Promise对象,无返回结果。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620003

Parameter check failed. Possible causes:

1. Invalid opMode value;

2. Invalid iv length;

3. Invalid key length.

17630001 Crypto operation error.

initSync12+

PhonePC/2in1TabletTVWearable

initSync(opMode: CryptoMode, key: Key, params: ParamsSpec | null): void

初始化加解密的cipher对象,通过注册回调函数获取结果。initSync、updateSync、doFinalSync为三段式接口,需要成组使用。其中initSync和doFinalSync必选,updateSync可选。

必须在使用createCipher创建Cipher实例后,才能使用本函数。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Cipher

参数:

展开
参数名 类型 必填 说明
opMode CryptoMode 加密或者解密模式。
key Key 指定加密或解密的密钥。
params ParamsSpec | null 指定加密或解密的参数,对于ECB等没有参数的算法模式,请传入null。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620003

Parameter check failed. Possible causes:

1. Invalid opMode value;

2. Invalid iv length;

3. Invalid key length.

17630001 Crypto operation error.

update

update(data: DataBlob, callback: AsyncCallback<DataBlob>): void

分段更新加密或者解密数据操作。使用callback异步回调。

必须在对Cipher实例使用init()初始化后,才能使用本函数。

说明
  1. 在进行对称加解密操作时,如果开发者对各个分组模式不够熟悉,建议对每次update和doFinal的结果进行判断,确保其不为null,并在结果不为null时取出数据进行拼接,形成完整的密文或明文。这是因选择的分组模式等各项规格可能对update和doFinal的结果产生影响。

    例如,对于ECB和CBC模式,不论update传入的数据是否为分组长度的整数倍,都会以分组为单位进行加解密,并输出本次update新产生的加解密分组结果。

    可以理解为update只要凑满一个新的分组就会有输出,如果没有凑满则此次update输出为null,将当前未被加解密的数据留着,等下一次update或doFinal传入数据时,拼接起来继续凑分组。

    最后doFinal时,会将剩下的未加解密的数据根据createCipher时设置的填充模式进行填充,补齐到分组的整数倍长度,再输出剩余的加解密结果。

    对于可以将分组密码转化为流模式实现的模式,还可能出现密文长度与明文长度相同的情况。

  2. 根据数据量,可以不调用update(即init完成后直接调用doFinal)或多次调用update。

    算法库未对单次或累计的update数据量设置限制。对于大数据量的对称加解密操作,建议分多次调用update方法传入数据。

    AES使用多次update操作的示例代码详见使用AES对称密钥分段加解密

  3. RSA、SM2非对称加解密不支持update操作。

  4. 对于CCM模式的对称加解密算法,加密时只能调用1次update接口加密数据并调用doFinal接口获取tag,或直接调用doFinal接口加密数据并获取tag,解密时只能调用1次update接口或调用1次doFinal接口解密数据并验证tag。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Cipher
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
data DataBlob 需要进行加密或解密的数据。data不能为null。
callback AsyncCallback<DataBlob> 回调函数。更新加/解密数据成功时,err为undefined,data为加/解密结果DataBlob;否则为错误对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620003

Parameter check failed. Possible causes:

1. The data is too long.

17630001 Crypto operation error.

update

update(data: DataBlob): Promise<DataBlob>

分段更新加密或者解密数据操作。使用Promise异步回调。

必须在对Cipher实例使用init()初始化后,才能使用本函数。

说明
  1. 在进行对称加解密操作时,如果开发者对各分组模式不够熟悉,建议每次调用update和doFinal后,都判断结果是否为null。如果结果不为null,则取出其中的数据进行拼接,以形成完整的密文或明文。这是因为选择的分组模式等各项规格可能会影响update和doFinal的结果。

    (例如对于ECB和CBC模式,不论update传入的数据是否为分组长度的整数倍,都会以分组作为基本单位进行加/解密,并输出本次update新产生的加/解密分组结果。

    可以理解为,update只要凑满一个新的分组就会有输出,如果没有凑满则此次update输出为null,把当前还没被加/解密的数据留着,等下一次update/doFinal传入数据的时候,拼接起来继续凑分组。

    最后doFinal的时候,会把剩下的还没加/解密的数据,根据createCipher时设置的padding模式进行填充,补齐到分组的整数倍长度,再输出剩余加解密结果。

    而对于可以将分组密码转化为流模式实现的模式,还可能出现密文长度和明文长度相同的情况等。)

  2. 根据数据量,可以不调用update(即init完成后直接调用doFinal)或多次调用update。

    算法库目前没有对update(单次或累计)的数据量设置大小限制,建议对于大数据量的对称加解密,可以采用多次update的方式传入数据。

    AES使用多次update操作的示例代码详见使用AES对称密钥分段加解密

  3. RSA、SM2非对称加解密不支持update操作。
  4. 对于CCM模式的对称加解密算法,加密时只能调用1次update接口加密数据并调用doFinal接口获取tag,或直接调用doFinal接口加密数据并获取tag,解密时只能调用1次update接口或调用1次doFinal接口解密数据并验证tag。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Cipher
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
data DataBlob 加密或者解密的数据。data不能为null。

返回值:

展开
类型 说明
Promise<DataBlob> Promise对象,返回此次更新的加/解密结果DataBlob。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620003

Parameter check failed. Possible causes:

1. The data is too long.

17630001 Crypto operation error.

updateSync12+

PhonePC/2in1TabletTVWearable

updateSync(data: DataBlob): DataBlob

分段更新加密或者解密数据操作,通过注册回调函数获取加/解密数据。

必须在对Cipher实例使用initSync()初始化后,才能使用本函数。

其他注意事项同上异步接口说明。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Cipher

参数:

展开
参数名 类型 必填 说明
data DataBlob 加密或者解密的数据。data不能为null。

返回值:

展开
类型 说明
DataBlob 返回此次更新的加/解密结果DataBlob。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620003

Parameter check failed. Possible causes:

1. The data is too long.

17630001 Crypto operation error.

doFinal

doFinal(data: DataBlob | null, callback: AsyncCallback<DataBlob>): void

(1)在对称加解密中doFinal用于处理剩余数据和本次传入的数据,并最终结束加密或解密操作,使用callback异步回调函数获取加密或解密后的数据。如果数据量较小,可以在 doFinal 中一次性传入数据,而不使用update;如果在本次加解密流程中已经使用update传入过数据,可以在doFinal的data参数处传入null。根据对称加解密的模式不同,doFinal的输出有以下区别:

  • 在GCM和CCM模式的对称加密中,一次加密流程中,将每次update和doFinal的结果拼接起来,会得到“密文 + authTag”。GCM模式下,authTag为末尾的16字节;CCM模式下,authTag为末尾的12字节。其余部分均为密文。如果doFinal的data参数传入null,则doFinal的结果就是authTag。解密时,authTag需要填入GcmParamsSpecCcmParamsSpec,密文作为解密时的data参数。
  • 对于其他模式的对称加解密及GCM和CCM模式的对称解密:每次加/解密流程中,update和doFinal的结果拼接起来,得到完整的明文或密文。

(2)在RSA、SM2非对称加解密中,doFinal加/解密本次传入的数据,使用callback异步回调函数获取加密或者解密数据。如果数据量较大,可以多次调用doFinal,拼接结果得到完整的明文/密文。

说明
  1. 对称加解密中,调用doFinal标志着一次加解密流程已经完成,即Cipher实例的状态被清除,因此当后续开启新一轮加解密流程时,需要重新调用init()并传入完整的参数列表进行初始化

    (比如即使是对同一个Cipher实例,采用同样的对称密钥,进行加密然后解密,则解密中调用init的时候仍需填写params参数,而不能直接省略为null)。

  2. 如果遇到解密失败,需检查加解密数据和init时的参数是否匹配,包括GCM模式下加密得到的authTag是否填入解密时的GcmParamsSpec等。
  3. doFinal的结果可能为null,因此使用.data字段访问doFinal结果的具体数据前,请记得先判断结果是否为null,避免产生异常。

    对于加密,CFB、OFB和CTR模式,如果doFinal传null, 则返回结果为null。

    对于解密,GCM、CCM、CFB、OFB和CTR模式,如果doFinal传null,则返回结果为null;对于解密,其他模式,如果明文是加密块大小的整倍数,调用update传入所有密文,调用doFinal传null, 则返回结果为null。

  4. 非对称加解密时多次doFinal操作的示例代码详见使用RSA非对称密钥分段加解密,SM2和RSA的操作类似。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Cipher
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
data DataBlob | null10+ 加密或解密的数据。在对称加解密中可为null,但不可传入{data: Uint8Array(空) }。API 10前仅支持DataBlob,API 10后增加null支持。
callback AsyncCallback<DataBlob> 回调函数。最终加/解密成功时,err为undefined,data为加/解密结果DataBlob;否则为错误对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620003

Parameter check failed. Possible causes:

1. The data is too long.

17630001 Crypto operation error.

示例:

更多加解密流程的完整示例请参考加解密开发指导

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { buffer } from '@kit.ArkTS';
  3. function generateRandom(len: number) {
  4. let rand = cryptoFramework.createRandom();
  5. let generateRandSync = rand.generateRandomSync(len);
  6. return generateRandSync;
  7. }
  8. function genGcmParamsSpec() {
  9. let ivBlob = generateRandom(12);
  10. let arr = [1, 2, 3, 4, 5, 6, 7, 8];
  11. let dataAad = new Uint8Array(arr);
  12. let aadBlob: cryptoFramework.DataBlob = { data: dataAad };
  13. arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
  14. let dataTag = new Uint8Array(arr);
  15. let tagBlob: cryptoFramework.DataBlob = {
  16. data: dataTag
  17. };
  18. let gcmParamsSpec: cryptoFramework.GcmParamsSpec = {
  19. iv: ivBlob,
  20. aad: aadBlob,
  21. authTag: tagBlob,
  22. algName: 'GcmParamsSpec'
  23. };
  24. return gcmParamsSpec;
  25. }
  26. function cipherByCallback() {
  27. let gcmParams = genGcmParamsSpec();
  28. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
  29. let cipher = cryptoFramework.createCipher('AES128|GCM|PKCS7');
  30. symKeyGenerator.generateSymKey((err, symKey) => {
  31. cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, gcmParams, (err) => {
  32. let message = 'This is a test';
  33. let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) };
  34. cipher.update(plainText, (err, encryptUpdate) => {
  35. cipher.doFinal(null, (err, tag) => {
  36. gcmParams.authTag = tag;
  37. console.info('encryptUpdate plainText:' + encryptUpdate.data);
  38. });
  39. });
  40. });
  41. });
  42. }

doFinal

doFinal(data: DataBlob | null): Promise<DataBlob>

(1)在对称加解密中,doFinal加/解密(分组模式产生的)剩余数据和本次传入的数据,最后结束加密或者解密数据操作,使用Promise异步回调获取加密或者解密数据。

如果数据量较小,可以在doFinal中一次性传入数据,而不使用update;如果在本次加解密流程中,已经使用update传入过数据,可以在doFinal的data参数处传入null。

根据对称加解密的模式不同,doFinal的输出有如下区别:

  • 对于GCM和CCM模式的对称加密:一次加密流程中,如果将每一次update和doFinal的结果拼接起来,会得到“密文+authTag”,即末尾的16字节(GCM模式)或12字节(CCM模式)是authTag,而其余部分均为密文。(也就是说,如果doFinal的data参数传入null,则doFinal的结果就是authTag)

    authTag需要填入解密时的GcmParamsSpecCcmParamsSpec;密文则作为解密时的入参data。

  • 对于其他模式的对称加解密及GCM和CCM模式的对称解密:一次加解密流程中,每次update和doFinal的结果拼接起来,得到完整的明文或密文。

(2)在RSA和SM2非对称加解密中,使用doFinal方法加解密传入的数据,并使用Promise异步回调获取加密或解密结果。如果数据量较大,可以多次调用doFinal,拼接结果以获得完整的明文或密文。

说明
  1. 对称加解密中,调用doFinal标志着一次加解密流程完成,Cipher实例状态被清除。因此,后续开启新流程时,需重新调用init并传入完整参数列表进行初始化。

    即使是对同一个Cipher实例,使用相同对称密钥,进行加密后解密时,调用init仍需填写params参数,不能省略为null。

  2. 如果遇到解密失败,检查加解密数据和初始化时的参数是否匹配,包括GCM模式下加密得到的authTag是否填入解密时的GcmParamsSpec。

  3. doFinal的结果可能为null,因此在使用.data字段访问doFinal结果的具体数据前,请先判断结果是否为null,以避免产生异常。

    对于加密,CFB、OFB 和 CTR 模式,如果doFinal传入null,则返回结果为null。

    对于解密,GCM、CCM、CFB、OFB和CTR模式,如果doFinal传null,则返回结果为null;对于其他模式,如果明文是加密块大小的整倍数,调用update传入所有密文,调用doFinal传null, 则返回结果为null。

  4. 非对称加解密时多次doFinal操作的示例代码详见使用RSA非对称密钥分段加解密,SM2和RSA的操作类似。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Cipher
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
data DataBlob | null10+ 加密或者解密的数据。data参数允许为null,但不允许传入{data: Uint8Array(空) }。API 10之前只支持DataBlob,API 10之后增加支持null。

返回值:

展开
类型 说明
Promise<DataBlob> Promise对象,返回剩余数据的加/解密结果DataBlob。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620003

Parameter check failed. Possible causes:

1. The data is too long.

17630001 Crypto operation error.

示例:

此外,更多加解密流程的完整示例可参考加解密开发指导

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { buffer } from '@kit.ArkTS';
  3. function generateRandom(len: number) {
  4. let rand = cryptoFramework.createRandom();
  5. let generateRandSync = rand.generateRandomSync(len);
  6. return generateRandSync;
  7. }
  8. function genGcmParamsSpec() {
  9. let ivBlob = generateRandom(12);
  10. let arr = [1, 2, 3, 4, 5, 6, 7, 8];
  11. let dataAad = new Uint8Array(arr);
  12. let aadBlob: cryptoFramework.DataBlob = { data: dataAad };
  13. arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
  14. let dataTag = new Uint8Array(arr);
  15. let tagBlob: cryptoFramework.DataBlob = {
  16. data: dataTag
  17. };
  18. let gcmParamsSpec: cryptoFramework.GcmParamsSpec = {
  19. iv: ivBlob,
  20. aad: aadBlob,
  21. authTag: tagBlob,
  22. algName: 'GcmParamsSpec'
  23. };
  24. return gcmParamsSpec;
  25. }
  26. async function cipherByPromise() {
  27. let gcmParams = genGcmParamsSpec();
  28. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
  29. let cipher = cryptoFramework.createCipher('AES128|GCM|PKCS7');
  30. let symKey = await symKeyGenerator.generateSymKey();
  31. await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, gcmParams);
  32. let message = 'This is a test';
  33. let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) };
  34. let encryptUpdate = await cipher.update(plainText);
  35. gcmParams.authTag = await cipher.doFinal(null);
  36. console.info('encryptUpdate plainText: ' + encryptUpdate.data);
  37. }

doFinalSync12+

PhonePC/2in1TabletTVWearable

doFinalSync(data: DataBlob | null): DataBlob

(1)在对称加解密中,doFinalSync用于处理剩余数据和本次传入的数据,并结束加密或解密操作,通过注册回调函数获取加密或解密结果。

如果数据量较小,可以在doFinalSync中一次性传入数据,而不使用updateSync。如果在本次加解密流程中已经使用updateSync传入过数据,可以在doFinalSync的data参数处传入null。

根据对称加解密的模式不同,doFinalSync的输出有以下区别:

  • 对于GCM和CCM模式的对称加密:一次加密流程中,如果将每次updateSync和doFinalSync的结果拼接起来,会得到“密文 + authTag”。即末尾的16字节(GCM模式)或12字节(CCM模式)是authTag,其余部分均为密文。也就是说,如果doFinalSync的data参数传入null,则doFinalSync的结果就是 authTag。

    authTag需要填入解密时的GcmParamsSpecCcmParamsSpec;密文则作为解密时的入参data。

  • 对于其他模式的对称加解密以及GCM和CCM模式的对称解密:在一次加/解密流程中,每次updateSync和doFinalSync的结果拼接起来,得到完整的明文或密文。

(2)在RSA和SM2非对称加解密中,doFinalSync用于加解密本次传入的数据,通过注册回调函数获取加密或解密后的数据。如果数据量超过单次处理能力,可以多次调用doFinalSync,并将结果拼接以获得完整的明文或密文。

其他注意事项同接口doFinal()说明。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Cipher

参数:

展开
参数名 类型 必填 说明
data DataBlob | null 加密或者解密的数据。在对称加解密中允许为null,但不允许传入{data: Uint8Array(空) }。

返回值:

展开
类型 说明
DataBlob 返回剩余数据的加/解密结果DataBlob。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620003

Parameter check failed. Possible causes:

1. The data is too long.

17630001 Crypto operation error.

示例:

此外,更多加解密流程的完整示例可参考加解密开发指导

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { buffer } from '@kit.ArkTS';
  3. function generateRandom(len: number) {
  4. let rand = cryptoFramework.createRandom();
  5. let generateRandSync = rand.generateRandomSync(len);
  6. return generateRandSync;
  7. }
  8. function genGcmParamsSpec() {
  9. let ivBlob = generateRandom(12);
  10. let arr = [1, 2, 3, 4, 5, 6, 7, 8];
  11. let dataAad = new Uint8Array(arr);
  12. let aadBlob: cryptoFramework.DataBlob = { data: dataAad };
  13. arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
  14. let dataTag = new Uint8Array(arr);
  15. let tagBlob: cryptoFramework.DataBlob = {
  16. data: dataTag
  17. };
  18. let gcmParamsSpec: cryptoFramework.GcmParamsSpec = {
  19. iv: ivBlob,
  20. aad: aadBlob,
  21. authTag: tagBlob,
  22. algName: 'GcmParamsSpec'
  23. };
  24. return gcmParamsSpec;
  25. }
  26. async function cipherBySync() {
  27. let gcmParams = genGcmParamsSpec();
  28. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
  29. let cipher = cryptoFramework.createCipher('AES128|GCM|PKCS7');
  30. let symKey = await symKeyGenerator.generateSymKey();
  31. await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, gcmParams);
  32. let message = 'This is a test';
  33. let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) };
  34. let encryptUpdate = cipher.updateSync(plainText);
  35. gcmParams.authTag = cipher.doFinalSync(null);
  36. console.info('encryptUpdate plainText: ' + encryptUpdate.data);
  37. }

setCipherSpec10+

setCipherSpec(itemType: CipherSpecItem, itemValue: Uint8Array): void

设置加解密参数。常用的加解密参数直接通过createCipher 来指定,剩余参数通过本接口指定。当前只支持RSA算法。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Cipher
  • API版本10-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
itemType CipherSpecItem 用于指定需要设置的加解密参数。
itemValue Uint8Array 用于指定加解密参数的具体值。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

801 This operation is not supported.
17620001 Memory operation failed.
17620003

Parameter check failed. Possible causes:

1. Unsupported itemType.

17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. function testsetCipherSpec() {
  3. let cipher = cryptoFramework.createCipher('RSA2048|PKCS1_OAEP|SHA256|MGF1_SHA1');
  4. let pSource = new Uint8Array([1, 2, 3, 4]);
  5. cipher.setCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_PSRC_UINT8ARR, pSource);
  6. }

getCipherSpec10+

getCipherSpec(itemType: CipherSpecItem): string | Uint8Array

获取加解密参数。当前只支持RSA算法和SM2算法,从API version 11开始,支持SM2算法获取加解密参数。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Cipher
  • API版本10-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
itemType CipherSpecItem 用于指定需要获取的加解密参数。

返回值:

展开
类型 说明
string | Uint8Array 获取的加解密参数的具体值。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

801 This operation is not supported.
17620001 Memory operation failed.
17620003

Parameter check failed. Possible causes:

1. Unsupported itemType.

17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. function testGetCipherSpec() {
  3. let cipher = cryptoFramework.createCipher('RSA2048|PKCS1_OAEP|SHA256|MGF1_SHA1');
  4. let mdName = cipher.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MD_NAME_STR);
  5. console.info('getCipherSpec: mdName =' + mdName);
  6. }

cryptoFramework.createSign

PhonePC/2in1TabletTVWearableLite Wearable

createSign(algName: string): Sign

生成Sign实例。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Signature
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
algName string

指定签名算法:RSA、ECC、DSA、SM210+、Ed2551911+和ML-DSA26.0.0+。使用RSA PKCS #1模式时需设置摘要;使用RSA PSS模式时需设置摘要和掩码摘要。签名时,通过设置OnlySign参数可传入数据摘要仅作签名。

支持的规格详见签名验签规格

返回值

展开
类型 说明
Sign 返回由输入算法指定生成的Sign对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

801 This operation is not supported.
17620001 Memory operation failed.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. let signer1 = cryptoFramework.createSign('RSA1024|PKCS1|SHA256');
  3. let signer2 = cryptoFramework.createSign('RSA1024|PSS|SHA256|MGF1_SHA256');
  4. let signer3 = cryptoFramework.createSign('ECC224|SHA256');
  5. let signer4 = cryptoFramework.createSign('DSA2048|SHA256');
  6. let signer5 = cryptoFramework.createSign('RSA1024|PKCS1|SHA256|OnlySign');

Sign

PhonePC/2in1TabletTVWearable

Sign类,使用Sign方法之前需要创建该类的实例进行操作,通过createSign(algName: string): Sign方法构造此实例。按序调用本类中的init、update、sign方法完成签名操作。签名操作的示例代码详见签名验签开发指导

Sign类不支持重复初始化,当业务方需要使用新密钥签名时,需要重新创建新Sign对象并调用init初始化。

业务方使用时,调用createSign接口确定签名的模式,调用init接口设置密钥。

当待签名数据长度较短时,可在初始化后直接调用sign接口传入数据进行签名,无需调用update。

当待签名数据较长时,可通过update接口分段传入切分后的原文数据,最后调用sign接口对整体原文数据进行签名。

当使用update分段传入原文时,sign接口API 10之前只支持传入DataBlob, API 10之后增加支持null。业务方可在循环中调用update接口,循环结束后调用sign进行签名。

使用DSA算法签名时,如果摘要算法设置为NoHash,则不支持update操作,调用update接口将返回错误码ERR_CRYPTO_OPERATION。

属性

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Signature
  • API版本9-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
algName string 签名指定的算法名称。

init

init(priKey: PriKey, callback: AsyncCallback<void>): void

使用私钥初始化Sign对象。使用callback异步回调。init、update、sign为三段式接口,需要成组使用。其中init和sign必选,update可选。

Sign类不支持重复初始化。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Signature
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
priKey PriKey 用于Sign的初始化。
callback AsyncCallback<void> 回调函数。当签名初始化成功,err为undefined,否则为错误对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17630001 Crypto operation error.

init

init(priKey: PriKey): Promise<void>

使用私钥初始化Sign对象。使用Promise异步回调。init、update、sign为三段式接口,需要成组使用。其中init和sign必选,update可选。

Sign类不支持重复初始化。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Signature
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
priKey PriKey 用于Sign的初始化。

返回值:

展开
类型 说明
Promise<void> Promise对象,无返回结果。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17630001 Crypto operation error.

initSync12+

PhonePC/2in1TabletTVWearable

initSync(priKey: PriKey): void

使用私钥初始化Sign对象,通过同步方式获取结果。initSync、updateSync、signSync为三段式接口,需要成组使用。其中initSync和signSync必选,updateSync可选。

Sign类不支持重复调用initSync。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Signature

参数:

展开
参数名 类型 必填 说明
priKey PriKey 用于Sign的初始化。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17630001 Crypto operation error.

update

update(data: DataBlob, callback: AsyncCallback<void>): void

追加待签名数据,使用callback异步回调完成更新。

必须在对Sign实例使用init()初始化后,才能使用本函数。

说明

根据数据量,可以不调用update(即init完成后直接调用sign)或多次调用update。

算法库目前没有对update(单次或累计)的数据量设置大小限制,建议对于大数据量的签名操作,采用多次update的方式传入数据,避免一次性申请过大内存。

签名使用多次update操作的示例代码详见使用RSA密钥对分段签名验签,其余算法操作类似。

OnlySign模式下,不支持update操作,需要直接使用sign传入数据。

当使用DSA算法进行签名,并设置了摘要算法为NoHash时,则不支持update操作,update接口会返回错误码ERR_CRYPTO_OPERATION。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Signature
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
data DataBlob 传入的消息。
callback AsyncCallback<void> 回调函数。当签名更新成功,err为undefined,否则为错误对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620004 Invalid function call.
17630001 Crypto operation error.

update

update(data: DataBlob): Promise<void>

追加待签名数据,使用Promise异步回调方式完成更新。

在使用本函数前,必须先使用init()方法对Sign实例进行初始化。

说明

根据数据量,可以不调用update(即init完成后直接调用sign)或多次调用update。

算法库不对单次或累计的update数据量设置大小限制。建议在处理大数据量的签名操作时,采用多次update方式传入数据,以避免一次性申请过多内存。

签名使用多次update操作的示例代码详见使用RSA密钥对分段签名验签,其余算法操作类似。

OnlySign模式下,不支持update操作,需要直接使用sign传入数据。

当使用DSA算法进行签名,并设置了摘要算法为NoHash时,则不支持update操作,update接口会返回错误码ERR_CRYPTO_OPERATION。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Signature
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
data DataBlob 传入的消息。

返回值:

展开
类型 说明
Promise<void> Promise对象,无返回结果。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620004 Invalid function call.
17630001 Crypto operation error.

updateSync12+

PhonePC/2in1TabletTVWearable

updateSync(data: DataBlob): void

追加待签名数据,通过同步方式完成更新。

必须在对Sign实例使用initSync()初始化后,才能使用本函数。

说明

根据数据量,可以不调用updateSync(即initSync完成后直接调用signSync)或多次调用updateSync。

算法库目前没有对updateSync(单次或累计)的数据量设置大小限制,建议对于大数据量的签名操作,采用多次updateSync的方式传入数据,避免一次性申请过大内存。

签名使用多次updateSync操作的示例代码详见使用RSA密钥对分段签名验签,其余算法操作类似。

OnlySign模式下,不支持updateSync操作,需要直接使用signSync传入数据。

当使用DSA算法进行签名,并设置了摘要算法为NoHash时,则不支持updateSync操作,updateSync接口会返回错误码ERR_CRYPTO_OPERATION。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Signature

参数:

展开
参数名 类型 必填 说明
data DataBlob 传入的消息。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620004 Invalid function call.
17630001 Crypto operation error.

sign

sign(data: DataBlob | null, callback: AsyncCallback<DataBlob>): void

对数据进行签名。使用callback异步回调。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Signature
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
data DataBlob | null10+ 传入的消息。API 10之前只支持DataBlob, API 10之后增加支持null。
callback AsyncCallback<DataBlob> 回调函数,用于获取签名结果DataBlob数据。当签名成功,err为undefined,data为获取到的签名结果;否则为错误对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17630001 Crypto operation error.

sign

sign(data: DataBlob | null): Promise<DataBlob>

对数据进行签名。使用Promise异步回调。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Signature
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
data DataBlob | null10+ 传入的消息。

返回值:

展开
类型 说明
Promise<DataBlob> Promise对象,返回签名结果。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17630001 Crypto operation error.

signSync12+

PhonePC/2in1TabletTVWearable

signSync(data: DataBlob | null): DataBlob

对数据进行签名,通过同步方式返回签名结果。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Signature

参数:

展开
参数名 类型 必填 说明
data DataBlob | null 传入的消息。

返回值:

展开
类型 说明
DataBlob 返回签名结果。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17630001 Crypto operation error.

示例:

此外,更多签名验签的完整示例可参考签名验签开发指导

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { buffer } from '@kit.ArkTS';
  3. function signByCallback() {
  4. let inputUpdate: cryptoFramework.DataBlob =
  5. { data: new Uint8Array(buffer.from('This is Sign test plan1', 'utf-8').buffer) };
  6. let inputVerify: cryptoFramework.DataBlob =
  7. { data: new Uint8Array(buffer.from('This is Sign test plan2', 'utf-8').buffer) };
  8. let pkData =
  9. new Uint8Array([48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0, 48, 129, 137,
  10. 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166, 209, 250, 142, 74, 216,
  11. 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123,
  12. 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31, 214, 93, 115, 247, 69,
  13. 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176, 57, 125, 235, 51, 88,
  14. 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50, 189, 88, 254, 255, 146,
  15. 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1]);
  16. let skData =
  17. new Uint8Array([48, 130, 2, 120, 2, 1, 0, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 4, 130, 2, 98, 48,
  18. 130, 2, 94, 2, 1, 0, 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166,
  19. 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31,
  20. 172, 151, 252, 185, 123, 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31,
  21. 214, 93, 115, 247, 69, 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176,
  22. 57, 125, 235, 51, 88, 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50,
  23. 189, 88, 254, 255, 146, 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1, 2, 129, 129, 0, 152, 111, 145, 203, 10,
  24. 88, 116, 163, 112, 126, 9, 20, 68, 34, 235, 121, 98, 14, 182, 102, 151, 125, 114, 91, 210, 122, 215, 29, 212, 5,
  25. 176, 203, 238, 146, 5, 190, 41, 21, 91, 56, 125, 239, 111, 133, 53, 200, 192, 56, 132, 202, 42, 145, 120, 3, 224,
  26. 40, 223, 46, 148, 29, 41, 92, 17, 40, 12, 72, 165, 69, 192, 211, 142, 233, 81, 202, 177, 235, 156, 27, 179, 48,
  27. 18, 85, 154, 101, 193, 45, 218, 91, 24, 143, 196, 248, 16, 83, 177, 198, 136, 77, 111, 134, 60, 219, 95, 246, 23,
  28. 5, 45, 14, 83, 29, 137, 248, 159, 28, 132, 142, 205, 99, 226, 213, 84, 232, 57, 130, 156, 81, 191, 237, 2, 65, 0,
  29. 255, 158, 212, 13, 43, 132, 244, 135, 148, 161, 232, 219, 20, 81, 196, 102, 103, 44, 110, 71, 100, 62, 73, 200,
  30. 32, 138, 114, 209, 171, 150, 179, 92, 198, 5, 190, 218, 79, 227, 227, 37, 32, 57, 159, 252, 107, 211, 139, 198,
  31. 202, 248, 137, 143, 186, 205, 106, 81, 85, 207, 134, 148, 110, 204, 243, 27, 2, 65, 0, 215, 4, 181, 121, 57, 224,
  32. 170, 168, 183, 159, 152, 8, 74, 233, 80, 244, 146, 81, 48, 159, 194, 199, 36, 187, 6, 181, 182, 223, 115, 133,
  33. 151, 171, 78, 219, 90, 161, 248, 69, 6, 207, 173, 3, 81, 161, 2, 60, 238, 204, 177, 12, 138, 17, 220, 179, 71,
  34. 113, 200, 248, 159, 153, 252, 150, 180, 155, 2, 65, 0, 190, 202, 185, 211, 170, 171, 238, 40, 84, 84, 21, 13, 144,
  35. 57, 7, 178, 183, 71, 126, 120, 98, 229, 235, 4, 40, 229, 173, 149, 185, 209, 29, 199, 29, 54, 164, 161, 38, 8, 30,
  36. 62, 83, 179, 47, 42, 165, 0, 156, 207, 160, 39, 169, 229, 81, 180, 136, 170, 116, 182, 20, 233, 45, 90, 100, 9, 2,
  37. 65, 0, 152, 255, 47, 198, 15, 201, 238, 133, 89, 11, 133, 153, 184, 252, 37, 239, 177, 65, 118, 80, 231, 190, 222,
  38. 66, 250, 118, 72, 166, 221, 67, 156, 245, 119, 138, 28, 6, 142, 107, 71, 122, 116, 200, 156, 199, 237, 152, 191,
  39. 239, 4, 184, 64, 114, 143, 81, 62, 48, 23, 233, 217, 95, 47, 221, 104, 171, 2, 64, 30, 219, 1, 230, 241, 70, 246,
  40. 243, 121, 174, 67, 66, 11, 99, 202, 17, 52, 234, 78, 29, 3, 57, 51, 123, 149, 86, 64, 192, 73, 199, 108, 101, 55,
  41. 232, 41, 114, 153, 237, 253, 52, 205, 148, 45, 86, 186, 241, 182, 183, 42, 77, 252, 195, 29, 158, 173, 3, 182,
  42. 207, 254, 61, 71, 184, 167, 184]);
  43. let pubKeyBlob: cryptoFramework.DataBlob = { data: pkData };
  44. let priKeyBlob: cryptoFramework.DataBlob = { data: skData };
  45. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
  46. let signer = cryptoFramework.createSign('RSA1024|PKCS1|SHA256');
  47. rsaGenerator.convertKey(pubKeyBlob, priKeyBlob, (err, keyPair) => {
  48. signer.init(keyPair.priKey, err => {
  49. signer.update(inputUpdate, err => {
  50. signer.sign(inputVerify, (err, signData) => {
  51. console.info('sign output = ' + signData.data);
  52. });
  53. });
  54. });
  55. });
  56. }

示例:

此外,更多签名验签的完整示例可参考签名验签开发指导

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { buffer } from '@kit.ArkTS';
  3. async function genKeyPairByData(pubKeyData: Uint8Array, priKeyData: Uint8Array) {
  4. let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData };
  5. let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyData };
  6. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
  7. let keyPair = await rsaGenerator.convertKey(pubKeyBlob, priKeyBlob);
  8. console.info('convertKey result: success.');
  9. return keyPair;
  10. }
  11. async function signByPromise() {
  12. let pkData =
  13. new Uint8Array([48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0, 48, 129, 137,
  14. 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166, 209, 250, 142, 74, 216,
  15. 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123,
  16. 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31, 214, 93, 115, 247, 69,
  17. 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176, 57, 125, 235, 51, 88,
  18. 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50, 189, 88, 254, 255, 146,
  19. 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1]);
  20. let skData =
  21. new Uint8Array([48, 130, 2, 120, 2, 1, 0, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 4, 130, 2, 98, 48,
  22. 130, 2, 94, 2, 1, 0, 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166,
  23. 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31,
  24. 172, 151, 252, 185, 123, 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31,
  25. 214, 93, 115, 247, 69, 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176,
  26. 57, 125, 235, 51, 88, 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50,
  27. 189, 88, 254, 255, 146, 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1, 2, 129, 129, 0, 152, 111, 145, 203, 10,
  28. 88, 116, 163, 112, 126, 9, 20, 68, 34, 235, 121, 98, 14, 182, 102, 151, 125, 114, 91, 210, 122, 215, 29, 212, 5,
  29. 176, 203, 238, 146, 5, 190, 41, 21, 91, 56, 125, 239, 111, 133, 53, 200, 192, 56, 132, 202, 42, 145, 120, 3, 224,
  30. 40, 223, 46, 148, 29, 41, 92, 17, 40, 12, 72, 165, 69, 192, 211, 142, 233, 81, 202, 177, 235, 156, 27, 179, 48,
  31. 18, 85, 154, 101, 193, 45, 218, 91, 24, 143, 196, 248, 16, 83, 177, 198, 136, 77, 111, 134, 60, 219, 95, 246, 23,
  32. 5, 45, 14, 83, 29, 137, 248, 159, 28, 132, 142, 205, 99, 226, 213, 84, 232, 57, 130, 156, 81, 191, 237, 2, 65, 0,
  33. 255, 158, 212, 13, 43, 132, 244, 135, 148, 161, 232, 219, 20, 81, 196, 102, 103, 44, 110, 71, 100, 62, 73, 200,
  34. 32, 138, 114, 209, 171, 150, 179, 92, 198, 5, 190, 218, 79, 227, 227, 37, 32, 57, 159, 252, 107, 211, 139, 198,
  35. 202, 248, 137, 143, 186, 205, 106, 81, 85, 207, 134, 148, 110, 204, 243, 27, 2, 65, 0, 215, 4, 181, 121, 57, 224,
  36. 170, 168, 183, 159, 152, 8, 74, 233, 80, 244, 146, 81, 48, 159, 194, 199, 36, 187, 6, 181, 182, 223, 115, 133,
  37. 151, 171, 78, 219, 90, 161, 248, 69, 6, 207, 173, 3, 81, 161, 2, 60, 238, 204, 177, 12, 138, 17, 220, 179, 71,
  38. 113, 200, 248, 159, 153, 252, 150, 180, 155, 2, 65, 0, 190, 202, 185, 211, 170, 171, 238, 40, 84, 84, 21, 13, 144,
  39. 57, 7, 178, 183, 71, 126, 120, 98, 229, 235, 4, 40, 229, 173, 149, 185, 209, 29, 199, 29, 54, 164, 161, 38, 8, 30,
  40. 62, 83, 179, 47, 42, 165, 0, 156, 207, 160, 39, 169, 229, 81, 180, 136, 170, 116, 182, 20, 233, 45, 90, 100, 9, 2,
  41. 65, 0, 152, 255, 47, 198, 15, 201, 238, 133, 89, 11, 133, 153, 184, 252, 37, 239, 177, 65, 118, 80, 231, 190, 222,
  42. 66, 250, 118, 72, 166, 221, 67, 156, 245, 119, 138, 28, 6, 142, 107, 71, 122, 116, 200, 156, 199, 237, 152, 191,
  43. 239, 4, 184, 64, 114, 143, 81, 62, 48, 23, 233, 217, 95, 47, 221, 104, 171, 2, 64, 30, 219, 1, 230, 241, 70, 246,
  44. 243, 121, 174, 67, 66, 11, 99, 202, 17, 52, 234, 78, 29, 3, 57, 51, 123, 149, 86, 64, 192, 73, 199, 108, 101, 55,
  45. 232, 41, 114, 153, 237, 253, 52, 205, 148, 45, 86, 186, 241, 182, 183, 42, 77, 252, 195, 29, 158, 173, 3, 182,
  46. 207, 254, 61, 71, 184, 167, 184]);
  47. let keyPair = await genKeyPairByData(pkData, skData);
  48. let inputUpdate: cryptoFramework.DataBlob =
  49. { data: new Uint8Array(buffer.from('This is Sign test plan1', 'utf-8').buffer) };
  50. let inputSign: cryptoFramework.DataBlob =
  51. { data: new Uint8Array(buffer.from('This is Sign test plan2', 'utf-8').buffer) };
  52. let signer = cryptoFramework.createSign('RSA1024|PKCS1|SHA256');
  53. await signer.init(keyPair.priKey);
  54. await signer.update(inputUpdate);
  55. let signData = await signer.sign(inputSign);
  56. console.info('signData result: ' + signData.data);
  57. }

示例:

此外,更多签名验签的完整示例可参考签名验签开发指导

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { buffer } from '@kit.ArkTS';
  3. function genKeyPairByData(pubKeyData: Uint8Array, priKeyData: Uint8Array) {
  4. let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData };
  5. let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyData };
  6. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
  7. let keyPair = rsaGenerator.convertKeySync(pubKeyBlob, priKeyBlob);
  8. console.info('convertKeySync result: success.');
  9. return keyPair;
  10. }
  11. function signBySync() {
  12. let pkData =
  13. new Uint8Array([48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0, 48, 129, 137,
  14. 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166, 209, 250, 142, 74, 216,
  15. 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123,
  16. 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31, 214, 93, 115, 247, 69,
  17. 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176, 57, 125, 235, 51, 88,
  18. 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50, 189, 88, 254, 255, 146,
  19. 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1]);
  20. let skData =
  21. new Uint8Array([48, 130, 2, 120, 2, 1, 0, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 4, 130, 2, 98, 48,
  22. 130, 2, 94, 2, 1, 0, 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166,
  23. 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31,
  24. 172, 151, 252, 185, 123, 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31,
  25. 214, 93, 115, 247, 69, 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176,
  26. 57, 125, 235, 51, 88, 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50,
  27. 189, 88, 254, 255, 146, 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1, 2, 129, 129, 0, 152, 111, 145, 203, 10,
  28. 88, 116, 163, 112, 126, 9, 20, 68, 34, 235, 121, 98, 14, 182, 102, 151, 125, 114, 91, 210, 122, 215, 29, 212, 5,
  29. 176, 203, 238, 146, 5, 190, 41, 21, 91, 56, 125, 239, 111, 133, 53, 200, 192, 56, 132, 202, 42, 145, 120, 3, 224,
  30. 40, 223, 46, 148, 29, 41, 92, 17, 40, 12, 72, 165, 69, 192, 211, 142, 233, 81, 202, 177, 235, 156, 27, 179, 48,
  31. 18, 85, 154, 101, 193, 45, 218, 91, 24, 143, 196, 248, 16, 83, 177, 198, 136, 77, 111, 134, 60, 219, 95, 246, 23,
  32. 5, 45, 14, 83, 29, 137, 248, 159, 28, 132, 142, 205, 99, 226, 213, 84, 232, 57, 130, 156, 81, 191, 237, 2, 65, 0,
  33. 255, 158, 212, 13, 43, 132, 244, 135, 148, 161, 232, 219, 20, 81, 196, 102, 103, 44, 110, 71, 100, 62, 73, 200,
  34. 32, 138, 114, 209, 171, 150, 179, 92, 198, 5, 190, 218, 79, 227, 227, 37, 32, 57, 159, 252, 107, 211, 139, 198,
  35. 202, 248, 137, 143, 186, 205, 106, 81, 85, 207, 134, 148, 110, 204, 243, 27, 2, 65, 0, 215, 4, 181, 121, 57, 224,
  36. 170, 168, 183, 159, 152, 8, 74, 233, 80, 244, 146, 81, 48, 159, 194, 199, 36, 187, 6, 181, 182, 223, 115, 133,
  37. 151, 171, 78, 219, 90, 161, 248, 69, 6, 207, 173, 3, 81, 161, 2, 60, 238, 204, 177, 12, 138, 17, 220, 179, 71,
  38. 113, 200, 248, 159, 153, 252, 150, 180, 155, 2, 65, 0, 190, 202, 185, 211, 170, 171, 238, 40, 84, 84, 21, 13, 144,
  39. 57, 7, 178, 183, 71, 126, 120, 98, 229, 235, 4, 40, 229, 173, 149, 185, 209, 29, 199, 29, 54, 164, 161, 38, 8, 30,
  40. 62, 83, 179, 47, 42, 165, 0, 156, 207, 160, 39, 169, 229, 81, 180, 136, 170, 116, 182, 20, 233, 45, 90, 100, 9, 2,
  41. 65, 0, 152, 255, 47, 198, 15, 201, 238, 133, 89, 11, 133, 153, 184, 252, 37, 239, 177, 65, 118, 80, 231, 190, 222,
  42. 66, 250, 118, 72, 166, 221, 67, 156, 245, 119, 138, 28, 6, 142, 107, 71, 122, 116, 200, 156, 199, 237, 152, 191,
  43. 239, 4, 184, 64, 114, 143, 81, 62, 48, 23, 233, 217, 95, 47, 221, 104, 171, 2, 64, 30, 219, 1, 230, 241, 70, 246,
  44. 243, 121, 174, 67, 66, 11, 99, 202, 17, 52, 234, 78, 29, 3, 57, 51, 123, 149, 86, 64, 192, 73, 199, 108, 101, 55,
  45. 232, 41, 114, 153, 237, 253, 52, 205, 148, 45, 86, 186, 241, 182, 183, 42, 77, 252, 195, 29, 158, 173, 3, 182,
  46. 207, 254, 61, 71, 184, 167, 184]);
  47. let keyPair = genKeyPairByData(pkData, skData);
  48. let inputUpdate: cryptoFramework.DataBlob =
  49. { data: new Uint8Array(buffer.from('This is Sign test plan1', 'utf-8').buffer) };
  50. let inputSign: cryptoFramework.DataBlob =
  51. { data: new Uint8Array(buffer.from('This is Sign test plan2', 'utf-8').buffer) };
  52. let signer = cryptoFramework.createSign('RSA1024|PKCS1|SHA256');
  53. signer.initSync(keyPair.priKey);
  54. signer.updateSync(inputUpdate);
  55. let signData = signer.signSync(inputSign);
  56. console.info('signData result: ' + signData.data);
  57. }

setSignSpec10+

setSignSpec(itemType: SignSpecItem, itemValue: number): void

setSignSpec(itemType: SignSpecItem, itemValue: number | Uint8Array): void

设置签名参数。常用签名参数可通过 createSign 指定,其他参数则通过本接口设置。

当前仅支持RSA算法、SM2算法,从API version 11开始,支持SM2算法设置签名参数。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Signature
  • API版本10-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
itemType SignSpecItem 用于指定需要设置的签名参数。
itemValue number | Uint8Array11+ 用于指定签名参数的具体值。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

801 This operation is not supported.
17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. function testSetSignSpec() {
  3. let signer = cryptoFramework.createSign('RSA|PSS|SHA256|MGF1_SHA256');
  4. let setN = 20;
  5. signer.setSignSpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM, setN);
  6. }

setSignSpecBeta

PhonePC/2in1TabletTVWearable

setSignSpec(itemType: SignSpecItem, itemValue: number | Uint8Array | boolean): void

设置签名参数。签名算法字符串参数在createSign时指定;ML-DSA特有的参数(如是否确定性签名、是否使用外部μ哈希模式和上下文字符串)通过本接口设置。

起始版本: 26.0.0

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Signature

参数:

展开
参数名 类型 必填 说明
itemType SignSpecItem 用于指定需要设置的签名参数。
itemValue number | Uint8Array | boolean 用于指定签名参数的具体值,具体参数含义请参见SignSpecItem

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
801 This operation is not supported.
17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620003 Parameter check failed.
17620004 Invalid function call.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. function testSetSignSpec() {
  3. let signer = cryptoFramework.createSign('ML-DSA');
  4. signer.setSignSpec(cryptoFramework.SignSpecItem.ML_DSA_DETERMINISTIC_BOOL, true);
  5. }

getSignSpec10+

getSignSpec(itemType: SignSpecItem): string | number

获取签名参数。当前仅支持RSA算法。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Signature
  • API版本10-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
itemType SignSpecItem 用于指定需要获取的签名参数。

返回值:

展开
类型 说明
string | number 获取的签名参数的具体值。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

801 This operation is not supported.
17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. function testGetSignSpec() {
  3. let signer = cryptoFramework.createSign('RSA|PSS|SHA256|MGF1_SHA256');
  4. let setN = 32;
  5. signer.setSignSpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM, setN);
  6. signer.getSignSpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM);
  7. }

cryptoFramework.createVerify

PhonePC/2in1TabletTVWearableLite Wearable

createVerify(algName: string): Verify

生成Verify实例。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Signature
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
algName string

指定签名验证算法:RSA、ECC、DSA、SM210+、Ed2551911+和ML-DSA26.0.0+。使用RSA PKCS #1模式时需设置摘要;使用RSA PSS模式时需设置摘要和掩码摘要。使用RSA算法验签时,设置Recover参数可支持验签恢复。

支持的规格详见签名验签规格

返回值

展开
类型 说明
Verify 返回由输入算法指定生成的Verify对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

801 This operation is not supported.
17620001 Memory operation failed.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. let verifier1 = cryptoFramework.createVerify('RSA1024|PKCS1|SHA256');
  3. let verifier2 = cryptoFramework.createVerify('RSA1024|PSS|SHA256|MGF1_SHA256');
  4. let verifier3 = cryptoFramework.createVerify('RSA1024|PKCS1|SHA256|Recover');

Verify

PhonePC/2in1TabletTVWearable

Verify类,使用Verify方法之前需要创建该类的实例进行操作,通过createVerify(algName: string): Verify方法构造此实例。按序调用本类中的init、update、verify方法完成签名操作。验签操作的示例代码详见签名验签开发指导

Verify类不支持重复初始化,当业务方需要使用新密钥验签时,需要重新创建新Verify对象并调用init初始化。

业务方使用时,在createVerify时确定验签的模式,调用init接口设置密钥。

当被签名的消息较短时,可在init初始化后,(无需update)直接调用verify接口传入被签名的消息和签名(signatureData)进行验签。

当被签名的消息较长时,可通过update接口分段传入被签名的消息,最后调用verify接口对消息全文进行验签。verify接口的data入参在API 10之前只支持DataBlob, API 10之后增加支持null。业务方可在循环中调用update接口,循环结束后调用verify传入签名(signatureData)进行验签。

当使用DSA算法进行验签,并设置了摘要算法为NoHash时,则不支持update操作,update接口会返回错误码ERR_CRYPTO_OPERATION。

属性

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Signature
  • API版本9-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
algName string 验签指定的算法名称。

init

init(pubKey: PubKey, callback: AsyncCallback<void>): void

传入公钥初始化Verify对象。使用callback异步回调。init、update、verify为三段式接口,需要成组使用。其中init和verify必选,update可选。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Signature
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
pubKey PubKey 公钥对象,用于Verify的初始化。
callback AsyncCallback<void> 回调函数。当验签初始化成功,err为undefined,否则为错误对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17630001 Crypto operation error.

init

init(pubKey: PubKey): Promise<void>

传入公钥初始化Verify对象。使用Promise异步回调。init、update、verify为三段式接口,需要成组使用。其中init和verify必选,update可选。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Signature
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
pubKey PubKey 公钥对象,用于Verify的初始化。

返回值:

展开
类型 说明
Promise<void> Promise对象,无返回结果。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17630001 Crypto operation error.

initSync12+

PhonePC/2in1TabletTVWearable

initSync(pubKey: PubKey): void

传入公钥初始化Verify对象,通过同步方式获取结果。initSync、updateSync、verifySync为三段式接口,需要成组使用。其中initSync和verifySync必选,updateSync可选。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Signature

参数:

展开
参数名 类型 必填 说明
pubKey PubKey 公钥对象,用于Verify的初始化。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17630001 Crypto operation error.

update

update(data: DataBlob, callback: AsyncCallback<void>): void

追加待验签数据,使用callback异步回调完成更新。

必须在对Verify实例使用init初始化后,才能使用本函数。

说明

根据数据量,可以不调用update(即init完成后直接调用verify)或多次调用update。

算法库目前没有对update(单次或累计)的数据量设置大小限制,建议对于大数据量的验签操作,采用多次update的方式传入数据,避免一次性申请过大内存。

验签使用多次update操作的示例代码详见使用RSA密钥对分段签名验签,其余算法操作类似。

OnlyVerify模式下,不支持update操作,直接使用verify传入数据即可。

当使用DSA算法进行验签,并设置了摘要算法为NoHash时,则不支持update操作,update接口会返回错误码ERR_CRYPTO_OPERATION。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Signature
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
data DataBlob 传入的消息。
callback AsyncCallback<void> 回调函数。当验签更新成功,err为undefined,否则为错误对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620004 Invalid function call.
17630001 Crypto operation error.

update

update(data: DataBlob): Promise<void>

追加待验签数据,使用Promise异步回调完成更新。

必须在对Verify实例使用init()初始化后,才能使用本函数。

说明

根据数据量,可以不调用update(即init完成后直接调用verify)或多次调用update。

算法库目前没有对update(单次或累计)的数据量设置大小限制,建议对于大数据量的验签操作,采用多次update的方式传入数据,避免一次性申请过大内存。

验签使用多次update操作的示例代码详见使用RSA密钥对分段签名验签,其余算法操作类似。

OnlyVerify模式下,不支持update操作,直接使用verify传入数据即可。

当使用DSA算法进行验签,并设置了摘要算法为NoHash时,则不支持update操作,update接口会返回错误码ERR_CRYPTO_OPERATION。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Signature
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
data DataBlob 传入的消息。

返回值:

展开
类型 说明
Promise<void> Promise对象,无返回结果。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620004 Invalid function call.
17630001 Crypto operation error.

updateSync12+

PhonePC/2in1TabletTVWearable

updateSync(data: DataBlob): void

追加待验签数据,通过同步方式完成更新。

必须在对Verify实例使用initSync()初始化后,才能使用本函数。

说明

根据数据量,可以不调用updateSync(即initSync完成后直接调用verifySync)或多次调用updateSync。

算法库目前没有对updateSync(单次或累计)的数据量设置大小限制,建议对于大数据量的验签操作,采用多次updateSync的方式传入数据,避免一次性申请过大内存。

验签使用多次updateSync操作的示例代码详见使用RSA密钥对分段签名验签,其余算法操作类似。

OnlyVerify模式下,不支持updateSync操作,需要直接使用verifySync传入数据。

当使用DSA算法进行验签,并设置了摘要算法为NoHash时,则不支持updateSync操作,updateSync接口会返回错误码ERR_CRYPTO_OPERATION。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Signature

参数:

展开
参数名 类型 必填 说明
data DataBlob 传入的消息。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620004 Invalid function call.
17630001 Crypto operation error.

verify

verify(data: DataBlob | null, signatureData: DataBlob, callback: AsyncCallback<boolean>): void

对数据进行验签。使用callback异步回调。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Signature
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
data DataBlob | null10+ 传入的消息。API 10之前只支持DataBlob, API 10之后增加支持null。
signatureData DataBlob 签名数据。
callback AsyncCallback<boolean> 回调函数,用于获取以boolean值表示的验签结果。返回true表示验签通过;返回false表示验签不通过。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17630001 Crypto operation error.

verify

verify(data: DataBlob | null, signatureData: DataBlob): Promise<boolean>

对数据进行验签。使用Promise异步回调。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Signature
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
data DataBlob | null10+ 传入的消息。API 10之前只支持DataBlob, API 10之后增加支持null。
signatureData DataBlob 签名数据。

返回值:

展开
类型 说明
Promise<boolean> Promise对象,表示验签结果。返回true表示验签成功,返回false表示验签失败。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17630001 Crypto operation error.

verifySync12+

PhonePC/2in1TabletTVWearable

verifySync(data: DataBlob | null, signatureData: DataBlob): boolean

对数据进行验签,通过同步方式返回验签结果。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Signature

参数:

展开
参数名 类型 必填 说明
data DataBlob | null 传入的消息。
signatureData DataBlob 签名数据。

返回值:

展开
类型 说明
boolean 同步返回值,表示验签是否通过。true为通过,false为不通过。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17630001 Crypto operation error.

示例:

此外,更多签名验签的完整示例可参考签名验签开发指导

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { buffer } from '@kit.ArkTS';
  3. function verifyByCallback() {
  4. let inputUpdate: cryptoFramework.DataBlob =
  5. { data: new Uint8Array(buffer.from('This is Sign test plan1', 'utf-8').buffer) };
  6. let inputVerify: cryptoFramework.DataBlob =
  7. { data: new Uint8Array(buffer.from('This is Sign test plan2', 'utf-8').buffer) };
  8. // 根据密钥数据生成的密钥和输入的验签数据,这部分代码Verify与Sign中保持一致,保证验签通过。
  9. let pkData =
  10. new Uint8Array([48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0, 48, 129, 137,
  11. 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166, 209, 250, 142, 74, 216,
  12. 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123,
  13. 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31, 214, 93, 115, 247, 69,
  14. 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176, 57, 125, 235, 51, 88,
  15. 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50, 189, 88, 254, 255, 146,
  16. 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1]);
  17. let skData =
  18. new Uint8Array([48, 130, 2, 120, 2, 1, 0, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 4, 130, 2, 98, 48,
  19. 130, 2, 94, 2, 1, 0, 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166,
  20. 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31,
  21. 172, 151, 252, 185, 123, 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31,
  22. 214, 93, 115, 247, 69, 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176,
  23. 57, 125, 235, 51, 88, 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50,
  24. 189, 88, 254, 255, 146, 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1, 2, 129, 129, 0, 152, 111, 145, 203, 10,
  25. 88, 116, 163, 112, 126, 9, 20, 68, 34, 235, 121, 98, 14, 182, 102, 151, 125, 114, 91, 210, 122, 215, 29, 212, 5,
  26. 176, 203, 238, 146, 5, 190, 41, 21, 91, 56, 125, 239, 111, 133, 53, 200, 192, 56, 132, 202, 42, 145, 120, 3, 224,
  27. 40, 223, 46, 148, 29, 41, 92, 17, 40, 12, 72, 165, 69, 192, 211, 142, 233, 81, 202, 177, 235, 156, 27, 179, 48,
  28. 18, 85, 154, 101, 193, 45, 218, 91, 24, 143, 196, 248, 16, 83, 177, 198, 136, 77, 111, 134, 60, 219, 95, 246, 23,
  29. 5, 45, 14, 83, 29, 137, 248, 159, 28, 132, 142, 205, 99, 226, 213, 84, 232, 57, 130, 156, 81, 191, 237, 2, 65, 0,
  30. 255, 158, 212, 13, 43, 132, 244, 135, 148, 161, 232, 219, 20, 81, 196, 102, 103, 44, 110, 71, 100, 62, 73, 200,
  31. 32, 138, 114, 209, 171, 150, 179, 92, 198, 5, 190, 218, 79, 227, 227, 37, 32, 57, 159, 252, 107, 211, 139, 198,
  32. 202, 248, 137, 143, 186, 205, 106, 81, 85, 207, 134, 148, 110, 204, 243, 27, 2, 65, 0, 215, 4, 181, 121, 57, 224,
  33. 170, 168, 183, 159, 152, 8, 74, 233, 80, 244, 146, 81, 48, 159, 194, 199, 36, 187, 6, 181, 182, 223, 115, 133,
  34. 151, 171, 78, 219, 90, 161, 248, 69, 6, 207, 173, 3, 81, 161, 2, 60, 238, 204, 177, 12, 138, 17, 220, 179, 71,
  35. 113, 200, 248, 159, 153, 252, 150, 180, 155, 2, 65, 0, 190, 202, 185, 211, 170, 171, 238, 40, 84, 84, 21, 13, 144,
  36. 57, 7, 178, 183, 71, 126, 120, 98, 229, 235, 4, 40, 229, 173, 149, 185, 209, 29, 199, 29, 54, 164, 161, 38, 8, 30,
  37. 62, 83, 179, 47, 42, 165, 0, 156, 207, 160, 39, 169, 229, 81, 180, 136, 170, 116, 182, 20, 233, 45, 90, 100, 9, 2,
  38. 65, 0, 152, 255, 47, 198, 15, 201, 238, 133, 89, 11, 133, 153, 184, 252, 37, 239, 177, 65, 118, 80, 231, 190, 222,
  39. 66, 250, 118, 72, 166, 221, 67, 156, 245, 119, 138, 28, 6, 142, 107, 71, 122, 116, 200, 156, 199, 237, 152, 191,
  40. 239, 4, 184, 64, 114, 143, 81, 62, 48, 23, 233, 217, 95, 47, 221, 104, 171, 2, 64, 30, 219, 1, 230, 241, 70, 246,
  41. 243, 121, 174, 67, 66, 11, 99, 202, 17, 52, 234, 78, 29, 3, 57, 51, 123, 149, 86, 64, 192, 73, 199, 108, 101, 55,
  42. 232, 41, 114, 153, 237, 253, 52, 205, 148, 45, 86, 186, 241, 182, 183, 42, 77, 252, 195, 29, 158, 173, 3, 182,
  43. 207, 254, 61, 71, 184, 167, 184]);
  44. let pubKeyBlob: cryptoFramework.DataBlob = { data: pkData };
  45. let priKeyBlob: cryptoFramework.DataBlob = { data: skData };
  46. // 该数据取自Sign中的signData.data。
  47. let signMessageBlob: cryptoFramework.DataBlob = {
  48. data: new Uint8Array([9, 68, 164, 161, 230, 155, 255, 153, 10, 12, 14, 22, 146, 115, 209, 167, 223, 133, 89, 173,
  49. 50, 249, 176, 104, 10, 251, 219, 104, 117, 196, 105, 65, 249, 139, 119, 41, 15, 171, 191, 11, 177, 177, 1, 119,
  50. 130, 142, 87, 183, 32, 220, 226, 28, 38, 73, 222, 172, 153, 26, 87, 58, 188, 42, 150, 67, 94, 214, 147, 64, 202,
  51. 87, 155, 125, 254, 112, 95, 176, 255, 207, 106, 43, 228, 153, 131, 240, 120, 88, 253, 179, 207, 207, 110, 223,
  52. 173, 15, 113, 11, 183, 122, 237, 205, 206, 123, 246, 33, 167, 169, 251, 237, 199, 26, 220, 152, 190, 117, 131, 74,
  53. 232, 50, 39, 172, 232, 178, 112, 73, 251, 235, 131, 209])
  54. }
  55. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
  56. let verifier = cryptoFramework.createVerify('RSA1024|PKCS1|SHA256');
  57. rsaGenerator.convertKey(pubKeyBlob, priKeyBlob, (err, keyPair) => {
  58. verifier.init(keyPair.pubKey, err => {
  59. verifier.update(inputUpdate, err => {
  60. verifier.verify(inputVerify, signMessageBlob, (err, res) => {
  61. console.info('verify result = ' + res);
  62. });
  63. });
  64. });
  65. });
  66. }

示例:

更多示例请参见签名验签开发指导

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { buffer } from '@kit.ArkTS';
  3. async function genKeyPairByData(pubKeyData: Uint8Array, priKeyData: Uint8Array) {
  4. let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData };
  5. let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyData };
  6. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
  7. let keyPair = await rsaGenerator.convertKey(pubKeyBlob, priKeyBlob);
  8. console.info('convertKey result: success.');
  9. return keyPair;
  10. }
  11. async function verifyByPromise() {
  12. // 根据密钥数据生成的密钥和输入的验签数据,这部分代码Verify与Sign中保持一致,保证验签通过。
  13. let pkData =
  14. new Uint8Array([48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0, 48, 129, 137,
  15. 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166, 209, 250, 142, 74, 216,
  16. 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123,
  17. 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31, 214, 93, 115, 247, 69,
  18. 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176, 57, 125, 235, 51, 88,
  19. 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50, 189, 88, 254, 255, 146,
  20. 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1]);
  21. let skData =
  22. new Uint8Array([48, 130, 2, 120, 2, 1, 0, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 4, 130, 2, 98, 48,
  23. 130, 2, 94, 2, 1, 0, 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166,
  24. 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31,
  25. 172, 151, 252, 185, 123, 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31,
  26. 214, 93, 115, 247, 69, 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176,
  27. 57, 125, 235, 51, 88, 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50,
  28. 189, 88, 254, 255, 146, 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1, 2, 129, 129, 0, 152, 111, 145, 203, 10,
  29. 88, 116, 163, 112, 126, 9, 20, 68, 34, 235, 121, 98, 14, 182, 102, 151, 125, 114, 91, 210, 122, 215, 29, 212, 5,
  30. 176, 203, 238, 146, 5, 190, 41, 21, 91, 56, 125, 239, 111, 133, 53, 200, 192, 56, 132, 202, 42, 145, 120, 3, 224,
  31. 40, 223, 46, 148, 29, 41, 92, 17, 40, 12, 72, 165, 69, 192, 211, 142, 233, 81, 202, 177, 235, 156, 27, 179, 48,
  32. 18, 85, 154, 101, 193, 45, 218, 91, 24, 143, 196, 248, 16, 83, 177, 198, 136, 77, 111, 134, 60, 219, 95, 246, 23,
  33. 5, 45, 14, 83, 29, 137, 248, 159, 28, 132, 142, 205, 99, 226, 213, 84, 232, 57, 130, 156, 81, 191, 237, 2, 65, 0,
  34. 255, 158, 212, 13, 43, 132, 244, 135, 148, 161, 232, 219, 20, 81, 196, 102, 103, 44, 110, 71, 100, 62, 73, 200,
  35. 32, 138, 114, 209, 171, 150, 179, 92, 198, 5, 190, 218, 79, 227, 227, 37, 32, 57, 159, 252, 107, 211, 139, 198,
  36. 202, 248, 137, 143, 186, 205, 106, 81, 85, 207, 134, 148, 110, 204, 243, 27, 2, 65, 0, 215, 4, 181, 121, 57, 224,
  37. 170, 168, 183, 159, 152, 8, 74, 233, 80, 244, 146, 81, 48, 159, 194, 199, 36, 187, 6, 181, 182, 223, 115, 133,
  38. 151, 171, 78, 219, 90, 161, 248, 69, 6, 207, 173, 3, 81, 161, 2, 60, 238, 204, 177, 12, 138, 17, 220, 179, 71,
  39. 113, 200, 248, 159, 153, 252, 150, 180, 155, 2, 65, 0, 190, 202, 185, 211, 170, 171, 238, 40, 84, 84, 21, 13, 144,
  40. 57, 7, 178, 183, 71, 126, 120, 98, 229, 235, 4, 40, 229, 173, 149, 185, 209, 29, 199, 29, 54, 164, 161, 38, 8, 30,
  41. 62, 83, 179, 47, 42, 165, 0, 156, 207, 160, 39, 169, 229, 81, 180, 136, 170, 116, 182, 20, 233, 45, 90, 100, 9, 2,
  42. 65, 0, 152, 255, 47, 198, 15, 201, 238, 133, 89, 11, 133, 153, 184, 252, 37, 239, 177, 65, 118, 80, 231, 190, 222,
  43. 66, 250, 118, 72, 166, 221, 67, 156, 245, 119, 138, 28, 6, 142, 107, 71, 122, 116, 200, 156, 199, 237, 152, 191,
  44. 239, 4, 184, 64, 114, 143, 81, 62, 48, 23, 233, 217, 95, 47, 221, 104, 171, 2, 64, 30, 219, 1, 230, 241, 70, 246,
  45. 243, 121, 174, 67, 66, 11, 99, 202, 17, 52, 234, 78, 29, 3, 57, 51, 123, 149, 86, 64, 192, 73, 199, 108, 101, 55,
  46. 232, 41, 114, 153, 237, 253, 52, 205, 148, 45, 86, 186, 241, 182, 183, 42, 77, 252, 195, 29, 158, 173, 3, 182,
  47. 207, 254, 61, 71, 184, 167, 184]);
  48. let keyPair = await genKeyPairByData(pkData, skData);
  49. let inputUpdate: cryptoFramework.DataBlob =
  50. { data: new Uint8Array(buffer.from('This is Sign test plan1', 'utf-8').buffer) };
  51. let inputVerify: cryptoFramework.DataBlob =
  52. { data: new Uint8Array(buffer.from('This is Sign test plan2', 'utf-8').buffer) };
  53. // 该数据取自Sign中的signData.data。
  54. let signMessageBlob: cryptoFramework.DataBlob = {
  55. data: new Uint8Array([9, 68, 164, 161, 230, 155, 255, 153, 10, 12, 14, 22, 146, 115, 209, 167, 223, 133, 89, 173,
  56. 50, 249, 176, 104, 10, 251, 219, 104, 117, 196, 105, 65, 249, 139, 119, 41, 15, 171, 191, 11, 177, 177, 1, 119,
  57. 130, 142, 87, 183, 32, 220, 226, 28, 38, 73, 222, 172, 153, 26, 87, 58, 188, 42, 150, 67, 94, 214, 147, 64, 202,
  58. 87, 155, 125, 254, 112, 95, 176, 255, 207, 106, 43, 228, 153, 131, 240, 120, 88, 253, 179, 207, 207, 110, 223,
  59. 173, 15, 113, 11, 183, 122, 237, 205, 206, 123, 246, 33, 167, 169, 251, 237, 199, 26, 220, 152, 190, 117, 131, 74,
  60. 232, 50, 39, 172, 232, 178, 112, 73, 251, 235, 131, 209])
  61. };
  62. let verifier = cryptoFramework.createVerify('RSA1024|PKCS1|SHA256');
  63. await verifier.init(keyPair.pubKey);
  64. await verifier.update(inputUpdate);
  65. let res = await verifier.verify(inputVerify, signMessageBlob);
  66. console.info('verify result: ' + res);
  67. }

示例:

此外,更多签名验签的完整示例可参考签名验签开发指导

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { buffer } from '@kit.ArkTS';
  3. function genKeyPairByData(pubKeyData: Uint8Array, priKeyData: Uint8Array) {
  4. let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData };
  5. let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyData };
  6. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
  7. let keyPair = rsaGenerator.convertKeySync(pubKeyBlob, priKeyBlob);
  8. console.info('convertKey result: success.');
  9. return keyPair;
  10. }
  11. function verifyBySync() {
  12. // 根据密钥数据生成的密钥和输入的验签数据,这部分代码Verify与Sign中保持一致,保证验签通过。
  13. let pkData =
  14. new Uint8Array([48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0, 48, 129, 137,
  15. 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166, 209, 250, 142, 74, 216,
  16. 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123,
  17. 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31, 214, 93, 115, 247, 69,
  18. 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176, 57, 125, 235, 51, 88,
  19. 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50, 189, 88, 254, 255, 146,
  20. 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1]);
  21. let skData =
  22. new Uint8Array([48, 130, 2, 120, 2, 1, 0, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 4, 130, 2, 98, 48,
  23. 130, 2, 94, 2, 1, 0, 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166,
  24. 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31,
  25. 172, 151, 252, 185, 123, 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31,
  26. 214, 93, 115, 247, 69, 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176,
  27. 57, 125, 235, 51, 88, 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50,
  28. 189, 88, 254, 255, 146, 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1, 2, 129, 129, 0, 152, 111, 145, 203, 10,
  29. 88, 116, 163, 112, 126, 9, 20, 68, 34, 235, 121, 98, 14, 182, 102, 151, 125, 114, 91, 210, 122, 215, 29, 212, 5,
  30. 176, 203, 238, 146, 5, 190, 41, 21, 91, 56, 125, 239, 111, 133, 53, 200, 192, 56, 132, 202, 42, 145, 120, 3, 224,
  31. 40, 223, 46, 148, 29, 41, 92, 17, 40, 12, 72, 165, 69, 192, 211, 142, 233, 81, 202, 177, 235, 156, 27, 179, 48,
  32. 18, 85, 154, 101, 193, 45, 218, 91, 24, 143, 196, 248, 16, 83, 177, 198, 136, 77, 111, 134, 60, 219, 95, 246, 23,
  33. 5, 45, 14, 83, 29, 137, 248, 159, 28, 132, 142, 205, 99, 226, 213, 84, 232, 57, 130, 156, 81, 191, 237, 2, 65, 0,
  34. 255, 158, 212, 13, 43, 132, 244, 135, 148, 161, 232, 219, 20, 81, 196, 102, 103, 44, 110, 71, 100, 62, 73, 200,
  35. 32, 138, 114, 209, 171, 150, 179, 92, 198, 5, 190, 218, 79, 227, 227, 37, 32, 57, 159, 252, 107, 211, 139, 198,
  36. 202, 248, 137, 143, 186, 205, 106, 81, 85, 207, 134, 148, 110, 204, 243, 27, 2, 65, 0, 215, 4, 181, 121, 57, 224,
  37. 170, 168, 183, 159, 152, 8, 74, 233, 80, 244, 146, 81, 48, 159, 194, 199, 36, 187, 6, 181, 182, 223, 115, 133,
  38. 151, 171, 78, 219, 90, 161, 248, 69, 6, 207, 173, 3, 81, 161, 2, 60, 238, 204, 177, 12, 138, 17, 220, 179, 71,
  39. 113, 200, 248, 159, 153, 252, 150, 180, 155, 2, 65, 0, 190, 202, 185, 211, 170, 171, 238, 40, 84, 84, 21, 13, 144,
  40. 57, 7, 178, 183, 71, 126, 120, 98, 229, 235, 4, 40, 229, 173, 149, 185, 209, 29, 199, 29, 54, 164, 161, 38, 8, 30,
  41. 62, 83, 179, 47, 42, 165, 0, 156, 207, 160, 39, 169, 229, 81, 180, 136, 170, 116, 182, 20, 233, 45, 90, 100, 9, 2,
  42. 65, 0, 152, 255, 47, 198, 15, 201, 238, 133, 89, 11, 133, 153, 184, 252, 37, 239, 177, 65, 118, 80, 231, 190, 222,
  43. 66, 250, 118, 72, 166, 221, 67, 156, 245, 119, 138, 28, 6, 142, 107, 71, 122, 116, 200, 156, 199, 237, 152, 191,
  44. 239, 4, 184, 64, 114, 143, 81, 62, 48, 23, 233, 217, 95, 47, 221, 104, 171, 2, 64, 30, 219, 1, 230, 241, 70, 246,
  45. 243, 121, 174, 67, 66, 11, 99, 202, 17, 52, 234, 78, 29, 3, 57, 51, 123, 149, 86, 64, 192, 73, 199, 108, 101, 55,
  46. 232, 41, 114, 153, 237, 253, 52, 205, 148, 45, 86, 186, 241, 182, 183, 42, 77, 252, 195, 29, 158, 173, 3, 182,
  47. 207, 254, 61, 71, 184, 167, 184]);
  48. let keyPair = genKeyPairByData(pkData, skData);
  49. let inputUpdate: cryptoFramework.DataBlob =
  50. { data: new Uint8Array(buffer.from('This is Sign test plan1', 'utf-8').buffer) };
  51. let inputVerify: cryptoFramework.DataBlob =
  52. { data: new Uint8Array(buffer.from('This is Sign test plan2', 'utf-8').buffer) };
  53. // 该数据取自Sign中的signData.data。
  54. let signMessageBlob: cryptoFramework.DataBlob = {
  55. data: new Uint8Array([9, 68, 164, 161, 230, 155, 255, 153, 10, 12, 14, 22, 146, 115, 209, 167, 223, 133, 89, 173,
  56. 50, 249, 176, 104, 10, 251, 219, 104, 117, 196, 105, 65, 249, 139, 119, 41, 15, 171, 191, 11, 177, 177, 1, 119,
  57. 130, 142, 87, 183, 32, 220, 226, 28, 38, 73, 222, 172, 153, 26, 87, 58, 188, 42, 150, 67, 94, 214, 147, 64, 202,
  58. 87, 155, 125, 254, 112, 95, 176, 255, 207, 106, 43, 228, 153, 131, 240, 120, 88, 253, 179, 207, 207, 110, 223,
  59. 173, 15, 113, 11, 183, 122, 237, 205, 206, 123, 246, 33, 167, 169, 251, 237, 199, 26, 220, 152, 190, 117, 131, 74,
  60. 232, 50, 39, 172, 232, 178, 112, 73, 251, 235, 131, 209])
  61. };
  62. let verifier = cryptoFramework.createVerify('RSA1024|PKCS1|SHA256');
  63. verifier.initSync(keyPair.pubKey);
  64. verifier.updateSync(inputUpdate);
  65. let res = verifier.verifySync(inputVerify, signMessageBlob);
  66. console.info('verify result: ' + res);
  67. }

recover12+

PhonePC/2in1TabletTVWearable

recover(signatureData: DataBlob): Promise<DataBlob | null>

对数据进行签名恢复原始数据。使用Promise异步回调。

说明
  • 目前仅RSA支持。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Signature

参数:

展开
参数名 类型 必填 说明
signatureData DataBlob 签名数据。

返回值:

展开
类型 说明
Promise<DataBlob | null> Promise对象,返回签名恢复的原始数据。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620004 Invalid function call.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. async function genKeyPairByData(pubKeyData: Uint8Array, priKeyData: Uint8Array) {
  4. let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData };
  5. let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyData };
  6. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
  7. let keyPair = await rsaGenerator.convertKey(pubKeyBlob, priKeyBlob);
  8. console.info('convertKey result: success.');
  9. return keyPair;
  10. }
  11. async function recoverByPromise() {
  12. // 根据密钥数据生成的密钥和输入的验签数据,这部分代码Verify与Sign中保持一致,保证验签通过。
  13. let pkData =
  14. new Uint8Array([48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0, 48, 129, 137,
  15. 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166, 209, 250, 142, 74, 216,
  16. 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123,
  17. 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31, 214, 93, 115, 247, 69,
  18. 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176, 57, 125, 235, 51, 88,
  19. 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50, 189, 88, 254, 255, 146,
  20. 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1]);
  21. let skData =
  22. new Uint8Array([48, 130, 2, 120, 2, 1, 0, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 4, 130, 2, 98, 48,
  23. 130, 2, 94, 2, 1, 0, 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166,
  24. 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31,
  25. 172, 151, 252, 185, 123, 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31,
  26. 214, 93, 115, 247, 69, 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176,
  27. 57, 125, 235, 51, 88, 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50,
  28. 189, 88, 254, 255, 146, 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1, 2, 129, 129, 0, 152, 111, 145, 203, 10,
  29. 88, 116, 163, 112, 126, 9, 20, 68, 34, 235, 121, 98, 14, 182, 102, 151, 125, 114, 91, 210, 122, 215, 29, 212, 5,
  30. 176, 203, 238, 146, 5, 190, 41, 21, 91, 56, 125, 239, 111, 133, 53, 200, 192, 56, 132, 202, 42, 145, 120, 3, 224,
  31. 40, 223, 46, 148, 29, 41, 92, 17, 40, 12, 72, 165, 69, 192, 211, 142, 233, 81, 202, 177, 235, 156, 27, 179, 48,
  32. 18, 85, 154, 101, 193, 45, 218, 91, 24, 143, 196, 248, 16, 83, 177, 198, 136, 77, 111, 134, 60, 219, 95, 246, 23,
  33. 5, 45, 14, 83, 29, 137, 248, 159, 28, 132, 142, 205, 99, 226, 213, 84, 232, 57, 130, 156, 81, 191, 237, 2, 65, 0,
  34. 255, 158, 212, 13, 43, 132, 244, 135, 148, 161, 232, 219, 20, 81, 196, 102, 103, 44, 110, 71, 100, 62, 73, 200,
  35. 32, 138, 114, 209, 171, 150, 179, 92, 198, 5, 190, 218, 79, 227, 227, 37, 32, 57, 159, 252, 107, 211, 139, 198,
  36. 202, 248, 137, 143, 186, 205, 106, 81, 85, 207, 134, 148, 110, 204, 243, 27, 2, 65, 0, 215, 4, 181, 121, 57, 224,
  37. 170, 168, 183, 159, 152, 8, 74, 233, 80, 244, 146, 81, 48, 159, 194, 199, 36, 187, 6, 181, 182, 223, 115, 133,
  38. 151, 171, 78, 219, 90, 161, 248, 69, 6, 207, 173, 3, 81, 161, 2, 60, 238, 204, 177, 12, 138, 17, 220, 179, 71,
  39. 113, 200, 248, 159, 153, 252, 150, 180, 155, 2, 65, 0, 190, 202, 185, 211, 170, 171, 238, 40, 84, 84, 21, 13, 144,
  40. 57, 7, 178, 183, 71, 126, 120, 98, 229, 235, 4, 40, 229, 173, 149, 185, 209, 29, 199, 29, 54, 164, 161, 38, 8, 30,
  41. 62, 83, 179, 47, 42, 165, 0, 156, 207, 160, 39, 169, 229, 81, 180, 136, 170, 116, 182, 20, 233, 45, 90, 100, 9, 2,
  42. 65, 0, 152, 255, 47, 198, 15, 201, 238, 133, 89, 11, 133, 153, 184, 252, 37, 239, 177, 65, 118, 80, 231, 190, 222,
  43. 66, 250, 118, 72, 166, 221, 67, 156, 245, 119, 138, 28, 6, 142, 107, 71, 122, 116, 200, 156, 199, 237, 152, 191,
  44. 239, 4, 184, 64, 114, 143, 81, 62, 48, 23, 233, 217, 95, 47, 221, 104, 171, 2, 64, 30, 219, 1, 230, 241, 70, 246,
  45. 243, 121, 174, 67, 66, 11, 99, 202, 17, 52, 234, 78, 29, 3, 57, 51, 123, 149, 86, 64, 192, 73, 199, 108, 101, 55,
  46. 232, 41, 114, 153, 237, 253, 52, 205, 148, 45, 86, 186, 241, 182, 183, 42, 77, 252, 195, 29, 158, 173, 3, 182,
  47. 207, 254, 61, 71, 184, 167, 184]);
  48. let keyPair = await genKeyPairByData(pkData, skData);
  49. // 该数据取自Sign中的signData.data。
  50. let signMessageBlob: cryptoFramework.DataBlob = {
  51. data: new Uint8Array([9, 68, 164, 161, 230, 155, 255, 153, 10, 12, 14, 22, 146, 115, 209, 167, 223, 133, 89, 173,
  52. 50, 249, 176, 104, 10, 251, 219, 104, 117, 196, 105, 65, 249, 139, 119, 41, 15, 171, 191, 11, 177, 177, 1, 119,
  53. 130, 142, 87, 183, 32, 220, 226, 28, 38, 73, 222, 172, 153, 26, 87, 58, 188, 42, 150, 67, 94, 214, 147, 64, 202,
  54. 87, 155, 125, 254, 112, 95, 176, 255, 207, 106, 43, 228, 153, 131, 240, 120, 88, 253, 179, 207, 207, 110, 223,
  55. 173, 15, 113, 11, 183, 122, 237, 205, 206, 123, 246, 33, 167, 169, 251, 237, 199, 26, 220, 152, 190, 117, 131, 74,
  56. 232, 50, 39, 172, 232, 178, 112, 73, 251, 235, 131, 209])
  57. };
  58. let verifier = cryptoFramework.createVerify('RSA1024|PKCS1|SHA256|Recover');
  59. await verifier.init(keyPair.pubKey);
  60. try {
  61. let rawSignData = await verifier.recover(signMessageBlob);
  62. if (rawSignData != null) {
  63. console.info('[Promise]: recover result: ' + rawSignData.data);
  64. } else {
  65. console.error('[Promise]: get verify recover result: fail.');
  66. }
  67. } catch (error) {
  68. let e: BusinessError = error as BusinessError;
  69. console.error(`promise failed: errCode: ${e.code}, errMsg: ${e.message}`);
  70. }
  71. }

recoverSync12+

PhonePC/2in1TabletTVWearable

recoverSync(signatureData: DataBlob): DataBlob | null

对数据进行签名恢复原始数据。

说明
  • 目前仅RSA支持。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Signature

参数:

展开
参数名 类型 必填 说明
signatureData DataBlob 签名数据。

返回值:

展开
类型 说明
DataBlob | null 验签恢复的数据。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620004 Invalid function call.
17630001 Crypto operation error.

setVerifySpec10+

setVerifySpec(itemType: SignSpecItem, itemValue: number): void

setVerifySpec(itemType: SignSpecItem, itemValue: number | Uint8Array): void

设置验签参数。常用的验签参数直接通过createVerify 来指定,剩余参数通过本接口指定。

支持RSA算法和SM2算法,从API version 11开始,支持SM2算法设置签名验证参数。

验签的参数应当与签名的参数保持一致。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Signature
  • API版本10-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
itemType SignSpecItem 用于指定需要设置的验签参数。
itemValue number | Uint8Array11+ 用于指定验签参数的具体值。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

801 This operation is not supported.
17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. function testSetVerifySpec() {
  3. let verifier = cryptoFramework.createVerify('RSA2048|PSS|SHA256|MGF1_SHA256');
  4. let setN = 20;
  5. verifier.setVerifySpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM, setN);
  6. }

setVerifySpecBeta

PhonePC/2in1TabletTVWearable

setVerifySpec(itemType: SignSpecItem, itemValue: number | Uint8Array | boolean): void

设置验签参数。验签算法字符串参数在createVerify时指定;ML-DSA特有的参数(如是否使用外部μ哈希模式和上下文字符串)通过本接口设置。

验签的参数应当与签名的参数保持一致。

起始版本: 26.0.0

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Signature

参数:

展开
参数名 类型 必填 说明
itemType SignSpecItem 用于指定需要设置的验签参数。
itemValue number | Uint8Array | boolean 用于指定验签参数的具体值,具体参数含义请参见SignSpecItem

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
801 This operation is not supported.
17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620003 Parameter check failed.
17620004 Invalid function call.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. function testSetVerifySpec() {
  3. let verifier = cryptoFramework.createVerify('ML-DSA');
  4. verifier.setVerifySpec(cryptoFramework.SignSpecItem.ML_DSA_MU_BOOL, false);
  5. }

getVerifySpec10+

getVerifySpec(itemType: SignSpecItem): string | number

获取验签参数。当前只支持RSA算法。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Signature
  • API版本10-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
itemType SignSpecItem 用于指定需要获取的验签参数。

返回值:

展开
类型 说明
string | number 获取的验签参数的具体值。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

801 This operation is not supported.
17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. function testGetVerifySpec() {
  3. let verifier = cryptoFramework.createVerify('RSA2048|PSS|SHA256|MGF1_SHA256');
  4. let setN = 20;
  5. verifier.setVerifySpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM, setN);
  6. verifier.getVerifySpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM);
  7. }

cryptoFramework.createKeyAgreement

PhonePC/2in1TabletTVWearableLite Wearable

createKeyAgreement(algName: string): KeyAgreement

生成KeyAgreement实例。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.KeyAgreement
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
algName string

指定密钥协商算法:目前仅支持ECDH,从API version 11开始,增加支持X25519和DH。

支持的规格详见密钥协商规格

返回值

展开
类型 说明
KeyAgreement 返回由输入算法指定生成的KeyAgreement对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

801 This operation is not supported.
17620001 Memory operation failed.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. let keyAgreement = cryptoFramework.createKeyAgreement('ECC256');

KeyAgreement

PhonePC/2in1TabletTVWearable

KeyAgreement类,使用密钥协商方法之前需要创建该类的实例进行操作,通过createKeyAgreement(algName: string): KeyAgreement方法构造此实例。

属性

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.KeyAgreement
  • API版本9-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
algName string 密钥协商指定的算法名称。

generateSecret

generateSecret(priKey: PriKey, pubKey: PubKey, callback: AsyncCallback<DataBlob>): void

基于传入的私钥与公钥进行密钥协商。使用callback异步回调。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.KeyAgreement
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
priKey PriKey 设置密钥协商的私钥输入。
pubKey PubKey 设置密钥协商的公钥输入。
callback AsyncCallback<DataBlob> 回调函数,用于密钥协商。当密钥协商成功,err为undefined,data为协商的共享密钥;否则为错误对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17630001 Crypto operation error.

generateSecret

generateSecret(priKey: PriKey, pubKey: PubKey): Promise<DataBlob>

基于传入的私钥与公钥进行密钥协商。使用Promise异步回调。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.KeyAgreement
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
priKey PriKey 设置密钥协商的私钥输入。
pubKey PubKey 设置密钥协商的公钥输入。

返回值:

展开
类型 说明
Promise<DataBlob> Promise对象,返回密钥协商的共享密钥。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17630001 Crypto operation error.

generateSecretSync12+

PhonePC/2in1TabletTVWearable

generateSecretSync(priKey: PriKey, pubKey: PubKey): DataBlob

基于传入的私钥与公钥进行密钥协商,通过同步返回共享密钥。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.KeyAgreement

参数:

展开
参数名 类型 必填 说明
priKey PriKey 设置密钥协商的私钥输入。
pubKey PubKey 设置密钥协商的公钥输入。

返回值:

展开
类型 说明
DataBlob 共享密钥。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. async function testGenerateSecret() {
  3. let eccGen = cryptoFramework.createAsyKeyGenerator('ECC256');
  4. let globalKeyPair = await eccGen.generateKeyPair();
  5. let keyAgreement = cryptoFramework.createKeyAgreement('ECC256');
  6. keyAgreement.generateSecret(globalKeyPair.priKey, globalKeyPair.pubKey, (err, secret) => {
  7. if (err) {
  8. console.error(`keyAgreement failed, errCode: ${err.code}, errMsg: ${err.message}`);
  9. return;
  10. }
  11. console.info('keyAgreement output = ' + secret.data);
  12. });
  13. }

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. async function testGenerateSecret() {
  4. let eccGen = cryptoFramework.createAsyKeyGenerator('ECC256');
  5. let globalKeyPair = await eccGen.generateKeyPair();
  6. let keyAgreement = cryptoFramework.createKeyAgreement('ECC256');
  7. let keyAgreementPromise = keyAgreement.generateSecret(globalKeyPair.priKey, globalKeyPair.pubKey);
  8. keyAgreementPromise.then(secret => {
  9. console.info('keyAgreement output = ' + secret.data);
  10. }).catch((error: BusinessError) => {
  11. console.error(`keyAgreement failed: errCode: ${error.code}, errMsg: ${error.message}`);
  12. });
  13. }

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. async function testGenerateSecretSync() {
  3. let eccGen = cryptoFramework.createAsyKeyGenerator('ECC256');
  4. let globalKeyPair = await eccGen.generateKeyPair();
  5. let keyAgreement = cryptoFramework.createKeyAgreement('ECC256');
  6. let secret = keyAgreement.generateSecretSync(globalKeyPair.priKey, globalKeyPair.pubKey);
  7. console.info('[Sync]keyAgreement output = ' + secret.data);
  8. }

cryptoFramework.createMd

PhonePC/2in1TabletTVWearableLite Wearable

createMd(algName: string): Md

生成Md实例,用于进行消息摘要的计算与操作。

支持的规格详见MD消息摘要算法规格

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束:

  • API版本12+:此接口可在Stage模型和FA模型下使用。
  • API版本9-11:此接口仅可在Stage模型下使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.MessageDigest
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
algName string 指定摘要算法,支持算法请参考MD消息摘要算法规格

返回值

展开
类型 说明
Md 返回由输入算法指定生成的Md对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. try {
  4. let md = cryptoFramework.createMd('SHA256');
  5. } catch (error) {
  6. let e: BusinessError = error as BusinessError;
  7. console.error(`sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
  8. }

Md

PhonePC/2in1TabletTVWearableLite Wearable

Md类,调用Md方法进行消息摘要(Message Digest)计算。调用前,需要通过createMd构造Md实例。

属性

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束: 此接口仅可在Stage模型下使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.MessageDigest
  • API版本9-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
algName string 代表指定的摘要算法名。

update

update(input: DataBlob, callback: AsyncCallback<void>): void

传入消息进行Md更新摘要状态。使用callback异步回调。update和digest为两段式接口,需要成组使用。其中digest必选,update可选。

说明

Md算法多次调用update更新的代码示例详见开发指导分段摘要算法

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束:

  • API版本12+:此接口可在Stage模型和FA模型下使用。
  • API版本9-11:此接口仅可在Stage模型下使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.MessageDigest
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
input DataBlob 传入的消息。
callback AsyncCallback<void> 回调函数。当摘要更新成功,err为undefined,否则为错误对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

update

update(input: DataBlob): Promise<void>

传入消息进行Md更新摘要状态。使用Promise异步回调。update和digest为两段式接口,需要成组使用。其中digest必选,update可选。

说明

Md算法多次调用update更新的代码示例详见开发指导分段摘要算法

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束: 此接口仅可在Stage模型下使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.MessageDigest
  • API版本9-11:SystemCapability.Security.CryptoFramework

设备行为差异: 该接口仅在Phone、PC/2in1、Tablet、TV、Wearable设备中可正常调用,在Lite Wearable设备中返回undefined。

参数:

展开
参数名 类型 必填 说明
input DataBlob 传入的消息。

返回值:

展开
类型 说明
Promise<void> Promise对象,无返回结果。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

updateSync12+

PhonePC/2in1TabletTVWearableLite Wearable

updateSync(input: DataBlob): void

传入消息进行Md更新摘要状态,通过同步方式更新。updateSync和digestSync为两段式接口,需要成组使用。其中digestSync必选,updateSync可选。

说明

Md算法多次调用updateSync更新的代码示例详见开发指导分段摘要算法

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束: 此接口可在Stage模型和FA模型下使用。

系统能力: SystemCapability.Security.CryptoFramework.MessageDigest

参数:

展开
参数名 类型 必填 说明
input DataBlob 传入的消息。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

digest

digest(callback: AsyncCallback<DataBlob>): void

返回Md的计算结果。使用callback异步回调。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束:

  • API版本12+:此接口可在Stage模型和FA模型下使用。
  • API版本9-11:此接口仅可在Stage模型下使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.MessageDigest
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
callback AsyncCallback<DataBlob> 回调函数,用于获取摘要的计算结果。当摘要计算成功,err为undefined,data为获取到的摘要结果;否则为错误对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { buffer } from '@kit.ArkTS';
  3. function mdByCallback() {
  4. let md = cryptoFramework.createMd('SHA256');
  5. md.update({ data: new Uint8Array(buffer.from('mdTestMessage', 'utf-8').buffer) }, (err) => {
  6. md.digest((err, digestOutput) => {
  7. console.info('[Callback]: MD result: ' + digestOutput.data);
  8. console.info('[Callback]: MD len: ' + md.getMdLength());
  9. });
  10. });
  11. }

digest

digest(): Promise<DataBlob>

返回Md的计算结果。使用Promise异步回调。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束: 此接口仅可在Stage模型下使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.MessageDigest
  • API版本9-11:SystemCapability.Security.CryptoFramework

设备行为差异: 该接口仅在Phone、PC/2in1、Tablet、TV、Wearable设备中可正常调用,在Lite Wearable设备中返回undefined。

返回值:

展开
类型 说明
Promise<DataBlob> Promise对象,返回摘要计算结果。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

ArkTS示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { buffer } from '@kit.ArkTS';
  3. async function mdByPromise() {
  4. let md = cryptoFramework.createMd('SHA256');
  5. await md.update({ data: new Uint8Array(buffer.from('mdTestMessage', 'utf-8').buffer) });
  6. let mdOutput = await md.digest();
  7. console.info('[Promise]: MD result: ' + mdOutput.data);
  8. console.info('[Promise]: MD len: ' + md.getMdLength());
  9. }

JS示例:

收起
自动换行
深色代码主题
复制
  1. <div class="container">
  2. <text class="TestTitle">Crypto测试</text>
  3. <input class="btn" @click="MdTest">Md异步测试</input>
  4. </div>
收起
自动换行
深色代码主题
复制
  1. .container {
  2. width: 100%;
  3. height: 2000px;
  4. align-items: center;
  5. background-color: #fffefcfc;
  6. flex-direction: column;
  7. display: flex;
  8. }
  9. .TestTitle {
  10. width: 300px;
  11. height: 80px;
  12. text-align: center;
  13. background-color: white;
  14. color: #fff61515;
  15. font-size: 15fp;
  16. }
  17. .btn {
  18. width: 90%;
  19. height: 80px;
  20. text-align: center;
  21. background-color: #fff17f04;
  22. margin-top: 3px;
  23. color: white;
  24. font-size: 20fp;
  25. }
收起
自动换行
深色代码主题
复制
  1. import cryptoFramework from '@ohos.security.cryptoFramework';
  2. function StringToUint8Array(str) {
  3. let arr = [];
  4. for (let i = 0, j = str.length; i < j; ++i) {
  5. arr.push(str.charCodeAt(i));
  6. }
  7. return new Uint8Array(arr);
  8. }
  9. let plainText = "123456";
  10. function mdTest() {
  11. let inData = StringToUint8Array(plainText);
  12. let md = cryptoFramework.createMd('SHA256');
  13. console.info("createMd " + typeof md);
  14. md.update({data: inData}, function (finishErr) {
  15. if (finishErr) {
  16. console.error("Digest update failed. Code:" + finishErr.code + " : " + finishErr.message);
  17. } else {
  18. console.info("Digest update successfully.");
  19. }
  20. })
  21. md.digest(function (finishErr, digestOutput){
  22. if (finishErr) {
  23. console.error("Digest failed. Code:" + finishErr.code + " : " + finishErr.message);
  24. } else {
  25. console.info("Digest successfully:" + digestOutput);
  26. }
  27. })
  28. }
  29. export default {
  30. data: {
  31. result: ''
  32. },
  33. MdTest() {
  34. mdTest();
  35. }
  36. };

digestSync12+

PhonePC/2in1TabletTVWearableLite Wearable

digestSync(): DataBlob

通过同步方式返回Md的计算结果。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束: 此接口可在Stage模型和FA模型下使用。

系统能力: SystemCapability.Security.CryptoFramework.MessageDigest

返回值:

展开
类型 说明
DataBlob 表示生成的Md计算结果。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17630001 Crypto operation error.

示例:

ArkTS示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { buffer } from '@kit.ArkTS';
  3. function mdBySync() {
  4. let md = cryptoFramework.createMd('SHA256');
  5. md.updateSync({ data: new Uint8Array(buffer.from('mdTestMessage', 'utf-8').buffer) });
  6. let mdOutput = md.digestSync();
  7. console.info('[Sync]: MD result: ' + mdOutput.data);
  8. console.info('[Sync]: MD len: ' + md.getMdLength());
  9. }

JS示例:

收起
自动换行
深色代码主题
复制
  1. <div class="container">
  2. <text class="TestTitle">Crypto测试</text>
  3. <input class="btn" @click="MdTestSync">Md同步测试</input>
  4. </div>
收起
自动换行
深色代码主题
复制
  1. .container {
  2. width: 100%;
  3. height: 2000px;
  4. align-items: center;
  5. background-color: #fffefcfc;
  6. flex-direction: column;
  7. display: flex;
  8. }
  9. .TestTitle {
  10. width: 300px;
  11. height: 80px;
  12. text-align: center;
  13. background-color: white;
  14. color: #fff61515;
  15. font-size: 15fp;
  16. }
  17. .btn {
  18. width: 90%;
  19. height: 80px;
  20. text-align: center;
  21. background-color: #fff17f04;
  22. margin-top: 3px;
  23. color: white;
  24. font-size: 20fp;
  25. }
收起
自动换行
深色代码主题
复制
  1. import cryptoFramework from '@ohos.security.cryptoFramework';
  2. function StringToUint8Array(str) {
  3. let arr = [];
  4. for (let i = 0, j = str.length; i < j; ++i) {
  5. arr.push(str.charCodeAt(i));
  6. }
  7. return new Uint8Array(arr);
  8. }
  9. function mdTestSync() {
  10. let mdAlgName = 'SHA256';
  11. let message = 'mdTestMessage';
  12. let md = cryptoFramework.createMd(mdAlgName);
  13. md.updateSync({ data: StringToUint8Array(message) });
  14. let mdResult = md.digestSync();
  15. console.info('Digest successfully. result:' + mdResult.data);
  16. let mdLen = md.getMdLength();
  17. console.info("Digest successfully. md len: " + mdLen);
  18. }
  19. export default {
  20. data: {
  21. result: ''
  22. },
  23. MdTestSync() {
  24. mdTestSync();
  25. }
  26. };

getMdLength

getMdLength(): number

获取Md消息摘要的字节长度。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束:

  • API版本12+:此接口可在Stage模型和FA模型下使用。
  • API版本9-11:此接口仅可在Stage模型下使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.MessageDigest
  • API版本9-11:SystemCapability.Security.CryptoFramework

返回值:

展开
类型 说明
number 返回md计算结果的字节长度。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. function getLength() {
  3. let md = cryptoFramework.createMd('SHA256');
  4. console.info('[Promise]: MD len: ' + md.getMdLength());
  5. }

cryptoFramework.createMac

PhonePC/2in1TabletTVWearableLite Wearable

createMac(algName: string): Mac

生成Mac实例,用于消息认证码的计算与操作。

支持的规格详见HMAC消息认证码算法规格

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Mac
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
algName string 指定摘要算法,支持算法请参考HMAC消息认证码算法规格

返回值

展开
类型 说明
Mac 返回由输入算法指定生成的Mac对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. try {
  4. // Set algName based on the algorithm supported.
  5. let mac = cryptoFramework.createMac('SHA256');
  6. } catch (error) {
  7. let e: BusinessError = error as BusinessError;
  8. console.error(`sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
  9. }

cryptoFramework.createMac18+

PhonePC/2in1TabletTVWearable

createMac(macSpec: MacSpec): Mac

生成Mac实例,用于进行消息认证码的计算与操作。

支持的规格详见MAC消息认证码算法规格

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Mac

参数:

展开
参数名 类型 必填 说明
macSpec MacSpec 根据消息认证码的不同算法,指定入参参数,支持算法请参考MAC消息认证码算法规格

返回值

展开
类型 说明
Mac 返回由指定入参参数生成的Mac对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. try {
  4. // Set algName based on the algorithm supported.
  5. let spec: cryptoFramework.HmacSpec = {
  6. algName: 'HMAC',
  7. mdName: 'SHA256',
  8. };
  9. let mac = cryptoFramework.createMac(spec);
  10. } catch (error) {
  11. let e: BusinessError = error as BusinessError;
  12. console.error(`sync failed: errCode: ${error.code}, errMsg: ${error.message}`);
  13. }

Mac

PhonePC/2in1TabletTVWearable

Mac类,调用Mac方法进行消息认证码(Message Authentication Code)计算。调用前,需要通过createMac构造Mac实例。

属性

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Mac
  • API版本9-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
algName string 代表指定的摘要算法名。

init

init(key: SymKey, callback: AsyncCallback<void>): void

使用对称密钥初始化Mac计算。使用callback异步回调。init、update、doFinal为三段式接口,需要成组使用。其中init和doFinal必选,update可选。

说明

建议通过HMAC密钥生成规格创建对称密钥生成器,调用generateSymKey随机生成对称密钥或调用convertKey传入与密钥规格长度一致的二进制密钥数据生成密钥。

当指定“HMAC”生成对称密钥生成器时,仅支持调用convertKey传入长度在[1,4096]范围内(单位为bytes)的任意二进制密钥数据生成密钥。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Mac
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
key SymKey 对称密钥。
callback AsyncCallback<void> 回调函数。当HMAC初始化成功,err为undefined,否则为错误对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

init

init(key: SymKey): Promise<void>

使用对称密钥初始化Mac计算。使用Promise异步回调。init、update、doFinal为三段式接口,需要成组使用。其中init和doFinal必选,update可选。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Mac
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
key SymKey 对称密钥。

返回值:

展开
类型 说明
Promise<void> Promise对象,无返回结果。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

initSync12+

PhonePC/2in1TabletTVWearable

initSync(key: SymKey): void

使用对称密钥初始化Mac计算,通过同步方式获取结果。initSync、updateSync、doFinalSync为三段式接口,需要成组使用。其中initSync和doFinalSync必选,updateSync可选。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Mac

参数:

展开
参数名 类型 必填 说明
key SymKey 对称密钥。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

update

update(input: DataBlob, callback: AsyncCallback<void>): void

传入消息进行Mac更新消息认证码状态。使用callback异步回调。

说明

HMAC算法多次调用update更新的代码示例详见消息认证码计算

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Mac
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
input DataBlob 传入的消息。
callback AsyncCallback<void> 回调函数。当HMAC更新成功,err为undefined,否则为错误对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

update

update(input: DataBlob): Promise<void>

传入消息进行Mac更新消息认证码状态。使用Promise异步回调。

说明

HMAC算法多次调用update更新的代码示例详见消息认证码计算

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Mac
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
input DataBlob 传入的消息。

返回值:

展开
类型 说明
Promise<void> Promise对象,无返回结果。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

updateSync12+

PhonePC/2in1TabletTVWearable

updateSync(input: DataBlob): void

传入消息进行Mac更新消息认证码状态,通过同步方式获取结果。

说明

HMAC算法多次调用updateSync更新的代码示例详见消息认证码计算

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Mac

参数:

展开
参数名 类型 必填 说明
input DataBlob 传入的消息。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

doFinal

doFinal(callback: AsyncCallback<DataBlob>): void

完成MAC计算并获取MAC计算结果。使用callback异步回调。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Mac
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
callback AsyncCallback<DataBlob> 回调函数,用于获取Mac的计算结果。当MAC计算成功,err为undefined,data为获取到的Mac计算结果;否则为错误对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

此外,更多HMAC的完整示例可参考开发指导中消息认证码计算

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { buffer } from '@kit.ArkTS';
  3. function hmacByCallback() {
  4. let mac = cryptoFramework.createMac('SHA256');
  5. let keyBlob: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from('12345678abcdefgh', 'utf-8').buffer) };
  6. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
  7. symKeyGenerator.convertKey(keyBlob, (err, symKey) => {
  8. mac.init(symKey, (err) => {
  9. mac.update({ data: new Uint8Array(buffer.from('hmacTestMessage', 'utf-8').buffer) }, (err) => {
  10. mac.doFinal((err, output) => {
  11. console.info('[Callback]: HMAC result: ' + output.data);
  12. console.info('[Callback]: MAC len: ' + mac.getMacLength());
  13. });
  14. });
  15. });
  16. });
  17. }

doFinal

doFinal(): Promise<DataBlob>

完成MAC计算并获取MAC计算结果。使用Promise异步回调。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Mac
  • API版本9-11:SystemCapability.Security.CryptoFramework

返回值:

展开
类型 说明
Promise<DataBlob> Promise对象,返回MAC计算结果。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

此外,更多HMAC的完整示例可参考开发指导消息认证码计算

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { buffer } from '@kit.ArkTS';
  3. async function hmacByPromise() {
  4. let mac = cryptoFramework.createMac('SHA256');
  5. let keyBlob: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from('12345678abcdefgh', 'utf-8').buffer) };
  6. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
  7. let symKey = await symKeyGenerator.convertKey(keyBlob);
  8. await mac.init(symKey);
  9. await mac.update({ data: new Uint8Array(buffer.from('hmacTestMessage', 'utf-8').buffer) });
  10. let macOutput = await mac.doFinal();
  11. console.info('[Promise]: HMAC result: ' + macOutput.data);
  12. console.info('[Promise]: MAC len: ' + mac.getMacLength());
  13. }

doFinalSync12+

PhonePC/2in1TabletTVWearable

doFinalSync(): DataBlob

通过同步方式完成MAC计算并获取MAC计算结果。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Mac

返回值:

展开
类型 说明
DataBlob 返回MAC计算结果。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17630001 Crypto operation error.

示例:

此外,更多HMAC的完整示例可参考开发指导消息认证码计算

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { buffer } from '@kit.ArkTS';
  3. function hmacBySync() {
  4. let mac = cryptoFramework.createMac('SHA256');
  5. let keyBlob: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from('12345678abcdefgh', 'utf-8').buffer) };
  6. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
  7. let symKey = symKeyGenerator.convertKeySync(keyBlob);
  8. mac.initSync(symKey);
  9. mac.updateSync({ data: new Uint8Array(buffer.from('hmacTestMessage', 'utf-8').buffer) });
  10. let macOutput = mac.doFinalSync();
  11. console.info('[Sync]: HMAC result: ' + macOutput.data);
  12. console.info('[Sync]: MAC len: ' + mac.getMacLength());
  13. }

getMacLength

getMacLength(): number

获取Mac消息认证码的长度(字节数)。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Mac
  • API版本9-11:SystemCapability.Security.CryptoFramework

返回值:

展开
类型 说明
number 返回Mac计算结果的字节长度。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. function testGetMacLength() {
  4. let mac = cryptoFramework.createMac('SHA256');
  5. console.info('Mac algName is: ' + mac.algName);
  6. let keyData = new Uint8Array([83, 217, 231, 76, 28, 113, 23, 219, 250, 71, 209, 210, 205, 97, 32, 159]);
  7. let keyBlob: cryptoFramework.DataBlob = { data: keyData };
  8. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
  9. let promiseConvertKey = symKeyGenerator.convertKey(keyBlob);
  10. promiseConvertKey.then(symKey => {
  11. let promiseMacInit = mac.init(symKey);
  12. return promiseMacInit;
  13. })
  14. .then(() => {
  15. let blob: cryptoFramework.DataBlob = { data: new Uint8Array([83]) };
  16. let promiseMacUpdate = mac.update(blob);
  17. return promiseMacUpdate;
  18. })
  19. .then(() => {
  20. let promiseMacDoFinal = mac.doFinal();
  21. return promiseMacDoFinal;
  22. })
  23. .then(macOutput => {
  24. console.info('[Promise]: HMAC result: ' + macOutput.data);
  25. let macLen = mac.getMacLength();
  26. console.info('MAC len: ' + macLen);
  27. })
  28. .catch((error: BusinessError) => {
  29. console.error(`[Promise] failed: errCode: ${error.code}, errMsg: ${error.message}`);
  30. });
  31. }

cryptoFramework.createRandom

PhonePC/2in1TabletTVWearableLite Wearable

createRandom(): Random

生成Random实例,用于进行随机数的计算与设置种子。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

模型约束:

  • API版本12+:此接口可在Stage模型和FA模型下使用。
  • API版本9-11:此接口仅可在Stage模型下使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Rand
  • API版本9-11:SystemCapability.Security.CryptoFramework

返回值

展开
类型 说明
Random

返回由输入算法指定生成的Random对象。

支持的规格详见框架概述随机数算法规格

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17620001 Memory operation failed.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. try {
  4. let rand = cryptoFramework.createRandom();
  5. } catch (error) {
  6. let e: BusinessError = error as BusinessError;
  7. console.error(`sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
  8. }

Random

PhonePC/2in1TabletTVWearableLite Wearable

Random类,调用Random方法生成随机数。调用前,需要通过createRandom构造Random实例。

属性

元服务API: 从API version 11开始,该接口支持在元服务中使用。

模型约束: 此接口仅可在Stage模型下使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Rand
  • API版本9-11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
algName10+ string 代表当前使用的随机数生成算法,目前只支持"CTR_DRBG"。

generateRandom

generateRandom(len: number, callback: AsyncCallback<DataBlob>): void

生成指定长度的随机数。使用callback异步回调。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

模型约束:

  • API版本12+:此接口可在Stage模型和FA模型下使用。
  • API版本9-11:此接口仅可在Stage模型下使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Rand
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
len number 表示生成随机数的长度,单位为bytes,范围在[1, INT_MAX]。
callback AsyncCallback<DataBlob> 回调函数,用于获取生成的随机数。当生成随机数成功,err为undefined,data为获取到的随机数;否则为错误对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. let rand = cryptoFramework.createRandom();
  3. rand.generateRandom(12, (err, randData) => {
  4. if (err) {
  5. console.error(`[Callback] generate random failed, errCode: ${err.code}, errMsg: ${err.message}`);
  6. } else {
  7. console.info('[Callback]: generate random result: ' + randData.data);
  8. }
  9. });

generateRandom

generateRandom(len: number): Promise<DataBlob>

生成指定长度的随机数。使用promise异步回调。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

模型约束: 此接口仅可在Stage模型下使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Rand
  • API版本9-11:SystemCapability.Security.CryptoFramework

设备行为差异: 该接口仅在Phone、PC/2in1、Tablet、TV、Wearable设备中可正常调用,在Lite Wearable设备中返回undefined。

参数:

展开
参数名 类型 必填 说明
len number 表示生成随机数的长度,单位为bytes,范围在[1, INT_MAX]。

返回值:

展开
类型 说明
Promise<DataBlob> Promise对象,返回生成的随机数。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

ArkTS示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. let rand = cryptoFramework.createRandom();
  4. let promiseGenerateRand = rand.generateRandom(12);
  5. promiseGenerateRand.then(randData => {
  6. console.info('[Promise]: rand result: ' + randData.data);
  7. }).catch((error: BusinessError) => {
  8. console.error(`[Promise] failed: errCode: ${error.code}, errMsg: ${error.message}`);
  9. });

JS示例:

收起
自动换行
深色代码主题
复制
  1. <div class="container">
  2. <text class="TestTitle">Crypto测试</text>
  3. <input class="btn" @click="RandTest">Rand异步测试</input>
  4. </div>
收起
自动换行
深色代码主题
复制
  1. .container {
  2. width: 100%;
  3. height: 2000px;
  4. align-items: center;
  5. background-color: #fffefcfc;
  6. flex-direction: column;
  7. display: flex;
  8. }
  9. .TestTitle {
  10. width: 300px;
  11. height: 80px;
  12. text-align: center;
  13. background-color: white;
  14. color: #fff61515;
  15. font-size: 15fp;
  16. }
  17. .btn {
  18. width: 90%;
  19. height: 80px;
  20. text-align: center;
  21. background-color: #fff17f04;
  22. margin-top: 3px;
  23. color: white;
  24. font-size: 20fp;
  25. }
收起
自动换行
深色代码主题
复制
  1. import cryptoFramework from '@ohos.security.cryptoFramework';
  2. function randTest() {
  3. let rand = cryptoFramework.createRandom();
  4. let seed = new Uint8Array([1, 2, 3]);
  5. rand.setSeed({ data : seed });
  6. rand.generateRandom(12, function (finishErr, randData){
  7. if (finishErr) {
  8. console.error("GenerateRandom failed. Code:" + finishErr.code + " : " + finishErr.message);
  9. } else {
  10. console.info("GenerateRandom successfully:" + randData);
  11. }
  12. })
  13. }
  14. export default {
  15. data: {
  16. result: ''
  17. },
  18. RandTest() {
  19. randTest();
  20. }
  21. };

generateRandomSync10+

generateRandomSync(len: number): DataBlob

同步生成指定长度的随机数。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

模型约束:

  • API版本12+:此接口可在Stage模型和FA模型下使用。
  • API版本10-11:此接口仅可在Stage模型下使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Rand
  • API版本10-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
len number 表示生成随机数的长度,单位为bytes,范围在[1, INT_MAX]。

返回值:

展开
类型 说明
DataBlob 表示生成的随机数。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17630001 Crypto operation error.

示例:

ArkTS示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. let rand = cryptoFramework.createRandom();
  4. try {
  5. let randData = rand.generateRandomSync(12);
  6. if (randData != null) {
  7. console.info('[Sync]: rand result: ' + randData.data);
  8. } else {
  9. console.error('[Sync]: get rand result: fail.');
  10. }
  11. } catch (error) {
  12. let e: BusinessError = error as BusinessError;
  13. console.error(`sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
  14. }

JS示例:

收起
自动换行
深色代码主题
复制
  1. <div class="container">
  2. <text class="TestTitle">Crypto测试</text>
  3. <input class="btn" @click="RandTestSync">Rand同步测试</input>
  4. </div>
收起
自动换行
深色代码主题
复制
  1. .container {
  2. width: 100%;
  3. height: 2000px;
  4. align-items: center;
  5. background-color: #fffefcfc;
  6. flex-direction: column;
  7. display: flex;
  8. }
  9. .TestTitle {
  10. width: 300px;
  11. height: 80px;
  12. text-align: center;
  13. background-color: white;
  14. color: #fff61515;
  15. font-size: 15fp;
  16. }
  17. .btn {
  18. width: 90%;
  19. height: 80px;
  20. text-align: center;
  21. background-color: #fff17f04;
  22. margin-top: 3px;
  23. color: white;
  24. font-size: 20fp;
  25. }
收起
自动换行
深色代码主题
复制
  1. import cryptoFramework from '@ohos.security.cryptoFramework';
  2. function randTestSync() {
  3. let rand = cryptoFramework.createRandom();
  4. let randLen = 24;
  5. try {
  6. let randData = rand.generateRandomSync(randLen);
  7. if (randData != null) {
  8. console.info("GenerateRandom successfully: " + randData.data);
  9. } else {
  10. console.error("GenerateRandom failed!");
  11. }
  12. } catch (error) {
  13. console.error(`GenerateRandom random number failed. Code: ${error.code}, message: ${error.message}`);
  14. }
  15. }
  16. export default {
  17. data: {
  18. result: ''
  19. },
  20. RandTestSync() {
  21. randTestSync();
  22. }
  23. };

enableHardwareEntropy21+

PhonePC/2in1TabletTVWearableLite Wearable

enableHardwareEntropy(): void

开启硬件熵源。

元服务API: 从API version 21开始,该接口支持在元服务中使用。

模型约束: 此接口仅可在Stage模型下使用。

系统能力: SystemCapability.Security.CryptoFramework.Rand

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
801 This operation is not supported.
17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. let rand = cryptoFramework.createRandom();
  4. rand.enableHardwareEntropy();
  5. rand.generateRandom(12, (err, randData) => {
  6. if (err) {
  7. console.error(`[Callback] generate random failed, errCode: ${err.code}, errMsg: ${err.message}`);
  8. } else {
  9. console.info('[Callback]: generate random result: ' + randData.data);
  10. try {
  11. rand.setSeed(randData);
  12. } catch (error) {
  13. let e: BusinessError = error as BusinessError;
  14. console.error(`sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
  15. }
  16. }
  17. });

setSeed

setSeed(seed: DataBlob): void

设置指定的种子。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

模型约束:

  • API版本12+:此接口可在Stage模型和FA模型下使用。
  • API版本9-11:此接口仅可在Stage模型下使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Rand
  • API版本9-11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
seed DataBlob 设置的种子。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17620001 Memory operation failed.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. let rand = cryptoFramework.createRandom();
  4. rand.generateRandom(12, (err, randData) => {
  5. if (err) {
  6. console.error(`[Callback] generate random failed, errCode: ${err.code}, errMsg: ${err.message}`);
  7. } else {
  8. console.info('[Callback]: generate random result: ' + randData.data);
  9. try {
  10. rand.setSeed(randData);
  11. } catch (error) {
  12. let e: BusinessError = error as BusinessError;
  13. console.error(`sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
  14. }
  15. }
  16. });

cryptoFramework.createKdf11+

PhonePC/2in1TabletTVWearableLite Wearable

createKdf(algName: string): Kdf

密钥派生函数(key derivation function)实例生成。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Kdf
  • API版本11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
algName string

指定密钥派生算法(包含HMAC配套的散列函数):目前支持PBKDF2、HKDF算法、SCRYPT算法,如"PBKDF2|SHA256", "HKDF|SHA256", "SCRYPT"。

支持的规格详见密钥派生函数规格

返回值

展开
类型 说明
Kdf 返回由输入算法指定生成的Kdf对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

801 This operation is not supported.
17620001 Memory operation failed.

示例:

  • PBKDF2算法
收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. let kdf = cryptoFramework.createKdf('PBKDF2|SHA256');

Kdf11+

PhonePC/2in1TabletTVWearable

密钥派生函数(key derivation function)类,使用密钥派生方法之前需要创建该类的实例进行操作,通过createKdf(algName: string): Kdf方法构造此实例。

属性

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Kdf
  • API版本11:SystemCapability.Security.CryptoFramework
展开
名称 类型 只读 可选 说明
algName string 密钥派生函数的算法名称。

generateSecret11+

generateSecret(params: KdfSpec, callback: AsyncCallback<DataBlob>): void

基于传入的密钥派生参数进行密钥派生。使用callback异步回调。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Kdf
  • API版本11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
params KdfSpec 设置密钥派生函数的参数。
callback AsyncCallback<DataBlob> 回调函数,用于获取派生的密钥。当密钥派生成功,err为undefined,data为派生的密钥;否则为错误对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620003

Parameter check failed. Possible causes:

1. Invalid key length in the params;

2. Invalid info length in the params;

3. Invalid keySize in the params.

适用版本:22+

17630001 Crypto operation error.

示例:

  • PBKDF2算法

    收起
    自动换行
    深色代码主题
    复制
    1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
    2. let spec: cryptoFramework.PBKDF2Spec = {
    3. algName: 'PBKDF2',
    4. password: '123456',
    5. salt: new Uint8Array(16),
    6. iterations: 10000,
    7. keySize: 32
    8. };
    9. let kdf = cryptoFramework.createKdf('PBKDF2|SHA256');
    10. kdf.generateSecret(spec, (err, secret) => {
    11. if (err) {
    12. console.error(`key derivation failed, errCode: ${err.code}, errMsg: ${err.message}`);
    13. return;
    14. }
    15. console.info('key derivation output = ' + secret.data);
    16. });
  • HKDF算法

    收起
    自动换行
    深色代码主题
    复制
    1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
    2. let spec: cryptoFramework.HKDFSpec = {
    3. algName: 'HKDF',
    4. key: '123456',
    5. salt: new Uint8Array(16),
    6. info: new Uint8Array(16),
    7. keySize: 32
    8. };
    9. let kdf = cryptoFramework.createKdf('HKDF|SHA256|EXTRACT_AND_EXPAND');
    10. kdf.generateSecret(spec, (err, secret) => {
    11. if (err) {
    12. console.error(`key derivation failed, errCode: ${err.code}, errMsg: ${err.message}`);
    13. return;
    14. }
    15. console.info('key derivation output = ' + secret.data);
    16. });

generateSecret11+

generateSecret(params: KdfSpec): Promise<DataBlob>

基于传入的密钥派生参数进行密钥派生。使用Promise异步回调。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力:

  • API版本12+:SystemCapability.Security.CryptoFramework.Kdf
  • API版本11:SystemCapability.Security.CryptoFramework

参数:

展开
参数名 类型 必填 说明
params KdfSpec 设置密钥派生函数的参数。

返回值:

展开
类型 说明
Promise<DataBlob> Promise对象,返回派生的密钥。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620003

Parameter check failed. Possible causes:

1. Invalid key length in the params;

2. Invalid info length in the params;

3. Invalid keySize in the params.

适用版本:22+

17630001 Crypto operation error.

示例:

  • PBKDF2算法

    收起
    自动换行
    深色代码主题
    复制
    1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
    2. import { BusinessError } from '@kit.BasicServicesKit';
    3. let spec: cryptoFramework.PBKDF2Spec = {
    4. algName: 'PBKDF2',
    5. password: '123456',
    6. salt: new Uint8Array(16),
    7. iterations: 10000,
    8. keySize: 32
    9. };
    10. let kdf = cryptoFramework.createKdf('PBKDF2|SHA256');
    11. let kdfPromise = kdf.generateSecret(spec);
    12. kdfPromise.then(secret => {
    13. console.info('key derivation output = ' + secret.data);
    14. }).catch((error: BusinessError) => {
    15. console.error(`key derivation failed: errCode: ${error.code}, errMsg: ${error.message}`);
    16. });
  • HKDF算法

    收起
    自动换行
    深色代码主题
    复制
    1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
    2. import { BusinessError } from '@kit.BasicServicesKit';
    3. let spec: cryptoFramework.HKDFSpec = {
    4. algName: 'HKDF',
    5. key: '123456',
    6. salt: new Uint8Array(16),
    7. info: new Uint8Array(16),
    8. keySize: 32
    9. };
    10. let kdf = cryptoFramework.createKdf('HKDF|SHA256|EXTRACT_AND_EXPAND');
    11. let kdfPromise = kdf.generateSecret(spec);
    12. kdfPromise.then(secret => {
    13. console.info('key derivation output = ' + secret.data);
    14. }).catch((error: BusinessError) => {
    15. console.error(`key derivation failed: errCode: ${error.code}, errMsg: ${error.message}`);
    16. });

generateSecretSync12+

PhonePC/2in1TabletTVWearable

generateSecretSync(params: KdfSpec): DataBlob

基于传入的密钥派生参数进行密钥派生,通过同步方式返回派生得到的密钥。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Kdf

参数:

展开
参数名 类型 必填 说明
params KdfSpec 设置密钥派生函数的参数。

返回值:

展开
类型 说明
DataBlob 用于获取派生得到的密钥DataBlob数据。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
401

Invalid parameters. Possible causes:

1. Mandatory parameters are left unspecified;

2. Incorrect parameter types;

3. Parameter verification failed.

17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620003

Parameter check failed. Possible causes:

1. Invalid key length in the params;

2. Invalid info length in the params;

3. Invalid keySize in the params.

适用版本:22+

17630001 Crypto operation error.

示例:

  • PBKDF2算法

    收起
    自动换行
    深色代码主题
    复制
    1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
    2. let spec: cryptoFramework.PBKDF2Spec = {
    3. algName: 'PBKDF2',
    4. password: '123456',
    5. salt: new Uint8Array(16),
    6. iterations: 10000,
    7. keySize: 32
    8. };
    9. let kdf = cryptoFramework.createKdf('PBKDF2|SHA256');
    10. let secret = kdf.generateSecretSync(spec);
    11. console.info('[Sync]key derivation output = ' + secret.data);
  • HKDF算法

    收起
    自动换行
    深色代码主题
    复制
    1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
    2. let spec: cryptoFramework.HKDFSpec = {
    3. algName: 'HKDF',
    4. key: '123456',
    5. salt: new Uint8Array(16),
    6. info: new Uint8Array(16),
    7. keySize: 32
    8. };
    9. let kdf = cryptoFramework.createKdf('HKDF|SHA256|EXTRACT_AND_EXPAND');
    10. let secret = kdf.generateSecretSync(spec);
    11. console.info('[Sync]key derivation output = ' + secret.data);

SignatureUtils20+

PhonePC/2in1TabletTVWearable

用于SM2数据转换的工具类。

genEccSignatureSpec20+

PhonePC/2in1TabletTVWearable

static genEccSignatureSpec(data: Uint8Array): EccSignatureSpec

从ASN1 DER格式的sm2签名数据获取r和s。

元服务API: 从API version 20开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Signature

参数:

展开
参数名 类型 必填 说明
data Uint8Array ASN1 DER格式的签名数据。

返回值:

展开
类型 说明
EccSignatureSpec 包含r和s的数据对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620003

Parameter check failed. Possible causes:

1. The length of the data parameter is 0 or too large.

17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. function testGenEccSignatureSpec() {
  4. try {
  5. let data =
  6. new Uint8Array([48, 69, 2, 33, 0, 216, 15, 76, 238, 158, 165, 108, 76, 72, 63, 115, 52, 255, 51, 149, 54, 224,
  7. 179, 49, 225, 70, 36, 117, 88, 154, 154, 27, 194, 161, 3, 1, 115, 2, 32, 51, 9, 53, 55, 248, 82, 7, 159, 179,
  8. 144, 57, 151, 195, 17, 31, 106, 123, 32, 139, 219, 6, 253, 62, 240, 181, 134, 214, 107, 27, 230, 175, 40])
  9. let spec: cryptoFramework.EccSignatureSpec = cryptoFramework.SignatureUtils.genEccSignatureSpec(data)
  10. console.info('genEccSignatureSpec result: success.');
  11. } catch (err) {
  12. let e: BusinessError = err as BusinessError;
  13. console.error(`ecc failed: errCode: ${e.code}, errMsg: ${e.message}`);
  14. }
  15. }

genEccSignature20+

PhonePC/2in1TabletTVWearable

static genEccSignature(spec: EccSignatureSpec): Uint8Array;

将(r、s)的ECC/SM2签名数据转换为ASN1 DER格式。

元服务API: 从API version 20开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Signature

参数:

展开
参数名 类型 必填 说明
spec EccSignatureSpec (r、s)的ECC/SM2签名数据。

返回值:

展开
类型 说明
Uint8Array ASN1 DER格式的签名数据。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620003

Parameter check failed. Possible causes:

1. The r or s value of the spec parameter is 0 or too large.

17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. function testGenEccSignature() {
  4. try {
  5. let spec: cryptoFramework.EccSignatureSpec = {
  6. r: BigInt('97726608965854271693043443511967021777934035174185659091642456228829830775155'),
  7. s: BigInt('23084224202834231287427338597254751764391338275617140205467537273296855150376'),
  8. }
  9. let data = cryptoFramework.SignatureUtils.genEccSignature(spec)
  10. console.info('genEccSignature result: success.');
  11. console.info('data = ' + data)
  12. } catch (err) {
  13. let e: BusinessError = err as BusinessError;
  14. console.error(`ecc failed: errCode: ${e.code}, errMsg: ${e.message}`);
  15. }
  16. }

KemAlgNameIdBeta

PhonePC/2in1TabletTVWearable

表示密钥封装(Kem)算法名称的枚举。

起始版本: 26.0.0

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Cipher

展开
名称 说明
ML_KEM_512 0 表示ML-KEM-512算法名称ID。
ML_KEM_768 1 表示ML-KEM-768算法名称ID。
ML_KEM_1024 2 表示ML-KEM-1024算法名称ID。

KemEncapResultBeta

PhonePC/2in1TabletTVWearable

表示密钥封装的结果。

起始版本: 26.0.0

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Cipher

展开
名称 类型 只读 可选 说明
sharedSecret Uint8Array 密钥封装生成的共享密钥。
wrappedKey Uint8Array 密钥封装生成的封装密钥。

cryptoFramework.createKemBeta

PhonePC/2in1TabletTVWearable

createKem(algNameId: KemAlgNameId): Kem

生成Kem实例,用于密钥封装和解封装操作。

起始版本: 26.0.0

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Cipher

参数:

展开
参数名 类型 必填 说明
algNameId KemAlgNameId 指定密钥封装算法的名称ID。

返回值:

展开
类型 说明
Kem 返回根据输入算法生成的Kem对象。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620003 Parameter check failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. function createKem() {
  4. try {
  5. let kem = cryptoFramework.createKem(cryptoFramework.KemAlgNameId.ML_KEM_768);
  6. console.info('create kem success');
  7. } catch (err) {
  8. let e: BusinessError = err as BusinessError;
  9. console.error(`create kem failed: errCode: ${e.code}, errMsg: ${e.message}`);
  10. }
  11. }

KemBeta

PhonePC/2in1TabletTVWearable

Kem类,使用密钥封装方法之前需要创建该类的实例进行操作,通过createKem方法构造此实例。

起始版本: 26.0.0

模型约束: 此接口仅可在Stage模型下使用。

系统能力: SystemCapability.Security.CryptoFramework.Cipher

encapsulateBeta

PhonePC/2in1TabletTVWearable

encapsulate(pubKey: PubKey, ikme: Uint8Array | null): Promise<KemEncapResult>

基于传入的公钥进行密钥封装。使用Promise异步回调。

起始版本: 26.0.0

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Cipher

参数:

展开
参数名 类型 必填 说明
pubKey PubKey 用于密钥封装的公钥。
ikme Uint8Array | null 用于生成临时密钥的ikme。若传入null,则由算法库内部随机生成。

返回值:

展开
类型 说明
Promise<KemEncapResult> Promise对象,返回密钥封装的结果。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620003 Parameter check failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. async function kemEncapsulate() {
  4. try {
  5. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('ML-KEM-768');
  6. let keyPair = await asyKeyGenerator.generateKeyPair();
  7. let kem = cryptoFramework.createKem(cryptoFramework.KemAlgNameId.ML_KEM_768);
  8. let encapResult = await kem.encapsulate(keyPair.pubKey, null);
  9. console.info('encapsulate success');
  10. console.info('sharedSecret length: ' + encapResult.sharedSecret.length);
  11. console.info('wrappedKey length: ' + encapResult.wrappedKey.length);
  12. } catch (err) {
  13. let e: BusinessError = err as BusinessError;
  14. console.error(`encapsulate failed: errCode: ${e.code}, errMsg: ${e.message}`);
  15. }
  16. }

encapsulateSyncBeta

PhonePC/2in1TabletTVWearable

encapsulateSync(pubKey: PubKey, ikme: Uint8Array | null): KemEncapResult

以同步方式基于传入的公钥进行密钥封装。

说明

建议优先使用异步接口encapsulate,同步接口可能因系统繁忙、负载高等原因耗时较长而阻塞主线程,建议在子线程中调用同步接口以避免阻塞主线程。

起始版本: 26.0.0

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Cipher

参数:

展开
参数名 类型 必填 说明
pubKey PubKey 用于密钥封装的公钥。
ikme Uint8Array | null 用于生成临时密钥的ikme。若传入null,则由算法库内部随机生成。

返回值:

展开
类型 说明
KemEncapResult 密钥封装的结果。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620003 Parameter check failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. function kemEncapsulateSync() {
  4. try {
  5. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('ML-KEM-768');
  6. let keyPair = asyKeyGenerator.generateKeyPairSync();
  7. let kem = cryptoFramework.createKem(cryptoFramework.KemAlgNameId.ML_KEM_768);
  8. let encapResult = kem.encapsulateSync(keyPair.pubKey, null);
  9. console.info('encapsulateSync success');
  10. console.info('sharedSecret length: ' + encapResult.sharedSecret.length);
  11. console.info('wrappedKey length: ' + encapResult.wrappedKey.length);
  12. } catch (err) {
  13. let e: BusinessError = err as BusinessError;
  14. console.error(`encapsulateSync failed: errCode: ${e.code}, errMsg: ${e.message}`);
  15. }
  16. }

decapsulateBeta

PhonePC/2in1TabletTVWearable

decapsulate(priKey: PriKey, wrappedKey: Uint8Array): Promise<Uint8Array>

基于传入的私钥和封装密钥进行密钥解封装。使用Promise异步回调。

起始版本: 26.0.0

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Cipher

参数:

展开
参数名 类型 必填 说明
priKey PriKey 用于密钥解封装的私钥。
wrappedKey Uint8Array 密钥封装时生成的封装密钥(wrappedKey)。

返回值:

展开
类型 说明
Promise<Uint8Array> Promise对象,返回密钥解封装得到的共享密钥。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620003 Parameter check failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. async function kemDecapsulate() {
  4. try {
  5. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('ML-KEM-768');
  6. let keyPair = await asyKeyGenerator.generateKeyPair();
  7. let kem = cryptoFramework.createKem(cryptoFramework.KemAlgNameId.ML_KEM_768);
  8. let encapResult = await kem.encapsulate(keyPair.pubKey, null);
  9. let sharedSecret = await kem.decapsulate(keyPair.priKey, encapResult.wrappedKey);
  10. console.info('decapsulate success');
  11. console.info('sharedSecret length: ' + sharedSecret.length);
  12. } catch (err) {
  13. let e: BusinessError = err as BusinessError;
  14. console.error(`decapsulate failed: errCode: ${e.code}, errMsg: ${e.message}`);
  15. }
  16. }

decapsulateSyncBeta

PhonePC/2in1TabletTVWearable

decapsulateSync(priKey: PriKey, wrappedKey: Uint8Array): Uint8Array

以同步方式基于传入的私钥和封装的密钥进行密钥解封装。

说明

建议优先使用异步接口decapsulate,同步接口可能因系统繁忙、负载高等原因耗时较长而阻塞主线程,建议在子线程中调用同步接口以避免阻塞主线程。

起始版本: 26.0.0

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Security.CryptoFramework.Cipher

参数:

展开
参数名 类型 必填 说明
priKey PriKey 用于密钥解封装的私钥。
wrappedKey Uint8Array 密钥封装时生成的封装密钥(wrappedKey)。

返回值:

展开
类型 说明
Uint8Array 密钥解封装得到的共享密钥。

错误码:

以下错误码的详细介绍请参见cryptoFramework错误码

展开
错误码ID 错误信息
17620001 Memory operation failed.
17620002 Failed to obtain the native object or convert parameters.
17620003 Parameter check failed.
17630001 Crypto operation error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. function kemDecapsulateSync() {
  4. try {
  5. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('ML-KEM-768');
  6. let keyPair = asyKeyGenerator.generateKeyPairSync();
  7. let kem = cryptoFramework.createKem(cryptoFramework.KemAlgNameId.ML_KEM_768);
  8. let encapResult = kem.encapsulateSync(keyPair.pubKey, null);
  9. let sharedSecret = kem.decapsulateSync(keyPair.priKey, encapResult.wrappedKey);
  10. console.info('decapsulateSync success');
  11. console.info('sharedSecret length: ' + sharedSecret.length);
  12. } catch (err) {
  13. let e: BusinessError = err as BusinessError;
  14. console.error(`decapsulateSync failed: errCode: ${e.code}, errMsg: ${e.message}`);
  15. }
  16. }
在 API参考 中进行搜索
请输入您想要搜索的关键词