diff --git a/native/expo-modules/aes-crypto/android/src/main/java/app/comm/android/aescrypto/AESCryptoModule.kt b/native/expo-modules/aes-crypto/android/src/main/java/app/comm/android/aescrypto/AESCryptoModule.kt --- a/native/expo-modules/aes-crypto/android/src/main/java/app/comm/android/aescrypto/AESCryptoModule.kt +++ b/native/expo-modules/aes-crypto/android/src/main/java/app/comm/android/aescrypto/AESCryptoModule.kt @@ -24,8 +24,8 @@ Name("AESCrypto") Function("generateKey", this@AESCryptoModule::generateKey) - Function("encrypt", this@AESCryptoModule::encrypt) - Function("decrypt", this@AESCryptoModule::decrypt) + AsyncFunction("encrypt", this@AESCryptoModule::encrypt) + AsyncFunction("decrypt", this@AESCryptoModule::decrypt) } // region Function implementations diff --git a/native/expo-modules/aes-crypto/ios/AESCryptoModule.swift b/native/expo-modules/aes-crypto/ios/AESCryptoModule.swift --- a/native/expo-modules/aes-crypto/ios/AESCryptoModule.swift +++ b/native/expo-modules/aes-crypto/ios/AESCryptoModule.swift @@ -10,8 +10,8 @@ Name("AESCrypto") Function("generateKey", generateKey) - Function("encrypt", encrypt) - Function("decrypt", decrypt) + AsyncFunction("encrypt", encrypt) + AsyncFunction("decrypt", decrypt) } } diff --git a/native/media/encryption-utils.js b/native/media/encryption-utils.js --- a/native/media/encryption-utils.js +++ b/native/media/encryption-utils.js @@ -86,7 +86,7 @@ try { const plaintextData = shouldPad ? pad(data) : data; key = AES.generateKey(); - encryptedData = AES.encrypt(key, plaintextData); + encryptedData = await AES.encrypt(key, plaintextData); } catch (e) { success = false; exceptionMessage = getMessageForException(e); @@ -289,7 +289,7 @@ let plaintextData, decryptedData, isPadded; try { const key = hexToUintArray(encryptionKey); - plaintextData = AES.decrypt(key, data); + plaintextData = await AES.decrypt(key, data); isPadded = plaintextData.byteLength <= PADDING_THRESHOLD; decryptedData = isPadded ? unpad(plaintextData) : plaintextData; } catch (e) { diff --git a/native/utils/aes-crypto-module.js b/native/utils/aes-crypto-module.js --- a/native/utils/aes-crypto-module.js +++ b/native/utils/aes-crypto-module.js @@ -13,12 +13,12 @@ key: Uint8Array, data: Uint8Array, destination: Uint8Array, - ) => void, + ) => Promise, +decrypt: ( key: Uint8Array, data: Uint8Array, destination: Uint8Array, - ) => void, + ) => Promise, } = requireNativeModule('AESCrypto'); export function generateKey(): Uint8Array { @@ -27,15 +27,21 @@ return keyBuffer; } -export function encrypt(key: Uint8Array, data: Uint8Array): Uint8Array { +export async function encrypt( + key: Uint8Array, + data: Uint8Array, +): Promise { const sealedDataBuffer = new Uint8Array(data.length + IV_LENGTH + TAG_LENGTH); - AESCryptoModule.encrypt(key, data, sealedDataBuffer); + await AESCryptoModule.encrypt(key, data, sealedDataBuffer); return sealedDataBuffer; } -export function decrypt(key: Uint8Array, data: Uint8Array): Uint8Array { +export async function decrypt( + key: Uint8Array, + data: Uint8Array, +): Promise { invariant(data.length >= IV_LENGTH + TAG_LENGTH, 'Invalid data length'); const plaintextBuffer = new Uint8Array(data.length - IV_LENGTH - TAG_LENGTH); - AESCryptoModule.decrypt(key, data, plaintextBuffer); + await AESCryptoModule.decrypt(key, data, plaintextBuffer); return plaintextBuffer; }