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

说明

* 本模块首批接口从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开始，该接口支持在元服务中使用。 |
| NOT\_SUPPORT | 801 | 操作不支持。  **元服务API：** 从API version 12开始，该接口支持在元服务中使用。 |
| ERR\_OUT\_OF\_MEMORY | 17620001 | 内存操作失败。  **元服务API：** 从API version 11开始，该接口支持在元服务中使用。 |
| ERR\_RUNTIME\_ERROR | 17620002 | 表示在ArkTS和C之间转换参数失败。  **元服务API：** 从API version 12开始，该接口支持在元服务中使用。 |
| ERR\_PARAMETER\_CHECK\_FAILED20+ | 17620003 | 表示参数检查失败。  **元服务API：** 从API version 20开始，该接口支持在元服务中使用。 |
| ERR\_CRYPTO\_OPERATION | 17630001 | 调用三方算法库API出错。  **元服务API：** 从API version 11开始，该接口支持在元服务中使用。 |

## DataBlob

PhonePC/2in1TabletTVWearableLite Wearable

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

**元服务API：** 从API version 11开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| data | Uint8Array | 否 | 否 | 数据。 |

说明

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

## ParamsSpec

PhonePC/2in1TabletTVWearable

加解密参数，在进行对称加解密时需要构造其子类对象，并将子类对象传入[init()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-1)方法。

适用于需要iv等参数的对称加解密模式（对于无iv等参数的模式如ECB模式，无需构造，在[init()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-1)中传入null即可）。

说明

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Cipher

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Cipher。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| algName | string | 否 | 否 | 指明对称加解密参数的算法模式。可选值如下：  - "IvParamsSpec"：适用于CBC|CTR|OFB|CFB模式。  - "GcmParamsSpec"：适用于GCM模式。  - "CcmParamsSpec"：适用于CCM模式。 |

说明

由于[init()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-1)的params参数是ParamsSpec类型（父类），而实际需要传入具体的子类对象（如[IvParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#ivparamsspec)），因此在构造子类对象时应设置其父类ParamsSpec的algName参数，使算法库在init()时知道传入的是哪种子类对象。

## IvParamsSpec

PhonePC/2in1TabletTVWearable

加解密参数[ParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#paramsspec)的子类，用于在对称加解密时作为[init()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-1)方法的参数。

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Cipher

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Cipher。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| iv | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 否 | 否 | 指明加解密参数iv。常见取值如下：  - AES的CBC|CTR|OFB|CFB模式：iv长度为16字节。  - 3DES的CBC|OFB|CFB模式：iv长度为8字节。  - SM410+的CBC|CTR|OFB|CFB模式：iv长度为16字节。 |

说明

传入[init()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-1)方法前需要指定其algName属性（来源于父类[ParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#paramsspec)）。

## GcmParamsSpec

PhonePC/2in1TabletTVWearable

加解密参数[ParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#paramsspec)的子类，用于在对称加解密时作为[init()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-1)方法的参数。

适用于GCM模式。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Cipher

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Cipher。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| iv | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 否 | 否 | 指明加解密参数iv，长度为1~16字节，常用为12字节。 |
| aad | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 否 | 否 | 指明加解密参数aad，长度为0~INT\_MAX字节，常用为16字节。 |
| authTag | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 否 | 否 | 指明加解密参数authTag，长度为16字节。  采用GCM模式加密时，需从[doFinal()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#dofinal)或[doFinalSync()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#dofinalsync12)输出的[DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob)中提取末尾16字节，作为[init()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-1)或[initSync()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#initsync12)方法中GcmParamsSpec的authTag。 |

说明

1. 传入[init()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-1)方法前需要指定其algName属性（来源于父类[ParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#paramsspec)）。
2. 对于1~16字节长度的iv，加解密算法库无额外限制，但结果取决于底层openssl的支持情况。
3. 当aad参数不需要使用或aad长度为0时，可以将aad的data属性设置为一个空的Uint8Array，来构造GcmParamsSpec，写法为aad: { data: new Uint8Array() }。

## CcmParamsSpec

PhonePC/2in1TabletTVWearable

加解密参数[ParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#paramsspec)的子类，用于在对称加解密时作为[init()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-1)方法的参数。

适用于CCM模式。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Cipher

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Cipher。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| iv | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 否 | 否 | 指明加解密参数iv，仅支持7字节。若传入iv长度超过7字节，超出范围将被截断。 |
| aad | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 否 | 否 | 指明加解密参数aad。aad最小长度为1字节，最大为2048字节。 |
| authTag | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 否 | 否 | 指定加解密参数authTag，长度为12字节。  在CCM模式加密时，需从[doFinal()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#dofinal)或[doFinalSync()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#dofinalsync12)输出的[DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob)末尾提取12字节，作为[init()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-1)或[initSync()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#initsync12)方法的参数[CcmParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#ccmparamsspec)中的authTag。 |

说明

传入[init()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-1)方法前需要指定其algName属性（来源于父类[ParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#paramsspec)）。

## Poly1305ParamsSpec22+

PhonePC/2in1TabletTVWearable

加解密参数[ParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#paramsspec)的子类，用于在对称加解密时作为[init()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-1)方法的参数。

适用于[ChaCha20算法](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-sym-encrypt-decrypt-spec#chacha20)Poly1305模式。

**元服务API：** 从API version 22开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Cipher

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| iv | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 否 | 否 | 指明加解密参数iv，长度为12字节。 |
| aad | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 否 | 否 | 指明加解密参数aad，长度为任意字节。 |
| authTag | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 否 | 否 | 指定加解密参数authTag，长度为16字节。 |

说明

传入[init()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-1)方法前需要指定其algName属性（来源于父类[ParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#paramsspec)）。

在Poly1305模式加密时，需从[doFinal()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#dofinal)或[doFinalSync()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#dofinalsync12)输出的[DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob)末尾提取16字节，作为解密时[init()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-1)或[initSync()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#initsync12)方法的参数[Poly1305ParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#poly1305paramsspec22)中的authTag。

## CryptoMode

PhonePC/2in1TabletTVWearable

表示加解密操作的枚举。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Cipher

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Cipher。

展开

| 名称 | 值 | 说明 |
| --- | --- | --- |
| ENCRYPT\_MODE | 0 | 表示进行加密操作。 |
| DECRYPT\_MODE | 1 | 表示进行解密操作。 |

## AsyKeySpecItem10+

PhonePC/2in1TabletTVWearable

表示密钥参数的枚举。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 值 | 说明 |
| --- | --- | --- |
| 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。 |

## AsyKeySpecType10+

PhonePC/2in1TabletTVWearable

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 值 | 说明 |
| --- | --- | --- |
| COMMON\_PARAMS\_SPEC | 0 | 表示公私钥中包含的公共参数。使用此类型的参数可以调用[generateKeyPair](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#generatekeypair10)随机生成密钥对。 |
| PRIVATE\_KEY\_SPEC | 1 | 表示私钥中包含的参数。使用此类型的参数可以调用[generatePriKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#generateprikey10)生成指定的私钥。 |
| PUBLIC\_KEY\_SPEC | 2 | 表示公钥中包含的参数。使用此类型的参数可以调用[generatePubKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#generatepubkey10)生成指定的公钥。 |
| KEY\_PAIR\_SPEC | 3 | 表示公私钥中包含的全量参数。使用此类型的参数可以调用[generateKeyPair](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#generatekeypair10)生成指定的密钥对。 |

## CipherSpecItem10+

PhonePC/2in1TabletTVWearable

表示加解密参数的枚举。这些参数支持通过[setCipherSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#setcipherspec10)接口设置，通过[getCipherSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#getcipherspec10)接口获取。

当前只支持RSA算法和SM2算法，从API version 11开始，增加对SM2\_MD\_NAME\_STR参数的支持，详细规格请参考[加解密规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-asym-encrypt-decrypt-spec)。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Cipher

API version 10-11 系统能力为 SystemCapability.Security.CryptoFramework；从 API version 12 开始为SystemCapability.Security.CryptoFramework.Cipher

展开

| 名称 | 值 | 说明 |
| --- | --- | --- |
| 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/2in1TabletTVWearable

表示签名验签参数的枚举。这些参数支持通过[setSignSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#setsignspec10)、[setVerifySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#setverifyspec10)接口设置，通过[getSignSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#getsignspec10)、[getVerifySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#getverifyspec10)接口获取。

当前只支持RSA算法和SM2算法，从API version 11开始，增加对SM2\_USER\_ID\_UINT8ARR参数的支持，详细规格请参考[签名验签规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-sign-sig-verify-overview)。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

API version 10-11 系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为 SystemCapability.Security.CryptoFramework.Signature。

展开

| 名称 | 值 | 说明 |
| --- | --- | --- |
| PSS\_MD\_NAME\_STR | 100 | 表示RSA算法中，使用PSS模式时，消息摘要功能的算法名。 |
| PSS\_MGF\_NAME\_STR | 101 | 表示RSA算法中，使用PSS模式时，掩码生成算法（目前仅支持MGF1）。 |
| PSS\_MGF1\_MD\_STR | 102 | 表示RSA算法中，使用PSS模式时，MGF1掩码生成功能的消息摘要参数。 |
| PSS\_SALT\_LEN\_NUM | 103 | 表示RSA算法中，使用PSS模式时，盐值的长度，长度以字节为单位。 |
| PSS\_TRAILER\_FIELD\_NUM | 104 | 表示RSA算法中，使用PSS模式时，用于编码操作的整数。 |
| SM2\_USER\_ID\_UINT8ARR11+ | 105 | 表示SM2算法中，用户身份标识字段。 |

## AsyKeySpec10+

PhonePC/2in1TabletTVWearable

指定非对称密钥参数的基本接口，用于创建密钥生成器。在指定非对称密钥参数时需要构造其子类对象，并将子类对象传入[createAsyKeyGeneratorBySpec()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。构造子类对象时，除了RSA密钥采用小端写法外，其他bigint类型的密钥参数均采用大端写法，并使用正数。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version10-11系统能力为SystemCapability.Security.CryptoFramework；从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| algName | string | 否 | 否 | 指定非对称密钥的算法名称，比如"RSA"、"DSA"、"ECC"、"SM2"、"Ed25519"、"X25519"、"DH"。 |
| specType | [AsyKeySpecType](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspectype10) | 否 | 否 | 指定密钥参数类型，用于区分公/私钥参数。 |

## DSACommonParamsSpec10+

PhonePC/2in1TabletTVWearable

密钥参数[AsyKeySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspec10)的子类，用于指定DSA算法中公私钥包含的公共参数，随机生成公/私钥。

在使用密钥参数生成密钥时，将其传入[createAsyKeyGeneratorBySpec()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version10-11系统能力为SystemCapability.Security.CryptoFramework；从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| p | bigint | 否 | 否 | 指定DSA算法的素模数p。 |
| q | bigint | 否 | 否 | 指定DSA算法中密钥参数q（p-1的素因子）。 |
| g | bigint | 否 | 否 | 指定DSA算法的参数g。 |

## DSAPubKeySpec10+

PhonePC/2in1TabletTVWearable

密钥参数[AsyKeySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspec10)的子类，用于指定DSA算法中公钥包含的参数。

在使用密钥参数生成密钥时，将其传入[createAsyKeyGeneratorBySpec()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version10-11系统能力为SystemCapability.Security.CryptoFramework；从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| params | [DSACommonParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#dsacommonparamsspec10) | 否 | 否 | 指定DSA算法中公私钥包含的公共参数。 |
| pk | bigint | 否 | 否 | 指定DSA算法的公钥值。 |

## DSAKeyPairSpec10+

PhonePC/2in1TabletTVWearable

密钥参数[AsyKeySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspec10)的子类，用于指定DSA算法中公私钥包含的全量参数。

在使用密钥参数生成密钥时，将其传入[createAsyKeyGeneratorBySpec()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| params | [DSACommonParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#dsacommonparamsspec10) | 否 | 否 | 指定DSA算法中公私钥都包含的公共参数。 |
| sk | bigint | 否 | 否 | 指定DSA算法的私钥值sk。 |
| pk | bigint | 否 | 否 | 指定DSA算法的公钥值pk。 |

## ECField10+

PhonePC/2in1TabletTVWearable

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| fieldType | string | 否 | 否 | 指定椭圆曲线域的类型，当前只支持"Fp"。 |

## ECFieldFp10+

PhonePC/2in1TabletTVWearable

指定椭圆曲线的素数域。是[ECField](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#ecfield10)的子类。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 10-11系统能力为SystemCapability.Security.CryptoFramework。从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| p | bigint | 否 | 否 | 指定素数p的值。 |

## Point10+

PhonePC/2in1TabletTVWearable

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| x | bigint | 否 | 否 | 指定椭圆曲线上点的x坐标。 |
| y | bigint | 否 | 否 | 指定椭圆曲线上点的y坐标。 |

## ECCCommonParamsSpec10+

PhonePC/2in1TabletTVWearable

密钥参数[AsyKeySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspec10)的子类，用于指定ECC算法中公私钥包含的公共参数，随机生成公/私钥。

在使用密钥参数生成密钥时，将其传入[createAsyKeyGeneratorBySpec()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| field | [ECField](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#ecfield10) | 否 | 否 | 指定椭圆曲线的域（当前只支持Fp域）。 |
| a | bigint | 否 | 否 | 指定椭圆曲线的第一个系数a。 |
| b | bigint | 否 | 否 | 指定椭圆曲线的第二个系数b。 |
| g | [Point](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#point10) | 否 | 否 | 指定基点g。 |
| n | bigint | 否 | 否 | 指定基点g的阶数n。 |
| h | number | 否 | 否 | 指定余因子h。 |

## ECCPriKeySpec10+

PhonePC/2in1TabletTVWearable

密钥参数[AsyKeySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspec10)的子类，用于指定ECC算法中私钥包含的参数。

在使用密钥参数生成密钥时，将其传入[createAsyKeyGeneratorBySpec()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| params | [ECCCommonParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#ecccommonparamsspec10) | 否 | 否 | 指定ECC算法中公私钥都包含的公共参数。 |
| sk | bigint | 否 | 否 | 指定ECC算法的私钥sk。 |

## ECCPubKeySpec10+

PhonePC/2in1TabletTVWearable

密钥参数[AsyKeySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspec10)的子类，用于指定ECC算法中公钥包含的参数。

在使用密钥参数生成密钥时，将其传入[createAsyKeyGeneratorBySpec()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| params | [ECCCommonParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#ecccommonparamsspec10) | 否 | 否 | 指定ECC算法中公私钥都包含的公共参数。 |
| pk | [Point](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#point10) | 否 | 否 | 指定ECC算法的公钥pk。 |

## ECCKeyPairSpec10+

PhonePC/2in1TabletTVWearable

密钥参数[AsyKeySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspec10)的子类，用于指定ECC算法中公私钥包含的全量参数。

在使用密钥参数生成密钥时，将其传入[createAsyKeyGeneratorBySpec()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| params | [ECCCommonParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#ecccommonparamsspec10) | 否 | 否 | 指定ECC算法中公私钥都包含的公共参数。 |
| sk | bigint | 否 | 否 | 指定ECC算法的私钥sk。 |
| pk | [Point](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#point10) | 否 | 否 | 指定ECC算法的公钥pk。 |

## RSACommonParamsSpec10+

PhonePC/2in1TabletTVWearable

密钥参数[AsyKeySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspec10)的子类，用于指定RSA算法中公私钥包含的公共参数，随机生成公/私钥。

在使用密钥参数生成密钥时，将其传入[createAsyKeyGeneratorBySpec()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| n | bigint | 否 | 否 | 指定模数n。 |

## RSAPubKeySpec10+

PhonePC/2in1TabletTVWearable

密钥参数[AsyKeySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspec10)的子类，用于指定RSA算法中公钥包含的参数。

在使用密钥参数生成密钥时，将其传入[createAsyKeyGeneratorBySpec()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| params | [RSACommonParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#rsacommonparamsspec10) | 否 | 否 | 指定RSA算法中公私钥都包含的公共参数。 |
| pk | bigint | 否 | 否 | 指定RSA算法的公钥pk。 |

## RSAKeyPairSpec10+

PhonePC/2in1TabletTVWearable

密钥参数[AsyKeySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspec10)的子类，用于指定RSA算法中公私钥包含的全量参数。

在使用密钥参数生成密钥时，将其传入[createAsyKeyGeneratorBySpec()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| params | [RSACommonParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#rsacommonparamsspec10) | 否 | 否 | 指定RSA算法中公私钥都包含的公共参数。 |
| sk | bigint | 否 | 否 | 指定RSA算法的私钥sk。 |
| pk | bigint | 否 | 否 | 指定RSA算法的公钥pk。 |

## ED25519PriKeySpec11+

PhonePC/2in1TabletTVWearable

密钥参数[AsyKeySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspec10)的子类，用于指定Ed25519算法中私钥包含的参数。

在使用密钥参数生成密钥时，将其传入[createAsyKeyGeneratorBySpec()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| sk | bigint | 否 | 否 | 指定Ed25519算法的私钥sk。 |

## ED25519PubKeySpec11+

PhonePC/2in1TabletTVWearable

密钥参数[AsyKeySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspec10)的子类，用于指定Ed25519算法中公钥包含的参数。

在使用密钥参数生成密钥时，将其传入[createAsyKeyGeneratorBySpec()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| pk | bigint | 否 | 否 | 指定Ed25519算法的公钥pk。 |

## ED25519KeyPairSpec11+

PhonePC/2in1TabletTVWearable

密钥参数[AsyKeySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspec10)的子类，用于指定Ed25519算法中公私钥包含的全量参数。

在使用密钥参数生成密钥时，将其传入[createAsyKeyGeneratorBySpec()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| sk | bigint | 否 | 否 | 指定Ed25519算法的私钥sk。 |
| pk | bigint | 否 | 否 | 指定Ed25519算法的公钥pk。 |

## X25519PriKeySpec11+

PhonePC/2in1TabletTVWearable

密钥参数[AsyKeySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspec10)的子类，用于指定X25519算法中私钥包含的参数。

在使用密钥参数生成密钥时，将其传入[createAsyKeyGeneratorBySpec()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| sk | bigint | 否 | 否 | 指定X25519算法的私钥sk。 |

## X25519PubKeySpec11+

PhonePC/2in1TabletTVWearable

密钥参数[AsyKeySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspec10)的子类，用于指定X25519算法中公钥包含的参数。

在使用密钥参数生成密钥时，将其传入[createAsyKeyGeneratorBySpec()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| pk | bigint | 否 | 否 | 指定X25519算法的公钥pk。 |

## X25519KeyPairSpec11+

PhonePC/2in1TabletTVWearable

密钥参数[AsyKeySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspec10)的子类，用于指定X25519算法中公私钥包含的全量参数。

在使用密钥参数生成密钥时，将其传入[createAsyKeyGeneratorBySpec()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| sk | bigint | 否 | 否 | 指定X25519算法的私钥sk。 |
| pk | bigint | 否 | 否 | 指定X25519算法的公钥pk。 |

## DHCommonParamsSpec11+

PhonePC/2in1TabletTVWearable

密钥参数[AsyKeySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspec10)的子类，用于指定DH算法中公私钥包含的参数。

在使用密钥参数生成密钥时，将其传入[createAsyKeyGeneratorBySpec()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| p | bigint | 否 | 否 | 指定DH算法中大素数p。 |
| g | bigint | 否 | 否 | 指定DH算法中参数g。 |
| l | number | 否 | 否 | 指定DH算法中私钥的长度，单位为bits。 |

## DHPriKeySpec11+

PhonePC/2in1TabletTVWearable

密钥参数[AsyKeySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspec10)的子类，用于指定DH算法中私钥包含的参数。

在使用密钥参数生成密钥时，将其传入[createAsyKeyGeneratorBySpec()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| params | [DHCommonParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#dhcommonparamsspec11) | 否 | 否 | 指定DH算法中公私钥都包含的公共参数。 |
| sk | bigint | 否 | 否 | 指定DH算法的私钥sk。 |

## DHPubKeySpec11+

PhonePC/2in1TabletTVWearable

密钥参数[AsyKeySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspec10)的子类，用于指定DH算法中公钥包含的参数。

在使用密钥参数生成密钥时，将其传入[createAsyKeyGeneratorBySpec()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| params | [DHCommonParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#dhcommonparamsspec11) | 否 | 否 | 指定DH算法中公私钥都包含的公共参数。 |
| pk | bigint | 否 | 否 | 指定DH算法的公钥pk。 |

## DHKeyPairSpec11+

PhonePC/2in1TabletTVWearable

密钥参数[AsyKeySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspec10)的子类，用于指定DH算法中公私钥包含的全量参数。

在使用密钥参数生成密钥时，将其传入[createAsyKeyGeneratorBySpec()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| params | [DHCommonParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#dhcommonparamsspec11) | 否 | 否 | 指定DH算法中公私钥都包含的公共参数。 |
| sk | bigint | 否 | 否 | 指定DH算法的私钥sk。 |
| pk | bigint | 否 | 否 | 指定DH算法的公钥pk。 |

## KdfSpec11+

PhonePC/2in1TabletTVWearable

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Kdf

API version 11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Kdf。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| algName | string | 否 | 否 | 指明密钥派生函数的算法名，如"PBKDF2"。 |

## PBKDF2Spec11+

PhonePC/2in1TabletTVWearable

密钥派生函数参数[KdfSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#kdfspec11)的子类，作为PBKDF2密钥派生函数进行密钥派生时的输入。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Kdf

API version 11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Kdf。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| password | string | Uint8Array | 否 | 否 | 用户输入的原始密码。 |
| salt | Uint8Array | 否 | 否 | 盐值。 |
| iterations | number | 否 | 否 | 迭代次数，需要为正整数。 |
| keySize | number | 否 | 否 | 派生得到的密钥字节长度，单位为bytes。 |

说明

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

## HKDFSpec12+

PhonePC/2in1TabletTVWearable

密钥派生函数参数[KdfSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#kdfspec11)的子类，作为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](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#kdfspec11)的子类，作为SCRYPT密钥派生函数进行密钥派生时的输入。

**元服务API：** 从API version 18开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Kdf

展开

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

说明

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

## X963KdfSpec22+

PhonePC/2in1TabletTVWearable

密钥派生函数参数[KdfSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#kdfspec11)的子类，作为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](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#macspec18)的子类，作为HMAC消息验证码计算的输入。

**元服务API：** 从API version 18开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Mac

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| mdName | string | 否 | 否 | 摘要算法名。 |

说明

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

## CmacSpec18+

PhonePC/2in1TabletTVWearable

密钥派生函数参数[MacSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#macspec18)的子类，作为CMAC消息验证码计算的输入。

**元服务API：** 从API version 18开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Mac

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| cipherName | string | 否 | 否 | 对称加密算法名。 |

说明

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

## EccSignatureSpec20+

PhonePC/2in1TabletTVWearable

包含（r、s）的sm2签名数据的结构体。

说明

r和s的长度各为256位。

**元服务API：** 从API version 20开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| r | bigint | 否 | 否 | r分量。 |
| s | bigint | 否 | 否 | s分量。 |

## Key

PhonePC/2in1TabletTVWearable

密钥（父类），在运行密码算法（如加解密）时需要提前生成其子类对象，并传入[Cipher](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cipher)实例的[init()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-1)方法。

密钥通过子类密钥生成器来生成，详见子类描述。具体子类有：[SymKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#symkey)、[PubKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#pubkey)、[PriKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#prikey)。

### 属性

PhonePC/2in1TabletTVWearable

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| format | string | 是 | 否 | 密钥的格式。 |
| algName | string | 是 | 否 | 密钥对应的算法名（如果是对称密钥，则含密钥长度，否则不含密钥长度）。 |

### getEncoded

PhonePC/2in1TabletTVWearable

getEncoded(): DataBlob

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

说明

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key。

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 用于查看密钥的具体内容。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码ID | 错误信息 |
| --- | --- |
| 801 | this operation is not supported. |
| 17620001 | memory operation failed. |
| 17630001 | crypto operation error. |

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';

3. async function testGenerateAesKey() {
4. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256');
5. let symKey = await symKeyGenerator.generateSymKey();
6. let encodedKey = symKey.getEncoded();
7. console.info('key hex: ' + encodedKey.data);
8. }
```

## SymKey

PhonePC/2in1TabletTVWearable

对称密钥，是[Key](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#key)的子类，在对称加解密时需要将其对象传入[Cipher](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cipher)实例的[init()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-1)方法使用。

对称密钥通过对称密钥生成器[SymKeyGenerator](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#symkeygenerator)来生成。

### clearMem

PhonePC/2in1TabletTVWearable

clearMem(): void

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.SymKey

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.SymKey。

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';

3. async function testGenerateAesKeyFun() {
4. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256');
5. let key = await symKeyGenerator.generateSymKey();
6. let encodedKey = key.getEncoded();
7. console.info('key blob: '+ encodedKey.data);
8. key.clearMem();
9. encodedKey = key.getEncoded();
10. console.info('key blob：' + encodedKey.data);
11. }
```

## PubKey

PhonePC/2in1TabletTVWearable

公钥，是[Key](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#key)的子类，在非对称加解密、验签、密钥协商时需要将其对象作为输入使用。

公钥可以通过非对称密钥生成器[AsyKeyGenerator](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeygenerator)、[AsyKeyGeneratorBySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeygeneratorbyspec10)来生成。

### getAsyKeySpec10+

PhonePC/2in1TabletTVWearable

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

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| itemType | [AsyKeySpecItem](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspecitem10) | 是 | 指定的密钥参数。 |

**返回值：**

展开

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

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

3. // 根据关键规范构造EccCommonSpec结构体。EccCommonSpec结构体定义了ECC私钥和公钥的公共参数。
4. function genEccCommonSpec(): cryptoFramework.ECCCommonParamsSpec {
5. let fieldFp: cryptoFramework.ECFieldFp = {
6. fieldType: 'Fp',
7. p: BigInt('0xffffffffffffffffffffffffffffffff000000000000000000000001')
8. }
9. let G: cryptoFramework.Point = {
10. x: BigInt('0xb70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21'),
11. y: BigInt('0xbd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34')
12. }
13. let eccCommonSpec: cryptoFramework.ECCCommonParamsSpec = {
14. algName: 'ECC',
15. specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC,
16. field: fieldFp,
17. a: BigInt('0xfffffffffffffffffffffffffffffffefffffffffffffffffffffffe'),
18. b: BigInt('0xb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4'),
19. g: G,
20. n: BigInt('0xffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d'),
21. h: 1
22. }
23. return eccCommonSpec;
24. }

26. async function testgetAsyKeySpec() {
27. let commKeySpec = genEccCommonSpec(); // 使用参数属性，构造ECC公私钥公共密钥参数对象。
28. let generatorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(commKeySpec); // 使用密钥参数对象创建生成器。
29. let keyPair = await generatorBySpec.generateKeyPair();
30. let key = keyPair.pubKey;
31. let p = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_FP_P_BN);
32. console.info('ecc item --- p: ' + p.toString(16));
33. }
```

### getEncodedDer12+

PhonePC/2in1TabletTVWearable

getEncodedDer(format: string): DataBlob

支持根据指定的密钥格式（如规范、压缩状态等），获取符合ASN.1语法和DER编码的公钥数据。目前仅支持ECC压缩和非压缩格式的公钥数据。

说明

本接口和[Key.getEncoded()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#getencoded)的区别是：

1. 本接口可根据入参决定数据的输出格式。
2. [Key.getEncoded()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#getencoded)接口，不支持指定密钥格式，生成的数据格式与原始数据格式保持一致。（原始数据格式，指通过[convertKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#convertkey-3)接口生成密钥对象时的数据格式）。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| format | string | 是 | 用于指定当前密钥格式，取值仅支持"X509|COMPRESSED"和"X509|UNCOMPRESSED"。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 返回满足ASN.1语法和DER编码的指定密钥格式的公钥数据。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

3. async function testGetEncodedDer() {
4. 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]);
5. let pubKeyBlob: cryptoFramework.DataBlob = { data: pkData };
6. let generator = cryptoFramework.createAsyKeyGenerator('ECC_BrainPoolP256r1');
7. let keyPair = await generator.convertKey(pubKeyBlob, null);
8. let key = keyPair.pubKey;
9. let returnBlob = key.getEncodedDer('X509|UNCOMPRESSED');
10. console.info('returnBlob data：' + returnBlob.data);
11. }
```

### getEncodedPem12+

PhonePC/2in1TabletTVWearable

getEncodedPem(format: string): string

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| format | string | 是 | 指定的获取密钥字符串的编码格式。其中，公钥可为'PKCS1' 或'X509'格式。 |

**返回值：**

展开

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

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

3. let publicPkcs1Str1024: string =
4. '-----BEGIN RSA PUBLIC KEY-----\n'
5. + 'MIGJAoGBALAg3eavbX433pOjGdWdpL7HIr1w1EAeIcaCtuMfDpECPdX6X5ZjrwiE\n'
6. + 'h7cO51WXMT2gyN45DCQySr/8cLE2UiUVHo7qlrSatdLA9ETtgob3sJ4qTaBg5Lxg\n'
7. + 'SHy2gC+bvEpuIuRe64yXGuM/aP+ZvmIj9QBIVI9mJD8jLEOvQBBpAgMBAAE=\n'
8. + '-----END RSA PUBLIC KEY-----\n';

10. function TestPubKeyPkcs1ToX509BySync1024() {
11. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
12. let keyPair = rsaGenerator.convertPemKeySync(publicPkcs1Str1024, null);
13. let pubPemKey = keyPair.pubKey;
14. let pubString = pubPemKey.getEncodedPem('X509');
15. console.info('[sync]TestPubKeyPkcs1ToX509BySync1024 pubString output = ' + pubString);
16. }
```

## PriKey

PhonePC/2in1TabletTVWearable

私钥，是[Key](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#key)的子类，在非对称加解密、签名、密钥协商时需要将其作为输入使用。

私钥可以通过非对称密钥生成器[AsyKeyGenerator](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeygenerator)、[AsyKeyGeneratorBySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeygeneratorbyspec10)来生成。

### clearMem

PhonePC/2in1TabletTVWearable

clearMem(): void

同步方法，清零系统底层内存中的密钥内容。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';

3. async function testClearMem() {
4. let eccGenerator = cryptoFramework.createAsyKeyGenerator('ECC256');
5. // 使用密钥生成器随机生成非对称密钥对。
6. let keyGenPromise = eccGenerator.generateKeyPair();
7. keyGenPromise.then(keyPair => {
8. let priKey = keyPair.priKey;
9. let returnBlob = priKey.getEncodedDer('PKCS8');
10. console.info('returnBlob data：' + returnBlob.data);
11. priKey.clearMem(); // 对于非对称私钥，clearMem()释放内部密钥结构。执行clearMem后，不支持getEncoded()。
12. });
13. }
```

### getAsyKeySpec10+

PhonePC/2in1TabletTVWearable

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

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| itemType | [AsyKeySpecItem](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspecitem10) | 是 | 指定的密钥参数类型。 |

**返回值：**

展开

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

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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. // 根据关键规范构造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. }

25. async function testgetAsyKeySpec() {
26. let commKeySpec = genEccCommonSpec(); // 使用参数属性，构造ECC公私钥公共密钥参数对象。
27. let generatorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(commKeySpec); // 使用密钥参数对象创建生成器。
28. let keyPair = await generatorBySpec.generateKeyPair();
29. let key = keyPair.priKey;
30. let p = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_FP_P_BN);
31. console.info('ecc item --- p: ' + p.toString(16));
32. }
```

### getEncodedDer12+

PhonePC/2in1TabletTVWearable

getEncodedDer(format: string): DataBlob

支持根据指定的密钥格式（如采用哪个规范），获取满足ASN.1语法、DER编码的私钥数据。当前仅支持获取PKCS8格式的ecc私钥数据。

说明

本接口和[Key.getEncoded()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#getencoded)的区别是：

1. 本接口可根据入参决定数据的输出格式，当前支持获取PKCS8格式的ecc私钥数据。
2. [Key.getEncoded()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#getencoded)接口，不支持指定密钥格式。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| format | string | 是 | 用于指定当前密钥格式，取值当前仅支持"PKCS8"。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 返回满足ASN.1语法和DER编码的指定密钥格式的ECC私钥数据。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

3. async function testGetEncodedDer() {
4. let eccGenerator = cryptoFramework.createAsyKeyGenerator('ECC256');
5. // 使用密钥生成器随机生成非对称密钥对。
6. let keyGenPromise = eccGenerator.generateKeyPair();
7. keyGenPromise.then(keyPair => {
8. let priKey = keyPair.priKey;
9. let returnBlob = priKey.getEncodedDer('PKCS8');
10. console.info('returnBlob data：' + returnBlob.data);
11. });
12. }
```

### getEncodedPem12+

PhonePC/2in1TabletTVWearable

getEncodedPem(format: string): string

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| format | string | 是 | 指定的获取密钥字符串的编码格式。其中，私钥可为'PKCS1' 或'PKCS8'格式。 |

**返回值：**

展开

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

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

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';

20. function TestPriKeyPkcs1ToPkcs8BySync1024() {
21. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
22. let keyPair = rsaGenerator.convertPemKeySync(null, priKeyPkcs1Str1024);
23. let priPemKey = keyPair.priKey;
24. let priString = priPemKey.getEncodedPem('PKCS8');
25. console.info('[sync]TestPriKeyPkcs1ToPkcs8BySync1024 priString output = ' + priString);
26. }
```

### 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](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#keyencodingconfig18) | 是 | 指定编码的算法跟口令，对私钥进行编码操作。 |

**返回值：**

展开

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

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

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';

20. function TestPriKeyPkcs1Encoded() {
21. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
22. let keyPair = rsaGenerator.convertPemKeySync(null, priKeyPkcs1Str1024);
23. let options: cryptoFramework.KeyEncodingConfig = {
24. password: '123456',
25. cipherName: 'AES-128-CBC'
26. }
27. let priPemKey = keyPair.priKey;
28. let priString = priPemKey.getEncodedPem('PKCS1', options);
29. console.info('[sync]TestPriKeyPkcs1Encoded priString output = ' + priString);
30. }
```

### getPubKey23+

PhonePC/2in1TabletTVWearable

getPubKey(): Promise<PubKey>

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

**元服务API：** 从API version 23开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<[PubKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#pubkey)> | Promise对象，返回公钥对象PubKey。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码ID | 错误信息 |
| --- | --- |
| 17620001 | memory operation failed. |
| 17620002 | failed to convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { buffer } from '@kit.ArkTS';

4. function compareUint8Array(a: Uint8Array, b: Uint8Array): boolean {
5. let buf1 = buffer.from(a);
6. let buf2 = buffer.from(b);
7. if (buf1.compare(buf2, 0, b.length, 0, a.length) == 0) {
8. return true;
9. } else {
10. return false;
11. }
12. }

14. async function generateAsyKey() {
15. let skData =
16. 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,
17. 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,
18. 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,
19. 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,
20. 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,
21. 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,
22. 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,
23. 184, 56, 113, 181, 67, 179, 231, 232, 152, 168, 147, 163, 215, 193, 56, 165, 252, 235, 86, 232, 174, 67, 52, 103,
24. 215, 149, 212, 125, 32, 212, 188, 162, 255, 180, 94, 233, 236, 146, 50, 153, 6, 159, 158, 253, 217, 97, 10, 238,
25. 133, 124, 174, 211, 232, 165, 19, 100, 186, 218, 62, 46, 124, 30, 19, 251, 3, 206, 105, 255, 236, 224, 178, 148,
26. 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,
27. 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,
28. 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,
29. 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,
30. 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,
31. 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,
32. 233, 185, 193, 254, 218, 76, 165, 184, 16, 109, 190, 93, 195, 227, 37, 58, 110, 243, 142, 152, 252, 226, 91, 59,
33. 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,
34. 97, 224, 16, 50, 148, 116, 105, 239, 251, 20, 39, 190, 117, 149, 168, 193, 80, 10, 210, 136, 107, 147, 169, 178,
35. 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,
36. 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,
37. 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,
38. 143, 15, 204, 37, 130, 111, 217, 143, 165, 193, 207, 215, 150, 197, 169, 2, 64, 7, 37, 152, 14, 232, 168, 102,
39. 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,
40. 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,
41. 251, 219, 42, 131, 248, 148, 151
42. ])
43. let expectPkdata =
44. 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,
45. 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,
46. 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,
47. 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,
48. 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,
49. 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,
50. 172, 135, 196, 30, 93, 2, 3, 1, 0, 1
51. ])
52. let skDataBlob: cryptoFramework.DataBlob = { data: skData };
53. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
54. try {
55. let keyPair = rsaGenerator.convertKeySync(null, skDataBlob);
56. let priKey = keyPair.priKey;
57. let pubkey = await priKey.getPubKey();
58. let pkBlob = pubkey.getEncoded();
59. console.info('pk1 bin data ' + pkBlob.data);
60. let ret: boolean = compareUint8Array(pkBlob.data, expectPkdata);
61. console.info('result = ' + ret);
62. } catch (e) {
63. console.error(`get pubkey from prikey failed, ${e.code}, ${e.message}`);
64. }
65. }
```

### getPubKeySync23+

PhonePC/2in1TabletTVWearable

getPubKeySync(): PubKey

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

**元服务API：** 从API version 23开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [PubKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#pubkey) | 公钥对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码ID | 错误信息 |
| --- | --- |
| 17620001 | memory operation failed. |
| 17620002 | failed to convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { buffer } from '@kit.ArkTS';

4. function compareUint8Array(a: Uint8Array, b: Uint8Array): boolean {
5. let buf1 = buffer.from(a);
6. let buf2 = buffer.from(b);
7. if (buf1.compare(buf2, 0, b.length, 0, a.length) == 0) {
8. return true;
9. } else {
10. return false;
11. }
12. }

14. function generateAsyKey() {
15. let skData =
16. 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,
17. 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,
18. 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,
19. 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,
20. 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,
21. 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,
22. 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,
23. 184, 56, 113, 181, 67, 179, 231, 232, 152, 168, 147, 163, 215, 193, 56, 165, 252, 235, 86, 232, 174, 67, 52, 103,
24. 215, 149, 212, 125, 32, 212, 188, 162, 255, 180, 94, 233, 236, 146, 50, 153, 6, 159, 158, 253, 217, 97, 10, 238,
25. 133, 124, 174, 211, 232, 165, 19, 100, 186, 218, 62, 46, 124, 30, 19, 251, 3, 206, 105, 255, 236, 224, 178, 148,
26. 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,
27. 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,
28. 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,
29. 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,
30. 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,
31. 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,
32. 233, 185, 193, 254, 218, 76, 165, 184, 16, 109, 190, 93, 195, 227, 37, 58, 110, 243, 142, 152, 252, 226, 91, 59,
33. 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,
34. 97, 224, 16, 50, 148, 116, 105, 239, 251, 20, 39, 190, 117, 149, 168, 193, 80, 10, 210, 136, 107, 147, 169, 178,
35. 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,
36. 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,
37. 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,
38. 143, 15, 204, 37, 130, 111, 217, 143, 165, 193, 207, 215, 150, 197, 169, 2, 64, 7, 37, 152, 14, 232, 168, 102,
39. 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,
40. 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,
41. 251, 219, 42, 131, 248, 148, 151
42. ])
43. let expectPkdata =
44. 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,
45. 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,
46. 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,
47. 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,
48. 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,
49. 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,
50. 172, 135, 196, 30, 93, 2, 3, 1, 0, 1
51. ])
52. let skDataBlob: cryptoFramework.DataBlob = { data: skData };
53. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
54. try {
55. let keyPair = rsaGenerator.convertKeySync(null, skDataBlob);
56. let priKey = keyPair.priKey;
57. let pubkey = priKey.getPubKeySync();
58. let pkBlob = pubkey.getEncoded();
59. console.info('pk1 bin data' + pkBlob.data);
60. let ret: boolean = compareUint8Array(pkBlob.data, expectPkdata);
61. console.info('result = ' + ret);
62. } catch (e) {
63. console.error(`get pubkey from prikey failed, ${e.code}, ${e.message}`);
64. }
65. }
```

## KeyPair

PhonePC/2in1TabletTVWearable

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

可以通过非对称密钥生成器[AsyKeyGenerator](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeygenerator)、[AsyKeyGeneratorBySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeygeneratorbyspec10)来生成。

说明

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

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

### 属性

PhonePC/2in1TabletTVWearable

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| priKey | [PriKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#prikey) | 是 | 否 | 私钥。 |
| pubKey | [PubKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#pubkey) | 是 | 否 | 公钥。 |

## cryptoFramework.createSymKeyGenerator

PhonePC/2in1TabletTVWearable

createSymKeyGenerator(algName: string): SymKeyGenerator

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

支持的规格详见[对称密钥生成和转换规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-sym-key-generation-conversion-spec)。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.SymKey

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.SymKey。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| algName | string | 是 | 待生成对称密钥生成器的算法名称。  具体取值详见[对称密钥生成和转换规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-sym-key-generation-conversion-spec)一节中的“字符串参数”。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [SymKeyGenerator](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#symkeygenerator) | 返回对称密钥生成器的对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

3. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('3DES192');
```

## SymKeyGenerator

PhonePC/2in1TabletTVWearable

对称密钥生成器。

在使用该类的方法前，先使用[createSymKeyGenerator](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreatesymkeygenerator)构建SymKeyGenerator实例。

### 属性

PhonePC/2in1TabletTVWearable

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.SymKey

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.SymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| algName | string | 是 | 否 | 对称密钥生成器指定的算法名称。 |

### generateSymKey

PhonePC/2in1TabletTVWearable

generateSymKey(callback: AsyncCallback<SymKey>): void

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

必须在使用[createSymKeyGenerator](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreatesymkeygenerator)创建对称密钥生成器后，才能使用本函数。

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

说明

对于HMAC算法的对称密钥，如果在创建对称密钥生成器时指定了具体哈希算法（如"HMAC|SHA256"），则会随机生成与哈希长度一致的二进制密钥数据（如256位的密钥数据）。如果未指定具体哈希算法，如仅指定"HMAC"，则不支持随机生成对称密钥数据，可通过[convertKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#convertkey)方式生成对称密钥数据。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.SymKey

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.SymKey。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| callback | AsyncCallback<[SymKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#symkey)> | 是 | 回调函数。当生成对称密钥成功，err为undefined，data为获取到的SymKey；否则为错误对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码ID | 错误信息 |
| --- | --- |
| 17620001 | memory operation failed. |

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';

3. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('3DES192');
4. symKeyGenerator.generateSymKey((err, symKey) => {
5. console.info('Generate symKey result: success, algName：' + symKey.algName);
6. });
```

### generateSymKey

PhonePC/2in1TabletTVWearable

generateSymKey(): Promise<SymKey>

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

必须在使用[createSymKeyGenerator](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreatesymkeygenerator)创建对称密钥生成器后，才能使用本函数。

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.SymKey

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.SymKey。

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<[SymKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#symkey)> | Promise对象，返回对称密钥SymKey。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码ID | 错误信息 |
| --- | --- |
| 17620001 | memory operation failed. |

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { BusinessError } from '@kit.BasicServicesKit';

4. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
5. symKeyGenerator.generateSymKey()
6. .then(symKey => {
7. console.info('Generate symKey result: success, algName: ' + symKey.algName);
8. }).catch((error: BusinessError) => {
9. console.error(`Generate symKey failed, ${error.code}, ${error.message}`);
10. });
```

### generateSymKeySync12+

PhonePC/2in1TabletTVWearable

generateSymKeySync(): SymKey

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

必须在使用[createSymKeyGenerator](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreatesymkeygenerator)创建对称密钥生成器后，才能使用本函数。

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

说明

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

如果在创建对称密钥生成器时没有指定具体哈希算法，如仅指定"HMAC"，则不支持随机生成对称密钥数据，可通过[convertKeySync](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#convertkeysync12)方式生成对称密钥数据。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.SymKey

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [SymKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#symkey) | 返回对称密钥SymKey。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码ID | 错误信息 |
| --- | --- |
| 17620001 | memory operation failed. |

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';

3. function testGenerateSymKeySync() {
4. // 创建SymKeyGenerator实例。
5. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256');
6. // 使用密钥生成器随机生成对称密钥。
7. let key = symKeyGenerator.generateSymKeySync();
8. let encodedKey = key.getEncoded();
9. console.info('key hex:' + encodedKey.data);
10. }
```

### convertKey

PhonePC/2in1TabletTVWearable

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

根据指定数据生成对称密钥。使用callback异步回调。

必须在使用[createSymKeyGenerator](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreatesymkeygenerator)创建对称密钥生成器后，才能使用本函数。

说明

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

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.SymKey

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.SymKey。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| key | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 指定的对称密钥材料。 |
| callback | AsyncCallback<[SymKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#symkey)> | 是 | 回调函数。当生成对称密钥成功，err为undefined，data为获取到的SymKey；否则为错误对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

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. }

12. function testConvertKey() {
13. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('3DES192');
14. let keyMaterialBlob = genKeyMaterialBlob();
15. symKeyGenerator.convertKey(keyMaterialBlob, (err, symKey) => {
16. console.info('Convert symKey result: success, algName: ' + symKey.algName);
17. });
18. }
```

### convertKey

PhonePC/2in1TabletTVWearable

convertKey(key: DataBlob): Promise<SymKey>

根据指定数据生成对称密钥。使用Promise异步回调。

在使用本函数前，需先通过[createSymKeyGenerator](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreatesymkeygenerator)创建对称密钥生成器。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.SymKey

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.SymKey。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| key | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 指定的密钥材料数据。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<[SymKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#symkey)> | Promise对象，返回对称密钥SymKey。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

4. function genKeyMaterialBlob(): cryptoFramework.DataBlob {
5. let arr = [
6. 0xba, 0x3d, 0xc2, 0x71, 0x21, 0x1e, 0x30, 0x56,
7. 0xad, 0x47, 0xfc, 0x5a, 0x46, 0x39, 0xee, 0x7c,
8. 0xba, 0x3b, 0xc2, 0x71, 0xab, 0xa0, 0x30, 0x72]; // keyLen = 192 (24 bytes)
9. let keyMaterial = new Uint8Array(arr);
10. return { data: keyMaterial };
11. }

13. function testConvertKey() {
14. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('3DES192');
15. let keyMaterialBlob = genKeyMaterialBlob();
16. symKeyGenerator.convertKey(keyMaterialBlob)
17. .then(symKey => {
18. console.info('Convert symKey result: success, algName：' + symKey.algName);
19. }).catch((error: BusinessError) => {
20. console.error(`Convert symKey failed, ${error.code}, ${error.message}`);
21. });
22. }
```

### convertKeySync12+

PhonePC/2in1TabletTVWearable

convertKeySync(key: DataBlob): SymKey

根据指定数据生成对称密钥。

必须在使用[createSymKeyGenerator](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreatesymkeygenerator)创建对称密钥生成器后，才能使用本函数。

说明

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.SymKey

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| key | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 指定的对称密钥材料。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [SymKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#symkey) | 对称密钥。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 { buffer } from '@kit.ArkTS';

4. function testConvertKeySync() {
5. // 对称密钥长度为64字节，512比特。
6. let keyMessage = '87654321abcdefgh87654321abcdefgh87654321abcdefgh87654321abcdefgh';
7. let keyBlob: cryptoFramework.DataBlob = {
8. data : new Uint8Array(buffer.from(keyMessage, 'utf-8').buffer)
9. }
10. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('HMAC');
11. let key = symKeyGenerator.convertKeySync(keyBlob);
12. let encodedKey = key.getEncoded();
13. console.info('key encoded data：' + encodedKey.data);
14. }
```

## cryptoFramework.createAsyKeyGenerator

PhonePC/2in1TabletTVWearable

createAsyKeyGenerator(algName: string): AsyKeyGenerator

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

支持的规格详见[非对称密钥生成和转换规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-asym-key-generation-conversion-spec)。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| algName | string | 是 | 非对称密钥生成支持的算法名。详见[非对称密钥生成和转换规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-asym-key-generation-conversion-spec)中的字符串参数。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [AsyKeyGenerator](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeygenerator) | 返回非对称密钥生成器。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

3. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('ECC256');
```

## AsyKeyGenerator

PhonePC/2in1TabletTVWearable

非对称密钥生成器。在使用该类的方法前，需要先使用[createAsyKeyGenerator](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateasykeygenerator)方法构建一个AsyKeyGenerator实例。

### 属性

PhonePC/2in1TabletTVWearable

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| algName | string | 是 | 否 | 非对称密钥生成器指定的算法名称。 |

### generateKeyPair

PhonePC/2in1TabletTVWearable

generateKeyPair(callback: AsyncCallback<KeyPair>): void

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| callback | AsyncCallback<[KeyPair](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#keypair)> | 是 | 回调函数。当获取非对称密钥成功，err为undefined，data为获取到的KeyPair；否则为错误对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码ID | 错误信息 |
| --- | --- |
| 401 | invalid parameters. Possible causes:  Incorrect parameter types; |
| 17620001 | memory operation failed. |
| 17630001 | crypto operation error. |

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';

3. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('ECC256');
4. asyKeyGenerator.generateKeyPair((err, keyPair) => {
5. if (err) {
6. console.error(`generateKeyPair failed, errCode: ${err.code}, errMsg: ${err.message}`);
7. return;
8. }
9. console.info('generateKeyPair result: success.');
10. })
```

### generateKeyPair

PhonePC/2in1TabletTVWearable

generateKeyPair(): Promise<KeyPair>

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<[KeyPair](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#keypair)> | Promise对象，返回非对称密钥KeyPair。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

4. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('ECC256');
5. let keyGenPromise = asyKeyGenerator.generateKeyPair();
6. keyGenPromise.then(keyPair => {
7. console.info('generateKeyPair result: success.');
8. }).catch((error: BusinessError) => {
9. console.error(`generateKeyPair failed, ${error.code}, ${error.message}`);
10. });
```

### generateKeyPairSync12+

PhonePC/2in1TabletTVWearable

generateKeyPairSync(): KeyPair

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [KeyPair](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#keypair) | 非对称密钥。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

3. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('ECC256');
4. try {
5. let keyPairData = asyKeyGenerator.generateKeyPairSync();
6. if (keyPairData != null) {
7. console.info('[Sync]: key pair result: success.');
8. } else {
9. console.error('[Sync]: get key pair result: fail.');
10. }
11. } catch (e) {
12. console.error(`sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
13. }
```

### convertKey

PhonePC/2in1TabletTVWearable

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

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| pubKey | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | null10+ | 是 | 指定的公钥材料。如果公钥不需要转换，请传入null。API 10之前只支持DataBlob， API 10之后增加支持null。 |
| priKey | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | null10+ | 是 | 指定的私钥材料。如果私钥不需要转换，请传入null。API 10之前只支持DataBlob， API 10之后增加支持null。 |
| callback | AsyncCallback<[KeyPair](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#keypair)> | 是 | 回调函数。当获取非对称密钥成功，err为undefined，data为获取到的KeyPair；否则为错误对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

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. asyKeyGenerator.convertKey(pubKeyBlob, priKeyBlob, (err, keyPair) => {
15. if (err) {
16. console.error(`convertKey failed, errCode: ${err.code}, errMsg: ${err.message}`);
17. return;
18. }
19. console.info('convertKey result: success.');
20. });
```

### convertKey

PhonePC/2in1TabletTVWearable

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

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| pubKey | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | null10+ | 是 | 指定的公钥材料。如果公钥不需要转换，请传入null。API 10之前只支持DataBlob， API 10之后增加支持null。 |
| priKey | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | null10+ | 是 | 指定的私钥材料。如果私钥不需要转换，请传入null。API 10之前只支持DataBlob， API 10之后增加支持null。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<[KeyPair](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#keypair)> | Promise对象，返回非对称密钥KeyPair。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

4. let pubKeyArray =
5. 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,
6. 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,
7. 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,
8. 215, 159, 239, 28, 106, 124, 171, 34, 145, 124, 174, 57, 92]);
9. let priKeyArray =
10. 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,
11. 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]);
12. let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyArray }; // 公钥二进制数据。
13. let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyArray }; // 私钥二进制数据。
14. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('ECC256');
15. let keyGenPromise = asyKeyGenerator.convertKey(pubKeyBlob, priKeyBlob);
16. keyGenPromise.then(keyPair => {
17. console.info('convertKey result: success.');
18. }).catch((error: BusinessError) => {
19. console.error(`convertKey failed, errCode: ${error.code}, errMsg: ${error.message}`);
20. });
```

### convertKeySync12+

PhonePC/2in1TabletTVWearable

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

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| pubKey | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | null10+ | 是 | 指定公钥材料。如果公钥无需转换，请传入null。API 10前仅支持DataBlob，API 10起支持传入null。 |
| priKey | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | null10+ | 是 | 指定私钥材料。如果私钥无需转换，请传入null。API 10前仅支持DataBlob，API 10起支持传入null。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [KeyPair](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#keypair) | 非对称密钥。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

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. try {
15. let keyPairData = asyKeyGenerator.convertKeySync(pubKeyBlob, priKeyBlob);
16. if (keyPairData != null) {
17. console.info('[Sync]: key pair result: success.');
18. } else {
19. console.error('[Sync]: convert key pair result: fail.');
20. }
21. } catch (e) {
22. console.error(`sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
23. }
```

### 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](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#keypair)> | Promise对象，返回非对称密钥KeyPair。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

4. let priKeyPkcs1Str1024: string =
5. '-----BEGIN RSA PRIVATE KEY-----\n'
6. + 'MIICXQIBAAKBgQCwIN3mr21+N96ToxnVnaS+xyK9cNRAHiHGgrbjHw6RAj3V+l+W\n'
7. + 'Y68IhIe3DudVlzE9oMjeOQwkMkq//HCxNlIlFR6O6pa0mrXSwPRE7YKG97CeKk2g\n'
8. + 'YOS8YEh8toAvm7xKbiLkXuuMlxrjP2j/mb5iI/UASFSPZiQ/IyxDr0AQaQIDAQAB\n'
9. + 'AoGAEvBFzBNa+7J4PXnRQlYEK/tvsd0bBZX33ceacMubHl6WVZbphltLq+fMTBPP\n'
10. + 'LjXmtpC+aJ7Lvmyl+wTi/TsxE9vxW5JnbuRT48rnZ/Xwq0eozDeEeIBRrpsr7Rvr\n'
11. + '7ctrgzr4m4yMHq9aDgpxj8IR7oHkfwnmWr0wM3FuiVlj650CQQDineeNZ1hUTkj4\n'
12. + 'D3O+iCi3mxEVEeJrpqrmSFolRMb+iozrIRKuJlgcOs+Gqi2fHfOTTL7LkpYe8SVg\n'
13. + 'e3JxUdVLAkEAxvcZXk+byMFoetrnlcMR13VHUpoVeoV9qkv6CAWLlbMdgf7uKmgp\n'
14. + 'a1Yp3QPDNQQqkPvrqtfR19JWZ4uy1qREmwJALTU3BjyBoH/liqb6fh4HkWk75Som\n'
15. + 'MzeSjFIOubSYxhq5tgZpBZjcpvUMhV7Zrw54kwASZ+YcUJvmyvKViAm9NQJBAKF7\n'
16. + 'DyXSKrem8Ws0m1ybM7HQx5As6l3EVhePDmDQT1eyRbKp+xaD74nkJpnwYdB3jyyY\n'
17. + 'qc7A1tj5J5NmeEFolR0CQQCn76Xp8HCjGgLHw9vg7YyIL28y/XyfFyaZAzzK+Yia\n'
18. + 'akNwQ6NeGtXSsuGCcyyfpacHp9xy8qXQNKSkw03/5vDO\n'
19. + '-----END RSA PRIVATE KEY-----\n';
20. let publicPkcs1Str1024: string =
21. '-----BEGIN RSA PUBLIC KEY-----\n'
22. + 'MIGJAoGBALAg3eavbX433pOjGdWdpL7HIr1w1EAeIcaCtuMfDpECPdX6X5ZjrwiE\n'
23. + 'h7cO51WXMT2gyN45DCQySr/8cLE2UiUVHo7qlrSatdLA9ETtgob3sJ4qTaBg5Lxg\n'
24. + 'SHy2gC+bvEpuIuRe64yXGuM/aP+ZvmIj9QBIVI9mJD8jLEOvQBBpAgMBAAE=\n'
25. + '-----END RSA PUBLIC KEY-----\n';

27. async function TestConvertPemKeyByPromise() {
28. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
29. asyKeyGenerator.convertPemKey(publicPkcs1Str1024, priKeyPkcs1Str1024)
30. .then(keyPair => {
31. console.info('convertPemKey result: success.');
32. }).catch((error: BusinessError) => {
33. console.error(`convertPemKey failed: errCode: ${error.code}, errMsg: ${error.message}`);
34. });
35. }
```

### 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](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#keypair)> | Promise对象，返回非对称密钥KeyPair。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

4. let priKeyPkcs1EncodingStr: string =
5. '-----BEGIN RSA PRIVATE KEY-----\n'
6. + 'Proc-Type: 4,ENCRYPTED\n'
7. + 'DEK-Info: AES-128-CBC,815A066131BF05CF87CE610A59CC69AE\n\n'
8. + '7Jd0vmOmYGFZ2yRY8fqRl3+6rQlFtNcMILvcb5KWHDSrxA0ULmJE7CW0DSRikHoA\n'
9. + 't0KgafhYXeQXh0dRy9lvVRAFSLHCLJVjchx90V7ZSivBFEq7+iTozVp4AlbgYsJP\n'
10. + 'vx/1sfZD2WAcyMJ7IDmJyft7xnpVSXsyWGTT4f3eaHJIh1dqjwrso7ucAW0FK6rp\n'
11. + '/TONyOoXNfXtRbVtxNyCWBxt4HCSclDZFvS9y8fz9ZwmCUV7jei/YdzyQI2wnE13\n'
12. + 'W8cKlpzRFL6BWi8XPrUtAw5MWeHBAPUgPWMfcmiaeyi5BJFhQCrHLi+Gj4EEJvp7\n'
13. + 'mP5cbnQAx6+paV5z9m71SKrI/WSc4ixsYYdVmlL/qwAK9YliFfoPl030YJWW6rFf\n'
14. + 'T7J9BUlHGUJ0RB2lURNNLakM+UZRkeE9TByzCzgTxuQtyv5Lwsh2mAk3ia5x0kUO\n'
15. + 'LHg3Eoabhdh+YZA5hHaxnpF7VjspB78E0F9Btq+A41rSJ6zDOdToHey4MJ2nxdey\n'
16. + 'Z3bi81TZ6Fp4IuROrvZ2B/Xl3uNKR7n+AHRKnaAO87ywzyltvjwSh2y3xhJueiRs\n'
17. + 'BiYkyL3/fnocD3pexTdN6h3JgQGgO5GV8zw/NrxA85mw8o9im0HreuFObmNj36T9\n'
18. + 'k5N+R/QIXW83cIQOLaWK1ThYcluytf0tDRiMoKqULiaA6HvDMigExLxuhCtnoF8I\n'
19. + 'iOLN1cPdEVQjzwDHLqXP2DbWW1z9iRepLZlEm1hLRLEmOrTGKezYupVv306SSa6J\n'
20. + 'OA55lAeXMbyjFaYCr54HWrpt4NwNBX1efMUURc+1LcHpzFrBTTLbfjIyq6as49pH\n'
21. + '-----END RSA PRIVATE KEY-----\n'

23. async function TestConvertPemKeyByPromise() {
24. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
25. asyKeyGenerator.convertPemKey(null, priKeyPkcs1EncodingStr, '123456')
26. .then(keyPair => {
27. console.info('convertPemKey result: success.');
28. }).catch((error: BusinessError) => {
29. console.error(`convertPemKey failed: errCode: ${error.code}, errMsg: ${error.message}`);
30. });
31. }
```

### convertPemKeySync12+

PhonePC/2in1TabletTVWearable

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

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

说明

convertPemKeySync接口与convertPemKey接口注意事项相同，见[convertPemKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#convertpemkey12)接口说明。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| pubKey | string | null | 是 | 指定的公钥材料。如果公钥不需要转换，请传入null。 |
| priKey | string | null | 是 | 指定私钥材料。私钥无需转换时，请传入null。  **说明**：公钥和私钥材料不能同时为null或空字符串。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [KeyPair](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#keypair) | 非对称密钥。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

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';

26. function TestConvertPemKeyBySync() {
27. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
28. try {
29. let keyPairData = asyKeyGenerator.convertPemKeySync(publicPkcs1Str1024, priKeyPkcs1Str1024);
30. if (keyPairData != null) {
31. console.info('[Sync]: convert pem key pair result: success.');
32. } else {
33. console.error('[Sync]: convert pem key pair result: fail.');
34. }
35. } catch (e) {
36. console.error(`Sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
37. }
38. }
```

### convertPemKeySync18+

PhonePC/2in1TabletTVWearable

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

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

说明

convertPemKeySync接口与convertPemKey接口注意事项相同，见[convertPemKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#convertpemkey18)接口说明。

**元服务API：** 从API version 18开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

**参数：**

展开

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

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [KeyPair](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#keypair) | 非对称密钥。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

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'

22. function TestConvertPemKeyBySync() {
23. let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
24. try {
25. let keyPairData = asyKeyGenerator.convertPemKeySync(null, priKeyPkcs1EncodingStr, '123456');
26. if (keyPairData != null) {
27. console.info('[Sync]: convert pem key pair result: success.');
28. } else {
29. console.error('[Sync]: convert pem key pair result: fail.');
30. }
31. } catch (e) {
32. console.error(`Sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
33. }
34. }
```

## cryptoFramework.createAsyKeyGeneratorBySpec10+

PhonePC/2in1TabletTVWearable

createAsyKeyGeneratorBySpec(asyKeySpec: AsyKeySpec): AsyKeyGeneratorBySpec

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| asyKeySpec | [AsyKeySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspec10) | 是 | 密钥参数。非对称密钥生成器根据指定的这些参数生成公/私钥。  支持的规格详见[非对称密钥生成和转换规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-asym-key-generation-conversion-spec)。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [AsyKeyGeneratorBySpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeygeneratorbyspec10) | 返回非对称密钥生成器实例。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

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. }

15. // 设置DSA1024密钥对中包含的全参数。
16. function genDsa1024KeyPairSpecBigE() {
17. let dsaCommonSpec = genDsa1024CommonSpecBigE();
18. let dsaKeyPairSpec: cryptoFramework.DSAKeyPairSpec = {
19. algName: 'DSA',
20. specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC,
21. params: dsaCommonSpec,
22. sk: BigInt('0xa2dd2adb2d11392c2541930f61f1165c370aabd2d78d00342e0a2fd9'),
23. pk: BigInt('0xae6b5d5042e758f3fc9a02d009d896df115811a75b5f7b382d8526270dbb3c029403fafb8573ba4ef0314ea86f09d01e82a14d1ebb67b0c331f41049bd6b1842658b0592e706a5e4d20c14b67977e17df7bdd464cce14b5f13bae6607760fcdf394e0b73ac70aaf141fa4dafd736bd0364b1d6e6c0d7683a5de6b9221e7f2d6b'),
24. }
25. return dsaKeyPairSpec;
26. }

28. let asyKeyPairSpec = genDsa1024KeyPairSpecBigE(); // JS输入必须是大端格式的正数。
29. let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
```

## AsyKeyGeneratorBySpec10+

PhonePC/2in1TabletTVWearable

非对称密钥生成器。在使用该类的方法前，需要先使用[createAsyKeyGeneratorBySpec()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateasykeygeneratorbyspec10)方法构建一个AsyKeyGeneratorBySpec实例。

### 属性

PhonePC/2in1TabletTVWearable

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| algName | string | 是 | 否 | 非对称密钥生成器的算法名。 |

### generateKeyPair10+

PhonePC/2in1TabletTVWearable

generateKeyPair(callback: AsyncCallback<KeyPair>): void

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

当使用[COMMON\_PARAMS\_SPEC](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspectype10)类型的密钥参数来创建密钥生成器时，可以得到随机生成的密钥对；当使用[KEY\_PAIR\_SPEC](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspectype10)类型的密钥参数来创建密钥生成器时，可以得到各项数据与密钥参数一致的密钥对。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| callback | AsyncCallback<[KeyPair](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#keypair)> | 是 | 回调函数。当获取非对称密钥成功，err为undefined，data为获取到的KeyPair；否则为错误对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码ID | 错误信息 |
| --- | --- |
| 401 | invalid parameters. Possible causes:  Incorrect parameter types; |
| 17620001 | memory operation failed. |
| 17630001 | crypto operation error. |

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';

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. }

15. // 设置DSA1024密钥对中包含的全参数。
16. function genDsa1024KeyPairSpecBigE() {
17. let dsaCommonSpec = genDsa1024CommonSpecBigE();
18. let dsaKeyPairSpec: cryptoFramework.DSAKeyPairSpec = {
19. algName: 'DSA',
20. specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC,
21. params: dsaCommonSpec,
22. sk: BigInt('0xa2dd2adb2d11392c2541930f61f1165c370aabd2d78d00342e0a2fd9'),
23. pk: BigInt('0xae6b5d5042e758f3fc9a02d009d896df115811a75b5f7b382d8526270dbb3c029403fafb8573ba4ef0314ea86f09d01e82a14d1ebb67b0c331f41049bd6b1842658b0592e706a5e4d20c14b67977e17df7bdd464cce14b5f13bae6607760fcdf394e0b73ac70aaf141fa4dafd736bd0364b1d6e6c0d7683a5de6b9221e7f2d6b'),
24. }
25. return dsaKeyPairSpec;
26. }

28. function testGenerateKeyPair() {
29. let asyKeyPairSpec = genDsa1024KeyPairSpecBigE(); // JS输入必须是大端格式的正数。
30. let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
31. asyKeyGeneratorBySpec.generateKeyPair((err, keyPair) => {
32. if (err) {
33. console.error(`generateKeyPair failed, errCode: ${err.code}, errMsg: ${err.message}`);
34. return;
35. }
36. console.info('generateKeyPair result: success.');
37. })
38. }
```

### generateKeyPair10+

PhonePC/2in1TabletTVWearable

generateKeyPair(): Promise<KeyPair>

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

当使用[COMMON\_PARAMS\_SPEC](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspectype10)类型的密钥参数来创建密钥生成器时，可以得到随机生成的密钥对；当使用[KEY\_PAIR\_SPEC](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspectype10)类型的密钥参数来创建密钥生成器时，可以得到各项数据与密钥参数一致的密钥对。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<[KeyPair](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#keypair)> | Promise对象，返回非对称密钥KeyPair。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

4. // 配置DSA1024公钥和私钥中包含的公共参数。
5. function genDsa1024CommonSpecBigE() {
6. let dsaCommonSpec: cryptoFramework.DSACommonParamsSpec = {
7. algName: 'DSA',
8. specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC,
9. p: BigInt('0xed1501551b8ab3547f6355ffdc2913856ddeca198833dbd04f020e5f25e47c50e0b3894f7690a0d2ea5ed3a7be25c54292a698e1f086eb3a97deb4dbf04fcad2dafd94a9f35c3ae338ab35477e16981ded6a5b13d5ff20bf55f1b262303ad3a80af71aa6aa2354d20e9c82647664bdb6b333b7bea0a5f49d55ca40bc312a1729'),
10. q: BigInt('0xd23304044019d5d382cfeabf351636c7ab219694ac845051f60b047b'),
11. g: BigInt('0x2cc266d8bd33c3009bd67f285a257ba74f0c3a7e12b722864632a0ac3f2c17c91c2f3f67eb2d57071ef47aaa8f8e17a21ad2c1072ee1ce281362aad01dcbcd3876455cd17e1dd55d4ed36fa011db40f0bbb8cba01d066f392b5eaa9404bfcb775f2196a6bc20eeec3db32d54e94d87ecdb7a0310a5a017c5cdb8ac78597778bd'),
12. }
13. return dsaCommonSpec;
14. }

16. // 设置DSA1024密钥对中包含的全参数。
17. function genDsa1024KeyPairSpecBigE() {
18. let dsaCommonSpec = genDsa1024CommonSpecBigE();
19. let dsaKeyPairSpec: cryptoFramework.DSAKeyPairSpec = {
20. algName: 'DSA',
21. specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC,
22. params: dsaCommonSpec,
23. sk: BigInt('0xa2dd2adb2d11392c2541930f61f1165c370aabd2d78d00342e0a2fd9'),
24. pk: BigInt('0xae6b5d5042e758f3fc9a02d009d896df115811a75b5f7b382d8526270dbb3c029403fafb8573ba4ef0314ea86f09d01e82a14d1ebb67b0c331f41049bd6b1842658b0592e706a5e4d20c14b67977e17df7bdd464cce14b5f13bae6607760fcdf394e0b73ac70aaf141fa4dafd736bd0364b1d6e6c0d7683a5de6b9221e7f2d6b'),
25. }
26. return dsaKeyPairSpec;
27. }

29. function testGenerateKeyPair() {
30. let asyKeyPairSpec = genDsa1024KeyPairSpecBigE(); // JS输入必须是大端格式的正数。
31. let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
32. let keyGenPromise = asyKeyGeneratorBySpec.generateKeyPair();
33. keyGenPromise.then(keyPair => {
34. console.info('generateKeyPair result: success.');
35. }).catch((error: BusinessError) => {
36. console.error(`generateKeyPair failed: errCode: ${error.code}, errMsg: ${error.message}`);
37. });
38. }
```

### generateKeyPairSync12+

PhonePC/2in1TabletTVWearable

generateKeyPairSync(): KeyPair

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

当使用[COMMON\_PARAMS\_SPEC](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspectype10)类型的密钥参数来创建密钥生成器时，可以得到随机生成的密钥对；当使用[KEY\_PAIR\_SPEC](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspectype10)类型的密钥参数来创建密钥生成器时，可以得到各项数据与密钥参数一致的密钥对。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [KeyPair](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#keypair) | 非对称密钥。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

4. // 配置DSA1024公钥和私钥中包含的公共参数。
5. function genDsa1024CommonSpecBigE() {
6. let dsaCommonSpec: cryptoFramework.DSACommonParamsSpec = {
7. algName: 'DSA',
8. specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC,
9. p: BigInt('0xed1501551b8ab3547f6355ffdc2913856ddeca198833dbd04f020e5f25e47c50e0b3894f7690a0d2ea5ed3a7be25c54292a698e1f086eb3a97deb4dbf04fcad2dafd94a9f35c3ae338ab35477e16981ded6a5b13d5ff20bf55f1b262303ad3a80af71aa6aa2354d20e9c82647664bdb6b333b7bea0a5f49d55ca40bc312a1729'),
10. q: BigInt('0xd23304044019d5d382cfeabf351636c7ab219694ac845051f60b047b'),
11. g: BigInt('0x2cc266d8bd33c3009bd67f285a257ba74f0c3a7e12b722864632a0ac3f2c17c91c2f3f67eb2d57071ef47aaa8f8e17a21ad2c1072ee1ce281362aad01dcbcd3876455cd17e1dd55d4ed36fa011db40f0bbb8cba01d066f392b5eaa9404bfcb775f2196a6bc20eeec3db32d54e94d87ecdb7a0310a5a017c5cdb8ac78597778bd'),
12. }
13. return dsaCommonSpec;
14. }

16. // 设置DSA1024密钥对中包含的全参数。
17. function genDsa1024KeyPairSpecBigE() {
18. let dsaCommonSpec = genDsa1024CommonSpecBigE();
19. let dsaKeyPairSpec: cryptoFramework.DSAKeyPairSpec = {
20. algName: 'DSA',
21. specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC,
22. params: dsaCommonSpec,
23. sk: BigInt('0xa2dd2adb2d11392c2541930f61f1165c370aabd2d78d00342e0a2fd9'),
24. pk: BigInt('0xae6b5d5042e758f3fc9a02d009d896df115811a75b5f7b382d8526270dbb3c029403fafb8573ba4ef0314ea86f09d01e82a14d1ebb67b0c331f41049bd6b1842658b0592e706a5e4d20c14b67977e17df7bdd464cce14b5f13bae6607760fcdf394e0b73ac70aaf141fa4dafd736bd0364b1d6e6c0d7683a5de6b9221e7f2d6b'),
25. }
26. return dsaKeyPairSpec;
27. }

29. function testGenerateKeyPairSync() {
30. let asyKeyPairSpec = genDsa1024KeyPairSpecBigE(); // JS输入必须是大端格式的正数。
31. let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
32. try {
33. let keyPairData = asyKeyGeneratorBySpec.generateKeyPairSync();
34. if (keyPairData != null) {
35. console.info('[Sync]: key pair result: success.');
36. } else {
37. console.error('[Sync]: get key pair result: fail.');
38. }
39. } catch (error) {
40. let e: BusinessError = error as BusinessError;
41. console.error(`sync failed: errCode: ${error.code}, errMsg: ${error.message}`);
42. }
43. }
```

### generatePriKey10+

PhonePC/2in1TabletTVWearable

generatePriKey(callback: AsyncCallback<PriKey>): void

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

使用[PRIVATE\_KEY\_SPEC](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspectype10)类型密钥参数创建密钥生成器，生成指定私钥。使用[KEY\_PAIR\_SPEC](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspectype10)类型密钥参数创建密钥生成器，从生成的密钥对中获取指定私钥。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| callback | AsyncCallback<[PriKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#prikey)> | 是 | 回调函数。当获取非对称密钥成功，err为undefined，data为获取到的PriKey；否则为错误对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

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. }

15. // 设置DSA1024密钥对中包含的全参数。
16. function genDsa1024KeyPairSpecBigE() {
17. let dsaCommonSpec = genDsa1024CommonSpecBigE();
18. let dsaKeyPairSpec: cryptoFramework.DSAKeyPairSpec = {
19. algName: 'DSA',
20. specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC,
21. params: dsaCommonSpec,
22. sk: BigInt('0xa2dd2adb2d11392c2541930f61f1165c370aabd2d78d00342e0a2fd9'),
23. pk: BigInt('0xae6b5d5042e758f3fc9a02d009d896df115811a75b5f7b382d8526270dbb3c029403fafb8573ba4ef0314ea86f09d01e82a14d1ebb67b0c331f41049bd6b1842658b0592e706a5e4d20c14b67977e17df7bdd464cce14b5f13bae6607760fcdf394e0b73ac70aaf141fa4dafd736bd0364b1d6e6c0d7683a5de6b9221e7f2d6b'),
24. }
25. return dsaKeyPairSpec;
26. }

28. function testGeneratePriKey() {
29. let asyKeyPairSpec = genDsa1024KeyPairSpecBigE(); // JS输入必须是大端格式的正数。
30. let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
31. asyKeyGeneratorBySpec.generatePriKey((err, prikey) => {
32. if (err) {
33. console.error(`generateKeyPair failed, errCode: ${err.code}, errMsg: ${err.message}`);
34. return;
35. }
36. console.info('generatePriKey result: success.');
37. })
38. }
```

### generatePriKey10+

PhonePC/2in1TabletTVWearable

generatePriKey(): Promise<PriKey>

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

当使用[PRIVATE\_KEY\_SPEC](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspectype10)类型的密钥参数来创建密钥生成器时，可以得到指定的私钥；当使用[KEY\_PAIR\_SPEC](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspectype10)类型的密钥参数来创建密钥生成器时，可以从生成的密钥对中获取指定的私钥。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<[PriKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#prikey)> | Promise对象，返回非对称密钥的私钥PriKey。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

4. // 配置DSA1024公钥和私钥中包含的公共参数。
5. function genDsa1024CommonSpecBigE() {
6. let dsaCommonSpec: cryptoFramework.DSACommonParamsSpec = {
7. algName: 'DSA',
8. specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC,
9. p: BigInt('0xed1501551b8ab3547f6355ffdc2913856ddeca198833dbd04f020e5f25e47c50e0b3894f7690a0d2ea5ed3a7be25c54292a698e1f086eb3a97deb4dbf04fcad2dafd94a9f35c3ae338ab35477e16981ded6a5b13d5ff20bf55f1b262303ad3a80af71aa6aa2354d20e9c82647664bdb6b333b7bea0a5f49d55ca40bc312a1729'),
10. q: BigInt('0xd23304044019d5d382cfeabf351636c7ab219694ac845051f60b047b'),
11. g: BigInt('0x2cc266d8bd33c3009bd67f285a257ba74f0c3a7e12b722864632a0ac3f2c17c91c2f3f67eb2d57071ef47aaa8f8e17a21ad2c1072ee1ce281362aad01dcbcd3876455cd17e1dd55d4ed36fa011db40f0bbb8cba01d066f392b5eaa9404bfcb775f2196a6bc20eeec3db32d54e94d87ecdb7a0310a5a017c5cdb8ac78597778bd'),
12. }
13. return dsaCommonSpec;
14. }

16. // 设置DSA1024密钥对中包含的全参数。
17. function genDsa1024KeyPairSpecBigE() {
18. let dsaCommonSpec = genDsa1024CommonSpecBigE();
19. let dsaKeyPairSpec: cryptoFramework.DSAKeyPairSpec = {
20. algName: 'DSA',
21. specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC,
22. params: dsaCommonSpec,
23. sk: BigInt('0xa2dd2adb2d11392c2541930f61f1165c370aabd2d78d00342e0a2fd9'),
24. pk: BigInt('0xae6b5d5042e758f3fc9a02d009d896df115811a75b5f7b382d8526270dbb3c029403fafb8573ba4ef0314ea86f09d01e82a14d1ebb67b0c331f41049bd6b1842658b0592e706a5e4d20c14b67977e17df7bdd464cce14b5f13bae6607760fcdf394e0b73ac70aaf141fa4dafd736bd0364b1d6e6c0d7683a5de6b9221e7f2d6b'),
25. }
26. return dsaKeyPairSpec;
27. }

29. function testGeneratePriKey() {
30. let asyKeyPairSpec = genDsa1024KeyPairSpecBigE(); // JS输入必须是大端格式的正数。
31. let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
32. let keyGenPromise = asyKeyGeneratorBySpec.generatePriKey();
33. keyGenPromise.then(priKey => {
34. console.info('generatePriKey result: success.');
35. }).catch((error: BusinessError) => {
36. console.error(`generatePriKey failed: errCode: ${error.code}, errMsg: ${error.message}`);
37. });
38. }
```

### generatePriKeySync12+

PhonePC/2in1TabletTVWearable

generatePriKeySync(): PriKey

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

当使用[PRIVATE\_KEY\_SPEC](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspectype10)类型的密钥参数来创建密钥生成器时，可以得到指定的私钥；当使用[KEY\_PAIR\_SPEC](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspectype10)类型的密钥参数来创建密钥生成器时，可以从生成的密钥对中获取指定的私钥。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [PriKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#prikey) | 非对称密钥。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

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. }

15. // 设置DSA1024密钥对中包含的全参数。
16. function genDsa1024KeyPairSpecBigE() {
17. let dsaCommonSpec = genDsa1024CommonSpecBigE();
18. let dsaKeyPairSpec: cryptoFramework.DSAKeyPairSpec = {
19. algName: 'DSA',
20. specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC,
21. params: dsaCommonSpec,
22. sk: BigInt('0xa2dd2adb2d11392c2541930f61f1165c370aabd2d78d00342e0a2fd9'),
23. pk: BigInt('0xae6b5d5042e758f3fc9a02d009d896df115811a75b5f7b382d8526270dbb3c029403fafb8573ba4ef0314ea86f09d01e82a14d1ebb67b0c331f41049bd6b1842658b0592e706a5e4d20c14b67977e17df7bdd464cce14b5f13bae6607760fcdf394e0b73ac70aaf141fa4dafd736bd0364b1d6e6c0d7683a5de6b9221e7f2d6b'),
24. }
25. return dsaKeyPairSpec;
26. }

28. function testGeneratePriKeySync() {
29. let asyKeyPairSpec = genDsa1024KeyPairSpecBigE(); // JS输入必须是大端格式的正数。
30. let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
31. try {
32. let priKeyData = asyKeyGeneratorBySpec.generatePriKeySync();
33. if (priKeyData != null) {
34. console.info('[Sync]: pri key result: success.');
35. } else {
36. console.error('[Sync]: get pri key result: fail.');
37. }
38. } catch (e) {
39. console.error(`sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
40. }
41. }
```

### generatePubKey10+

PhonePC/2in1TabletTVWearable

generatePubKey(callback: AsyncCallback<PubKey>): void

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

当使用[PUBLIC\_KEY\_SPEC](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspectype10)类型的密钥参数来创建密钥生成器时，可以得到指定的公钥；当使用[KEY\_PAIR\_SPEC](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspectype10)类型的密钥参数来创建密钥生成器时，可以从生成的密钥对中获取指定的公钥。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version10-11系统能力为SystemCapability.Security.CryptoFramework；从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| callback | AsyncCallback<[PubKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#pubkey)> | 是 | 回调函数。当获取非对称密钥成功，err为undefined，data为获取到的PubKey；否则为错误对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码ID | 错误信息 |
| --- | --- |
| 401 | invalid parameters. Possible causes:  Incorrect parameter types; |
| 17620001 | memory operation failed. |
| 17630001 | crypto operation error. |

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';

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. }

15. // 设置DSA1024密钥对中包含的全参数。
16. function genDsa1024KeyPairSpecBigE() {
17. let dsaCommonSpec = genDsa1024CommonSpecBigE();
18. let dsaKeyPairSpec: cryptoFramework.DSAKeyPairSpec = {
19. algName: 'DSA',
20. specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC,
21. params: dsaCommonSpec,
22. sk: BigInt('0xa2dd2adb2d11392c2541930f61f1165c370aabd2d78d00342e0a2fd9'),
23. pk: BigInt('0xae6b5d5042e758f3fc9a02d009d896df115811a75b5f7b382d8526270dbb3c029403fafb8573ba4ef0314ea86f09d01e82a14d1ebb67b0c331f41049bd6b1842658b0592e706a5e4d20c14b67977e17df7bdd464cce14b5f13bae6607760fcdf394e0b73ac70aaf141fa4dafd736bd0364b1d6e6c0d7683a5de6b9221e7f2d6b'),
24. }
25. return dsaKeyPairSpec;
26. }

28. function testGeneratePubKey() {
29. let asyKeyPairSpec = genDsa1024KeyPairSpecBigE(); // JS输入必须是大端格式的正数。
30. let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
31. asyKeyGeneratorBySpec.generatePubKey((err, pubKey) => {
32. if (err) {
33. console.error(`generatePubKey failed, errCode: ${err.code}, errMsg: ${err.message}`);
34. return;
35. }
36. console.info('generatePubKey result: success.');
37. })
38. }
```

### generatePubKey10+

PhonePC/2in1TabletTVWearable

generatePubKey(): Promise<PubKey>

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

当使用[PUBLIC\_KEY\_SPEC](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspectype10)类型的密钥参数来创建密钥生成器时，可以得到指定的公钥；当使用[KEY\_PAIR\_SPEC](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspectype10)类型的密钥参数来创建密钥生成器时，可以从生成的密钥对中获取指定的公钥。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<[PubKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#pubkey)> | Promise对象，返回非对称密钥的公钥PubKey。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

4. // 配置DSA1024公钥和私钥中包含的公共参数。
5. function genDsa1024CommonSpecBigE() {
6. let dsaCommonSpec: cryptoFramework.DSACommonParamsSpec = {
7. algName: 'DSA',
8. specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC,
9. p: BigInt('0xed1501551b8ab3547f6355ffdc2913856ddeca198833dbd04f020e5f25e47c50e0b3894f7690a0d2ea5ed3a7be25c54292a698e1f086eb3a97deb4dbf04fcad2dafd94a9f35c3ae338ab35477e16981ded6a5b13d5ff20bf55f1b262303ad3a80af71aa6aa2354d20e9c82647664bdb6b333b7bea0a5f49d55ca40bc312a1729'),
10. q: BigInt('0xd23304044019d5d382cfeabf351636c7ab219694ac845051f60b047b'),
11. g: BigInt('0x2cc266d8bd33c3009bd67f285a257ba74f0c3a7e12b722864632a0ac3f2c17c91c2f3f67eb2d57071ef47aaa8f8e17a21ad2c1072ee1ce281362aad01dcbcd3876455cd17e1dd55d4ed36fa011db40f0bbb8cba01d066f392b5eaa9404bfcb775f2196a6bc20eeec3db32d54e94d87ecdb7a0310a5a017c5cdb8ac78597778bd'),
12. }
13. return dsaCommonSpec;
14. }

16. // 设置DSA1024密钥对中包含的全参数。
17. function genDsa1024KeyPairSpecBigE() {
18. let dsaCommonSpec = genDsa1024CommonSpecBigE();
19. let dsaKeyPairSpec: cryptoFramework.DSAKeyPairSpec = {
20. algName: 'DSA',
21. specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC,
22. params: dsaCommonSpec,
23. sk: BigInt('0xa2dd2adb2d11392c2541930f61f1165c370aabd2d78d00342e0a2fd9'),
24. pk: BigInt('0xae6b5d5042e758f3fc9a02d009d896df115811a75b5f7b382d8526270dbb3c029403fafb8573ba4ef0314ea86f09d01e82a14d1ebb67b0c331f41049bd6b1842658b0592e706a5e4d20c14b67977e17df7bdd464cce14b5f13bae6607760fcdf394e0b73ac70aaf141fa4dafd736bd0364b1d6e6c0d7683a5de6b9221e7f2d6b'),
25. }
26. return dsaKeyPairSpec;
27. }

29. function testGeneratePubKey() {
30. let asyKeyPairSpec = genDsa1024KeyPairSpecBigE(); // JS输入必须是大端格式的正数。
31. let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
32. let keyGenPromise = asyKeyGeneratorBySpec.generatePubKey();
33. keyGenPromise.then(pubKey => {
34. console.info('generatePubKey result: success.');
35. }).catch((error: BusinessError) => {
36. console.error(`generatePubKey failed: errCode: ${error.code}, errMsg: ${error.message}`);
37. });
38. }
```

### generatePubKeySync12+

PhonePC/2in1TabletTVWearable

generatePubKeySync(): PubKey

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

当使用[PUBLIC\_KEY\_SPEC](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspectype10)类型的密钥参数来创建密钥生成器时，可以得到指定的公钥；使用[KEY\_PAIR\_SPEC](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#asykeyspectype10)类型的密钥参数时，可以从生成的密钥对中获取指定的公钥。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [PubKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#pubkey) | 非对称密钥。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

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. }

15. // 设置DSA1024密钥对中包含的全参数。
16. function genDsa1024KeyPairSpecBigE() {
17. let dsaCommonSpec = genDsa1024CommonSpecBigE();
18. let dsaKeyPairSpec: cryptoFramework.DSAKeyPairSpec = {
19. algName: 'DSA',
20. specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC,
21. params: dsaCommonSpec,
22. sk: BigInt('0xa2dd2adb2d11392c2541930f61f1165c370aabd2d78d00342e0a2fd9'),
23. pk: BigInt('0xae6b5d5042e758f3fc9a02d009d896df115811a75b5f7b382d8526270dbb3c029403fafb8573ba4ef0314ea86f09d01e82a14d1ebb67b0c331f41049bd6b1842658b0592e706a5e4d20c14b67977e17df7bdd464cce14b5f13bae6607760fcdf394e0b73ac70aaf141fa4dafd736bd0364b1d6e6c0d7683a5de6b9221e7f2d6b'),
24. }
25. return dsaKeyPairSpec;
26. }

28. function testGeneratePubKeySync() {
29. let asyKeyPairSpec = genDsa1024KeyPairSpecBigE(); // JS输入必须是大端格式的正数。
30. let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
31. try {
32. let pubKeyData = asyKeyGeneratorBySpec.generatePubKeySync();
33. if (pubKeyData != null) {
34. console.info('[Sync]: pub key result: success.');
35. } else {
36. console.error('[Sync]: get pub key result: fail.');
37. }
38. } catch (e) {
39. console.error(`sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
40. }
41. }
```

## ECCKeyUtil11+

PhonePC/2in1TabletTVWearable

用于根据椭圆曲线名称为非对称密钥对生成公共参数。

### genECCCommonParamsSpec11+

PhonePC/2in1TabletTVWearable

static genECCCommonParamsSpec(curveName: string): ECCCommonParamsSpec

根据椭圆曲线相应的NID（Name Identifier）字符串名称生成相应的非对称公共密钥参数。详见[ECC密钥生成规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-asym-key-generation-conversion-spec#ecc)和[SM2密钥生成规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-asym-key-generation-conversion-spec#sm2)。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| curveName | string | 是 | 椭圆曲线相应的NID（Name Identifier）字符串名称。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [ECCCommonParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#ecccommonparamsspec10) | 返回ECC公共密钥参数。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#point10) | 返回ECC的Point对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

3. // 随机生成的非压缩点数据。
4. let pkData =
5. 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,
6. 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,
7. 206, 200, 98, 178, 184, 130, 35, 232, 45, 5, 202, 189, 11, 46, 163, 156, 152]);
8. let returnPoint = cryptoFramework.ECCKeyUtil.convertPoint('NID_brainpoolP256r1', pkData);
9. 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](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#point10) | 是 | 椭圆曲线上的Point点对象。 |
| format | string | 是 | 需要获取的点数据格式，当前支持"COMPRESSED"或"UNCOMPRESSED"。 |

**返回值：**

展开

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

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

3. async function doTest() {
4. let generator = cryptoFramework.createAsyKeyGenerator('ECC_BrainPoolP256r1');
5. let keyPair = await generator.generateKeyPair();
6. let eccPkX = keyPair.pubKey.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_PK_X_BN);
7. let eccPkY = keyPair.pubKey.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_PK_Y_BN);
8. console.info('ECC_PK_X_BN 16：' + eccPkX.toString(16));
9. console.info('ECC_PK_Y_BN 16：' + eccPkY.toString(16));
10. // 将eccPkX.toString(16)结果放入x，eccPkY.toString(16)结果放入y。
11. let returnPoint: cryptoFramework.Point = {
12. x: BigInt('0x' + eccPkX.toString(16)),
13. y: BigInt('0x' + eccPkY.toString(16))
14. };
15. let returnData = cryptoFramework.ECCKeyUtil.getEncodedPoint('NID_brainpoolP256r1', returnPoint, 'UNCOMPRESSED');
16. console.info('returnData: ' + returnData);
17. }
```

## DHKeyUtil11+

PhonePC/2in1TabletTVWearable

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

### genDHCommonParamsSpec11+

PhonePC/2in1TabletTVWearable

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

根据素数P的长度和私钥长度（bit位数）生成DH公共密钥参数。详见[DH密钥生成规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-asym-key-generation-conversion-spec#dh)。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Key.AsymKey

API version 11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| 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](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#dhcommonparamsspec11) | 返回DH公共密钥参数。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#sm2ciphertextspec12) | 是 | 指定的SM2密文参数。 |
| mode | string | 否 | 可选的密文转换模式，可用于指定密文参数的拼接顺序，当前仅支持默认值"C1C3C2"。为空或空字符串时使用默认值。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 返回符合国密标准的ASN.1格式的SM2密文。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

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

### getCipherTextSpec12+

PhonePC/2in1TabletTVWearable

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

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Cipher

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| cipherText | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 符合国密标准的ASN.1格式的SM2密文。 |
| mode | string | 否 | 可选的密文转换模式，可用于指定密文参数的拼接顺序，当前仅支持默认值"C1C3C2"。为空或空字符串时使用默认值。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [SM2CipherTextSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#sm2ciphertextspec12) | 返回SM2密文参数。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

4. try {
5. let cipherTextArray =
6. 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,
7. 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,
8. 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,
9. 167, 167, 247, 88, 146, 203, 234, 83, 126, 117, 129, 52, 142, 82, 54, 152, 226, 201, 111, 143, 115, 169, 125, 128,
10. 42, 157, 31, 114, 198, 109, 244, 4, 14, 100, 227, 78, 195, 249, 179, 43, 70, 242, 69, 169, 10, 65, 123]);
11. let cipherText: cryptoFramework.DataBlob = { data: cipherTextArray };
12. let spec: cryptoFramework.SM2CipherTextSpec = cryptoFramework.SM2CryptoUtil.getCipherTextSpec(cipherText, 'C1C3C2');
13. console.info('getCipherTextSpec result: success.');
14. } catch (err) {
15. let e: BusinessError = err as BusinessError;
16. console.error(`getCipherTextSpec failed: errCode: ${e.code}, errMsg: ${e.message}`);
17. }
```

## cryptoFramework.createCipher

PhonePC/2in1TabletTVWearable

createCipher(transformation: string): Cipher

通过指定算法名称，获取相应的[Cipher](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cipher)实例。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Cipher

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Cipher。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| transformation | string | 是 | 待生成Cipher的算法名称（含密钥长度）、加密模式以及填充方法的组合。  支持的规格详见[对称密钥加解密算法规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-sym-encrypt-decrypt-spec)和[非对称密钥加解密算法规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-asym-encrypt-decrypt-spec)。 |

说明

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

   开发者需要自行了解密码学不同分组模式的差异，以便选择合适的参数规格。例如选择ECB和CBC模式时，建议启用填充，否则必须确保明文长度是分组大小的整数倍；选择其他模式时，可以不启用填充，此时密文长度和明文长度一致（即可能不是分组大小的整数倍）。
2. 使用RSA或SM2进行非对称加解密时，必须创建两个Cipher对象，分别进行加密和解密操作，不能对同一个Cipher对象进行加解密。对称加解密没有此要求，只要算法规格一致，可以对同一个Cipher对象进行加解密操作。

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [Cipher](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cipher) | 返回加解密生成器的对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

4. let cipherAlgName = '3DES192|ECB|PKCS7';
5. try {
6. let cipher = cryptoFramework.createCipher(cipherAlgName);
7. console.info('cipher algName：' + cipher.algName);
8. } catch (error) {
9. let e: BusinessError = error as BusinessError;
10. console.error(`sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
11. }
```

## Cipher

PhonePC/2in1TabletTVWearable

提供加解密的算法操作功能，按序调用本类中的[init()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-1)、[update()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#update)、[doFinal()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#dofinal)方法，可以实现对称加密/对称解密/非对称加密/非对称解密。

完整的加解密流程示例可参考[开发指南](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-encryption-decryption-overview)。

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

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

### 属性

PhonePC/2in1TabletTVWearable

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Cipher

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Cipher。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| algName | string | 是 | 否 | 加解密生成器指定的算法名称。 |

### init

PhonePC/2in1TabletTVWearable

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

初始化加解密的[cipher](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cipher)对象，使用callback异步回调获取结果。init、update、doFinal为三段式接口，需要成组使用。其中init和doFinal必选，update可选。

必须在使用[createCipher](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreatecipher)创建[Cipher](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cipher)实例后，才能使用本函数。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Cipher

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Cipher。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| opMode | [CryptoMode](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptomode) | 是 | 加密或者解密模式。 |
| key | [Key](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#key) | 是 | 指定加密或解密的密钥。 |
| params | [ParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#paramsspec) | null10+ | 是 | 指定加密或解密的参数，对于ECB等没有参数的算法模式，请传入null。API 10之前只支持ParamsSpec， API 10之后增加支持null。 |
| callback | AsyncCallback<void> | 是 | 回调函数。当加解密初始化成功，err为undefined，否则为错误对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17620003 | parameter check failed. Possible causes:  1. Invalid opMode value;  2. Invalid iv length;  3. Invalid key length. |
| 17630001 | crypto operation error. |

### init

PhonePC/2in1TabletTVWearable

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

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

必须在使用[createCipher](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreatecipher)创建[Cipher](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cipher)实例后，才能使用本函数。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Cipher

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Cipher。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| opMode | [CryptoMode](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptomode) | 是 | 加密或者解密模式。 |
| key | [Key](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#key) | 是 | 指定加密或解密的密钥。 |
| params | [ParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#paramsspec) | null10+ | 是 | 指定加密或解密的参数，对于ECB等没有参数的算法模式，请传入null。API 10之前仅支持ParamsSpec，从API 10开始增加对null的支持。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<void> | Promise对象，无返回结果。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 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](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cipher)对象，通过注册回调函数获取结果。initSync、updateSync、doFinalSync为三段式接口，需要成组使用。其中initSync和doFinalSync必选，updateSync可选。

必须在使用[createCipher](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreatecipher)创建[Cipher](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cipher)实例后，才能使用本函数。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Cipher

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| opMode | [CryptoMode](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptomode) | 是 | 加密或者解密模式。 |
| key | [Key](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#key) | 是 | 指定加密或解密的密钥。 |
| params | [ParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#paramsspec) | null | 是 | 指定加密或解密的参数，对于ECB等没有参数的算法模式，请传入null。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17620003 | parameter check failed. Possible causes:  1. Invalid opMode value;  2. Invalid iv length;  3. Invalid key length. |
| 17630001 | crypto operation error. |

### update

PhonePC/2in1TabletTVWearable

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

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

必须在对[Cipher](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cipher)实例使用[init()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-1)初始化后，才能使用本函数。

说明

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

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

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

   最后doFinal时，会将剩下的未加解密的数据根据[createCipher](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreatecipher)时设置的填充模式进行填充，补齐到分组的整数倍长度，再输出剩余的加解密结果。

   对于可以将分组密码转化为流模式实现的模式，还可能出现密文长度与明文长度相同的情况。
2. 根据数据量，可以不调用update（即init完成后直接调用doFinal）或多次调用update。

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

   AES使用多次update操作的示例代码详见[使用AES对称密钥分段加解密](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-aes-sym-encrypt-decrypt-gcm-by-segment)。
3. RSA、SM2非对称加解密不支持update操作。
4. 对于CCM模式的对称加解密算法，加密时只能调用1次update接口加密数据并调用doFinal接口获取tag，或直接调用doFinal接口加密数据并获取tag，解密时只能调用1次update接口或调用1次doFinal接口解密数据并验证tag。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Cipher

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Cipher。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| data | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 需要进行加密或解密的数据。data不能为null。 |
| callback | AsyncCallback<[DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob)> | 是 | 回调函数。更新加/解密数据成功时，err为undefined，data为加/解密结果DataBlob；否则为错误对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17620003 | parameter check failed. Possible causes:  1. The data is too long. |
| 17630001 | crypto operation error. |

### update

PhonePC/2in1TabletTVWearable

update(data: DataBlob): Promise<DataBlob>

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

必须在对[Cipher](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cipher)实例使用[init()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-1)初始化后，才能使用本函数。

说明

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

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

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

   最后doFinal的时候，会把剩下的还没加/解密的数据，根据[createCipher](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreatecipher)时设置的padding模式进行填充，补齐到分组的整数倍长度，再输出剩余加解密结果。

   而对于可以将分组密码转化为流模式实现的模式，还可能出现密文长度和明文长度相同的情况等。）
2. 根据数据量，可以不调用update（即init完成后直接调用doFinal）或多次调用update。

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

   AES使用多次update操作的示例代码详见[使用AES对称密钥分段加解密](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-aes-sym-encrypt-decrypt-gcm-by-segment)。
3. RSA、SM2非对称加解密不支持update操作。
4. 对于CCM模式的对称加解密算法，加密时只能调用1次update接口加密数据并调用doFinal接口获取tag，或直接调用doFinal接口加密数据并获取tag，解密时只能调用1次update接口或调用1次doFinal接口解密数据并验证tag。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Cipher

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Cipher。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| data | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 加密或者解密的数据。data不能为null。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<[DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob)> | Promise对象，返回此次更新的加/解密结果DataBlob。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17620003 | parameter check failed. Possible causes:  1. The data is too long. |
| 17630001 | crypto operation error. |

### updateSync12+

PhonePC/2in1TabletTVWearable

updateSync(data: DataBlob): DataBlob

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

必须在对[Cipher](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cipher)实例使用[initSync()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#initsync12)初始化后，才能使用本函数。

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

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Cipher

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| data | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 加密或者解密的数据。data不能为null。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 返回此次更新的加/解密结果DataBlob。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17620003 | parameter check failed. Possible causes:  1. The data is too long. |
| 17630001 | crypto operation error. |

### doFinal

PhonePC/2in1TabletTVWearable

doFinal(data: DataBlob | null, callback: AsyncCallback<DataBlob>): void

（1）在对称加解密中doFinal用于处理剩余数据和本次传入的数据，并最终结束加密或解密操作，使用callback异步回调函数获取加密或解密后的数据。如果数据量较小，可以在 doFinal 中一次性传入数据，而不使用update；如果在本次加解密流程中已经使用[update](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#update)传入过数据，可以在doFinal的data参数处传入null。根据对称加解密的模式不同，doFinal的输出有以下区别：

* 在GCM和CCM模式的对称加密中，一次加密流程中，将每次update和doFinal的结果拼接起来，会得到“密文 + authTag”。GCM模式下，authTag为末尾的16字节；CCM模式下，authTag为末尾的12字节。其余部分均为密文。如果doFinal的data参数传入null，则doFinal的结果就是authTag。解密时，authTag需要填入[GcmParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#gcmparamsspec)或[CcmParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#ccmparamsspec)，密文作为解密时的data参数。
* 对于其他模式的对称加解密及GCM和CCM模式的对称解密：每次加/解密流程中，update和doFinal的结果拼接起来，得到完整的明文或密文。

（2）在RSA、SM2非对称加解密中，doFinal加/解密本次传入的数据，使用callback异步回调函数获取加密或者解密数据。如果数据量较大，可以多次调用doFinal，拼接结果得到完整的明文/密文。

说明

1. 对称加解密中，调用doFinal标志着一次加解密流程已经完成，即[Cipher](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#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非对称密钥分段加解密](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-rsa-asym-encrypt-decrypt-by-segment)，SM2和RSA的操作类似。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Cipher

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Cipher。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| data | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | null10+ | 是 | 加密或解密的数据。在对称加解密中可为null，但不可传入{data: Uint8Array(空) }。API 10前仅支持DataBlob，API 10后增加null支持。 |
| callback | AsyncCallback<[DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob)> | 是 | 回调函数。最终加/解密成功时，err为undefined，data为加/解密结果DataBlob；否则为错误对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17620003 | parameter check failed. Possible causes:  1. The data is too long. |
| 17630001 | crypto operation error. |

**示例：**

更多加解密流程的完整示例请参考[加解密开发指导](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-aes-sym-encrypt-decrypt-gcm)。



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { buffer } from '@kit.ArkTS';

4. function generateRandom(len: number) {
5. let rand = cryptoFramework.createRandom();
6. let generateRandSync = rand.generateRandomSync(len);
7. return generateRandSync;
8. }

10. function genGcmParamsSpec() {
11. let ivBlob = generateRandom(12);
12. let arr = [1, 2, 3, 4, 5, 6, 7, 8];
13. let dataAad = new Uint8Array(arr);
14. let aadBlob: cryptoFramework.DataBlob = { data: dataAad };
15. arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
16. let dataTag = new Uint8Array(arr);
17. let tagBlob: cryptoFramework.DataBlob = {
18. data: dataTag
19. };
20. let gcmParamsSpec: cryptoFramework.GcmParamsSpec = {
21. iv: ivBlob,
22. aad: aadBlob,
23. authTag: tagBlob,
24. algName: 'GcmParamsSpec'
25. };
26. return gcmParamsSpec;
27. }

29. function cipherByCallback() {
30. let gcmParams = genGcmParamsSpec();
31. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
32. let cipher = cryptoFramework.createCipher('AES128|GCM|PKCS7');
33. symKeyGenerator.generateSymKey((err, symKey) => {
34. cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, gcmParams, (err) => {
35. let message = 'This is a test';
36. let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) };
37. cipher.update(plainText, (err, encryptUpdate) => {
38. cipher.doFinal(null, (err, tag) => {
39. gcmParams.authTag = tag;
40. console.info('encryptUpdate plainText：' + encryptUpdate.data);
41. });
42. });
43. });
44. });
45. }
```

### doFinal

PhonePC/2in1TabletTVWearable

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需要填入解密时的[GcmParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#gcmparamsspec)或[CcmParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#ccmparamsspec)；密文则作为解密时的入参data。
* 对于其他模式的对称加解密及GCM和CCM模式的对称解密：一次加解密流程中，每次update和doFinal的结果拼接起来，得到完整的明文或密文。

（2）在RSA和SM2非对称加解密中，使用doFinal方法加解密传入的数据，并使用Promise异步回调获取加密或解密结果。如果数据量较大，可以多次调用doFinal，拼接结果以获得完整的明文或密文。

说明

1. 对称加解密中，调用doFinal标志着一次加解密流程完成，[Cipher](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#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非对称密钥分段加解密](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-rsa-asym-encrypt-decrypt-by-segment)，SM2和RSA的操作类似。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Cipher

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Cipher。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| data | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | null10+ | 是 | 加密或者解密的数据。data参数允许为null，但不允许传入{data: Uint8Array(空) }。API 10之前只支持DataBlob，API 10之后增加支持null。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<[DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob)> | Promise对象，返回剩余数据的加/解密结果DataBlob。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)

展开

| 错误码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 convert parameters between arkts and c. |
| 17620003 | parameter check failed. Possible causes:  1. The data is too long. |
| 17630001 | crypto operation error. |

**示例：**

此外，更多加解密流程的完整示例可参考[加解密开发指导](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-aes-sym-encrypt-decrypt-gcm)。



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { buffer } from '@kit.ArkTS';

4. function generateRandom(len: number) {
5. let rand = cryptoFramework.createRandom();
6. let generateRandSync = rand.generateRandomSync(len);
7. return generateRandSync;
8. }

10. function genGcmParamsSpec() {
11. let ivBlob = generateRandom(12);
12. let arr = [1, 2, 3, 4, 5, 6, 7, 8];
13. let dataAad = new Uint8Array(arr);
14. let aadBlob: cryptoFramework.DataBlob = { data: dataAad };
15. arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
16. let dataTag = new Uint8Array(arr);
17. let tagBlob: cryptoFramework.DataBlob = {
18. data: dataTag
19. };
20. let gcmParamsSpec: cryptoFramework.GcmParamsSpec = {
21. iv: ivBlob,
22. aad: aadBlob,
23. authTag: tagBlob,
24. algName: 'GcmParamsSpec'
25. };
26. return gcmParamsSpec;
27. }

29. async function cipherByPromise() {
30. let gcmParams = genGcmParamsSpec();
31. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
32. let cipher = cryptoFramework.createCipher('AES128|GCM|PKCS7');
33. let symKey = await symKeyGenerator.generateSymKey();
34. await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, gcmParams);
35. let message = 'This is a test';
36. let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) };
37. let encryptUpdate = await cipher.update(plainText);
38. gcmParams.authTag = await cipher.doFinal(null);
39. console.info('encryptUpdate plainText: ' + encryptUpdate.data);
40. }
```

### doFinalSync12+

PhonePC/2in1TabletTVWearable

doFinalSync(data: DataBlob | null): DataBlob

（1）在对称加解密中，doFinalSync用于处理剩余数据和本次传入的数据，并结束加密或解密操作，通过注册回调函数获取加密或解密结果。

如果数据量较小，可以在doFinalSync中一次性传入数据，而不使用updateSync。如果在本次加解密流程中已经使用[updateSync](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#updatesync12)传入过数据，可以在doFinalSync的data参数处传入null。

根据对称加解密的模式不同，doFinalSync的输出有以下区别：

* 对于GCM和CCM模式的对称加密：一次加密流程中，如果将每次updateSync和doFinalSync的结果拼接起来，会得到“密文 + authTag”。即末尾的16字节（GCM模式）或12字节（CCM模式）是authTag，其余部分均为密文。也就是说，如果doFinalSync的data参数传入null，则doFinalSync的结果就是 authTag。

  authTag需要填入解密时的[GcmParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#gcmparamsspec)或[CcmParamsSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#ccmparamsspec)；密文则作为解密时的入参data。
* 对于其他模式的对称加解密以及GCM和CCM模式的对称解密：在一次加/解密流程中，每次updateSync和doFinalSync的结果拼接起来，得到完整的明文或密文。

（2）在RSA和SM2非对称加解密中，doFinalSync用于加解密本次传入的数据，通过注册回调函数获取加密或解密后的数据。如果数据量超过单次处理能力，可以多次调用doFinalSync，并将结果拼接以获得完整的明文或密文。

其他注意事项同接口[doFinal()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#dofinal)说明。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Cipher

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| data | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | null | 是 | 加密或者解密的数据。在对称加解密中允许为null，但不允许传入{data: Uint8Array(空) }。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 返回剩余数据的加/解密结果DataBlob。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17620003 | parameter check failed. Possible causes:  1. The data is too long. |
| 17630001 | crypto operation error. |

**示例：**

此外，更多加解密流程的完整示例可参考[加解密开发指导](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-aes-sym-encrypt-decrypt-gcm)。



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { buffer } from '@kit.ArkTS';

4. function generateRandom(len: number) {
5. let rand = cryptoFramework.createRandom();
6. let generateRandSync = rand.generateRandomSync(len);
7. return generateRandSync;
8. }

10. function genGcmParamsSpec() {
11. let ivBlob = generateRandom(12);
12. let arr = [1, 2, 3, 4, 5, 6, 7, 8];
13. let dataAad = new Uint8Array(arr);
14. let aadBlob: cryptoFramework.DataBlob = { data: dataAad };
15. arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
16. let dataTag = new Uint8Array(arr);
17. let tagBlob: cryptoFramework.DataBlob = {
18. data: dataTag
19. };
20. let gcmParamsSpec: cryptoFramework.GcmParamsSpec = {
21. iv: ivBlob,
22. aad: aadBlob,
23. authTag: tagBlob,
24. algName: 'GcmParamsSpec'
25. };
26. return gcmParamsSpec;
27. }

29. async function cipherBySync() {
30. let gcmParams = genGcmParamsSpec();
31. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
32. let cipher = cryptoFramework.createCipher('AES128|GCM|PKCS7');
33. let symKey = await symKeyGenerator.generateSymKey();
34. await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, gcmParams);
35. let message = 'This is a test';
36. let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) };
37. let encryptUpdate = cipher.updateSync(plainText);
38. gcmParams.authTag = cipher.doFinalSync(null);
39. console.info('encryptUpdate plainText: ' + encryptUpdate.data);
40. }
```

### setCipherSpec10+

PhonePC/2in1TabletTVWearable

setCipherSpec(itemType: CipherSpecItem, itemValue: Uint8Array): void

设置加解密参数。常用的加解密参数直接通过[createCipher](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreatecipher) 来指定，剩余参数通过本接口指定。当前只支持RSA算法。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Cipher

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Cipher。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| itemType | [CipherSpecItem](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cipherspecitem10) | 是 | 用于指定需要设置的加解密参数。 |
| itemValue | Uint8Array | 是 | 用于指定加解密参数的具体值。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

3. function testsetCipherSpec() {
4. let cipher = cryptoFramework.createCipher('RSA2048|PKCS1_OAEP|SHA256|MGF1_SHA1');
5. let pSource = new Uint8Array([1, 2, 3, 4]);
6. cipher.setCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_PSRC_UINT8ARR, pSource);
7. }
```

### getCipherSpec10+

PhonePC/2in1TabletTVWearable

getCipherSpec(itemType: CipherSpecItem): string | Uint8Array

获取加解密参数。当前只支持RSA算法和SM2算法，从API version 11开始，支持SM2算法获取加解密参数。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Cipher

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Cipher。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| itemType | [CipherSpecItem](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cipherspecitem10) | 是 | 用于指定需要获取的加解密参数。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| string | Uint8Array | 获取的加解密参数的具体值。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

3. function testGetCipherSpec() {
4. let cipher = cryptoFramework.createCipher('RSA2048|PKCS1_OAEP|SHA256|MGF1_SHA1');
5. let mdName = cipher.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MD_NAME_STR);
6. console.info('getCipherSpec: mdName =' + mdName);
7. }
```

## cryptoFramework.createSign

PhonePC/2in1TabletTVWearable

createSign(algName: string): Sign

生成Sign实例。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Signature。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| algName | string | 是 | 指定签名算法：RSA、ECC、DSA、SM210+或Ed2551911+。使用RSA PKCS1模式时需设置摘要；使用RSA PSS模式时需设置摘要和掩码摘要。签名时，通过设置OnlySign参数可传入数据摘要仅作签名。  支持的规格详见[签名验签规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-sign-sig-verify-overview)。 |

**返回值**：

展开

| 类型 | 说明 |
| --- | --- |
| [Sign](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#sign) | 返回由输入算法指定生成的Sign对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

3. let signer1 = cryptoFramework.createSign('RSA1024|PKCS1|SHA256');

5. let signer2 = cryptoFramework.createSign('RSA1024|PSS|SHA256|MGF1_SHA256');

7. let signer3 = cryptoFramework.createSign('ECC224|SHA256');

9. let signer4 = cryptoFramework.createSign('DSA2048|SHA256');

11. let signer5 = cryptoFramework.createSign('RSA1024|PKCS1|SHA256|OnlySign');
```

## Sign

PhonePC/2in1TabletTVWearable

Sign类，使用Sign方法之前需要创建该类的实例进行操作，通过[createSign(algName: string): Sign](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreatesign)方法构造此实例。按序调用本类中的init、update、sign方法完成签名操作。签名操作的示例代码详见[签名验签开发指导](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-rsa-sign-sig-verify-pkcs1)。

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。

### 属性

PhonePC/2in1TabletTVWearable

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Signature。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| algName | string | 是 | 否 | 签名指定的算法名称。 |

### init

PhonePC/2in1TabletTVWearable

init(priKey: PriKey, callback: AsyncCallback<void>): void

使用私钥初始化Sign对象。使用callback异步回调。init、update、sign为三段式接口，需要成组使用。其中init和sign必选，update可选。

Sign类不支持重复初始化。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Signature。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| priKey | [PriKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#prikey) | 是 | 用于Sign的初始化。 |
| callback | AsyncCallback<void> | 是 | 回调函数。当签名初始化成功，err为undefined，否则为错误对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

### init

PhonePC/2in1TabletTVWearable

init(priKey: PriKey): Promise<void>

使用私钥初始化Sign对象。使用Promise异步回调。init、update、sign为三段式接口，需要成组使用。其中init和sign必选，update可选。

Sign类不支持重复初始化。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Signature。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| priKey | [PriKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#prikey) | 是 | 用于Sign的初始化。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<void> | Promise对象，无返回结果。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 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](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#prikey) | 是 | 用于Sign的初始化。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

### update

PhonePC/2in1TabletTVWearable

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

追加待签名数据，使用callback异步回调完成更新。

必须在对[Sign](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#sign)实例使用[init()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-2)初始化后，才能使用本函数。

说明

根据数据量，可以不调用update（即[init](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-2)完成后直接调用[sign](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#sign-1)）或多次调用update。

算法库目前没有对update（单次或累计）的数据量设置大小限制，建议对于大数据量的签名操作，采用多次update的方式传入数据，避免一次性申请过大内存。

签名使用多次update操作的示例代码详见[使用RSA密钥对分段签名验签](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-rsa-sign-sig-verify-pkcs1-by-segment)，其余算法操作类似。

OnlySign模式下，不支持update操作，需要直接使用sign传入数据。

当使用DSA算法进行签名，并设置了摘要算法为NoHash时，则不支持update操作，update接口会返回错误码ERR\_CRYPTO\_OPERATION。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Signature。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| data | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 传入的消息。 |
| callback | AsyncCallback<void> | 是 | 回调函数。当签名更新成功，err为undefined，否则为错误对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

### update

PhonePC/2in1TabletTVWearable

update(data: DataBlob): Promise<void>

追加待签名数据，使用Promise异步回调方式完成更新。

在使用本函数前，必须先使用[Sign](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#sign)方法对[init()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-3)实例进行初始化。

说明

根据数据量，可以不调用update（即[init](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-3)完成后直接调用[sign](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#sign-2)）或多次调用update。

算法库不对单次或累计的update数据量设置大小限制。建议在处理大数据量的签名操作时，采用多次update方式传入数据，以避免一次性申请过多内存。

签名使用多次update操作的示例代码详见[使用RSA密钥对分段签名验签](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-rsa-sign-sig-verify-pkcs1-by-segment)，其余算法操作类似。

OnlySign模式下，不支持update操作，需要直接使用sign传入数据。

当使用DSA算法进行签名，并设置了摘要算法为NoHash时，则不支持update操作，update接口会返回错误码ERR\_CRYPTO\_OPERATION。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Signature。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| data | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 传入的消息。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<void> | Promise对象，无返回结果。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

### updateSync12+

PhonePC/2in1TabletTVWearable

updateSync(data: DataBlob): void

追加待签名数据，通过同步方式完成更新。

必须在对[Sign](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#sign)实例使用[initSync()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#initsync12-1)初始化后，才能使用本函数。

说明

根据数据量，可以不调用updateSync（即[initSync](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#initsync12-1)完成后直接调用[signSync](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#signsync12)）或多次调用updateSync。

算法库目前没有对updateSync（单次或累计）的数据量设置大小限制，建议对于大数据量的签名操作，采用多次updateSync的方式传入数据，避免一次性申请过大内存。

签名使用多次updateSync操作的示例代码详见[使用RSA密钥对分段签名验签](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-rsa-sign-sig-verify-pkcs1-by-segment)，其余算法操作类似。

OnlySign模式下，不支持updateSync操作，需要直接使用signSync传入数据。

当使用DSA算法进行签名，并设置了摘要算法为NoHash时，则不支持updateSync操作，updateSync接口会返回错误码ERR\_CRYPTO\_OPERATION。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| data | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 传入的消息。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

### sign

PhonePC/2in1TabletTVWearable

sign(data: DataBlob | null, callback: AsyncCallback<DataBlob>): void

对数据进行签名。使用callback异步回调。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Signature。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| data | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | null10+ | 是 | 传入的消息。API 10之前只支持DataBlob， API 10之后增加支持null。 |
| callback | AsyncCallback<[DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob)> | 是 | 回调函数，用于获取签名结果DataBlob数据。当签名成功，err为undefined，data为获取到的签名结果；否则为错误对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

### sign

PhonePC/2in1TabletTVWearable

sign(data: DataBlob | null): Promise<DataBlob>

对数据进行签名。使用Promise异步回调。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Signature。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| data | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | null10+ | 是 | 传入的消息。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<[DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob)> | Promise对象，返回签名结果。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

### signSync12+

PhonePC/2in1TabletTVWearable

signSync(data: DataBlob | null): DataBlob

对数据进行签名，通过同步方式返回签名结果。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| data | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | null | 是 | 传入的消息。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 返回签名结果。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

**示例：**

此外，更多签名验签的完整示例可参考[签名验签开发指导](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-rsa-sign-sig-verify-pkcs1)。



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { buffer } from '@kit.ArkTS';

4. function signByCallback() {
5. let inputUpdate: cryptoFramework.DataBlob =
6. { data: new Uint8Array(buffer.from('This is Sign test plan1', 'utf-8').buffer) };
7. let inputVerify: cryptoFramework.DataBlob =
8. { data: new Uint8Array(buffer.from('This is Sign test plan2', 'utf-8').buffer) };
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. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
47. let signer = cryptoFramework.createSign('RSA1024|PKCS1|SHA256');
48. rsaGenerator.convertKey(pubKeyBlob, priKeyBlob, (err, keyPair) => {
49. signer.init(keyPair.priKey, err => {
50. signer.update(inputUpdate, err => {
51. signer.sign(inputVerify, (err, signData) => {
52. console.info('sign output = ' + signData.data);
53. });
54. });
55. });
56. });
57. }
```

**示例：**

此外，更多签名验签的完整示例可参考[签名验签开发指导](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-rsa-sign-sig-verify-pkcs1)。



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { buffer } from '@kit.ArkTS';

4. async function genKeyPairByData(pubKeyData: Uint8Array, priKeyData: Uint8Array) {
5. let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData };
6. let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyData };
7. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
8. let keyPair = await rsaGenerator.convertKey(pubKeyBlob, priKeyBlob);
9. console.info('convertKey result: success.');
10. return keyPair;
11. }

13. async function signByPromise() {
14. let pkData =
15. 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,
16. 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,
17. 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123,
18. 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,
19. 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,
20. 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,
21. 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1]);
22. let skData =
23. 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,
24. 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,
25. 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31,
26. 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,
27. 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,
28. 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,
29. 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,
30. 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,
31. 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,
32. 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,
33. 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,
34. 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,
35. 255, 158, 212, 13, 43, 132, 244, 135, 148, 161, 232, 219, 20, 81, 196, 102, 103, 44, 110, 71, 100, 62, 73, 200,
36. 32, 138, 114, 209, 171, 150, 179, 92, 198, 5, 190, 218, 79, 227, 227, 37, 32, 57, 159, 252, 107, 211, 139, 198,
37. 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,
38. 170, 168, 183, 159, 152, 8, 74, 233, 80, 244, 146, 81, 48, 159, 194, 199, 36, 187, 6, 181, 182, 223, 115, 133,
39. 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,
40. 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,
41. 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,
42. 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,
43. 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,
44. 66, 250, 118, 72, 166, 221, 67, 156, 245, 119, 138, 28, 6, 142, 107, 71, 122, 116, 200, 156, 199, 237, 152, 191,
45. 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,
46. 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,
47. 232, 41, 114, 153, 237, 253, 52, 205, 148, 45, 86, 186, 241, 182, 183, 42, 77, 252, 195, 29, 158, 173, 3, 182,
48. 207, 254, 61, 71, 184, 167, 184]);
49. let keyPair = await genKeyPairByData(pkData, skData);
50. let inputUpdate: cryptoFramework.DataBlob =
51. { data: new Uint8Array(buffer.from('This is Sign test plan1', 'utf-8').buffer) };
52. let inputSign: cryptoFramework.DataBlob =
53. { data: new Uint8Array(buffer.from('This is Sign test plan2', 'utf-8').buffer) };
54. let signer = cryptoFramework.createSign('RSA1024|PKCS1|SHA256');
55. await signer.init(keyPair.priKey);
56. await signer.update(inputUpdate);
57. let signData = await signer.sign(inputSign);
58. console.info('signData result: ' + signData.data);
59. }
```

**示例：**

此外，更多签名验签的完整示例可参考[签名验签开发指导](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-rsa-sign-sig-verify-pkcs1)。



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { buffer } from '@kit.ArkTS';

4. function genKeyPairByData(pubKeyData: Uint8Array, priKeyData: Uint8Array) {
5. let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData };
6. let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyData };
7. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
8. let keyPair = rsaGenerator.convertKeySync(pubKeyBlob, priKeyBlob);
9. console.info('convertKeySync result: success.');
10. return keyPair;
11. }

13. function signBySync() {
14. let pkData =
15. 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,
16. 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,
17. 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123,
18. 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,
19. 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,
20. 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,
21. 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1]);
22. let skData =
23. 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,
24. 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,
25. 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31,
26. 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,
27. 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,
28. 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,
29. 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,
30. 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,
31. 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,
32. 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,
33. 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,
34. 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,
35. 255, 158, 212, 13, 43, 132, 244, 135, 148, 161, 232, 219, 20, 81, 196, 102, 103, 44, 110, 71, 100, 62, 73, 200,
36. 32, 138, 114, 209, 171, 150, 179, 92, 198, 5, 190, 218, 79, 227, 227, 37, 32, 57, 159, 252, 107, 211, 139, 198,
37. 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,
38. 170, 168, 183, 159, 152, 8, 74, 233, 80, 244, 146, 81, 48, 159, 194, 199, 36, 187, 6, 181, 182, 223, 115, 133,
39. 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,
40. 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,
41. 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,
42. 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,
43. 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,
44. 66, 250, 118, 72, 166, 221, 67, 156, 245, 119, 138, 28, 6, 142, 107, 71, 122, 116, 200, 156, 199, 237, 152, 191,
45. 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,
46. 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,
47. 232, 41, 114, 153, 237, 253, 52, 205, 148, 45, 86, 186, 241, 182, 183, 42, 77, 252, 195, 29, 158, 173, 3, 182,
48. 207, 254, 61, 71, 184, 167, 184]);
49. let keyPair = genKeyPairByData(pkData, skData);
50. let inputUpdate: cryptoFramework.DataBlob =
51. { data: new Uint8Array(buffer.from('This is Sign test plan1', 'utf-8').buffer) };
52. let inputSign: cryptoFramework.DataBlob =
53. { data: new Uint8Array(buffer.from('This is Sign test plan2', 'utf-8').buffer) };
54. let signer = cryptoFramework.createSign('RSA1024|PKCS1|SHA256');
55. signer.initSync(keyPair.priKey);
56. signer.updateSync(inputUpdate);
57. let signData = signer.signSync(inputSign);
58. console.info('signData result: ' + signData.data);
59. }
```

### setSignSpec10+

PhonePC/2in1TabletTVWearable

setSignSpec(itemType: SignSpecItem, itemValue: number): void

setSignSpec(itemType: SignSpecItem, itemValue: number | Uint8Array): void

设置签名参数。常用签名参数可通过 [createSign](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreatesign) 指定，其他参数则通过本接口设置。

只支持RSA算法、SM2算法，从API version11开始，支持SM2算法设置签名参数。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Signature。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| itemType | [SignSpecItem](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#signspecitem10) | 是 | 用于指定需要设置的签名参数。 |
| itemValue | number | Uint8Array11+ | 是 | 用于指定签名参数的具体值。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

3. function testSetSignSpec() {
4. let signer = cryptoFramework.createSign('RSA|PSS|SHA256|MGF1_SHA256');
5. let setN = 20;
6. signer.setSignSpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM, setN);
7. }
```

### getSignSpec10+

PhonePC/2in1TabletTVWearable

getSignSpec(itemType: SignSpecItem): string | number

获取签名参数。当前仅支持RSA算法。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Signature。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| itemType | [SignSpecItem](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#signspecitem10) | 是 | 用于指定需要获取的签名参数。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| string | number | 获取的签名参数的具体值。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

3. function testGetSignSpec() {
4. let signer = cryptoFramework.createSign('RSA|PSS|SHA256|MGF1_SHA256');
5. let setN = 32;
6. signer.setSignSpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM, setN);
7. signer.getSignSpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM);
8. }
```

## cryptoFramework.createVerify

PhonePC/2in1TabletTVWearable

createVerify(algName: string): Verify

生成Verify实例。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Signature。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| algName | string | 是 | 指定签名算法：RSA、ECC、DSA、SM210+或Ed2551911+。使用RSA PKCS1模式时需设置摘要；使用RSA PSS模式时需设置摘要和掩码摘要。使用RSA算法验签时，设置Recover参数可支持验签恢复。  支持的规格详见[签名验签规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-sign-sig-verify-overview)。 |

**返回值**：

展开

| 类型 | 说明 |
| --- | --- |
| Verify | 返回由输入算法指定生成的Verify对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

3. let verifier1 = cryptoFramework.createVerify('RSA1024|PKCS1|SHA256');

5. let verifier2 = cryptoFramework.createVerify('RSA1024|PSS|SHA256|MGF1_SHA256');

7. let verifier3 = cryptoFramework.createVerify('RSA1024|PKCS1|SHA256|Recover');
```

## Verify

PhonePC/2in1TabletTVWearable

Verify类，使用Verify方法之前需要创建该类的实例进行操作，通过[createVerify(algName: string): Verify](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateverify)方法构造此实例。按序调用本类中的init、update、verify方法完成签名操作。验签操作的示例代码详见[签名验签开发指导](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-rsa-sign-sig-verify-pkcs1)。

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。

### 属性

PhonePC/2in1TabletTVWearable

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Signature。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| algName | string | 是 | 否 | 验签指定的算法名称。 |

### init

PhonePC/2in1TabletTVWearable

init(pubKey: PubKey, callback: AsyncCallback<void>): void

传入公钥初始化Verify对象。使用callback异步回调。init、update、verify为三段式接口，需要成组使用。其中init和verify必选，update可选。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Signature。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| pubKey | [PubKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#pubkey) | 是 | 公钥对象，用于Verify的初始化。 |
| callback | AsyncCallback<void> | 是 | 回调函数。当验签初始化成功，err为undefined，否则为错误对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

### init

PhonePC/2in1TabletTVWearable

init(pubKey: PubKey): Promise<void>

传入公钥初始化Verify对象。使用Promise异步回调。init、update、verify为三段式接口，需要成组使用。其中init和verify必选，update可选。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Signature。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| pubKey | [PubKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#pubkey) | 是 | 公钥对象，用于Verify的初始化。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<void> | Promise对象，无返回结果。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 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](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#pubkey) | 是 | 公钥对象，用于Verify的初始化。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

### update

PhonePC/2in1TabletTVWearable

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

追加待验签数据，使用callback异步回调完成更新。

必须在对[Verify](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#verify)实例使用[init](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-4)初始化后，才能使用本函数。

说明

根据数据量，可以不调用update（即[init](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-4)完成后直接调用[verify](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#verify-1)）或多次调用update。

算法库目前没有对update（单次或累计）的数据量设置大小限制，建议对于大数据量的验签操作，采用多次update的方式传入数据，避免一次性申请过大内存。

验签使用多次update操作的示例代码详见[使用RSA密钥对分段签名验签](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-rsa-sign-sig-verify-pkcs1-by-segment)，其余算法操作类似。

当使用DSA算法进行验签，并设置了摘要算法为NoHash时，则不支持update操作，update接口会返回错误码ERR\_CRYPTO\_OPERATION。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Signature。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| data | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 传入的消息。 |
| callback | AsyncCallback<void> | 是 | 回调函数。当验签更新成功，err为undefined，否则为错误对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

### update

PhonePC/2in1TabletTVWearable

update(data: DataBlob): Promise<void>

追加待验签数据，使用Promise异步回调完成更新。

必须在对[Verify](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#verify)实例使用[init()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-5)初始化后，才能使用本函数。

说明

根据数据量，可以不调用update（即[init](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#init-5)完成后直接调用[verify](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#verify-2)）或多次调用update。

算法库目前没有对update（单次或累计）的数据量设置大小限制，建议对于大数据量的验签操作，采用多次update的方式传入数据，避免一次性申请过大内存。

验签使用多次update操作的示例代码详见[使用RSA密钥对分段签名验签](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-rsa-sign-sig-verify-pkcs1-by-segment)，其余算法操作类似。

当使用DSA算法进行验签，并设置了摘要算法为NoHash时，则不支持update操作，update接口会返回错误码ERR\_CRYPTO\_OPERATION。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Signature。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| data | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 传入的消息。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<void> | Promise对象，无返回结果。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

### updateSync12+

PhonePC/2in1TabletTVWearable

updateSync(data: DataBlob): void

追加待验签数据，通过同步方式完成更新。

必须在对[Verify](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#verify)实例使用[initSync()](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#initsync12-2)初始化后，才能使用本函数。

说明

根据数据量，可以不调用updateSync（即[initSync](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#initsync12-2)完成后直接调用[verifySync](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#verifysync12)）或多次调用updateSync。

算法库目前没有对updateSync（单次或累计）的数据量设置大小限制，建议对于大数据量的验签操作，采用多次updateSync的方式传入数据，避免一次性申请过大内存。

验签使用多次updateSync操作的示例代码详见[使用RSA密钥对分段签名验签](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-rsa-sign-sig-verify-pkcs1-by-segment)，其余算法操作类似。

当使用DSA算法进行验签，并设置了摘要算法为NoHash时，则不支持updateSync操作，updateSync接口会返回错误码ERR\_CRYPTO\_OPERATION。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| data | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 传入的消息。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

### verify

PhonePC/2in1TabletTVWearable

verify(data: DataBlob | null, signatureData: DataBlob, callback: AsyncCallback<boolean>): void

对数据进行验签。使用callback异步回调。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Signature。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| data | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | null10+ | 是 | 传入的消息。API 10之前只支持DataBlob， API 10之后增加支持null。 |
| signatureData | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 签名数据。 |
| callback | AsyncCallback<boolean> | 是 | 回调函数，用于获取以boolean值表示的验签结果。返回true表示验签通过；返回false表示验签不通过。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

### verify

PhonePC/2in1TabletTVWearable

verify(data: DataBlob | null, signatureData: DataBlob): Promise<boolean>

对数据进行验签。使用Promise异步回调。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Signature。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| data | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | null10+ | 是 | 传入的消息。API 10之前只支持DataBlob， API 10之后增加支持null。 |
| signatureData | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 签名数据。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<boolean> | Promise对象，表示验签结果。返回true表示验签成功，返回false表示验签失败。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

### verifySync12+

PhonePC/2in1TabletTVWearable

verifySync(data: DataBlob | null, signatureData: DataBlob): boolean

对数据进行验签，通过同步方式返回验签结果。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| data | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | null | 是 | 传入的消息。 |
| signatureData | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 签名数据。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| boolean | 同步返回值，表示验签是否通过。true为通过，false为不通过。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

**示例：**

此外，更多签名验签的完整示例可参考[签名验签开发指导](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-rsa-sign-sig-verify-pkcs1)。



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { buffer } from '@kit.ArkTS';

4. function verifyByCallback() {
5. let inputUpdate: cryptoFramework.DataBlob =
6. { data: new Uint8Array(buffer.from('This is Sign test plan1', 'utf-8').buffer) };
7. let inputVerify: cryptoFramework.DataBlob =
8. { data: new Uint8Array(buffer.from('This is Sign test plan2', 'utf-8').buffer) };
9. // 根据密钥数据生成的密钥和输入的验签数据，这部分代码Verify与Sign中保持一致，保证验签通过。
10. let pkData =
11. 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,
12. 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,
13. 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123,
14. 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,
15. 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,
16. 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,
17. 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1]);
18. let skData =
19. 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,
20. 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,
21. 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31,
22. 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,
23. 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,
24. 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,
25. 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,
26. 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,
27. 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,
28. 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,
29. 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,
30. 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,
31. 255, 158, 212, 13, 43, 132, 244, 135, 148, 161, 232, 219, 20, 81, 196, 102, 103, 44, 110, 71, 100, 62, 73, 200,
32. 32, 138, 114, 209, 171, 150, 179, 92, 198, 5, 190, 218, 79, 227, 227, 37, 32, 57, 159, 252, 107, 211, 139, 198,
33. 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,
34. 170, 168, 183, 159, 152, 8, 74, 233, 80, 244, 146, 81, 48, 159, 194, 199, 36, 187, 6, 181, 182, 223, 115, 133,
35. 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,
36. 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,
37. 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,
38. 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,
39. 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,
40. 66, 250, 118, 72, 166, 221, 67, 156, 245, 119, 138, 28, 6, 142, 107, 71, 122, 116, 200, 156, 199, 237, 152, 191,
41. 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,
42. 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,
43. 232, 41, 114, 153, 237, 253, 52, 205, 148, 45, 86, 186, 241, 182, 183, 42, 77, 252, 195, 29, 158, 173, 3, 182,
44. 207, 254, 61, 71, 184, 167, 184]);
45. let pubKeyBlob: cryptoFramework.DataBlob = { data: pkData };
46. let priKeyBlob: cryptoFramework.DataBlob = { data: skData };
47. // 该数据取自Sign中的signData.data。
48. let signMessageBlob: cryptoFramework.DataBlob = {
49. data: new Uint8Array([9, 68, 164, 161, 230, 155, 255, 153, 10, 12, 14, 22, 146, 115, 209, 167, 223, 133, 89, 173,
50. 50, 249, 176, 104, 10, 251, 219, 104, 117, 196, 105, 65, 249, 139, 119, 41, 15, 171, 191, 11, 177, 177, 1, 119,
51. 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,
52. 87, 155, 125, 254, 112, 95, 176, 255, 207, 106, 43, 228, 153, 131, 240, 120, 88, 253, 179, 207, 207, 110, 223,
53. 173, 15, 113, 11, 183, 122, 237, 205, 206, 123, 246, 33, 167, 169, 251, 237, 199, 26, 220, 152, 190, 117, 131, 74,
54. 232, 50, 39, 172, 232, 178, 112, 73, 251, 235, 131, 209])
55. }
56. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
57. let verifier = cryptoFramework.createVerify('RSA1024|PKCS1|SHA256');
58. rsaGenerator.convertKey(pubKeyBlob, priKeyBlob, (err, keyPair) => {
59. verifier.init(keyPair.pubKey, err => {
60. verifier.update(inputUpdate, err => {
61. verifier.verify(inputVerify, signMessageBlob, (err, res) => {
62. console.info('verify result = ' + res);
63. });
64. });
65. });
66. });
67. }
```

**示例：**

更多示例请参见[签名验签开发指导](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-rsa-sign-sig-verify-pkcs1)。



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { buffer } from '@kit.ArkTS';

4. async function genKeyPairByData(pubKeyData: Uint8Array, priKeyData: Uint8Array) {
5. let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData };
6. let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyData };
7. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
8. let keyPair = await rsaGenerator.convertKey(pubKeyBlob, priKeyBlob);
9. console.info('convertKey result: success.');
10. return keyPair;
11. }

13. async function verifyByPromise() {
14. // 根据密钥数据生成的密钥和输入的验签数据，这部分代码Verify与Sign中保持一致，保证验签通过。
15. let pkData =
16. 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,
17. 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,
18. 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123,
19. 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,
20. 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,
21. 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,
22. 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1]);
23. let skData =
24. 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,
25. 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,
26. 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31,
27. 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,
28. 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,
29. 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,
30. 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,
31. 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,
32. 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,
33. 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,
34. 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,
35. 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,
36. 255, 158, 212, 13, 43, 132, 244, 135, 148, 161, 232, 219, 20, 81, 196, 102, 103, 44, 110, 71, 100, 62, 73, 200,
37. 32, 138, 114, 209, 171, 150, 179, 92, 198, 5, 190, 218, 79, 227, 227, 37, 32, 57, 159, 252, 107, 211, 139, 198,
38. 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,
39. 170, 168, 183, 159, 152, 8, 74, 233, 80, 244, 146, 81, 48, 159, 194, 199, 36, 187, 6, 181, 182, 223, 115, 133,
40. 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,
41. 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,
42. 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,
43. 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,
44. 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,
45. 66, 250, 118, 72, 166, 221, 67, 156, 245, 119, 138, 28, 6, 142, 107, 71, 122, 116, 200, 156, 199, 237, 152, 191,
46. 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,
47. 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,
48. 232, 41, 114, 153, 237, 253, 52, 205, 148, 45, 86, 186, 241, 182, 183, 42, 77, 252, 195, 29, 158, 173, 3, 182,
49. 207, 254, 61, 71, 184, 167, 184]);
50. let keyPair = await genKeyPairByData(pkData, skData);
51. let inputUpdate: cryptoFramework.DataBlob =
52. { data: new Uint8Array(buffer.from('This is Sign test plan1', 'utf-8').buffer) };
53. let inputVerify: cryptoFramework.DataBlob =
54. { data: new Uint8Array(buffer.from('This is Sign test plan2', 'utf-8').buffer) };
55. // 该数据取自Sign中的signData.data。
56. let signMessageBlob: cryptoFramework.DataBlob = {
57. data: new Uint8Array([9, 68, 164, 161, 230, 155, 255, 153, 10, 12, 14, 22, 146, 115, 209, 167, 223, 133, 89, 173,
58. 50, 249, 176, 104, 10, 251, 219, 104, 117, 196, 105, 65, 249, 139, 119, 41, 15, 171, 191, 11, 177, 177, 1, 119,
59. 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,
60. 87, 155, 125, 254, 112, 95, 176, 255, 207, 106, 43, 228, 153, 131, 240, 120, 88, 253, 179, 207, 207, 110, 223,
61. 173, 15, 113, 11, 183, 122, 237, 205, 206, 123, 246, 33, 167, 169, 251, 237, 199, 26, 220, 152, 190, 117, 131, 74,
62. 232, 50, 39, 172, 232, 178, 112, 73, 251, 235, 131, 209])
63. };
64. let verifier = cryptoFramework.createVerify('RSA1024|PKCS1|SHA256');
65. await verifier.init(keyPair.pubKey);
66. await verifier.update(inputUpdate);
67. let res = await verifier.verify(inputVerify, signMessageBlob);
68. console.info('verify result: ' + res);
69. }
```

**示例：**

此外，更多签名验签的完整示例可参考[签名验签开发指导](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-rsa-sign-sig-verify-pkcs1)。



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { buffer } from '@kit.ArkTS';

4. function genKeyPairByData(pubKeyData: Uint8Array, priKeyData: Uint8Array) {
5. let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData };
6. let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyData };
7. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
8. let keyPair = rsaGenerator.convertKeySync(pubKeyBlob, priKeyBlob);
9. console.info('convertKey result: success.');
10. return keyPair;
11. }

13. function verifyBySync() {
14. // 根据密钥数据生成的密钥和输入的验签数据，这部分代码Verify与Sign中保持一致，保证验签通过。
15. let pkData =
16. 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,
17. 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,
18. 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123,
19. 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,
20. 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,
21. 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,
22. 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1]);
23. let skData =
24. 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,
25. 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,
26. 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31,
27. 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,
28. 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,
29. 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,
30. 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,
31. 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,
32. 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,
33. 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,
34. 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,
35. 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,
36. 255, 158, 212, 13, 43, 132, 244, 135, 148, 161, 232, 219, 20, 81, 196, 102, 103, 44, 110, 71, 100, 62, 73, 200,
37. 32, 138, 114, 209, 171, 150, 179, 92, 198, 5, 190, 218, 79, 227, 227, 37, 32, 57, 159, 252, 107, 211, 139, 198,
38. 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,
39. 170, 168, 183, 159, 152, 8, 74, 233, 80, 244, 146, 81, 48, 159, 194, 199, 36, 187, 6, 181, 182, 223, 115, 133,
40. 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,
41. 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,
42. 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,
43. 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,
44. 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,
45. 66, 250, 118, 72, 166, 221, 67, 156, 245, 119, 138, 28, 6, 142, 107, 71, 122, 116, 200, 156, 199, 237, 152, 191,
46. 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,
47. 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,
48. 232, 41, 114, 153, 237, 253, 52, 205, 148, 45, 86, 186, 241, 182, 183, 42, 77, 252, 195, 29, 158, 173, 3, 182,
49. 207, 254, 61, 71, 184, 167, 184]);
50. let keyPair = genKeyPairByData(pkData, skData);
51. let inputUpdate: cryptoFramework.DataBlob =
52. { data: new Uint8Array(buffer.from('This is Sign test plan1', 'utf-8').buffer) };
53. let inputVerify: cryptoFramework.DataBlob =
54. { data: new Uint8Array(buffer.from('This is Sign test plan2', 'utf-8').buffer) };
55. // 该数据取自Sign中的signData.data。
56. let signMessageBlob: cryptoFramework.DataBlob = {
57. data: new Uint8Array([9, 68, 164, 161, 230, 155, 255, 153, 10, 12, 14, 22, 146, 115, 209, 167, 223, 133, 89, 173,
58. 50, 249, 176, 104, 10, 251, 219, 104, 117, 196, 105, 65, 249, 139, 119, 41, 15, 171, 191, 11, 177, 177, 1, 119,
59. 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,
60. 87, 155, 125, 254, 112, 95, 176, 255, 207, 106, 43, 228, 153, 131, 240, 120, 88, 253, 179, 207, 207, 110, 223,
61. 173, 15, 113, 11, 183, 122, 237, 205, 206, 123, 246, 33, 167, 169, 251, 237, 199, 26, 220, 152, 190, 117, 131, 74,
62. 232, 50, 39, 172, 232, 178, 112, 73, 251, 235, 131, 209])
63. };
64. let verifier = cryptoFramework.createVerify('RSA1024|PKCS1|SHA256');
65. verifier.initSync(keyPair.pubKey);
66. verifier.updateSync(inputUpdate);
67. let res = verifier.verifySync(inputVerify, signMessageBlob);
68. console.info('verify result: ' + res);
69. }
```

### recover12+

PhonePC/2in1TabletTVWearable

recover(signatureData: DataBlob): Promise<DataBlob | null>

对数据进行签名恢复原始数据。使用Promise异步回调。

说明

* 目前仅RSA支持。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| signatureData | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 签名数据。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<[DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | null> | Promise对象，返回签名恢复的原始数据。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { BusinessError } from '@kit.BasicServicesKit';

4. async function genKeyPairByData(pubKeyData: Uint8Array, priKeyData: Uint8Array) {
5. let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData };
6. let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyData };
7. let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
8. let keyPair = await rsaGenerator.convertKey(pubKeyBlob, priKeyBlob);
9. console.info('convertKey result: success.');
10. return keyPair;
11. }

13. async function recoverByPromise() {
14. // 根据密钥数据生成的密钥和输入的验签数据，这部分代码Verify与Sign中保持一致，保证验签通过。
15. let pkData =
16. 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,
17. 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,
18. 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123,
19. 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,
20. 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,
21. 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,
22. 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1]);
23. let skData =
24. 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,
25. 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,
26. 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31,
27. 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,
28. 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,
29. 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,
30. 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,
31. 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,
32. 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,
33. 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,
34. 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,
35. 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,
36. 255, 158, 212, 13, 43, 132, 244, 135, 148, 161, 232, 219, 20, 81, 196, 102, 103, 44, 110, 71, 100, 62, 73, 200,
37. 32, 138, 114, 209, 171, 150, 179, 92, 198, 5, 190, 218, 79, 227, 227, 37, 32, 57, 159, 252, 107, 211, 139, 198,
38. 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,
39. 170, 168, 183, 159, 152, 8, 74, 233, 80, 244, 146, 81, 48, 159, 194, 199, 36, 187, 6, 181, 182, 223, 115, 133,
40. 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,
41. 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,
42. 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,
43. 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,
44. 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,
45. 66, 250, 118, 72, 166, 221, 67, 156, 245, 119, 138, 28, 6, 142, 107, 71, 122, 116, 200, 156, 199, 237, 152, 191,
46. 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,
47. 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,
48. 232, 41, 114, 153, 237, 253, 52, 205, 148, 45, 86, 186, 241, 182, 183, 42, 77, 252, 195, 29, 158, 173, 3, 182,
49. 207, 254, 61, 71, 184, 167, 184]);
50. let keyPair = await genKeyPairByData(pkData, skData);
51. // 该数据取自Sign中的signData.data。
52. let signMessageBlob: cryptoFramework.DataBlob = {
53. data: new Uint8Array([9, 68, 164, 161, 230, 155, 255, 153, 10, 12, 14, 22, 146, 115, 209, 167, 223, 133, 89, 173,
54. 50, 249, 176, 104, 10, 251, 219, 104, 117, 196, 105, 65, 249, 139, 119, 41, 15, 171, 191, 11, 177, 177, 1, 119,
55. 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,
56. 87, 155, 125, 254, 112, 95, 176, 255, 207, 106, 43, 228, 153, 131, 240, 120, 88, 253, 179, 207, 207, 110, 223,
57. 173, 15, 113, 11, 183, 122, 237, 205, 206, 123, 246, 33, 167, 169, 251, 237, 199, 26, 220, 152, 190, 117, 131, 74,
58. 232, 50, 39, 172, 232, 178, 112, 73, 251, 235, 131, 209])
59. };
60. let verifier = cryptoFramework.createVerify('RSA1024|PKCS1|SHA256|Recover');
61. await verifier.init(keyPair.pubKey);
62. try {
63. let rawSignData = await verifier.recover(signMessageBlob);
64. if (rawSignData != null) {
65. console.info('[Promise]: recover result: ' + rawSignData.data);
66. } else {
67. console.error('[Promise]: get verify recover result: fail.');
68. }
69. } catch (error) {
70. let e: BusinessError = error as BusinessError;
71. console.error(`promise failed: errCode: ${e.code}, errMsg: ${e.message}`);
72. }
73. }
```

### recoverSync12+

PhonePC/2in1TabletTVWearable

recoverSync(signatureData: DataBlob): DataBlob | null

对数据进行签名恢复原始数据。

说明

* 目前仅RSA支持。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| signatureData | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 签名数据。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | null | 验签恢复的数据。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

### setVerifySpec10+

PhonePC/2in1TabletTVWearable

setVerifySpec(itemType: SignSpecItem, itemValue: number): void

setVerifySpec(itemType: SignSpecItem, itemValue: number | Uint8Array): void

设置验签参数。常用的签名参数直接通过[createVerify](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreateverify) 来指定，剩余参数通过本接口指定。

支持RSA算法和SM2算法，从API version 11开始，支持SM2算法设置验签参数。

验签的参数应当与签名的参数保持一致。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Signature。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| itemType | [SignSpecItem](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#signspecitem10) | 是 | 用于指定需要设置的验签参数。 |
| itemValue | number | Uint8Array11+ | 是 | 用于指定验签参数的具体值。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

3. function testSetVerifySpec() {
4. let verifier = cryptoFramework.createVerify('RSA2048|PSS|SHA256|MGF1_SHA256');
5. let setN = 20;
6. verifier.setVerifySpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM, setN);
7. }
```

### getVerifySpec10+

PhonePC/2in1TabletTVWearable

getVerifySpec(itemType: SignSpecItem): string | number

获取验签参数。当前只支持RSA算法。

验签的参数应当与签名的参数保持一致。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Signature。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| itemType | [SignSpecItem](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#signspecitem10) | 是 | 用于指定需要获取的验签参数。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| string | number | 获取的验签参数的具体值。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)

展开

| 错误码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';

3. function testGetVerifySpec() {
4. let verifier = cryptoFramework.createVerify('RSA2048|PSS|SHA256|MGF1_SHA256');
5. let setN = 20;
6. verifier.setVerifySpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM, setN);
7. verifier.getVerifySpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM);
8. }
```

## cryptoFramework.createKeyAgreement

PhonePC/2in1TabletTVWearable

createKeyAgreement(algName: string): KeyAgreement

生成KeyAgreement实例。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.KeyAgreement

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.KeyAgreement。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| algName | string | 是 | 指定密钥协商算法：目前仅支持ECC，从API version 11开始，增加支持X25519和DH。  支持的规格详见[密钥协商规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-key-agreement-overview)。 |

**返回值**：

展开

| 类型 | 说明 |
| --- | --- |
| KeyAgreement | 返回由输入算法指定生成的KeyAgreement对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

3. let keyAgreement = cryptoFramework.createKeyAgreement('ECC256');
```

## KeyAgreement

PhonePC/2in1TabletTVWearable

KeyAgreement类，使用密钥协商方法之前需要创建该类的实例进行操作，通过[createKeyAgreement(algName: string): KeyAgreement](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreatekeyagreement)方法构造此实例。

### 属性

PhonePC/2in1TabletTVWearable

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.KeyAgreement

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.KeyAgreement。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| algName | string | 是 | 否 | 密钥协商指定的算法名称。 |

### generateSecret

PhonePC/2in1TabletTVWearable

generateSecret(priKey: PriKey, pubKey: PubKey, callback: AsyncCallback<DataBlob>): void

基于传入的私钥与公钥进行密钥协商。使用callback异步回调。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.KeyAgreement

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.KeyAgreement。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| priKey | [PriKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#prikey) | 是 | 设置密钥协商的私钥输入。 |
| pubKey | [PubKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#pubkey) | 是 | 设置密钥协商的公钥输入。 |
| callback | AsyncCallback<[DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob)> | 是 | 回调函数，用于密钥协商。当密钥协商成功，err为undefined，data为协商的共享密钥；否则为错误对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

### generateSecret

PhonePC/2in1TabletTVWearable

generateSecret(priKey: PriKey, pubKey: PubKey): Promise<DataBlob>

基于传入的私钥与公钥进行密钥协商。使用Promise异步回调。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.KeyAgreement

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.KeyAgreement。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| priKey | [PriKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#prikey) | 是 | 设置密钥协商的私钥输入。 |
| pubKey | [PubKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#pubkey) | 是 | 设置密钥协商的公钥输入。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<[DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob)> | Promise对象，返回密钥协商的共享密钥。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

### generateSecretSync12+

PhonePC/2in1TabletTVWearable

generateSecretSync(priKey: PriKey, pubKey: PubKey): DataBlob

基于传入的私钥与公钥进行密钥协商，通过同步返回共享密钥。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.KeyAgreement

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| priKey | [PriKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#prikey) | 是 | 设置密钥协商的私钥输入。 |
| pubKey | [PubKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#pubkey) | 是 | 设置密钥协商的公钥输入。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 共享密钥。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';

3. async function testGenerateSecret() {
4. let eccGen = cryptoFramework.createAsyKeyGenerator('ECC256');
5. let globalKeyPair = await eccGen.generateKeyPair();
6. let keyAgreement = cryptoFramework.createKeyAgreement('ECC256');
7. keyAgreement.generateSecret(globalKeyPair.priKey, globalKeyPair.pubKey, (err, secret) => {
8. if (err) {
9. console.error(`keyAgreement failed, errCode: ${err.code}, errMsg: ${err.message}`);
10. return;
11. }
12. console.info('keyAgreement output = ' + secret.data);
13. });
14. }
```

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { BusinessError } from '@kit.BasicServicesKit';

4. async function testGenerateSecret() {
5. let eccGen = cryptoFramework.createAsyKeyGenerator('ECC256');
6. let globalKeyPair = await eccGen.generateKeyPair();
7. let keyAgreement = cryptoFramework.createKeyAgreement('ECC256');
8. let keyAgreementPromise = keyAgreement.generateSecret(globalKeyPair.priKey, globalKeyPair.pubKey);
9. keyAgreementPromise.then(secret => {
10. console.info('keyAgreement output = ' + secret.data);
11. }).catch((error: BusinessError) => {
12. console.error(`keyAgreement failed: errCode: ${error.code}, errMsg: ${error.message}`);
13. });
14. }
```

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';

3. async function testGenerateSecretSync() {
4. let eccGen = cryptoFramework.createAsyKeyGenerator('ECC256');
5. let globalKeyPair = await eccGen.generateKeyPair();
6. let keyAgreement = cryptoFramework.createKeyAgreement('ECC256');
7. let secret = keyAgreement.generateSecretSync(globalKeyPair.priKey, globalKeyPair.pubKey);
8. console.info('[Sync]keyAgreement output = ' + secret.data);
9. }
```

## cryptoFramework.createMd

PhonePC/2in1TabletTVWearableLite Wearable

createMd(algName: string): Md

生成Md实例，用于进行消息摘要的计算与操作。

支持的规格详见[MD消息摘要算法规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-generate-message-digest-overview#支持的算法与规格)。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.MessageDigest

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.MessageDigest。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| algName | string | 是 | 指定摘要算法，支持算法请参考[MD消息摘要算法规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-generate-message-digest-overview#支持的算法与规格)。 |

**返回值**：

展开

| 类型 | 说明 |
| --- | --- |
| Md | 返回由输入算法指定生成的[Md](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#md)对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

4. try {
5. let md = cryptoFramework.createMd('SHA256');
6. } catch (error) {
7. let e: BusinessError = error as BusinessError;
8. console.error(`sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
9. }
```

## Md

PhonePC/2in1TabletTVWearableLite Wearable

Md类，调用Md方法进行消息摘要（Message Digest）计算。调用前，需要通过[createMd](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreatemd)构造Md实例。

### 属性

PhonePC/2in1TabletTVWearableLite Wearable

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.MessageDigest

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.MessageDigest。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| algName | string | 是 | 否 | 代表指定的摘要算法名。 |

### update

PhonePC/2in1TabletTVWearableLite Wearable

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

传入消息进行Md更新摘要状态。使用callback异步回调。update和digest为两段式接口，需要成组使用。其中digest必选，update可选。

说明

Md算法多次调用update更新的代码示例详见开发指导[分段摘要算法](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-generate-message-digest#分段摘要算法)。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.MessageDigest

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.MessageDigest。

**设备行为差异：** 该接口仅在Phone、PC/2in1、Tablet、TV、Wearable设备中可正常调用，在Lite Wearable设备中返回undefined。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| input | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 传入的消息。 |
| callback | AsyncCallback<void> | 是 | 回调函数。当摘要更新成功，err为undefined，否则为错误对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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

PhonePC/2in1TabletTVWearableLite Wearable

update(input: DataBlob): Promise<void>

传入消息进行Md更新摘要状态。使用Promise异步回调。update和digest为两段式接口，需要成组使用。其中digest必选，update可选。

说明

Md算法多次调用update更新的代码示例详见开发指导[分段摘要算法](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-generate-message-digest#分段摘要算法)。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.MessageDigest

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.MessageDigest。

**设备行为差异：** 该接口仅在Phone、PC/2in1、Tablet、TV、Wearable设备中可正常调用，在Lite Wearable设备中返回undefined。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| input | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 传入的消息。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<void> | Promise对象，无返回结果。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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更新的代码示例详见开发指导[分段摘要算法](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-generate-message-digest#分段摘要算法)。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.MessageDigest

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| input | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 传入的消息。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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

PhonePC/2in1TabletTVWearableLite Wearable

digest(callback: AsyncCallback<DataBlob>): void

返回Md的计算结果。使用callback异步回调。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.MessageDigest

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.MessageDigest。

**设备行为差异：** 该接口仅在Phone、PC/2in1、Tablet、TV、Wearable设备中可正常调用，在Lite Wearable设备中返回undefined。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| callback | AsyncCallback<[DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob)> | 是 | 回调函数，用于获取摘要的计算结果。当摘要计算成功，err为undefined，data为获取到的摘要结果；否则为错误对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码ID | 错误信息 |
| --- | --- |
| 17620001 | memory operation failed. |
| 17630001 | crypto operation error. |

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { buffer } from '@kit.ArkTS';

4. function mdByCallback() {
5. let md = cryptoFramework.createMd('SHA256');
6. md.update({ data: new Uint8Array(buffer.from('mdTestMessage', 'utf-8').buffer) }, (err) => {
7. md.digest((err, digestOutput) => {
8. console.info('[Callback]: MD result: ' + digestOutput.data);
9. console.info('[Callback]: MD len: ' + md.getMdLength());
10. });
11. });
12. }
```

### digest

PhonePC/2in1TabletTVWearableLite Wearable

digest(): Promise<DataBlob>

返回Md的计算结果。使用Promise异步回调。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.MessageDigest

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.MessageDigest。

**设备行为差异：** 该接口仅在Phone、PC/2in1、Tablet、TV、Wearable设备中可正常调用，在Lite Wearable设备中返回undefined。

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<[DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob)> | Promise对象，返回摘要计算结果。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码ID | 错误信息 |
| --- | --- |
| 17620001 | memory operation failed. |
| 17630001 | crypto operation error. |

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { buffer } from '@kit.ArkTS';

4. async function mdByPromise() {
5. let md = cryptoFramework.createMd('SHA256');
6. await md.update({ data: new Uint8Array(buffer.from('mdTestMessage', 'utf-8').buffer) });
7. let mdOutput = await md.digest();
8. console.info('[Promise]: MD result: ' + mdOutput.data);
9. console.info('[Promise]: MD len: ' + md.getMdLength());
10. }
```

### digestSync12+

PhonePC/2in1TabletTVWearableLite Wearable

digestSync(): DataBlob

通过同步方式返回Md的计算结果。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.MessageDigest

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 表示生成的Md计算结果。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { buffer } from '@kit.ArkTS';

4. async function mdBySync() {
5. let md = cryptoFramework.createMd('SHA256');
6. md.updateSync({ data: new Uint8Array(buffer.from('mdTestMessage', 'utf-8').buffer) });
7. let mdOutput = md.digestSync();
8. console.info('[Sync]: MD result: ' + mdOutput.data);
9. console.info('[Sync]: MD len: ' + md.getMdLength());
10. }
```

### getMdLength

PhonePC/2in1TabletTVWearableLite Wearable

getMdLength(): number

获取Md消息摘要的字节长度。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.MessageDigest

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.MessageDigest。

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| number | 返回md计算结果的字节长度。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码ID | 错误信息 |
| --- | --- |
| 17630001 | crypto operation error. |

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';

3. function getLength() {
4. let md = cryptoFramework.createMd('SHA256');
5. console.info('[Promise]: MD len: ' + md.getMdLength());
6. }
```

## cryptoFramework.createMac

PhonePC/2in1TabletTVWearable

createMac(algName: string): Mac

生成Mac实例，用于消息认证码的计算与操作。

支持的规格详见[HMAC消息认证码算法规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-compute-mac-overview)。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Mac

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Mac。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| algName | string | 是 | 指定摘要算法，支持算法请参考[HMAC消息认证码算法规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-compute-mac-overview)。 |

**返回值**：

展开

| 类型 | 说明 |
| --- | --- |
| Mac | 返回由输入算法指定生成的[Mac](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#mac)对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

4. try {
5. // Set algName based on the algorithm supported.
6. let mac = cryptoFramework.createMac('SHA256');
7. } catch (error) {
8. let e: BusinessError = error as BusinessError;
9. console.error(`sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
10. }
```

## cryptoFramework.createMac18+

PhonePC/2in1TabletTVWearable

createMac(macSpec: MacSpec): Mac

生成Mac实例，用于进行消息认证码的计算与操作。

支持的规格详见[MAC消息认证码算法规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-compute-mac-overview)。

**元服务API：** 从API version 18开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Mac

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| macSpec | [MacSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#macspec18) | 是 | 根据消息验证码的不同算法，指定入参结构体，支持算法请参考[MAC消息认证码算法规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-compute-mac-overview)。 |

**返回值**：

展开

| 类型 | 说明 |
| --- | --- |
| Mac | 返回由指定入参结构体生成的[Mac](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#mac)对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { BusinessError } from '@kit.BasicServicesKit';

4. try {
5. // Set algName based on the algorithm supported.
6. let spec: cryptoFramework.HmacSpec = {
7. algName: 'HMAC',
8. mdName: 'SHA256',
9. };
10. let mac = cryptoFramework.createMac(spec);
11. } catch (error) {
12. let e: BusinessError = error as BusinessError;
13. console.error(`sync failed: errCode: ${error.code}, errMsg: ${error.message}`);
14. }
```

## Mac

PhonePC/2in1TabletTVWearable

Mac类，调用Mac方法进行消息认证码（Message Authentication Code）计算。调用前，需要通过[createMac](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreatemac)构造Mac实例。

### 属性

PhonePC/2in1TabletTVWearable

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Mac

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Mac。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| algName | string | 是 | 否 | 代表指定的摘要算法名。 |

### init

PhonePC/2in1TabletTVWearable

init(key: SymKey, callback: AsyncCallback<void>): void

使用对称密钥初始化Mac计算。使用callback异步回调。init、update、doFinal为三段式接口，需要成组使用。其中init和doFinal必选，update可选。

说明

建议通过[HMAC密钥生成规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-sym-key-generation-conversion-spec#hmac)创建对称密钥生成器，调用[generateSymKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#generatesymkey)随机生成对称密钥或调用[convertKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#convertkey)传入与密钥规格长度一致的二进制密钥数据生成密钥。

当指定“HMAC”生成对称密钥生成器时，仅支持调用[convertKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#convertkey)传入长度在[1,4096]范围内（单位为bytes）的任意二进制密钥数据生成密钥。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Mac

API version 9-11 系统能力为SystemCapability.Security.CryptoFramework；从API version 12 开始为SystemCapability.Security.CryptoFramework.Mac。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| key | [SymKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#symkey) | 是 | 对称密钥。 |
| callback | AsyncCallback<void> | 是 | 回调函数。当HMAC初始化成功，err为undefined，否则为错误对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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

PhonePC/2in1TabletTVWearable

init(key: SymKey): Promise<void>

使用对称密钥初始化Mac计算。使用Promise异步回调。init、update、doFinal为三段式接口，需要成组使用。其中init和doFinal必选，update可选。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Mac

API version 9-11 系统能力为SystemCapability.Security.CryptoFramework；从API version 12 开始为SystemCapability.Security.CryptoFramework.Mac。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| key | [SymKey](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#symkey) | 是 | 对称密钥。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<void> | Promise对象，无返回结果。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#symkey) | 是 | 对称密钥。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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

PhonePC/2in1TabletTVWearable

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

传入消息进行Mac更新消息认证码状态。使用callback异步回调。

说明

HMAC算法多次调用update更新的代码示例详见[消息认证码计算](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-compute-hmac#分段hmac)。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Mac

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Mac。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| input | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 传入的消息。 |
| callback | AsyncCallback<void> | 是 | 回调函数。当HMAC更新成功，err为undefined，否则为错误对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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

PhonePC/2in1TabletTVWearable

update(input: DataBlob): Promise<void>

传入消息进行Mac更新消息认证码状态。使用Promise异步回调。

说明

HMAC算法多次调用update更新的代码示例详见[消息认证码计算](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-compute-hmac#分段hmac)。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Mac

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Mac。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| input | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 传入的消息。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<void> | Promise对象，无返回结果。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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更新的代码示例详见[消息认证码计算](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-compute-hmac#分段hmac)。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Mac

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| input | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 传入的消息。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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

PhonePC/2in1TabletTVWearable

doFinal(callback: AsyncCallback<DataBlob>): void

返回Mac的计算结果。使用callback异步回调。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Mac

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Mac。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| callback | AsyncCallback<[DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob)> | 是 | 回调函数，用于获取Mac的计算结果。当Mac计算成功，err为undefined，data为获取到的Mac计算结果；否则为错误对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码ID | 错误信息 |
| --- | --- |
| 17620001 | memory operation failed. |
| 17630001 | crypto operation error. |

**示例：**

此外，更多HMAC的完整示例可参考开发指导中[消息认证码计算](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-compute-hmac#分段hmac)。



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { buffer } from '@kit.ArkTS';

4. function hmacByCallback() {
5. let mac = cryptoFramework.createMac('SHA256');
6. let keyBlob: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from('12345678abcdefgh', 'utf-8').buffer) };
7. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
8. symKeyGenerator.convertKey(keyBlob, (err, symKey) => {
9. mac.init(symKey, (err) => {
10. mac.update({ data: new Uint8Array(buffer.from('hmacTestMessage', 'utf-8').buffer) }, (err) => {
11. mac.doFinal((err, output) => {
12. console.info('[Callback]: HMAC result: ' + output.data);
13. console.info('[Callback]: MAC len: ' + mac.getMacLength());
14. });
15. });
16. });
17. });
18. }
```

### doFinal

PhonePC/2in1TabletTVWearable

doFinal(): Promise<DataBlob>

返回Mac的计算结果。使用Promise异步回调。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Mac

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Mac。

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<[DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob)> | Promise对象，返回Mac的计算结果。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码ID | 错误信息 |
| --- | --- |
| 17620001 | memory operation failed. |
| 17630001 | crypto operation error. |

**示例：**

此外，更多HMAC的完整示例可参考开发指导[消息认证码计算](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-compute-hmac#分段hmac)。



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { buffer } from '@kit.ArkTS';

4. async function hmacByPromise() {
5. let mac = cryptoFramework.createMac('SHA256');
6. let keyBlob: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from('12345678abcdefgh', 'utf-8').buffer) };
7. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
8. let symKey = await symKeyGenerator.convertKey(keyBlob);
9. await mac.init(symKey);
10. await mac.update({ data: new Uint8Array(buffer.from('hmacTestMessage', 'utf-8').buffer) });
11. let macOutput = await mac.doFinal();
12. console.info('[Promise]: HMAC result: ' + macOutput.data);
13. console.info('[Promise]: MAC len: ' + mac.getMacLength());
14. }
```

### doFinalSync12+

PhonePC/2in1TabletTVWearable

doFinalSync(): DataBlob

通过同步方式返回Mac的计算结果。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Mac

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 返回Mac的计算结果。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

**示例：**

此外，更多HMAC的完整示例可参考开发指导[消息认证码计算](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-compute-hmac#分段hmac)。



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { buffer } from '@kit.ArkTS';

4. function hmacBySync() {
5. let mac = cryptoFramework.createMac('SHA256');
6. let keyBlob: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from('12345678abcdefgh', 'utf-8').buffer) };
7. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
8. let symKey = symKeyGenerator.convertKeySync(keyBlob);
9. mac.initSync(symKey);
10. mac.updateSync({ data: new Uint8Array(buffer.from('hmacTestMessage', 'utf-8').buffer) });
11. let macOutput = mac.doFinalSync();
12. console.info('[Sync]: HMAC result: ' + macOutput.data);
13. console.info('[Sync]: MAC len: ' + mac.getMacLength());
14. }
```

### getMacLength

PhonePC/2in1TabletTVWearable

getMacLength(): number

获取Mac消息认证码的长度（字节数）。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Mac

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Mac。

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| number | 返回Mac计算结果的字节长度。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码ID | 错误信息 |
| --- | --- |
| 17630001 | crypto operation error. |

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { BusinessError } from '@kit.BasicServicesKit';

4. function testGetMacLength() {
5. let mac = cryptoFramework.createMac('SHA256');
6. console.info('Mac algName is: ' + mac.algName);
7. let keyData = new Uint8Array([83, 217, 231, 76, 28, 113, 23, 219, 250, 71, 209, 210, 205, 97, 32, 159]);
8. let keyBlob: cryptoFramework.DataBlob = { data: keyData };
9. let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
10. let promiseConvertKey = symKeyGenerator.convertKey(keyBlob);
11. promiseConvertKey.then(symKey => {
12. let promiseMacInit = mac.init(symKey);
13. return promiseMacInit;
14. })
15. .then(() => {
16. let blob: cryptoFramework.DataBlob = { data: new Uint8Array([83]) };
17. let promiseMacUpdate = mac.update(blob);
18. return promiseMacUpdate;
19. })
20. .then(() => {
21. let promiseMacDoFinal = mac.doFinal();
22. return promiseMacDoFinal;
23. })
24. .then(macOutput => {
25. console.info('[Promise]: HMAC result: ' + macOutput.data);
26. let macLen = mac.getMacLength();
27. console.info('MAC len: ' + macLen);
28. })
29. .catch((error: BusinessError) => {
30. console.error(`[Promise] failed: errCode: ${error.code}, errMsg: ${error.message}`);
31. });
32. }
```

## cryptoFramework.createRandom

PhonePC/2in1TabletTVWearableLite Wearable

createRandom(): Random

生成Random实例，用于进行随机数的计算与设置种子。

**元服务API：** 从API version 11开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Rand

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Rand。

**返回值**：

展开

| 类型 | 说明 |
| --- | --- |
| [Random](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#random) | 返回由输入算法指定生成的[Random](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#random)对象。  支持的规格详见框架概述[随机数算法规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-generate-random-number#支持的算法与规格)。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码ID | 错误信息 |
| --- | --- |
| 17620001 | memory operation failed. |

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { BusinessError } from '@kit.BasicServicesKit';

4. try {
5. let rand = cryptoFramework.createRandom();
6. } catch (error) {
7. let e: BusinessError = error as BusinessError;
8. console.error(`sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
9. }
```

## Random

PhonePC/2in1TabletTVWearableLite Wearable

Random类，调用Random方法生成随机数。调用前，需要通过[createRandom](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#cryptoframeworkcreaterandom)构造Random实例。

### 属性

PhonePC/2in1TabletTVWearableLite Wearable

**元服务API：** 从API version 11开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Rand

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Rand。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| algName10+ | string | 是 | 否 | 代表当前使用的随机数生成算法，目前只支持"CTR\_DRBG"。 |

### generateRandom

PhonePC/2in1TabletTVWearableLite Wearable

generateRandom(len: number, callback: AsyncCallback<DataBlob>): void

生成指定长度的随机数。使用callback异步回调。

**元服务API：** 从API version 11开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Rand

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Rand。

**设备行为差异：** 该接口仅在Phone、PC/2in1、Tablet、TV、Wearable设备中可正常调用，在Lite Wearable设备中返回undefined。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| len | number | 是 | 表示生成随机数的长度，单位为bytes，范围在[1, INT\_MAX]。 |
| callback | AsyncCallback<[DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob)> | 是 | 回调函数，用于获取生成的随机数。当生成随机数成功，err为undefined，data为获取到的随机数；否则为错误对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

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. }
10. });
```

### generateRandom

PhonePC/2in1TabletTVWearableLite Wearable

generateRandom(len: number): Promise<DataBlob>

生成指定长度的随机数。使用promise异步回调。

**元服务API：** 从API version 11开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Rand

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Rand。

**设备行为差异：** 该接口仅在Phone、PC/2in1、Tablet、TV、Wearable设备中可正常调用，在Lite Wearable设备中返回undefined。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| len | number | 是 | 表示生成随机数的长度，单位为bytes，范围在[1, INT\_MAX]。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<[DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob)> | Promise对象，返回生成的随机数。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

4. let rand = cryptoFramework.createRandom();
5. let promiseGenerateRand = rand.generateRandom(12);
6. promiseGenerateRand.then(randData => {
7. console.info('[Promise]: rand result: ' + randData.data);
8. }).catch((error: BusinessError) => {
9. console.error(`[Promise] failed: errCode: ${error.code}, errMsg: ${error.message}`);
10. });
```

### generateRandomSync10+

PhonePC/2in1TabletTVWearableLite Wearable

generateRandomSync(len: number): DataBlob

同步生成指定长度的随机数。

**元服务API：** 从API version 11开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Rand

API version 10-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Rand。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| len | number | 是 | 表示生成随机数的长度，单位为bytes，范围在[1, INT\_MAX]。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 表示生成的随机数。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

4. let rand = cryptoFramework.createRandom();
5. try {
6. let randData = rand.generateRandomSync(12);
7. if (randData != null) {
8. console.info('[Sync]: rand result: ' + randData.data);
9. } else {
10. console.error('[Sync]: get rand result: fail.');
11. }
12. } catch (error) {
13. let e: BusinessError = error as BusinessError;
14. console.error(`sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
15. }
```

### enableHardwareEntropy21+

PhonePC/2in1TabletTVWearableLite Wearable

enableHardwareEntropy(): void

开启硬件熵源。

**元服务API：** 从API version 21开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Rand

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码ID | 错误信息 |
| --- | --- |
| 801 | this operation is not supported. |
| 17620001 | memory operation failed. |
| 17620002 | failed to convert parameters between arkts and c. |
| 17630001 | crypto operation error. |

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { BusinessError } from '@kit.BasicServicesKit';

4. let rand = cryptoFramework.createRandom();
5. rand.enableHardwareEntropy();
6. rand.generateRandom(12, (err, randData) => {
7. if (err) {
8. console.error(`[Callback] generate random failed, errCode: ${err.code}, errMsg: ${err.message}`);
9. } else {
10. console.info('[Callback]: generate random result: ' + randData.data);
11. try {
12. rand.setSeed(randData);
13. } catch (error) {
14. let e: BusinessError = error as BusinessError;
15. console.error(`sync failed: errCode: ${e.code}, errMsg: ${e.message}`);
16. }
17. }
18. });
```

### setSeed

PhonePC/2in1TabletTVWearableLite Wearable

setSeed(seed: DataBlob): void

设置指定的种子。

**元服务API：** 从API version 11开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Rand

API version 9-11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Rand。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| seed | [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 是 | 设置的种子。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码ID | 错误信息 |
| --- | --- |
| 17620001 | memory operation failed. |

**示例：**



```
1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2. import { BusinessError } from '@kit.BasicServicesKit';

4. let rand = cryptoFramework.createRandom();
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. });
```

## cryptoFramework.createKdf11+

PhonePC/2in1TabletTVWearable

createKdf(algName: string): Kdf

密钥派生函数（key derivation function）实例生成。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Kdf

API version 11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Kdf。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| algName | string | 是 | 指定密钥派生算法（包含HMAC配套的散列函数）：目前支持PBKDF2、HKDF算法、SCRYPT算法，如"PBKDF2|SHA256", "HKDF|SHA256", "SCRYPT"。  支持的规格详见[密钥派生函数规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-key-derivation-overview)。 |

**返回值**：

展开

| 类型 | 说明 |
| --- | --- |
| [Kdf](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#kdf11) | 返回由输入算法指定生成的Kdf对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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';

3. let kdf = cryptoFramework.createKdf('PBKDF2|SHA256');
```

## Kdf11+

PhonePC/2in1TabletTVWearable

密钥派生函数（key derivation function）类，使用密钥派生方法之前需要创建该类的实例进行操作，通过createKdf(algName: string): Kdf方法构造此实例。

### 属性

PhonePC/2in1TabletTVWearable

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Kdf

API version 11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Kdf。

展开

| 名称 | 类型 | 只读 | 可选 | 说明 |
| --- | --- | --- | --- | --- |
| algName | string | 是 | 否 | 密钥派生函数的算法名称。 |

### generateSecret11+

PhonePC/2in1TabletTVWearable

generateSecret(params: KdfSpec, callback: AsyncCallback<DataBlob>): void

基于传入的密钥派生参数进行密钥派生。使用callback异步回调。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Kdf

API version 11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Kdf。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| params | [KdfSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#kdfspec11) | 是 | 设置密钥派生函数的参数。 |
| callback | AsyncCallback<[DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob)> | 是 | 回调函数，用于获取派生的密钥。当密钥派生成功，err为undefined，data为派生的密钥；否则为错误对象。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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. |
| 17630001 | crypto operation error. |

**示例：**

* PBKDF2算法

  

  ```
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';

  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. kdf.generateSecret(spec, (err, secret) => {
  12. if (err) {
  13. console.error(`key derivation failed, errCode: ${err.code}, errMsg: ${err.message}`);
  14. return;
  15. }
  16. console.info('key derivation output = ' + secret.data);
  17. });
  ```
* HKDF算法

  

  ```
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';

  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. kdf.generateSecret(spec, (err, secret) => {
  12. if (err) {
  13. console.error(`key derivation failed, errCode: ${err.code}, errMsg: ${err.message}`);
  14. return;
  15. }
  16. console.info('key derivation output = ' + secret.data);
  17. });
  ```

### generateSecret11+

PhonePC/2in1TabletTVWearable

generateSecret(params: KdfSpec): Promise<DataBlob>

基于传入的密钥派生参数进行密钥派生。使用Promise异步回调。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Kdf

API version 11系统能力为SystemCapability.Security.CryptoFramework；从API version 12开始为SystemCapability.Security.CryptoFramework.Kdf。

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| params | [KdfSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#kdfspec11) | 是 | 设置密钥派生函数的参数。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Promise<[DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob)> | Promise对象，返回派生的密钥。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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. |
| 17630001 | crypto operation error. |

**示例：**

* PBKDF2算法

  

  ```
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';

  4. let spec: cryptoFramework.PBKDF2Spec = {
  5. algName: 'PBKDF2',
  6. password: '123456',
  7. salt: new Uint8Array(16),
  8. iterations: 10000,
  9. keySize: 32
  10. };
  11. let kdf = cryptoFramework.createKdf('PBKDF2|SHA256');
  12. let kdfPromise = kdf.generateSecret(spec);
  13. kdfPromise.then(secret => {
  14. console.info('key derivation output = ' + secret.data);
  15. }).catch((error: BusinessError) => {
  16. console.error(`key derivation failed: errCode: ${error.code}, errMsg: ${error.message}`);
  17. });
  ```
* HKDF算法

  

  ```
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';

  4. let spec: cryptoFramework.HKDFSpec = {
  5. algName: 'HKDF',
  6. key: '123456',
  7. salt: new Uint8Array(16),
  8. info: new Uint8Array(16),
  9. keySize: 32
  10. };
  11. let kdf = cryptoFramework.createKdf('HKDF|SHA256|EXTRACT_AND_EXPAND');
  12. let kdfPromise = kdf.generateSecret(spec);
  13. kdfPromise.then(secret => {
  14. console.info('key derivation output = ' + secret.data);
  15. }).catch((error: BusinessError) => {
  16. console.error(`key derivation failed: errCode: ${error.code}, errMsg: ${error.message}`);
  17. });
  ```

### generateSecretSync12+

PhonePC/2in1TabletTVWearable

generateSecretSync(params: KdfSpec): DataBlob

基于传入的密钥派生参数进行密钥派生，通过同步方式返回派生得到的密钥。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Kdf

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| params | [KdfSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#kdfspec11) | 是 | 设置密钥派生函数的参数。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| [DataBlob](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#datablob) | 用于获取派生得到的密钥DataBlob数据。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码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 convert parameters between arkts and c. |
| 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. |
| 17630001 | crypto operation error. |

**示例：**

* PBKDF2算法

  

  ```
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';

  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 secret = kdf.generateSecretSync(spec);
  12. console.info('[Sync]key derivation output = ' + secret.data);
  ```
* HKDF算法

  

  ```
  1. import { cryptoFramework } from '@kit.CryptoArchitectureKit';

  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 secret = kdf.generateSecretSync(spec);
  12. 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](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#eccsignaturespec20) | 包含r和s的数据结构体。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码ID | 错误信息 |
| --- | --- |
| 17620001 | memory operation failed. |
| 17620002 | failed to convert parameters between arkts and c. |
| 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';

4. function testGenEccSignatureSpec() {
5. try {
6. let data =
7. new Uint8Array([48, 69, 2, 33, 0, 216, 15, 76, 238, 158, 165, 108, 76, 72, 63, 115, 52, 255, 51, 149, 54, 224,
8. 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,
9. 144, 57, 151, 195, 17, 31, 106, 123, 32, 139, 219, 6, 253, 62, 240, 181, 134, 214, 107, 27, 230, 175, 40])
10. let spec: cryptoFramework.EccSignatureSpec = cryptoFramework.SignatureUtils.genEccSignatureSpec(data)
11. console.info('genEccSignatureSpec result: success.');
12. } catch (err) {
13. let e: BusinessError = err as BusinessError;
14. console.error(`ecc failed: errCode: ${e.code}, errMsg: ${e.message}`);
15. }
16. }
```

### genEccSignature20+

PhonePC/2in1TabletTVWearable

static genEccSignature(spec: EccSignatureSpec): Uint8Array;

将（r、s）的sm2签名数据转换为ASN1 DER格式。

**元服务API：** 从API version 20开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.Security.CryptoFramework.Signature

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| spec | [EccSignatureSpec](/consumer/cn/doc/harmonyos-references/js-apis-cryptoframework#eccsignaturespec20) | 是 | （r、s）的sm2签名数据。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| Uint8Array | ASN1 DER格式的签名数据。 |

**错误码：**

以下错误码的详细介绍请参见[crypto framework错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-crypto-framework)。

展开

| 错误码ID | 错误信息 |
| --- | --- |
| 17620001 | memory operation failed. |
| 17620002 | failed to convert parameters between arkts and c. |
| 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';

4. function testGenEccSignature() {
5. try {
6. let spec: cryptoFramework.EccSignatureSpec = {
7. r: BigInt('97726608965854271693043443511967021777934035174185659091642456228829830775155'),
8. s: BigInt('23084224202834231287427338597254751764391338275617140205467537273296855150376'),
9. }

11. let data = cryptoFramework.SignatureUtils.genEccSignature(spec)
12. console.info('genEccSignature result: success.');
13. console.info('data = ' + data)
14. } catch (err) {
15. let e: BusinessError = err as BusinessError;
16. console.error(`ecc failed: errCode: ${e.code}, errMsg: ${e.message}`);
17. }
18. }
```