1e41f4b71Sopenharmony_ci# Encryption and Decryption with an RSA Asymmetric Key Pair (PKCS1_OAEP) 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ci 4e41f4b71Sopenharmony_ciFor details about the algorithm specifications, see [RSA](crypto-asym-encrypt-decrypt-spec.md#rsa). 5e41f4b71Sopenharmony_ci 6e41f4b71Sopenharmony_ci 7e41f4b71Sopenharmony_ci**Encryption** 8e41f4b71Sopenharmony_ci 9e41f4b71Sopenharmony_ci 10e41f4b71Sopenharmony_ci1. Use [cryptoFramework.createAsyKeyGeneratorBySpec](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#cryptoframeworkcreateasykeygeneratorbyspec10) and [AsyKeyGeneratorBySpec.generateKeyPair](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatekeypair-3) to generate an RSA asymmetric key pair (**KeyPair**) based on the specified key parameters. 11e41f4b71Sopenharmony_ci 12e41f4b71Sopenharmony_ci In addition to the example in this topic, [RSA](crypto-asym-key-generation-conversion-spec.md#rsa) and [Generating an Asymmetric Key Pair Based on Key Parameters](crypto-generate-asym-key-pair-from-key-spec.md) may help you better understand how to generate an RSA asymmetric key pair. Note that the input parameters in the reference documents may be different from those in the example below. 13e41f4b71Sopenharmony_ci 14e41f4b71Sopenharmony_ci2. Use [cryptoFramework.createCipher](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#cryptoframeworkcreatecipher) with the string parameter **'RSA2048|PKCS1_OAEP|SHA256|MGF1_SHA1'** to create a **Cipher** instance. The key type is **RSA2048**, padding mode is **PKCS1_OAEP**, MD algorithm is **SHA256**, and mask digest algorithm is **MGF1_SHA1**. 15e41f4b71Sopenharmony_ci 16e41f4b71Sopenharmony_ci3. Use [Cipher.init](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#init-1) to initialize the **Cipher** instance. In **Cipher.init**, set **opMode** to **CryptoMode.ENCRYPT_MODE** (encryption) and **key** to **KeyPair.PubKey** (the key used for encryption). 17e41f4b71Sopenharmony_ci 18e41f4b71Sopenharmony_ci No encryption parameter is required for asymmetric key pairs. Therefore, pass in **null** in **params**. 19e41f4b71Sopenharmony_ci 20e41f4b71Sopenharmony_ci4. Use [Cipher.setCipherSpec](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#setcipherspec10) to set the parameter **pSource** for **PKCS1_OAEP** before **Cipher.doFinal** is called. You can use [Cipher.getCipherSpec](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getcipherspec10) to obtain OAEP-related parameters. 21e41f4b71Sopenharmony_ci 22e41f4b71Sopenharmony_ci5. Use [Cipher.doFinal](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#dofinal-1) to pass in the plaintext and encrypt it. 23e41f4b71Sopenharmony_ci 24e41f4b71Sopenharmony_ci 25e41f4b71Sopenharmony_ci**Decryption** 26e41f4b71Sopenharmony_ci 27e41f4b71Sopenharmony_ci 28e41f4b71Sopenharmony_ci1. If RSA is used, the **Cipher** instance cannot be initialized repeatedly. Use [cryptoFramework.createCipher](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#cryptoframeworkcreatecipher) to create a new **Cipher** instance. 29e41f4b71Sopenharmony_ci 30e41f4b71Sopenharmony_ci2. Use [Cipher.init](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#init-1) to initialize the **Cipher** instance. In **Cipher.init**, set **opMode** to **CryptoMode.DECRYPT_MODE** (decryption) and **key** to **KeyPair.PriKey** (the key used for decryption). When PKCS1 mode is used, pass in **null** in **params**. 31e41f4b71Sopenharmony_ci 32e41f4b71Sopenharmony_ci3. Use [Cipher.setCipherSpec](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#setcipherspec10) to set the parameter **pSource** for **PKCS1_OAEP** before **Cipher.doFinal** is called. The value of **pSource** must be the same as that set in encryption. You can use [Cipher.getCipherSpec](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getcipherspec10) to obtain OAEP-related parameters. 33e41f4b71Sopenharmony_ci 34e41f4b71Sopenharmony_ci4. Use [Cipher.doFinal](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#dofinal-1) to pass in the ciphertext and decrypt it. 35e41f4b71Sopenharmony_ci 36e41f4b71Sopenharmony_ci 37e41f4b71Sopenharmony_ci- Example (using asynchronous APIs): 38e41f4b71Sopenharmony_ci 39e41f4b71Sopenharmony_ci ```ts 40e41f4b71Sopenharmony_ci import { cryptoFramework } from '@kit.CryptoArchitectureKit'; 41e41f4b71Sopenharmony_ci import { buffer } from '@kit.ArkTS'; 42e41f4b71Sopenharmony_ci // Construct the RSA key pair parameter based on the key pair specifications. 43e41f4b71Sopenharmony_ci function genRsaKeyPairSpec(nIn: bigint, eIn: bigint, dIn: bigint) { 44e41f4b71Sopenharmony_ci let rsaCommSpec: cryptoFramework.RSACommonParamsSpec = { 45e41f4b71Sopenharmony_ci n: nIn, 46e41f4b71Sopenharmony_ci algName: "RSA", 47e41f4b71Sopenharmony_ci specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC 48e41f4b71Sopenharmony_ci }; 49e41f4b71Sopenharmony_ci let rsaKeyPairSpec: cryptoFramework.RSAKeyPairSpec = { 50e41f4b71Sopenharmony_ci params: rsaCommSpec, 51e41f4b71Sopenharmony_ci sk: dIn, 52e41f4b71Sopenharmony_ci pk: eIn, 53e41f4b71Sopenharmony_ci algName: "RSA", 54e41f4b71Sopenharmony_ci specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC 55e41f4b71Sopenharmony_ci }; 56e41f4b71Sopenharmony_ci return rsaKeyPairSpec; 57e41f4b71Sopenharmony_ci } 58e41f4b71Sopenharmony_ci // Generate the RSA2048 key pair parameter. 59e41f4b71Sopenharmony_ci function genRsa2048KeyPairSpec(): cryptoFramework.RSAKeyPairSpec { 60e41f4b71Sopenharmony_ci let nIn = BigInt("0x9260d0750ae117eee55c3f3deaba74917521a262ee76007cdf8a56755ad73a1598a1408410a01434c3f5bc54a88b57fa19fc4328daea0750a4c44e88cff3b2382621b80f670464433e4336e6d003e8cd65bff211da144b88291c2259a00a72b711c116ef7686e8fee34e4d933c868187bdc26f7be071493c86f7a5941c3510806ad67b0f94d88f5cf5c02a092821d8626e8932b65c5bd8c92049c210932b7afa7ac59c0e886ae5c1edb00d8ce2c57633db26bd6639bff73cee82be9275c402b4cf2a4388da8cf8c64eefe1c5a0f5ab8057c39fa5c0589c3e253f0960332300f94bea44877b588e1edbde97cf2360727a09b775262d7ee552b3319b9266f05a25"); 61e41f4b71Sopenharmony_ci let eIn = BigInt("0x010001"); 62e41f4b71Sopenharmony_ci let dIn = BigInt("0x6a7df2ca63ead4dda191d614b6b385e0d9056a3d6d5cfe07db1daabee022db08212d97613d3328e0267c9dd23d787abde2afcb306aeb7dfce69246cc73f5c87fdf06030179a2114b767db1f083ff841c025d7dc00cd82435b9a90f695369e94df23d2ce458bc3b3283ad8bba2b8fa1ba62e2dce9accff3799aae7c840016f3ba8e0048c0b6cc4339af7161003a5beb864a0164b2c1c9237b64bc87556994351b27506c33d4bcdfce0f9c491a7d6b0628c7c852be4f0a9c3132b2ed3a2c8881e9aab07e20e17deb074691be677776a78b5c502e05d9bdde72126b3738695e2dd1a0a98a14247c65d8a7ee79432a092cb0721a12df798e44f7cfce0c498147a9b1"); 63e41f4b71Sopenharmony_ci return genRsaKeyPairSpec(nIn, eIn, dIn); 64e41f4b71Sopenharmony_ci } 65e41f4b71Sopenharmony_ci async function rsaUseSpecDecryptOAEPPromise() { 66e41f4b71Sopenharmony_ci let plan = "This is a test"; 67e41f4b71Sopenharmony_ci // Generate the RSA key pair parameter (Rsa2048KeyPairSpec) object. 68e41f4b71Sopenharmony_ci let rsaKeyPairSpec = genRsa2048KeyPairSpec(); 69e41f4b71Sopenharmony_ci // Generate an RSA key pair based on the RSA key pair parameter. 70e41f4b71Sopenharmony_ci let rsaGeneratorSpec = cryptoFramework.createAsyKeyGeneratorBySpec(rsaKeyPairSpec); 71e41f4b71Sopenharmony_ci let cipher = cryptoFramework.createCipher("RSA2048|PKCS1_OAEP|SHA256|MGF1_SHA1"); 72e41f4b71Sopenharmony_ci let decoder = cryptoFramework.createCipher("RSA2048|PKCS1_OAEP|SHA256|MGF1_SHA1"); 73e41f4b71Sopenharmony_ci // Set pSource, which defines the encoding input P filled by OAEP. 74e41f4b71Sopenharmony_ci let pSource = new Uint8Array([1, 2, 3, 4]); 75e41f4b71Sopenharmony_ci let input: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(plan, 'utf-8').buffer) }; 76e41f4b71Sopenharmony_ci // Generate a key pair. 77e41f4b71Sopenharmony_ci let keyPair = await rsaGeneratorSpec.generateKeyPair(); 78e41f4b71Sopenharmony_ci // Initialize the encryption operation. 79e41f4b71Sopenharmony_ci await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, keyPair.pubKey, null); 80e41f4b71Sopenharmony_ci // Set and obtain the Cipher specifications after the initialization. 81e41f4b71Sopenharmony_ci cipher.setCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_PSRC_UINT8ARR, pSource); 82e41f4b71Sopenharmony_ci let retP = cipher.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_PSRC_UINT8ARR); 83e41f4b71Sopenharmony_ci // Check whether the obtained PSource is the same as the PSource set. 84e41f4b71Sopenharmony_ci if (retP.toString() != pSource.toString()) { 85e41f4b71Sopenharmony_ci console.error("error init pSource" + retP); 86e41f4b71Sopenharmony_ci } else { 87e41f4b71Sopenharmony_ci console.info("pSource changed ==" + retP); 88e41f4b71Sopenharmony_ci } 89e41f4b71Sopenharmony_ci // Obtain other OAEP parameters. 90e41f4b71Sopenharmony_ci let md = cipher.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MD_NAME_STR); 91e41f4b71Sopenharmony_ci console.info("md == " + md); 92e41f4b71Sopenharmony_ci let mgf = cipher.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF_NAME_STR); 93e41f4b71Sopenharmony_ci console.info("mgf == " + mgf); 94e41f4b71Sopenharmony_ci let mgf1Md = cipher.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_MD_STR); 95e41f4b71Sopenharmony_ci console.info("mgf1Md == " + mgf1Md); 96e41f4b71Sopenharmony_ci let cipherDataBlob = await cipher.doFinal(input); 97e41f4b71Sopenharmony_ci // The get() and set() operations can be performed before the init() operation of the Cipher object and are equivalent to those after the init() operation. For example, set and get the decoder. 98e41f4b71Sopenharmony_ci decoder.setCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_PSRC_UINT8ARR, pSource); 99e41f4b71Sopenharmony_ci retP = decoder.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_PSRC_UINT8ARR); 100e41f4b71Sopenharmony_ci // Check whether the obtained PSource is the same as the PSource set. 101e41f4b71Sopenharmony_ci if (retP.toString() != pSource.toString()) { 102e41f4b71Sopenharmony_ci console.error("error init pSource" + retP); 103e41f4b71Sopenharmony_ci } else { 104e41f4b71Sopenharmony_ci console.info("pSource changed ==" + retP); 105e41f4b71Sopenharmony_ci } 106e41f4b71Sopenharmony_ci // Obtain other OAEP parameters. 107e41f4b71Sopenharmony_ci md = decoder.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MD_NAME_STR); 108e41f4b71Sopenharmony_ci console.info("md == " + md); 109e41f4b71Sopenharmony_ci mgf = decoder.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF_NAME_STR); 110e41f4b71Sopenharmony_ci console.info("mgf == " + mgf); 111e41f4b71Sopenharmony_ci mgf1Md = decoder.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_MD_STR); 112e41f4b71Sopenharmony_ci console.info("mgf1Md == " + mgf1Md); 113e41f4b71Sopenharmony_ci // Initialize the decryption operation. 114e41f4b71Sopenharmony_ci await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, keyPair.priKey, null); 115e41f4b71Sopenharmony_ci let decodeData = await decoder.doFinal(cipherDataBlob); 116e41f4b71Sopenharmony_ci // The decryption is successful. 117e41f4b71Sopenharmony_ci if (decodeData.data.toString() === input.data.toString()) { 118e41f4b71Sopenharmony_ci console.info("oaep decrypt success"); 119e41f4b71Sopenharmony_ci } else { 120e41f4b71Sopenharmony_ci console.error("oaep decrypt fail"); 121e41f4b71Sopenharmony_ci } 122e41f4b71Sopenharmony_ci } 123e41f4b71Sopenharmony_ci ``` 124e41f4b71Sopenharmony_ci 125e41f4b71Sopenharmony_ci- Example (using synchronous APIs): 126e41f4b71Sopenharmony_ci 127e41f4b71Sopenharmony_ci ```ts 128e41f4b71Sopenharmony_ci import { cryptoFramework } from '@kit.CryptoArchitectureKit'; 129e41f4b71Sopenharmony_ci import { buffer } from '@kit.ArkTS'; 130e41f4b71Sopenharmony_ci // Construct the RSA key pair parameter based on the key pair specifications. 131e41f4b71Sopenharmony_ci function genRsaKeyPairSpec(nIn: bigint, eIn: bigint, dIn: bigint) { 132e41f4b71Sopenharmony_ci let rsaCommSpec: cryptoFramework.RSACommonParamsSpec = { 133e41f4b71Sopenharmony_ci n: nIn, 134e41f4b71Sopenharmony_ci algName: "RSA", 135e41f4b71Sopenharmony_ci specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC 136e41f4b71Sopenharmony_ci }; 137e41f4b71Sopenharmony_ci let rsaKeyPairSpec: cryptoFramework.RSAKeyPairSpec = { 138e41f4b71Sopenharmony_ci params: rsaCommSpec, 139e41f4b71Sopenharmony_ci sk: dIn, 140e41f4b71Sopenharmony_ci pk: eIn, 141e41f4b71Sopenharmony_ci algName: "RSA", 142e41f4b71Sopenharmony_ci specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC 143e41f4b71Sopenharmony_ci }; 144e41f4b71Sopenharmony_ci return rsaKeyPairSpec; 145e41f4b71Sopenharmony_ci } 146e41f4b71Sopenharmony_ci // Generate the RSA2048 key pair parameter. 147e41f4b71Sopenharmony_ci function genRsa2048KeyPairSpec(): cryptoFramework.RSAKeyPairSpec { 148e41f4b71Sopenharmony_ci let nIn = BigInt("0x9260d0750ae117eee55c3f3deaba74917521a262ee76007cdf8a56755ad73a1598a1408410a01434c3f5bc54a88b57fa19fc4328daea0750a4c44e88cff3b2382621b80f670464433e4336e6d003e8cd65bff211da144b88291c2259a00a72b711c116ef7686e8fee34e4d933c868187bdc26f7be071493c86f7a5941c3510806ad67b0f94d88f5cf5c02a092821d8626e8932b65c5bd8c92049c210932b7afa7ac59c0e886ae5c1edb00d8ce2c57633db26bd6639bff73cee82be9275c402b4cf2a4388da8cf8c64eefe1c5a0f5ab8057c39fa5c0589c3e253f0960332300f94bea44877b588e1edbde97cf2360727a09b775262d7ee552b3319b9266f05a25"); 149e41f4b71Sopenharmony_ci let eIn = BigInt("0x010001"); 150e41f4b71Sopenharmony_ci let dIn = BigInt("0x6a7df2ca63ead4dda191d614b6b385e0d9056a3d6d5cfe07db1daabee022db08212d97613d3328e0267c9dd23d787abde2afcb306aeb7dfce69246cc73f5c87fdf06030179a2114b767db1f083ff841c025d7dc00cd82435b9a90f695369e94df23d2ce458bc3b3283ad8bba2b8fa1ba62e2dce9accff3799aae7c840016f3ba8e0048c0b6cc4339af7161003a5beb864a0164b2c1c9237b64bc87556994351b27506c33d4bcdfce0f9c491a7d6b0628c7c852be4f0a9c3132b2ed3a2c8881e9aab07e20e17deb074691be677776a78b5c502e05d9bdde72126b3738695e2dd1a0a98a14247c65d8a7ee79432a092cb0721a12df798e44f7cfce0c498147a9b1"); 151e41f4b71Sopenharmony_ci return genRsaKeyPairSpec(nIn, eIn, dIn); 152e41f4b71Sopenharmony_ci } 153e41f4b71Sopenharmony_ci async function main() { 154e41f4b71Sopenharmony_ci let plan = "This is a test"; 155e41f4b71Sopenharmony_ci // Generate the RSA key pair parameter (Rsa2048KeyPairSpec) object. 156e41f4b71Sopenharmony_ci let rsaKeyPairSpec = genRsa2048KeyPairSpec(); 157e41f4b71Sopenharmony_ci // Generate an RSA key pair based on the RSA key pair parameter. 158e41f4b71Sopenharmony_ci let rsaGeneratorSpec = cryptoFramework.createAsyKeyGeneratorBySpec(rsaKeyPairSpec); 159e41f4b71Sopenharmony_ci let cipher = cryptoFramework.createCipher("RSA2048|PKCS1_OAEP|SHA256|MGF1_SHA1"); 160e41f4b71Sopenharmony_ci let decoder = cryptoFramework.createCipher("RSA2048|PKCS1_OAEP|SHA256|MGF1_SHA1"); 161e41f4b71Sopenharmony_ci // Set pSource, which defines the encoding input P filled by OAEP. 162e41f4b71Sopenharmony_ci let pSource = new Uint8Array([1, 2, 3, 4]); 163e41f4b71Sopenharmony_ci let input: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(plan, 'utf-8').buffer) }; 164e41f4b71Sopenharmony_ci // Generate a key pair. 165e41f4b71Sopenharmony_ci let keyPair = await rsaGeneratorSpec.generateKeyPair(); 166e41f4b71Sopenharmony_ci // Initialize the encryption operation. 167e41f4b71Sopenharmony_ci cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, keyPair.pubKey, null); 168e41f4b71Sopenharmony_ci // Set and obtain the Cipher specifications after the initialization. 169e41f4b71Sopenharmony_ci cipher.setCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_PSRC_UINT8ARR, pSource); 170e41f4b71Sopenharmony_ci let retP = cipher.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_PSRC_UINT8ARR); 171e41f4b71Sopenharmony_ci // Check whether the obtained PSource is the same as the PSource set. 172e41f4b71Sopenharmony_ci if (retP.toString() != pSource.toString()) { 173e41f4b71Sopenharmony_ci console.error("error init pSource" + retP); 174e41f4b71Sopenharmony_ci } else { 175e41f4b71Sopenharmony_ci console.info("pSource changed ==" + retP); 176e41f4b71Sopenharmony_ci } 177e41f4b71Sopenharmony_ci // Obtain other OAEP parameters. 178e41f4b71Sopenharmony_ci let md = cipher.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MD_NAME_STR); 179e41f4b71Sopenharmony_ci console.info("md == " + md); 180e41f4b71Sopenharmony_ci let mgf = cipher.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF_NAME_STR); 181e41f4b71Sopenharmony_ci console.info("mgf == " + mgf); 182e41f4b71Sopenharmony_ci let mgf1Md = cipher.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_MD_STR); 183e41f4b71Sopenharmony_ci console.info("mgf1Md == " + mgf1Md); 184e41f4b71Sopenharmony_ci let cipherDataBlob = cipher.doFinalSync(input); 185e41f4b71Sopenharmony_ci // The get() and set() operations can be performed before the init() operation of the Cipher object and are equivalent to those after the init() operation. For example, set and get the decoder. 186e41f4b71Sopenharmony_ci decoder.setCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_PSRC_UINT8ARR, pSource); 187e41f4b71Sopenharmony_ci retP = decoder.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_PSRC_UINT8ARR); 188e41f4b71Sopenharmony_ci // Check whether the obtained PSource is the same as the PSource set. 189e41f4b71Sopenharmony_ci if (retP.toString() != pSource.toString()) { 190e41f4b71Sopenharmony_ci console.error("error init pSource" + retP); 191e41f4b71Sopenharmony_ci } else { 192e41f4b71Sopenharmony_ci console.info("pSource changed ==" + retP); 193e41f4b71Sopenharmony_ci } 194e41f4b71Sopenharmony_ci // Obtain other OAEP parameters. 195e41f4b71Sopenharmony_ci md = decoder.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MD_NAME_STR); 196e41f4b71Sopenharmony_ci console.info("md == " + md); 197e41f4b71Sopenharmony_ci mgf = decoder.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF_NAME_STR); 198e41f4b71Sopenharmony_ci console.info("mgf == " + mgf); 199e41f4b71Sopenharmony_ci mgf1Md = decoder.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_MD_STR); 200e41f4b71Sopenharmony_ci console.info("mgf1Md == " + mgf1Md); 201e41f4b71Sopenharmony_ci // Initialize the decryption operation. 202e41f4b71Sopenharmony_ci decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, keyPair.priKey, null); 203e41f4b71Sopenharmony_ci let decodeData = decoder.doFinalSync(cipherDataBlob); 204e41f4b71Sopenharmony_ci // The decryption is successful. 205e41f4b71Sopenharmony_ci if (decodeData.data.toString() === input.data.toString()) { 206e41f4b71Sopenharmony_ci console.info("oaep decrypt success"); 207e41f4b71Sopenharmony_ci } else { 208e41f4b71Sopenharmony_ci console.error("oaep decrypt fail"); 209e41f4b71Sopenharmony_ci } 210e41f4b71Sopenharmony_ci } 211e41f4b71Sopenharmony_ci ``` 212