From f6d677ac0c7b19286e05fa13b11d1f5feef9c5b6 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Wed, 15 May 2024 13:15:09 -0300 Subject: [PATCH] Android dec/enc working --- .../react-native-simple-crypto+0.5.1.patch | 295 ++++++++++-------- 1 file changed, 158 insertions(+), 137 deletions(-) diff --git a/patches/react-native-simple-crypto+0.5.1.patch b/patches/react-native-simple-crypto+0.5.1.patch index 185c31d2e..b2ba9d37e 100644 --- a/patches/react-native-simple-crypto+0.5.1.patch +++ b/patches/react-native-simple-crypto+0.5.1.patch @@ -77,7 +77,8 @@ index 0000000..0d259dd +o/classes diff --git a/node_modules/react-native-simple-crypto/android/build/.transforms/bdbefe898e24b23c7477c1cbc3116307/transformed/classes/classes.dex b/node_modules/react-native-simple-crypto/android/build/.transforms/bdbefe898e24b23c7477c1cbc3116307/transformed/classes/classes.dex new file mode 100644 -index 0000000..e69de29 +index 0000000..b4f833b +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/.transforms/bdbefe898e24b23c7477c1cbc3116307/transformed/classes/classes.dex differ diff --git a/node_modules/react-native-simple-crypto/android/build/.transforms/c2ec0bcb49ee954746918a6a074d37b1/results.bin b/node_modules/react-native-simple-crypto/android/build/.transforms/c2ec0bcb49ee954746918a6a074d37b1/results.bin new file mode 100644 index 0000000..1ed65e0 @@ -161,10 +162,12 @@ index 0000000..9e26dfe \ No newline at end of file diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/compile_library_classes_jar/debug/classes.jar b/node_modules/react-native-simple-crypto/android/build/intermediates/compile_library_classes_jar/debug/classes.jar new file mode 100644 -index 0000000..e69de29 +index 0000000..3a4db3a +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/intermediates/compile_library_classes_jar/debug/classes.jar differ diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/compile_r_class_jar/debug/R.jar b/node_modules/react-native-simple-crypto/android/build/intermediates/compile_r_class_jar/debug/R.jar new file mode 100644 -index 0000000..e69de29 +index 0000000..eed84ea +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/intermediates/compile_r_class_jar/debug/R.jar differ diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/compile_symbol_list/debug/R.txt b/node_modules/react-native-simple-crypto/android/build/intermediates/compile_symbol_list/debug/R.txt new file mode 100644 index 0000000..e7814ce @@ -2060,11 +2063,11 @@ index 0000000..4f2bf34 \ No newline at end of file diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/incremental/packageDebugResources/compile-file-map.properties b/node_modules/react-native-simple-crypto/android/build/intermediates/incremental/packageDebugResources/compile-file-map.properties new file mode 100644 -index 0000000..cf26b01 +index 0000000..b226653 --- /dev/null +++ b/node_modules/react-native-simple-crypto/android/build/intermediates/incremental/packageDebugResources/compile-file-map.properties @@ -0,0 +1 @@ -+#Mon Apr 29 13:55:23 BRT 2024 ++#Tue May 14 17:20:12 BRT 2024 diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/incremental/packageDebugResources/merger.xml b/node_modules/react-native-simple-crypto/android/build/intermediates/incremental/packageDebugResources/merger.xml new file mode 100644 index 0000000..cfa498c @@ -2076,64 +2079,84 @@ index 0000000..cfa498c \ No newline at end of file diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/BuildConfig.class b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/BuildConfig.class new file mode 100644 -index 0000000..e69de29 +index 0000000..99b9873 +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/BuildConfig.class differ diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTAes.class b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTAes.class new file mode 100644 -index 0000000..e69de29 +index 0000000..c3a796f +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTAes.class differ diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTCryptoPackage.class b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTCryptoPackage.class new file mode 100644 -index 0000000..e69de29 +index 0000000..827bef5 +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTCryptoPackage.class differ diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTHmac.class b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTHmac.class new file mode 100644 -index 0000000..e69de29 +index 0000000..4170893 +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTHmac.class differ diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTPbkdf2.class b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTPbkdf2.class new file mode 100644 -index 0000000..e69de29 +index 0000000..b6b34bc +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTPbkdf2.class differ diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$1.class b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$1.class new file mode 100644 -index 0000000..e69de29 +index 0000000..f4c24bb +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$1.class differ diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$2.class b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$2.class new file mode 100644 -index 0000000..e69de29 +index 0000000..909e62d +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$2.class differ diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$3.class b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$3.class new file mode 100644 -index 0000000..e69de29 +index 0000000..a68b8c3 +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$3.class differ diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$4.class b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$4.class new file mode 100644 -index 0000000..e69de29 +index 0000000..352df56 +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$4.class differ diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$5.class b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$5.class new file mode 100644 -index 0000000..e69de29 +index 0000000..26d1768 +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$5.class differ diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$6.class b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$6.class new file mode 100644 -index 0000000..e69de29 +index 0000000..af5af41 +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$6.class differ diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$7.class b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$7.class new file mode 100644 -index 0000000..e69de29 +index 0000000..89e71fb +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$7.class differ diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$8.class b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$8.class new file mode 100644 -index 0000000..e69de29 +index 0000000..8f858b0 +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$8.class differ diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$9.class b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$9.class new file mode 100644 -index 0000000..e69de29 +index 0000000..415b3a0 +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa$9.class differ diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa.class b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa.class new file mode 100644 -index 0000000..e69de29 +index 0000000..2e3003d +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsa.class differ diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsaUtils.class b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsaUtils.class new file mode 100644 -index 0000000..e69de29 +index 0000000..3462666 +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTRsaUtils.class differ diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTSha.class b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTSha.class new file mode 100644 -index 0000000..e69de29 +index 0000000..360ae08 +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RCTSha.class differ diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RSA.class b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RSA.class new file mode 100644 -index 0000000..e69de29 +index 0000000..01f2560 +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RSA.class differ diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RandomBytesModule.class b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RandomBytesModule.class new file mode 100644 -index 0000000..e69de29 +index 0000000..34450ae +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/RandomBytesModule.class differ diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/Util.class b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/Util.class new file mode 100644 -index 0000000..e69de29 +index 0000000..4837fc4 +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/intermediates/javac/debug/classes/com/pedrouid/crypto/Util.class differ diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/local_only_symbol_list/debug/R-def.txt b/node_modules/react-native-simple-crypto/android/build/intermediates/local_only_symbol_list/debug/R-def.txt new file mode 100644 index 0000000..78ac5b8 @@ -2270,7 +2293,8 @@ new file mode 100644 index 0000000..e69de29 diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar b/node_modules/react-native-simple-crypto/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar new file mode 100644 -index 0000000..e69de29 +index 0000000..5429be9 +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar differ diff --git a/node_modules/react-native-simple-crypto/android/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt b/node_modules/react-native-simple-crypto/android/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt new file mode 100644 index 0000000..c4821ef @@ -3690,9 +3714,10 @@ index 0000000..8fc244a + INJECTED from /Users/diegomello/Development/Work/Rocket.Chat.ReactNative/node_modules/react-native-simple-crypto/android/src/main/AndroidManifest.xml diff --git a/node_modules/react-native-simple-crypto/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin b/node_modules/react-native-simple-crypto/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin new file mode 100644 -index 0000000..e69de29 +index 0000000..9aa8252 +Binary files /dev/null and b/node_modules/react-native-simple-crypto/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin differ diff --git a/node_modules/react-native-simple-crypto/android/src/main/java/com/pedrouid/crypto/RCTAes.java b/node_modules/react-native-simple-crypto/android/src/main/java/com/pedrouid/crypto/RCTAes.java -index 2b52abe..f040b43 100644 +index 2b52abe..0ef37a6 100644 --- a/node_modules/react-native-simple-crypto/android/src/main/java/com/pedrouid/crypto/RCTAes.java +++ b/node_modules/react-native-simple-crypto/android/src/main/java/com/pedrouid/crypto/RCTAes.java @@ -1,55 +1,31 @@ @@ -3770,20 +3795,20 @@ index 2b52abe..f040b43 100644 } + @ReactMethod -+ public void encryptFile(String filePath, String keyBase64, String ivBase64, Promise promise) { ++ public void encryptFile(String filePath, String base64UrlKey, String base64Iv, Promise promise) { + try { -+ String result = encryptFile(filePath, keyBase64, ivBase64); -+ promise.resolve(result); ++ String outputFilePath = encryptFile(filePath, base64UrlKey, base64Iv); ++ promise.resolve(outputFilePath); + } catch (Exception e) { + promise.reject("-1", e.getMessage()); + } + } + + @ReactMethod -+ public void decryptFile(String filePath, String pwd, String iv, Promise promise) { ++ public void decryptFile(String filePath, String base64UrlKey, String base64Iv, Promise promise) { + try { -+ String strs = decryptFile(filePath, pwd, iv); -+ promise.resolve(strs); ++ String outputFilePath = decryptFile(filePath, base64UrlKey, base64Iv); ++ promise.resolve(outputFilePath); + } catch (Exception e) { + promise.reject("-1", e.getMessage()); + } @@ -3805,79 +3830,31 @@ index 2b52abe..f040b43 100644 public static String encrypt(String textBase64, String hexKey, String hexIv) throws Exception { if (textBase64 == null || textBase64.length() == 0) { return null; -@@ -119,6 +121,46 @@ public class RCTAes extends ReactContextBaseJavaModule { - return Base64.encodeToString(encrypted, Base64.NO_WRAP); - } - -+ public static String encryptFile(String inputFile, String hexKey, String hexIv) throws Exception { -+ // Decode the key and IV from hexadecimal -+ byte[] key = Hex.decode(hexKey); -+ SecretKey secretKey = new SecretKeySpec(key, KEY_ALGORITHM); -+// IvParameterSpec ivParameterSpec = new IvParameterSpec(Util.hexStringToByteArray(hexIv)); -+ IvParameterSpec ivParameterSpec = generateIV(); -+ -+ // Create a cipher instance for AES in CTR mode -+ Cipher cipher = Cipher.getInstance(FILE_CIPHER_ALGORITHM); -+ cipher.init(Cipher.ENCRYPT_MODE, secretKey, emptyIvSpec); -+ -+ String filePath = inputFile.toString().substring(7); -+ File input = new File(filePath); -+ FileInputStream fis = new FileInputStream(input); -+ -+ // Generate the output file path based on the input file name -+ String outputFile = filePath + ".enc"; -+ FileOutputStream fos = new FileOutputStream(outputFile); -+ -+ try { -+ byte[] buffer = new byte[BUFFER_SIZE]; -+ int numBytesRead; -+ while ((numBytesRead = fis.read(buffer)) != -1) { -+ byte[] output = cipher.update(buffer, 0, numBytesRead); -+ if (output != null) { -+ fos.write(output); -+ } -+ } -+ byte[] finalBytes = cipher.doFinal(); -+ if (finalBytes != null) { -+ fos.write(finalBytes); -+ } -+ } finally { -+ fis.close(); -+ fos.close(); -+ } -+ -+ return outputFile; -+ } -+ - public static String decrypt(String ciphertext, String hexKey, String hexIv) throws Exception { - if(ciphertext == null || ciphertext.length() == 0) { - return null; -@@ -133,4 +175,45 @@ public class RCTAes extends ReactContextBaseJavaModule { +@@ -133,4 +135,51 @@ public class RCTAes extends ReactContextBaseJavaModule { return Base64.encodeToString(decrypted, Base64.NO_WRAP); } -+ public static String decryptFile(String inputFile, String hexKey, String hexIv) throws Exception { -+ // Decode the key and IV from hexadecimal -+// byte[] key = Util.hexStringToByteArray(hexKey); -+ byte[] key = Hex.decode(hexKey); -+ SecretKey secretKey = new SecretKeySpec(key, KEY_ALGORITHM); -+// IvParameterSpec ivParameterSpec = hexIv == null ? new IvParameterSpec(new byte[16]) : new IvParameterSpec(Util.hexStringToByteArray(hexIv)); -+ IvParameterSpec ivParameterSpec = generateIV(); ++ public static String processFile(String inputFile, String base64UrlKey, String base64Iv, String mode, String fileSuffix) throws Exception { + -+ // Initialize the cipher for decryption ++ // Decode the key and IV ++ byte[] key = Base64.decode(base64UrlKey, Base64.URL_SAFE | Base64.NO_WRAP); ++ byte[] iv = Base64.decode(base64Iv, Base64.NO_WRAP); ++ SecretKey secretKey = new SecretKeySpec(key, "AES"); ++ ++ // Initialize the cipher + Cipher cipher = Cipher.getInstance(FILE_CIPHER_ALGORITHM); -+ cipher.init(Cipher.DECRYPT_MODE, secretKey, emptyIvSpec); ++ IvParameterSpec ivParameterSpec = new IvParameterSpec(iv); ++ cipher.init(mode.equals("encrypt") ? Cipher.ENCRYPT_MODE : Cipher.DECRYPT_MODE, secretKey, ivParameterSpec); + -+ String filePath = inputFile; // inputFile.toString().substring(7); -+ File encryptedFile = new File(filePath); -+ FileInputStream fis = new FileInputStream(encryptedFile); -+ -+ // Create output file path by removing ".enc" -+ String outputFile = filePath.replace(".jpg.enc", "-new.jpg"); -+ FileOutputStream fos = new FileOutputStream(outputFile); ++ // Setup file input and output ++ inputFile = Util.normalizeFilePath(inputFile); ++ File inputFileObj = new File(inputFile); ++ FileInputStream fis = new FileInputStream(inputFileObj); ++ String outputFile = Util.addFileScheme(inputFile + fileSuffix); ++ FileOutputStream fos = new FileOutputStream(new File(Util.normalizeFilePath(outputFile))); + + try { -+ byte[] buffer = new byte[BUFFER_SIZE]; ++ byte[] buffer = new byte[4096]; + int numBytesRead; + while ((numBytesRead = fis.read(buffer)) != -1) { + byte[] output = cipher.update(buffer, 0, numBytesRead); @@ -3897,12 +3874,19 @@ index 2b52abe..f040b43 100644 + return outputFile; + } + ++ public static String encryptFile(String inputFile, String base64UrlKey, String base64Iv) throws Exception { ++ return processFile(inputFile, base64UrlKey, base64Iv, "encrypt", ".enc"); ++ } ++ ++ public static String decryptFile(String inputFile, String base64UrlKey, String base64Iv) throws Exception { ++ return processFile(inputFile, base64UrlKey, base64Iv, "decrypt", "-new.jpg"); ++ } } diff --git a/node_modules/react-native-simple-crypto/android/src/main/java/com/pedrouid/crypto/Util.java b/node_modules/react-native-simple-crypto/android/src/main/java/com/pedrouid/crypto/Util.java -index 25179a9..02270b3 100644 +index 25179a9..0ca7b29 100644 --- a/node_modules/react-native-simple-crypto/android/src/main/java/com/pedrouid/crypto/Util.java +++ b/node_modules/react-native-simple-crypto/android/src/main/java/com/pedrouid/crypto/Util.java -@@ -11,4 +11,14 @@ public class Util { +@@ -11,4 +11,22 @@ public class Util { } return new String(hexChars); } @@ -3915,10 +3899,18 @@ index 25179a9..02270b3 100644 + + Character.digit(s.charAt(i+1), 16)); + } + return data; ++ } ++ ++ public static String normalizeFilePath(String filePath) { ++ return filePath.startsWith("file://") ? filePath.substring(7) : filePath; ++ } ++ ++ public static String addFileScheme(String filePath) { ++ return "file://" + filePath; + } } diff --git a/node_modules/react-native-simple-crypto/index.d.ts b/node_modules/react-native-simple-crypto/index.d.ts -index b4fcde6..8b957d7 100644 +index b4fcde6..079c397 100644 --- a/node_modules/react-native-simple-crypto/index.d.ts +++ b/node_modules/react-native-simple-crypto/index.d.ts @@ -18,6 +18,16 @@ declare module "react-native-simple-crypto" { @@ -3927,37 +3919,30 @@ index b4fcde6..8b957d7 100644 ): Promise; + export function encryptFile( + filePath: string, -+ key: ArrayBuffer, -+ iv: ArrayBuffer ++ key: string, ++ iv: string + ): Promise; + export function decryptFile( + filePath: string, -+ key: ArrayBuffer, -+ iv: ArrayBuffer ++ key: string, ++ iv: string + ): Promise; } export namespace SHA { diff --git a/node_modules/react-native-simple-crypto/index.js b/node_modules/react-native-simple-crypto/index.js -index d756fbc..ea2022b 100644 +index d756fbc..6d4ed10 100644 --- a/node_modules/react-native-simple-crypto/index.js +++ b/node_modules/react-native-simple-crypto/index.js -@@ -92,6 +92,19 @@ const AES = { +@@ -92,6 +92,12 @@ const AES = { const keyHex = convertArrayBufferToHex(keyArrayBuffer); const ivHex = convertArrayBufferToHex(ivArrayBuffer); return convertBase64ToArrayBuffer(await NativeModules.Aes.decrypt(cipherTextBase64, keyHex, ivHex)); + }, + encryptFile: async function (filePath, key, iv) { -+ console.log('🚀 ~ filePath:', filePath); -+ // const textBase64 = convertArrayBufferToBase64(filePath); -+ // const keyHex = convertArrayBufferToHex(keyArrayBuffer); -+ // const ivHex = convertArrayBufferToHex(ivArrayBuffer); + return NativeModules.Aes.encryptFile(filePath, key, iv); + }, + decryptFile: async function (filePath, key, iv) { -+ console.log('🚀 ~ filePath:', filePath); -+ // const keyHex = convertArrayBufferToHex(keyArrayBuffer); -+ // const ivHex = convertArrayBufferToHex(ivArrayBuffer); + return NativeModules.Aes.decryptFile(filePath, key, iv); } }; @@ -4048,31 +4033,19 @@ index 72432fe..8a2020b 100644 + @end diff --git a/node_modules/react-native-simple-crypto/ios/RCTCrypto/lib/Aes.m b/node_modules/react-native-simple-crypto/ios/RCTCrypto/lib/Aes.m -index 4ef555a..b7e0bae 100644 +index 4ef555a..a6d848d 100644 --- a/node_modules/react-native-simple-crypto/ios/RCTCrypto/lib/Aes.m +++ b/node_modules/react-native-simple-crypto/ios/RCTCrypto/lib/Aes.m -@@ -45,4 +45,93 @@ +@@ -45,4 +45,85 @@ return [result base64EncodedStringWithOptions:0]; } -++ (NSString *)base64FromBase64URL:(NSString *)base64URL { -+ NSMutableString *base64 = [NSMutableString stringWithString:base64URL]; -+ [base64 replaceOccurrencesOfString:@"-" withString:@"+" options:NSLiteralSearch range:NSMakeRange(0, base64.length)]; -+ [base64 replaceOccurrencesOfString:@"_" withString:@"/" options:NSLiteralSearch range:NSMakeRange(0, base64.length)]; -+ -+ // Pad with '=' to ensure the base64 string length is a multiple of 4 -+ while (base64.length % 4 != 0) { -+ [base64 appendString:@"="]; -+ } -+ return base64; -+} -+ ++ (NSString *)processFile:(NSString *)filePath + outputFile:(NSString *)outputFilePath + operation:(CCOperation)operation + key:(NSString *)keyBase64URL + iv:(NSString *)ivBase64 { -+ NSString *keyBase64 = [self base64FromBase64URL:keyBase64URL]; ++ NSString *keyBase64 = [Shared base64FromBase64URL:keyBase64URL]; + NSData *keyData = [[NSData alloc] initWithBase64EncodedString:keyBase64 options:0]; + NSData *ivData = [[NSData alloc] initWithBase64EncodedString:ivBase64 options:0]; + @@ -4096,12 +4069,10 @@ index 4ef555a..b7e0bae 100644 + size_t bufferSize = 4096; // 4KB buffer size + uint8_t buffer[bufferSize]; + CCCryptorRef cryptor = NULL; -+// CCCryptorStatus status = CCCryptorCreate(operation, kCCAlgorithmAES, kCCModeCTR | kCCOptionECBMode, keyData.bytes, keyData.length, ivData.bytes, &cryptor); + CCCryptorStatus status = CCCryptorCreateWithMode(operation, kCCModeCTR, kCCAlgorithmAES, + ccNoPadding, ivData.bytes, keyData.bytes, + keyData.length, NULL, 0, 0, kCCModeOptionCTR_BE, &cryptor); + -+// status = CCCryptorUpdate(cryptor, cipherData.bytes, cipherData.length, decryptedData.mutableBytes, decryptedData.length, &outLength); + if (status != kCCSuccess) { + NSLog(@"Failed to create cryptor: %d", status); + return nil; @@ -4133,15 +4104,65 @@ index 4ef555a..b7e0bae 100644 + } +} + -+ ++// TODO: remove temp files ++// TODO: does it need to add -new file? What if there's not two extensions (file from web)? ++ (NSString *)encryptFile:(NSString *)filePath key:(NSString *)key iv:(NSString *)iv { -+ NSString *outputFilePath = [filePath stringByAppendingPathExtension:@"enc"]; -+ return [self processFile:filePath outputFile:outputFilePath operation:kCCEncrypt key:key iv:iv]; ++ NSString *normalizedFilePath = [Shared normalizeFilePath:filePath]; ++ NSString *outputFilePath = [normalizedFilePath stringByAppendingPathExtension:@"enc"]; ++ NSString *resultPath = [self processFile:normalizedFilePath outputFile:outputFilePath operation:kCCEncrypt key:key iv:iv]; ++ return [Shared restoreFilePathSchemeIfNeeded:resultPath originalPath:filePath]; +} + ++ (NSString *)decryptFile:(NSString *)filePath key:(NSString *)key iv:(NSString *)iv { -+ NSString *outputFilePath = [[[[filePath stringByDeletingPathExtension] stringByDeletingPathExtension] stringByAppendingString:@"-new"] stringByAppendingPathExtension:@"jpg"]; -+ return [self processFile:filePath outputFile:outputFilePath operation:kCCDecrypt key:key iv:iv]; ++ NSString *normalizedFilePath = [Shared normalizeFilePath:filePath]; ++ // Generates a new output file path by removing the last two path extensions and appending "-new.jpg" ++ NSString *outputFilePath = [[[normalizedFilePath stringByDeletingPathExtension] stringByDeletingPathExtension] stringByAppendingFormat:@"-new.jpg"]; ++ NSString *resultPath = [self processFile:normalizedFilePath outputFile:outputFilePath operation:kCCDecrypt key:key iv:iv]; ++ return [Shared restoreFilePathSchemeIfNeeded:resultPath originalPath:filePath]; ++} ++ + @end +diff --git a/node_modules/react-native-simple-crypto/ios/RCTCrypto/lib/Shared.h b/node_modules/react-native-simple-crypto/ios/RCTCrypto/lib/Shared.h +index f92a1a3..398444b 100644 +--- a/node_modules/react-native-simple-crypto/ios/RCTCrypto/lib/Shared.h ++++ b/node_modules/react-native-simple-crypto/ios/RCTCrypto/lib/Shared.h +@@ -3,4 +3,7 @@ + @interface Shared : NSObject + + (NSString *) toHex: (NSData *)nsdata; + + (NSData *) fromHex: (NSString *)string; +++ (NSString *)base64FromBase64URL:(NSString *)base64URL; +++ (NSString *)normalizeFilePath:(NSString *)filePath; +++ (NSString *)restoreFilePathSchemeIfNeeded:(NSString *)filePath originalPath:(NSString *)originalPath; + @end +diff --git a/node_modules/react-native-simple-crypto/ios/RCTCrypto/lib/Shared.m b/node_modules/react-native-simple-crypto/ios/RCTCrypto/lib/Shared.m +index f3bc712..7c0c36c 100644 +--- a/node_modules/react-native-simple-crypto/ios/RCTCrypto/lib/Shared.m ++++ b/node_modules/react-native-simple-crypto/ios/RCTCrypto/lib/Shared.m +@@ -29,4 +29,27 @@ + return data; + } + +++ (NSString *)base64FromBase64URL:(NSString *)base64URL { ++ NSMutableString *base64 = [NSMutableString stringWithString:base64URL]; ++ [base64 replaceOccurrencesOfString:@"-" withString:@"+" options:NSLiteralSearch range:NSMakeRange(0, base64.length)]; ++ [base64 replaceOccurrencesOfString:@"_" withString:@"/" options:NSLiteralSearch range:NSMakeRange(0, base64.length)]; ++ ++ // Pad with '=' to ensure the base64 string length is a multiple of 4 ++ while (base64.length % 4 != 0) { ++ [base64 appendString:@"="]; ++ } ++ return base64; ++} ++ +++ (NSString *)normalizeFilePath:(NSString *)filePath { ++ return [filePath stringByReplacingOccurrencesOfString:@"file://" withString:@""]; ++} ++ +++ (NSString *)restoreFilePathSchemeIfNeeded:(NSString *)filePath originalPath:(NSString *)originalPath { ++ if ([originalPath hasPrefix:@"file://"]) { ++ return [@"file://" stringByAppendingString:filePath]; ++ } ++ return filePath; +} + @end