react-native-quick-crypto 1.0.0-beta.8 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/QuickCrypto.podspec +145 -6
- package/README.md +14 -27
- package/android/CMakeLists.txt +62 -7
- package/android/build.gradle +12 -2
- package/android/src/main/java/com/margelo/nitro/quickcrypto/QuickCryptoPackage.java +0 -2
- package/app.plugin.js +3 -0
- package/cpp/blake3/HybridBlake3.cpp +118 -0
- package/cpp/blake3/HybridBlake3.hpp +35 -0
- package/cpp/cipher/CCMCipher.cpp +199 -0
- package/cpp/cipher/CCMCipher.hpp +26 -0
- package/cpp/cipher/ChaCha20Cipher.cpp +97 -0
- package/cpp/cipher/ChaCha20Cipher.hpp +25 -0
- package/cpp/cipher/ChaCha20Poly1305Cipher.cpp +170 -0
- package/cpp/cipher/ChaCha20Poly1305Cipher.hpp +30 -0
- package/cpp/cipher/GCMCipher.cpp +68 -0
- package/cpp/cipher/GCMCipher.hpp +14 -0
- package/cpp/cipher/HybridCipher.cpp +322 -0
- package/cpp/cipher/HybridCipher.hpp +68 -0
- package/cpp/cipher/HybridCipherFactory.hpp +105 -0
- package/cpp/cipher/HybridRsaCipher.cpp +348 -0
- package/cpp/cipher/HybridRsaCipher.hpp +29 -0
- package/cpp/cipher/OCBCipher.cpp +55 -0
- package/cpp/cipher/OCBCipher.hpp +19 -0
- package/cpp/cipher/XSalsa20Cipher.cpp +61 -0
- package/cpp/cipher/XSalsa20Cipher.hpp +33 -0
- package/cpp/ec/HybridEcKeyPair.cpp +428 -0
- package/cpp/ec/HybridEcKeyPair.hpp +48 -0
- package/cpp/ed25519/HybridEdKeyPair.cpp +228 -98
- package/cpp/ed25519/HybridEdKeyPair.hpp +42 -56
- package/cpp/hash/HybridHash.cpp +185 -0
- package/cpp/hash/HybridHash.hpp +43 -0
- package/cpp/hmac/HybridHmac.cpp +95 -0
- package/cpp/hmac/HybridHmac.hpp +31 -0
- package/cpp/keys/HybridKeyObjectHandle.cpp +749 -0
- package/cpp/keys/HybridKeyObjectHandle.hpp +51 -0
- package/cpp/keys/KeyObjectData.cpp +268 -0
- package/cpp/keys/KeyObjectData.hpp +71 -0
- package/cpp/keys/node.h +5 -0
- package/cpp/pbkdf2/HybridPbkdf2.cpp +34 -55
- package/cpp/pbkdf2/HybridPbkdf2.hpp +5 -16
- package/cpp/random/HybridRandom.cpp +6 -17
- package/cpp/random/HybridRandom.hpp +5 -6
- package/cpp/rsa/HybridRsaKeyPair.cpp +154 -0
- package/cpp/rsa/HybridRsaKeyPair.hpp +43 -0
- package/cpp/sign/HybridSignHandle.cpp +191 -0
- package/cpp/sign/HybridSignHandle.hpp +36 -0
- package/cpp/sign/HybridVerifyHandle.cpp +158 -0
- package/cpp/sign/HybridVerifyHandle.hpp +36 -0
- package/cpp/sign/SignUtils.hpp +108 -0
- package/cpp/utils/Macros.hpp +68 -0
- package/cpp/utils/Utils.hpp +43 -2
- package/cpp/utils/base64.h +309 -0
- package/deps/blake3/.cargo/config.toml +2 -0
- package/deps/blake3/.git-blame-ignore-revs +2 -0
- package/deps/blake3/.github/workflows/build_b3sum.py +38 -0
- package/deps/blake3/.github/workflows/ci.yml +491 -0
- package/deps/blake3/.github/workflows/tag.yml +43 -0
- package/deps/blake3/.github/workflows/upload_github_release_asset.py +73 -0
- package/deps/blake3/CONTRIBUTING.md +31 -0
- package/deps/blake3/Cargo.toml +135 -0
- package/deps/blake3/LICENSE_A2 +202 -0
- package/deps/blake3/LICENSE_A2LLVM +219 -0
- package/deps/blake3/LICENSE_CC0 +121 -0
- package/deps/blake3/README.md +229 -0
- package/deps/blake3/b3sum/Cargo.lock +513 -0
- package/deps/blake3/b3sum/Cargo.toml +26 -0
- package/deps/blake3/b3sum/README.md +72 -0
- package/deps/blake3/b3sum/src/main.rs +564 -0
- package/deps/blake3/b3sum/src/unit_tests.rs +235 -0
- package/deps/blake3/b3sum/tests/cli_tests.rs +680 -0
- package/deps/blake3/b3sum/what_does_check_do.md +176 -0
- package/deps/blake3/benches/bench.rs +623 -0
- package/deps/blake3/build.rs +389 -0
- package/deps/blake3/c/CMakeLists.txt +383 -0
- package/deps/blake3/c/CMakePresets.json +73 -0
- package/deps/blake3/c/Makefile.testing +82 -0
- package/deps/blake3/c/README.md +403 -0
- package/deps/blake3/c/blake3-config.cmake.in +14 -0
- package/deps/blake3/c/blake3.c +650 -0
- package/deps/blake3/c/blake3.h +86 -0
- package/deps/blake3/c/blake3_avx2.c +326 -0
- package/deps/blake3/c/blake3_avx2_x86-64_unix.S +1815 -0
- package/deps/blake3/c/blake3_avx2_x86-64_windows_gnu.S +1817 -0
- package/deps/blake3/c/blake3_avx2_x86-64_windows_msvc.asm +1828 -0
- package/deps/blake3/c/blake3_avx512.c +1388 -0
- package/deps/blake3/c/blake3_avx512_x86-64_unix.S +4824 -0
- package/deps/blake3/c/blake3_avx512_x86-64_windows_gnu.S +2615 -0
- package/deps/blake3/c/blake3_avx512_x86-64_windows_msvc.asm +2634 -0
- package/deps/blake3/c/blake3_c_rust_bindings/Cargo.toml +32 -0
- package/deps/blake3/c/blake3_c_rust_bindings/README.md +4 -0
- package/deps/blake3/c/blake3_c_rust_bindings/benches/bench.rs +477 -0
- package/deps/blake3/c/blake3_c_rust_bindings/build.rs +253 -0
- package/deps/blake3/c/blake3_c_rust_bindings/cross_test.sh +31 -0
- package/deps/blake3/c/blake3_c_rust_bindings/src/lib.rs +333 -0
- package/deps/blake3/c/blake3_c_rust_bindings/src/test.rs +696 -0
- package/deps/blake3/c/blake3_dispatch.c +332 -0
- package/deps/blake3/c/blake3_impl.h +333 -0
- package/deps/blake3/c/blake3_neon.c +366 -0
- package/deps/blake3/c/blake3_portable.c +160 -0
- package/deps/blake3/c/blake3_sse2.c +566 -0
- package/deps/blake3/c/blake3_sse2_x86-64_unix.S +2291 -0
- package/deps/blake3/c/blake3_sse2_x86-64_windows_gnu.S +2332 -0
- package/deps/blake3/c/blake3_sse2_x86-64_windows_msvc.asm +2350 -0
- package/deps/blake3/c/blake3_sse41.c +560 -0
- package/deps/blake3/c/blake3_sse41_x86-64_unix.S +2028 -0
- package/deps/blake3/c/blake3_sse41_x86-64_windows_gnu.S +2069 -0
- package/deps/blake3/c/blake3_sse41_x86-64_windows_msvc.asm +2089 -0
- package/deps/blake3/c/blake3_tbb.cpp +37 -0
- package/deps/blake3/c/dependencies/CMakeLists.txt +3 -0
- package/deps/blake3/c/dependencies/tbb/CMakeLists.txt +28 -0
- package/deps/blake3/c/example.c +36 -0
- package/deps/blake3/c/example_tbb.c +57 -0
- package/deps/blake3/c/libblake3.pc.in +12 -0
- package/deps/blake3/c/main.c +166 -0
- package/deps/blake3/c/test.py +97 -0
- package/deps/blake3/media/B3.svg +70 -0
- package/deps/blake3/media/BLAKE3.svg +85 -0
- package/deps/blake3/media/speed.svg +1474 -0
- package/deps/blake3/reference_impl/Cargo.toml +8 -0
- package/deps/blake3/reference_impl/README.md +14 -0
- package/deps/blake3/reference_impl/reference_impl.rs +374 -0
- package/deps/blake3/src/ffi_avx2.rs +65 -0
- package/deps/blake3/src/ffi_avx512.rs +169 -0
- package/deps/blake3/src/ffi_neon.rs +82 -0
- package/deps/blake3/src/ffi_sse2.rs +126 -0
- package/deps/blake3/src/ffi_sse41.rs +126 -0
- package/deps/blake3/src/guts.rs +60 -0
- package/deps/blake3/src/hazmat.rs +704 -0
- package/deps/blake3/src/io.rs +64 -0
- package/deps/blake3/src/join.rs +92 -0
- package/deps/blake3/src/lib.rs +1835 -0
- package/deps/blake3/src/platform.rs +587 -0
- package/deps/blake3/src/portable.rs +198 -0
- package/deps/blake3/src/rust_avx2.rs +474 -0
- package/deps/blake3/src/rust_sse2.rs +775 -0
- package/deps/blake3/src/rust_sse41.rs +766 -0
- package/deps/blake3/src/test.rs +1049 -0
- package/deps/blake3/src/traits.rs +227 -0
- package/deps/blake3/src/wasm32_simd.rs +794 -0
- package/deps/blake3/test_vectors/Cargo.toml +19 -0
- package/deps/blake3/test_vectors/cross_test.sh +25 -0
- package/deps/blake3/test_vectors/src/bin/generate.rs +4 -0
- package/deps/blake3/test_vectors/src/lib.rs +350 -0
- package/deps/blake3/test_vectors/test_vectors.json +217 -0
- package/deps/blake3/tools/compiler_version/Cargo.toml +7 -0
- package/deps/blake3/tools/compiler_version/build.rs +6 -0
- package/deps/blake3/tools/compiler_version/src/main.rs +27 -0
- package/deps/blake3/tools/instruction_set_support/Cargo.toml +6 -0
- package/deps/blake3/tools/instruction_set_support/src/main.rs +10 -0
- package/deps/blake3/tools/release.md +16 -0
- package/deps/fastpbkdf2/fastpbkdf2.c +5 -1
- package/deps/ncrypto/ncrypto.cc +4679 -0
- package/deps/ncrypto/ncrypto.h +1625 -0
- package/lib/commonjs/blake3.js +98 -0
- package/lib/commonjs/blake3.js.map +1 -0
- package/lib/commonjs/cipher.js +180 -0
- package/lib/commonjs/cipher.js.map +1 -0
- package/lib/commonjs/constants.js +32 -0
- package/lib/commonjs/constants.js.map +1 -0
- package/lib/commonjs/ec.js +480 -0
- package/lib/commonjs/ec.js.map +1 -0
- package/lib/commonjs/ed.js +214 -2
- package/lib/commonjs/ed.js.map +1 -1
- package/lib/commonjs/expo-plugin/@types.js +2 -0
- package/lib/commonjs/expo-plugin/@types.js.map +1 -0
- package/lib/commonjs/expo-plugin/withRNQC.js +25 -0
- package/lib/commonjs/expo-plugin/withRNQC.js.map +1 -0
- package/lib/commonjs/expo-plugin/withSodiumAndroid.js +25 -0
- package/lib/commonjs/expo-plugin/withSodiumAndroid.js.map +1 -0
- package/lib/commonjs/expo-plugin/withSodiumIos.js +26 -0
- package/lib/commonjs/expo-plugin/withSodiumIos.js.map +1 -0
- package/lib/commonjs/expo-plugin/withXCode.js +51 -0
- package/lib/commonjs/expo-plugin/withXCode.js.map +1 -0
- package/lib/commonjs/hash.js +215 -0
- package/lib/commonjs/hash.js.map +1 -0
- package/lib/commonjs/hmac.js +109 -0
- package/lib/commonjs/hmac.js.map +1 -0
- package/lib/commonjs/index.js +102 -24
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/keys/classes.js +109 -52
- package/lib/commonjs/keys/classes.js.map +1 -1
- package/lib/commonjs/keys/generateKeyPair.js +141 -144
- package/lib/commonjs/keys/generateKeyPair.js.map +1 -1
- package/lib/commonjs/keys/index.js +229 -0
- package/lib/commonjs/keys/index.js.map +1 -1
- package/lib/commonjs/keys/publicCipher.js +152 -0
- package/lib/commonjs/keys/publicCipher.js.map +1 -0
- package/lib/commonjs/keys/signVerify.js +178 -39
- package/lib/commonjs/keys/signVerify.js.map +1 -1
- package/lib/commonjs/keys/utils.js +18 -13
- package/lib/commonjs/keys/utils.js.map +1 -1
- package/lib/commonjs/pbkdf2.js.map +1 -1
- package/lib/commonjs/random.js +6 -0
- package/lib/commonjs/random.js.map +1 -1
- package/lib/commonjs/rsa.js +202 -0
- package/lib/commonjs/rsa.js.map +1 -0
- package/lib/commonjs/specs/blake3.nitro.js +6 -0
- package/lib/commonjs/specs/blake3.nitro.js.map +1 -0
- package/lib/commonjs/specs/cipher.nitro.js +6 -0
- package/lib/commonjs/specs/cipher.nitro.js.map +1 -0
- package/lib/commonjs/specs/ecKeyPair.nitro.js +6 -0
- package/lib/commonjs/specs/ecKeyPair.nitro.js.map +1 -0
- package/lib/commonjs/specs/hash.nitro.js +6 -0
- package/lib/commonjs/specs/hash.nitro.js.map +1 -0
- package/lib/commonjs/specs/hmac.nitro.js +6 -0
- package/lib/commonjs/specs/hmac.nitro.js.map +1 -0
- package/lib/commonjs/specs/rsaCipher.nitro.js +6 -0
- package/lib/commonjs/specs/rsaCipher.nitro.js.map +1 -0
- package/lib/commonjs/specs/rsaKeyPair.nitro.js +6 -0
- package/lib/commonjs/specs/rsaKeyPair.nitro.js.map +1 -0
- package/lib/commonjs/specs/sign.nitro.js +6 -0
- package/lib/commonjs/specs/sign.nitro.js.map +1 -0
- package/lib/commonjs/subtle.js +987 -0
- package/lib/commonjs/subtle.js.map +1 -0
- package/lib/commonjs/utils/cipher.js +64 -0
- package/lib/commonjs/utils/cipher.js.map +1 -0
- package/lib/commonjs/utils/conversion.js +44 -5
- package/lib/commonjs/utils/conversion.js.map +1 -1
- package/lib/commonjs/utils/hashnames.js +2 -1
- package/lib/commonjs/utils/hashnames.js.map +1 -1
- package/lib/commonjs/utils/index.js +11 -0
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/commonjs/utils/noble.js +82 -0
- package/lib/commonjs/utils/noble.js.map +1 -0
- package/lib/commonjs/utils/types.js +32 -17
- package/lib/commonjs/utils/types.js.map +1 -1
- package/lib/commonjs/utils/validation.js +74 -1
- package/lib/commonjs/utils/validation.js.map +1 -1
- package/lib/module/blake3.js +90 -0
- package/lib/module/blake3.js.map +1 -0
- package/lib/module/cipher.js +173 -0
- package/lib/module/cipher.js.map +1 -0
- package/lib/module/constants.js +28 -0
- package/lib/module/constants.js.map +1 -0
- package/lib/module/ec.js +470 -0
- package/lib/module/ec.js.map +1 -0
- package/lib/module/ed.js +212 -3
- package/lib/module/ed.js.map +1 -1
- package/lib/module/expo-plugin/@types.js +2 -0
- package/lib/module/expo-plugin/@types.js.map +1 -0
- package/lib/module/expo-plugin/withRNQC.js +21 -0
- package/lib/module/expo-plugin/withRNQC.js.map +1 -0
- package/lib/module/expo-plugin/withSodiumAndroid.js +20 -0
- package/lib/module/expo-plugin/withSodiumAndroid.js.map +1 -0
- package/lib/module/expo-plugin/withSodiumIos.js +20 -0
- package/lib/module/expo-plugin/withSodiumIos.js.map +1 -0
- package/lib/module/expo-plugin/withXCode.js +46 -0
- package/lib/module/expo-plugin/withXCode.js.map +1 -0
- package/lib/module/hash.js +207 -0
- package/lib/module/hash.js.map +1 -0
- package/lib/module/hmac.js +104 -0
- package/lib/module/hmac.js.map +1 -0
- package/lib/module/index.js +21 -21
- package/lib/module/index.js.map +1 -1
- package/lib/module/keys/classes.js +106 -49
- package/lib/module/keys/classes.js.map +1 -1
- package/lib/module/keys/generateKeyPair.js +134 -143
- package/lib/module/keys/generateKeyPair.js.map +1 -1
- package/lib/module/keys/index.js +161 -22
- package/lib/module/keys/index.js.map +1 -1
- package/lib/module/keys/publicCipher.js +145 -0
- package/lib/module/keys/publicCipher.js.map +1 -0
- package/lib/module/keys/signVerify.js +170 -39
- package/lib/module/keys/signVerify.js.map +1 -1
- package/lib/module/keys/utils.js +16 -12
- package/lib/module/keys/utils.js.map +1 -1
- package/lib/module/pbkdf2.js.map +1 -1
- package/lib/module/random.js +6 -0
- package/lib/module/random.js.map +1 -1
- package/lib/module/rsa.js +194 -0
- package/lib/module/rsa.js.map +1 -0
- package/lib/module/specs/blake3.nitro.js +4 -0
- package/lib/module/specs/blake3.nitro.js.map +1 -0
- package/lib/module/specs/cipher.nitro.js +4 -0
- package/lib/module/specs/cipher.nitro.js.map +1 -0
- package/lib/module/specs/ecKeyPair.nitro.js +4 -0
- package/lib/module/specs/ecKeyPair.nitro.js.map +1 -0
- package/lib/module/specs/hash.nitro.js +4 -0
- package/lib/module/specs/hash.nitro.js.map +1 -0
- package/lib/module/specs/hmac.nitro.js +4 -0
- package/lib/module/specs/hmac.nitro.js.map +1 -0
- package/lib/module/specs/rsaCipher.nitro.js +4 -0
- package/lib/module/specs/rsaCipher.nitro.js.map +1 -0
- package/lib/module/specs/rsaKeyPair.nitro.js +4 -0
- package/lib/module/specs/rsaKeyPair.nitro.js.map +1 -0
- package/lib/module/specs/sign.nitro.js +4 -0
- package/lib/module/specs/sign.nitro.js.map +1 -0
- package/lib/module/subtle.js +982 -0
- package/lib/module/subtle.js.map +1 -0
- package/lib/module/utils/cipher.js +56 -0
- package/lib/module/utils/cipher.js.map +1 -0
- package/lib/module/utils/conversion.js +26 -5
- package/lib/module/utils/conversion.js.map +1 -1
- package/lib/module/utils/hashnames.js +2 -1
- package/lib/module/utils/hashnames.js.map +1 -1
- package/lib/module/utils/index.js +1 -0
- package/lib/module/utils/index.js.map +1 -1
- package/lib/module/utils/noble.js +76 -0
- package/lib/module/utils/noble.js.map +1 -0
- package/lib/module/utils/types.js +32 -17
- package/lib/module/utils/types.js.map +1 -1
- package/lib/module/utils/validation.js +69 -1
- package/lib/module/utils/validation.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/typescript/blake3.d.ts +33 -0
- package/lib/typescript/blake3.d.ts.map +1 -0
- package/lib/typescript/cipher.d.ts +60 -0
- package/lib/typescript/cipher.d.ts.map +1 -0
- package/lib/typescript/constants.d.ts +21 -0
- package/lib/typescript/constants.d.ts.map +1 -0
- package/lib/typescript/ec.d.ts +22 -0
- package/lib/typescript/ec.d.ts.map +1 -0
- package/lib/typescript/ed.d.ts +28 -1
- package/lib/typescript/ed.d.ts.map +1 -1
- package/lib/typescript/expo-plugin/@types.d.ts +8 -0
- package/lib/typescript/expo-plugin/@types.d.ts.map +1 -0
- package/lib/typescript/expo-plugin/withRNQC.d.ts +4 -0
- package/lib/typescript/expo-plugin/withRNQC.d.ts.map +1 -0
- package/lib/typescript/expo-plugin/withSodiumAndroid.d.ts +4 -0
- package/lib/typescript/expo-plugin/withSodiumAndroid.d.ts.map +1 -0
- package/lib/typescript/expo-plugin/withSodiumIos.d.ts +4 -0
- package/lib/typescript/expo-plugin/withSodiumIos.d.ts.map +1 -0
- package/lib/typescript/expo-plugin/withXCode.d.ts +9 -0
- package/lib/typescript/expo-plugin/withXCode.d.ts.map +1 -0
- package/lib/typescript/hash.d.ts +122 -0
- package/lib/typescript/hash.d.ts.map +1 -0
- package/lib/typescript/hmac.d.ts +66 -0
- package/lib/typescript/hmac.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +102 -10
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/keys/classes.d.ts +50 -8
- package/lib/typescript/keys/classes.d.ts.map +1 -1
- package/lib/typescript/keys/generateKeyPair.d.ts +5 -0
- package/lib/typescript/keys/generateKeyPair.d.ts.map +1 -1
- package/lib/typescript/keys/index.d.ts +22 -2
- package/lib/typescript/keys/index.d.ts.map +1 -1
- package/lib/typescript/keys/publicCipher.d.ts +20 -0
- package/lib/typescript/keys/publicCipher.d.ts.map +1 -0
- package/lib/typescript/keys/signVerify.d.ts +28 -0
- package/lib/typescript/keys/signVerify.d.ts.map +1 -1
- package/lib/typescript/keys/utils.d.ts +3 -1
- package/lib/typescript/keys/utils.d.ts.map +1 -1
- package/lib/typescript/pbkdf2.d.ts +1 -1
- package/lib/typescript/pbkdf2.d.ts.map +1 -1
- package/lib/typescript/random.d.ts +6 -0
- package/lib/typescript/random.d.ts.map +1 -1
- package/lib/typescript/rsa.d.ts +19 -0
- package/lib/typescript/rsa.d.ts.map +1 -0
- package/lib/typescript/specs/blake3.nitro.d.ts +15 -0
- package/lib/typescript/specs/blake3.nitro.d.ts.map +1 -0
- package/lib/typescript/specs/cipher.nitro.d.ts +29 -0
- package/lib/typescript/specs/cipher.nitro.d.ts.map +1 -0
- package/lib/typescript/specs/ecKeyPair.nitro.d.ts +20 -0
- package/lib/typescript/specs/ecKeyPair.nitro.d.ts.map +1 -0
- package/lib/typescript/specs/edKeyPair.nitro.d.ts +1 -0
- package/lib/typescript/specs/edKeyPair.nitro.d.ts.map +1 -1
- package/lib/typescript/specs/hash.nitro.d.ts +13 -0
- package/lib/typescript/specs/hash.nitro.d.ts.map +1 -0
- package/lib/typescript/specs/hmac.nitro.d.ts +10 -0
- package/lib/typescript/specs/hmac.nitro.d.ts.map +1 -0
- package/lib/typescript/specs/keyObjectHandle.nitro.d.ts +1 -1
- package/lib/typescript/specs/keyObjectHandle.nitro.d.ts.map +1 -1
- package/lib/typescript/specs/rsaCipher.nitro.d.ts +44 -0
- package/lib/typescript/specs/rsaCipher.nitro.d.ts.map +1 -0
- package/lib/typescript/specs/rsaKeyPair.nitro.d.ts +20 -0
- package/lib/typescript/specs/rsaKeyPair.nitro.d.ts.map +1 -0
- package/lib/typescript/specs/sign.nitro.d.ts +19 -0
- package/lib/typescript/specs/sign.nitro.d.ts.map +1 -0
- package/lib/typescript/subtle.d.ts +17 -0
- package/lib/typescript/subtle.d.ts.map +1 -0
- package/lib/typescript/utils/cipher.d.ts +7 -0
- package/lib/typescript/utils/cipher.d.ts.map +1 -0
- package/lib/typescript/utils/conversion.d.ts +1 -0
- package/lib/typescript/utils/conversion.d.ts.map +1 -1
- package/lib/typescript/utils/hashnames.d.ts +3 -1
- package/lib/typescript/utils/hashnames.d.ts.map +1 -1
- package/lib/typescript/utils/index.d.ts +1 -0
- package/lib/typescript/utils/index.d.ts.map +1 -1
- package/lib/typescript/utils/noble.d.ts +19 -0
- package/lib/typescript/utils/noble.d.ts.map +1 -0
- package/lib/typescript/utils/types.d.ts +125 -23
- package/lib/typescript/utils/types.d.ts.map +1 -1
- package/lib/typescript/utils/validation.d.ts +5 -0
- package/lib/typescript/utils/validation.d.ts.map +1 -1
- package/nitrogen/generated/.gitattributes +1 -0
- package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +30 -1
- package/nitrogen/generated/android/QuickCrypto+autolinking.gradle +1 -1
- package/nitrogen/generated/android/QuickCryptoOnLoad.cpp +115 -1
- package/nitrogen/generated/android/QuickCryptoOnLoad.hpp +1 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/crypto/QuickCryptoOnLoad.kt +35 -0
- package/nitrogen/generated/ios/QuickCrypto+autolinking.rb +3 -1
- package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.cpp +1 -1
- package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.hpp +1 -1
- package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Umbrella.hpp +3 -3
- package/nitrogen/generated/ios/QuickCryptoAutolinking.mm +111 -1
- package/nitrogen/generated/ios/QuickCryptoAutolinking.swift +1 -1
- package/nitrogen/generated/shared/c++/AsymmetricKeyType.hpp +104 -0
- package/nitrogen/generated/shared/c++/CipherArgs.hpp +86 -0
- package/nitrogen/generated/shared/c++/HybridBlake3Spec.cpp +28 -0
- package/nitrogen/generated/shared/c++/HybridBlake3Spec.hpp +76 -0
- package/nitrogen/generated/shared/c++/HybridCipherFactorySpec.cpp +21 -0
- package/nitrogen/generated/shared/c++/HybridCipherFactorySpec.hpp +67 -0
- package/nitrogen/generated/shared/c++/HybridCipherSpec.cpp +28 -0
- package/nitrogen/generated/shared/c++/HybridCipherSpec.hpp +76 -0
- package/nitrogen/generated/shared/c++/HybridEcKeyPairSpec.cpp +29 -0
- package/nitrogen/generated/shared/c++/HybridEcKeyPairSpec.hpp +77 -0
- package/nitrogen/generated/shared/c++/HybridEdKeyPairSpec.cpp +2 -1
- package/nitrogen/generated/shared/c++/HybridEdKeyPairSpec.hpp +5 -4
- package/nitrogen/generated/shared/c++/HybridHashSpec.cpp +26 -0
- package/nitrogen/generated/shared/c++/HybridHashSpec.hpp +75 -0
- package/nitrogen/generated/shared/c++/HybridHmacSpec.cpp +23 -0
- package/nitrogen/generated/shared/c++/HybridHmacSpec.hpp +66 -0
- package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.hpp +8 -8
- package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.hpp +3 -3
- package/nitrogen/generated/shared/c++/HybridRandomSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridRandomSpec.hpp +3 -3
- package/nitrogen/generated/shared/c++/HybridRsaCipherSpec.cpp +24 -0
- package/nitrogen/generated/shared/c++/HybridRsaCipherSpec.hpp +72 -0
- package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.cpp +29 -0
- package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.hpp +77 -0
- package/nitrogen/generated/shared/c++/HybridSignHandleSpec.cpp +23 -0
- package/nitrogen/generated/shared/c++/HybridSignHandleSpec.hpp +71 -0
- package/nitrogen/generated/shared/c++/HybridVerifyHandleSpec.cpp +23 -0
- package/nitrogen/generated/shared/c++/HybridVerifyHandleSpec.hpp +71 -0
- package/nitrogen/generated/shared/c++/JWK.hpp +17 -18
- package/nitrogen/generated/shared/c++/JWKkty.hpp +12 -14
- package/nitrogen/generated/shared/c++/JWKuse.hpp +8 -10
- package/nitrogen/generated/shared/c++/KFormatType.hpp +14 -16
- package/nitrogen/generated/shared/c++/KeyDetail.hpp +6 -7
- package/nitrogen/generated/shared/c++/KeyEncoding.hpp +15 -17
- package/nitrogen/generated/shared/c++/KeyObject.hpp +67 -0
- package/nitrogen/generated/shared/c++/KeyType.hpp +11 -13
- package/nitrogen/generated/shared/c++/KeyUsage.hpp +38 -24
- package/nitrogen/generated/shared/c++/NamedCurve.hpp +10 -12
- package/package.json +28 -23
- package/src/blake3.ts +123 -0
- package/src/cipher.ts +335 -0
- package/src/constants.ts +32 -0
- package/src/ec.ts +657 -0
- package/src/ed.ts +297 -13
- package/src/expo-plugin/@types.ts +7 -0
- package/src/expo-plugin/withRNQC.ts +23 -0
- package/src/expo-plugin/withSodiumAndroid.ts +24 -0
- package/src/expo-plugin/withSodiumIos.ts +30 -0
- package/src/expo-plugin/withXCode.ts +55 -0
- package/src/hash.ts +274 -0
- package/src/hmac.ts +135 -0
- package/src/index.ts +20 -20
- package/src/keys/classes.ts +148 -55
- package/src/keys/generateKeyPair.ts +177 -134
- package/src/keys/index.ts +226 -14
- package/src/keys/publicCipher.ts +229 -0
- package/src/keys/signVerify.ts +239 -39
- package/src/keys/utils.ts +24 -18
- package/src/pbkdf2.ts +1 -1
- package/src/random.ts +7 -0
- package/src/rsa.ts +310 -0
- package/src/specs/blake3.nitro.ts +12 -0
- package/src/specs/cipher.nitro.ts +25 -0
- package/src/specs/ecKeyPair.nitro.ts +38 -0
- package/src/specs/edKeyPair.nitro.ts +2 -0
- package/src/specs/hash.nitro.ts +10 -0
- package/src/specs/hmac.nitro.ts +7 -0
- package/src/specs/keyObjectHandle.nitro.ts +1 -1
- package/src/specs/rsaCipher.nitro.ts +65 -0
- package/src/specs/rsaKeyPair.nitro.ts +33 -0
- package/src/specs/sign.nitro.ts +31 -0
- package/src/subtle.ts +1436 -0
- package/src/utils/cipher.ts +60 -0
- package/src/utils/conversion.ts +33 -4
- package/src/utils/hashnames.ts +4 -2
- package/src/utils/index.ts +1 -0
- package/src/utils/noble.ts +85 -0
- package/src/utils/types.ts +209 -29
- package/src/utils/validation.ts +96 -1
- package/lib/module/package.json +0 -1
- package/nitrogen/generated/android/QuickCryptoOnLoad.kt +0 -1
- package/nitrogen/generated/shared/c++/CFRGKeyPairType.hpp +0 -86
package/QuickCrypto.podspec
CHANGED
|
@@ -17,9 +17,75 @@ Pod::Spec.new do |s|
|
|
|
17
17
|
s.macos.deployment_target = 10.13
|
|
18
18
|
s.tvos.deployment_target = 13.4
|
|
19
19
|
|
|
20
|
-
s.source
|
|
20
|
+
s.source = { :git => "https://github.com/margelo/react-native-quick-crypto.git", :tag => "#{s.version}" }
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
sodium_enabled = ENV['SODIUM_ENABLED'] == '1'
|
|
23
|
+
Pod::UI.puts("[QuickCrypto] 🧂 has libsodium #{sodium_enabled ? "enabled" : "disabled"}!")
|
|
24
|
+
|
|
25
|
+
if sodium_enabled
|
|
26
|
+
# cocoapod for Sodium has not been updated for a while, so we need to build it ourselves
|
|
27
|
+
# https://github.com/jedisct1/swift-sodium/issues/264#issuecomment-2864963850
|
|
28
|
+
s.prepare_command = <<-CMD
|
|
29
|
+
set -e # Exit on any error
|
|
30
|
+
set -x # Print commands as they execute
|
|
31
|
+
|
|
32
|
+
# Create ios directory if it doesn't exist
|
|
33
|
+
mkdir -p ios
|
|
34
|
+
|
|
35
|
+
# Download libsodium with verbose output
|
|
36
|
+
echo "Downloading libsodium..."
|
|
37
|
+
curl -L -v -o ios/libsodium.tar.gz https://download.libsodium.org/libsodium/releases/libsodium-1.0.20-stable.tar.gz
|
|
38
|
+
|
|
39
|
+
# Verify download
|
|
40
|
+
if [ ! -f ios/libsodium.tar.gz ]; then
|
|
41
|
+
echo "ERROR: Failed to download libsodium.tar.gz"
|
|
42
|
+
exit 1
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
echo "Download size: $(wc -c < ios/libsodium.tar.gz) bytes"
|
|
46
|
+
|
|
47
|
+
# Clean previous extraction
|
|
48
|
+
rm -rf ios/libsodium-stable
|
|
49
|
+
|
|
50
|
+
# Extract the full tarball
|
|
51
|
+
echo "Extracting libsodium..."
|
|
52
|
+
tar -xzf ios/libsodium.tar.gz -C ios
|
|
53
|
+
|
|
54
|
+
# Verify extraction
|
|
55
|
+
if [ ! -d ios/libsodium-stable ]; then
|
|
56
|
+
echo "ERROR: Failed to extract libsodium"
|
|
57
|
+
exit 1
|
|
58
|
+
fi
|
|
59
|
+
|
|
60
|
+
# Run configure and make to generate all headers including private ones
|
|
61
|
+
echo "Configuring libsodium..."
|
|
62
|
+
cd ios/libsodium-stable
|
|
63
|
+
./configure --disable-shared --enable-static
|
|
64
|
+
|
|
65
|
+
echo "Building libsodium..."
|
|
66
|
+
make -j$(sysctl -n hw.ncpu)
|
|
67
|
+
|
|
68
|
+
# Verify build success
|
|
69
|
+
if [ ! -f src/libsodium/.libs/libsodium.a ]; then
|
|
70
|
+
echo "ERROR: libsodium build failed - static library not found"
|
|
71
|
+
exit 1
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
echo "libsodium build completed successfully"
|
|
75
|
+
|
|
76
|
+
# Cleanup
|
|
77
|
+
cd ../../
|
|
78
|
+
rm -f ios/libsodium.tar.gz
|
|
79
|
+
CMD
|
|
80
|
+
else
|
|
81
|
+
s.prepare_command = <<-CMD
|
|
82
|
+
# Clean up libsodium files if they exist
|
|
83
|
+
rm -rf ios/libsodium-stable
|
|
84
|
+
rm -f ios/libsodium.tar.gz
|
|
85
|
+
CMD
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
base_source_files = [
|
|
23
89
|
# implementation (Swift)
|
|
24
90
|
"ios/**/*.{swift}",
|
|
25
91
|
# ios (Objective-C++)
|
|
@@ -27,15 +93,88 @@ Pod::Spec.new do |s|
|
|
|
27
93
|
# implementation (C++)
|
|
28
94
|
"cpp/**/*.{hpp,cpp}",
|
|
29
95
|
# dependencies (C++)
|
|
30
|
-
"deps/**/*.{
|
|
31
|
-
# dependencies (C)
|
|
96
|
+
"deps/**/*.{h,cc}",
|
|
97
|
+
# dependencies (C) - exclude BLAKE3 x86 SIMD files (only use portable + NEON for ARM)
|
|
32
98
|
"deps/**/*.{h,c}",
|
|
33
99
|
]
|
|
34
100
|
|
|
101
|
+
# Exclude BLAKE3 x86-specific SIMD implementations (SSE2, SSE4.1, AVX2, AVX-512)
|
|
102
|
+
# These use Intel intrinsics that don't compile on ARM
|
|
103
|
+
# Also exclude example files, TBB files, test files, and non-C directories
|
|
104
|
+
s.exclude_files = [
|
|
105
|
+
"deps/blake3/c/blake3_sse2.c",
|
|
106
|
+
"deps/blake3/c/blake3_sse41.c",
|
|
107
|
+
"deps/blake3/c/blake3_avx2.c",
|
|
108
|
+
"deps/blake3/c/blake3_avx512.c",
|
|
109
|
+
"deps/blake3/c/blake3_sse2_x86-64_unix.S",
|
|
110
|
+
"deps/blake3/c/blake3_sse41_x86-64_unix.S",
|
|
111
|
+
"deps/blake3/c/blake3_avx2_x86-64_unix.S",
|
|
112
|
+
"deps/blake3/c/blake3_avx512_x86-64_unix.S",
|
|
113
|
+
"deps/blake3/c/blake3_sse2_x86-64_windows_gnu.S",
|
|
114
|
+
"deps/blake3/c/blake3_sse41_x86-64_windows_gnu.S",
|
|
115
|
+
"deps/blake3/c/blake3_avx2_x86-64_windows_gnu.S",
|
|
116
|
+
"deps/blake3/c/blake3_avx512_x86-64_windows_gnu.S",
|
|
117
|
+
"deps/blake3/c/blake3_sse2_x86-64_windows_msvc.asm",
|
|
118
|
+
"deps/blake3/c/blake3_sse41_x86-64_windows_msvc.asm",
|
|
119
|
+
"deps/blake3/c/blake3_avx2_x86-64_windows_msvc.asm",
|
|
120
|
+
"deps/blake3/c/blake3_avx512_x86-64_windows_msvc.asm",
|
|
121
|
+
"deps/blake3/c/main.c",
|
|
122
|
+
"deps/blake3/c/example.c",
|
|
123
|
+
"deps/blake3/c/example_tbb.c",
|
|
124
|
+
"deps/blake3/c/blake3_tbb.cpp",
|
|
125
|
+
# Exclude non-C parts of BLAKE3 repo (Rust, benchmarks, tools, etc.)
|
|
126
|
+
"deps/blake3/src/**/*",
|
|
127
|
+
"deps/blake3/b3sum/**/*",
|
|
128
|
+
"deps/blake3/benches/**/*",
|
|
129
|
+
"deps/blake3/reference_impl/**/*",
|
|
130
|
+
"deps/blake3/tools/**/*",
|
|
131
|
+
"deps/blake3/test_vectors/**/*",
|
|
132
|
+
]
|
|
133
|
+
|
|
134
|
+
if sodium_enabled
|
|
135
|
+
base_source_files += ["ios/libsodium-stable/src/libsodium/**/*.{h,c}"]
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
s.source_files = base_source_files
|
|
139
|
+
|
|
140
|
+
xcconfig = {
|
|
141
|
+
# C++ compiler flags, mainly for folly.
|
|
142
|
+
"GCC_PREPROCESSOR_DEFINITIONS" => "$(inherited) FOLLY_NO_CONFIG FOLLY_CFG_NO_COROUTINES",
|
|
143
|
+
# Set C++ standard to C++20
|
|
144
|
+
"CLANG_CXX_LANGUAGE_STANDARD" => "c++20",
|
|
145
|
+
"CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES" => "YES"
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
# Add cpp subdirectories to header search paths
|
|
149
|
+
cpp_headers = [
|
|
150
|
+
"\"$(PODS_TARGET_SRCROOT)/cpp/utils\"",
|
|
151
|
+
"\"$(PODS_TARGET_SRCROOT)/deps/ncrypto\"",
|
|
152
|
+
"\"$(PODS_TARGET_SRCROOT)/deps/blake3/c\"",
|
|
153
|
+
"\"$(PODS_TARGET_SRCROOT)/deps/fastpbkdf2\""
|
|
154
|
+
]
|
|
155
|
+
|
|
156
|
+
if sodium_enabled
|
|
157
|
+
sodium_headers = [
|
|
158
|
+
"\"$(PODS_TARGET_SRCROOT)/ios/libsodium-stable/src/libsodium/include\"",
|
|
159
|
+
"\"$(PODS_TARGET_SRCROOT)/ios/libsodium-stable/src/libsodium/include/sodium\"",
|
|
160
|
+
"\"$(PODS_TARGET_SRCROOT)/ios/libsodium-stable\"",
|
|
161
|
+
"\"$(PODS_ROOT)/../../packages/react-native-quick-crypto/ios/libsodium-stable/src/libsodium/include\"",
|
|
162
|
+
"\"$(PODS_ROOT)/../../packages/react-native-quick-crypto/ios/libsodium-stable/src/libsodium/include/sodium\""
|
|
163
|
+
]
|
|
164
|
+
xcconfig["HEADER_SEARCH_PATHS"] = (cpp_headers + sodium_headers).join(' ')
|
|
165
|
+
xcconfig["GCC_PREPROCESSOR_DEFINITIONS"] = "$(inherited) BLSALLOC_SODIUM=1"
|
|
166
|
+
else
|
|
167
|
+
xcconfig["HEADER_SEARCH_PATHS"] = cpp_headers.join(' ')
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
s.pod_target_xcconfig = xcconfig
|
|
171
|
+
|
|
35
172
|
# Add all files generated by Nitrogen
|
|
36
|
-
load
|
|
173
|
+
load "nitrogen/generated/ios/QuickCrypto+autolinking.rb"
|
|
37
174
|
add_nitrogen_files(s)
|
|
38
175
|
|
|
39
|
-
s.dependency "
|
|
176
|
+
s.dependency "React-jsi"
|
|
177
|
+
s.dependency "React-callinvoker"
|
|
178
|
+
s.dependency "OpenSSL-Universal", "3.3.3001"
|
|
40
179
|
install_modules_dependencies(s)
|
|
41
180
|
end
|
package/README.md
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
<a href="https://margelo.
|
|
2
|
-
<
|
|
1
|
+
<a href="https://margelo.com">
|
|
2
|
+
<picture>
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset="./docs/img/banner-dark.png" />
|
|
4
|
+
<source media="(prefers-color-scheme: light)" srcset="./docs/img/banner-light.png" />
|
|
5
|
+
<img alt="react-native-quick-crypto" src="./docs/img/banner-light.png" />
|
|
6
|
+
</picture>
|
|
3
7
|
</a>
|
|
4
8
|
|
|
5
9
|
# ⚡️ react-native-quick-crypto
|
|
6
10
|
|
|
7
11
|
A fast implementation of Node's `crypto` module.
|
|
8
12
|
|
|
9
|
-
> Note: This version `1.x`
|
|
13
|
+
> Note: This version `1.x` completed a major refactor, porting to OpenSSL 3.3+, New Architecture, Bridgeless, and [`Nitro Modules`](https://github.com/mrousavy/react-native-nitro). It should be at or above feature-parity compared to the `0.x` version. Status, as always, will be represented in [implementation-coverage.md](../main/docs/implementation-coverage.md).
|
|
10
14
|
|
|
11
15
|
> Note: Minimum supported version of React Native is `0.75`. If you need to use earlier versions, please use `0.x` versions of this library.
|
|
12
16
|
|
|
@@ -26,31 +30,16 @@ QuickCrypto can be used as a drop-in replacement for your Web3/Crypto apps to sp
|
|
|
26
30
|
|
|
27
31
|
| Version | RN Architecture | Modules |
|
|
28
32
|
| ------- | ------ | ------- |
|
|
29
|
-
| `1.x` | new [->](https://github.com/reactwg/react-native-new-architecture/blob/main/docs/enable-apps.md) | Nitro Modules [->](https://github.com/
|
|
30
|
-
| `0.x` | old | Bridge & JSI |
|
|
33
|
+
| `1.x` | new [->](https://github.com/reactwg/react-native-new-architecture/blob/main/docs/enable-apps.md) | Nitro Modules [->](https://github.com/mrousavy/nitro) |
|
|
34
|
+
| `0.x` | old, new 🤞 | Bridge & JSI |
|
|
31
35
|
|
|
32
|
-
##
|
|
33
|
-
|
|
34
|
-
For example, creating a Wallet using ethers.js uses complex algorithms to generate a private-key/mnemonic-phrase pair:
|
|
35
|
-
|
|
36
|
-
```ts
|
|
37
|
-
const start = performance.now();
|
|
38
|
-
const wallet = ethers.Wallet.createRandom();
|
|
39
|
-
const end = performance.now();
|
|
40
|
-
console.log(`Creating a Wallet took ${end - start} ms.`);
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
**Without** react-native-quick-crypto 🐢:
|
|
36
|
+
## Migration
|
|
44
37
|
|
|
45
|
-
|
|
46
|
-
Creating a Wallet took 16862 ms
|
|
47
|
-
```
|
|
38
|
+
Our goal in refactoring to v1.0 was to maintain API compatibility. If you are upgrading to v1.0 from v0.x, and find any discrepancies, please open an issue in this repo.
|
|
48
39
|
|
|
49
|
-
|
|
40
|
+
## Benchmarks
|
|
50
41
|
|
|
51
|
-
|
|
52
|
-
Creating a Wallet took 289 ms
|
|
53
|
-
```
|
|
42
|
+
There is a benchmark suite in the Example app in this repo that has benchmarks of algorithms against their pure JS counterparts. This is not meant to disparage the other libraries. On the contrary, they perform amazingly well when used in a server-side Node environment. This library exists because React Native does not have that environment nor the Node Crypto API implementation at hand. So the benchmark suite is there to show you the speedup vs. the alternative of using a pure JS library on React Native.
|
|
54
43
|
|
|
55
44
|
---
|
|
56
45
|
|
|
@@ -150,8 +139,6 @@ const hashed = QuickCrypto.createHash('sha256')
|
|
|
150
139
|
|
|
151
140
|
## Limitations
|
|
152
141
|
|
|
153
|
-
As the library uses JSI for synchronous native methods access, remote debugging (e.g. with Chrome) is no longer possible. Instead, you should use [Flipper](https://fbflipper.com).
|
|
154
|
-
|
|
155
142
|
Not all cryptographic algorithms are supported yet. See the [implementation coverage](./docs/implementation-coverage.md) document for more details. If you need a specific algorithm, please open a `feature request` issue and we'll see what we can do.
|
|
156
143
|
|
|
157
144
|
## Community Discord
|
|
@@ -160,7 +147,7 @@ Not all cryptographic algorithms are supported yet. See the [implementation cove
|
|
|
160
147
|
|
|
161
148
|
## Adopting at scale
|
|
162
149
|
|
|
163
|
-
react-native-quick-crypto was built at Margelo, an elite app development agency. For enterprise support or other business inquiries, contact us at <a href="mailto:hello@margelo.io?subject=Adopting react-native-quick-crypto at scale">hello@margelo.io</a>!
|
|
150
|
+
`react-native-quick-crypto` was built at Margelo, an elite app development agency. For enterprise support or other business inquiries, contact us at <a href="mailto:hello@margelo.io?subject=Adopting react-native-quick-crypto at scale">hello@margelo.io</a>!
|
|
164
151
|
|
|
165
152
|
## Contributing
|
|
166
153
|
|
package/android/CMakeLists.txt
CHANGED
|
@@ -1,18 +1,53 @@
|
|
|
1
|
+
cmake_minimum_required(VERSION 3.10.0)
|
|
1
2
|
project(QuickCrypto)
|
|
2
|
-
cmake_minimum_required(VERSION 3.9.0)
|
|
3
3
|
|
|
4
4
|
set(PACKAGE_NAME QuickCrypto)
|
|
5
5
|
set(CMAKE_VERBOSE_MAKEFILE ON)
|
|
6
6
|
set(CMAKE_CXX_STANDARD 20)
|
|
7
7
|
|
|
8
|
+
# BLAKE3 sources - architecture-specific SIMD support
|
|
9
|
+
set(BLAKE3_SOURCES
|
|
10
|
+
../deps/blake3/c/blake3.c
|
|
11
|
+
../deps/blake3/c/blake3_dispatch.c
|
|
12
|
+
../deps/blake3/c/blake3_portable.c
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
if(CMAKE_ANDROID_ARCH_ABI STREQUAL "arm64-v8a")
|
|
16
|
+
# ARM64 uses NEON intrinsics (auto-detected via IS_AARCH64 in blake3_impl.h)
|
|
17
|
+
list(APPEND BLAKE3_SOURCES ../deps/blake3/c/blake3_neon.c)
|
|
18
|
+
elseif(CMAKE_ANDROID_ARCH_ABI STREQUAL "x86" OR CMAKE_ANDROID_ARCH_ABI STREQUAL "x86_64")
|
|
19
|
+
# Disable x86 SIMD - would require assembly files we don't compile
|
|
20
|
+
# Falls back to portable C implementation
|
|
21
|
+
add_definitions(-DBLAKE3_NO_SSE2 -DBLAKE3_NO_SSE41 -DBLAKE3_NO_AVX2 -DBLAKE3_NO_AVX512)
|
|
22
|
+
endif()
|
|
23
|
+
|
|
8
24
|
# Define C++ library and add all sources
|
|
9
25
|
add_library(
|
|
10
26
|
${PACKAGE_NAME} SHARED
|
|
11
27
|
src/main/cpp/cpp-adapter.cpp
|
|
28
|
+
../cpp/blake3/HybridBlake3.cpp
|
|
29
|
+
../cpp/cipher/CCMCipher.cpp
|
|
30
|
+
../cpp/cipher/GCMCipher.cpp
|
|
31
|
+
../cpp/cipher/HybridCipher.cpp
|
|
32
|
+
../cpp/cipher/HybridRsaCipher.cpp
|
|
33
|
+
../cpp/cipher/OCBCipher.cpp
|
|
34
|
+
../cpp/cipher/XSalsa20Cipher.cpp
|
|
35
|
+
../cpp/cipher/ChaCha20Cipher.cpp
|
|
36
|
+
../cpp/cipher/ChaCha20Poly1305Cipher.cpp
|
|
37
|
+
../cpp/ec/HybridEcKeyPair.cpp
|
|
12
38
|
../cpp/ed25519/HybridEdKeyPair.cpp
|
|
39
|
+
../cpp/hash/HybridHash.cpp
|
|
40
|
+
../cpp/hmac/HybridHmac.cpp
|
|
41
|
+
../cpp/keys/HybridKeyObjectHandle.cpp
|
|
42
|
+
../cpp/keys/KeyObjectData.cpp
|
|
13
43
|
../cpp/pbkdf2/HybridPbkdf2.cpp
|
|
14
44
|
../cpp/random/HybridRandom.cpp
|
|
45
|
+
../cpp/rsa/HybridRsaKeyPair.cpp
|
|
46
|
+
../cpp/sign/HybridSignHandle.cpp
|
|
47
|
+
../cpp/sign/HybridVerifyHandle.cpp
|
|
48
|
+
${BLAKE3_SOURCES}
|
|
15
49
|
../deps/fastpbkdf2/fastpbkdf2.c
|
|
50
|
+
../deps/ncrypto/ncrypto.cc
|
|
16
51
|
)
|
|
17
52
|
|
|
18
53
|
# add Nitrogen specs
|
|
@@ -21,11 +56,21 @@ include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/QuickCrypto+autolinkin
|
|
|
21
56
|
# local includes
|
|
22
57
|
include_directories(
|
|
23
58
|
"src/main/cpp"
|
|
59
|
+
"../cpp/blake3"
|
|
60
|
+
"../cpp/cipher"
|
|
61
|
+
"../cpp/ec"
|
|
24
62
|
"../cpp/ed25519"
|
|
63
|
+
"../cpp/hash"
|
|
64
|
+
"../cpp/hmac"
|
|
65
|
+
"../cpp/keys"
|
|
25
66
|
"../cpp/pbkdf2"
|
|
26
67
|
"../cpp/random"
|
|
68
|
+
"../cpp/rsa"
|
|
69
|
+
"../cpp/sign"
|
|
27
70
|
"../cpp/utils"
|
|
71
|
+
"../deps/blake3/c"
|
|
28
72
|
"../deps/fastpbkdf2"
|
|
73
|
+
"../deps/ncrypto"
|
|
29
74
|
)
|
|
30
75
|
|
|
31
76
|
# Third party libraries (Prefabs)
|
|
@@ -36,20 +81,30 @@ find_package(openssl REQUIRED CONFIG)
|
|
|
36
81
|
# Link all libraries together
|
|
37
82
|
target_link_libraries(
|
|
38
83
|
${PACKAGE_NAME}
|
|
39
|
-
${LOG_LIB}
|
|
40
|
-
android
|
|
41
|
-
openssl::crypto
|
|
84
|
+
${LOG_LIB} # <-- Logcat logger
|
|
85
|
+
android # <-- Android core
|
|
86
|
+
openssl::crypto # <-- OpenSSL (Crypto)
|
|
87
|
+
openssl::ssl # <-- OpenSSL (SSL)
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
if(SODIUM_ENABLED)
|
|
91
|
+
add_definitions(-DBLSALLOC_SODIUM)
|
|
92
|
+
find_package(sodium REQUIRED CONFIG)
|
|
93
|
+
target_link_libraries(
|
|
94
|
+
${PACKAGE_NAME}
|
|
95
|
+
sodium::sodium
|
|
42
96
|
)
|
|
97
|
+
endif()
|
|
43
98
|
|
|
44
99
|
if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
|
|
45
100
|
target_link_libraries(
|
|
46
101
|
${PACKAGE_NAME}
|
|
47
|
-
ReactAndroid::reactnative
|
|
102
|
+
ReactAndroid::reactnative # <-- RN: Native Modules umbrella prefab
|
|
48
103
|
)
|
|
49
104
|
else()
|
|
50
105
|
target_link_libraries(
|
|
51
106
|
${PACKAGE_NAME}
|
|
52
|
-
ReactAndroid::
|
|
53
|
-
ReactAndroid::
|
|
107
|
+
ReactAndroid::react_nativemodule_core # <-- RN: TurboModules Core
|
|
108
|
+
ReactAndroid::turbomodulejsijni # <-- RN: TurboModules utils (e.g. CallInvokerHolder)
|
|
54
109
|
)
|
|
55
110
|
endif()
|
package/android/build.gradle
CHANGED
|
@@ -37,6 +37,9 @@ def getExtOrIntegerDefault(name) {
|
|
|
37
37
|
return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["QuickCrypto_" + name]).toInteger()
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
+
def sodiumEnabled = hasProperty('sodiumEnabled') ? project.property('sodiumEnabled').toBoolean() : false // Default to false
|
|
41
|
+
logger.warn("[QuickCrypto] Has libsodium ${sodiumEnabled ? "enabled" : "disabled"}!")
|
|
42
|
+
|
|
40
43
|
android {
|
|
41
44
|
namespace "com.margelo.nitro.quickcrypto"
|
|
42
45
|
ndkVersion getExtOrDefault("ndkVersion")
|
|
@@ -50,7 +53,9 @@ android {
|
|
|
50
53
|
externalNativeBuild {
|
|
51
54
|
cmake {
|
|
52
55
|
cppFlags "-frtti -fexceptions -Wall -fstack-protector-all"
|
|
53
|
-
arguments "-DANDROID_STL=c++_shared"
|
|
56
|
+
arguments "-DANDROID_STL=c++_shared",
|
|
57
|
+
"-DSODIUM_ENABLED=${sodiumEnabled}",
|
|
58
|
+
"-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON"
|
|
54
59
|
abiFilters (*reactNativeArchitectures())
|
|
55
60
|
|
|
56
61
|
buildTypes {
|
|
@@ -138,7 +143,12 @@ dependencies {
|
|
|
138
143
|
implementation project(":react-native-nitro-modules")
|
|
139
144
|
|
|
140
145
|
// Add a dependency on OpenSSL
|
|
141
|
-
implementation 'io.github.ronickg:openssl:3.3.2'
|
|
146
|
+
implementation 'io.github.ronickg:openssl:3.3.2-1'
|
|
147
|
+
|
|
148
|
+
if (sodiumEnabled) {
|
|
149
|
+
// Add a dependency on libsodium
|
|
150
|
+
implementation 'io.github.ronickg:sodium:1.0.20-1'
|
|
151
|
+
}
|
|
142
152
|
}
|
|
143
153
|
|
|
144
154
|
if (isNewArchitectureEnabled()) {
|
|
@@ -8,8 +8,6 @@ import com.facebook.react.bridge.NativeModule;
|
|
|
8
8
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
9
9
|
import com.facebook.react.module.model.ReactModuleInfoProvider;
|
|
10
10
|
import com.facebook.react.TurboReactPackage;
|
|
11
|
-
import com.margelo.nitro.core.HybridObject;
|
|
12
|
-
import com.margelo.nitro.core.HybridObjectRegistry;
|
|
13
11
|
|
|
14
12
|
import java.util.HashMap;
|
|
15
13
|
import java.util.function.Supplier;
|
package/app.plugin.js
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
#include "HybridBlake3.hpp"
|
|
2
|
+
|
|
3
|
+
#include <NitroModules/ArrayBuffer.hpp>
|
|
4
|
+
#include <cstring>
|
|
5
|
+
#include <stdexcept>
|
|
6
|
+
|
|
7
|
+
#include "Utils.hpp"
|
|
8
|
+
|
|
9
|
+
namespace margelo::nitro::crypto {
|
|
10
|
+
|
|
11
|
+
void HybridBlake3::initHash() {
|
|
12
|
+
blake3_hasher_init(&hasher);
|
|
13
|
+
mode = Mode::Hash;
|
|
14
|
+
key = std::nullopt;
|
|
15
|
+
context = std::nullopt;
|
|
16
|
+
initialized = true;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
void HybridBlake3::initKeyed(const std::shared_ptr<ArrayBuffer>& keyBuffer) {
|
|
20
|
+
if (!keyBuffer || keyBuffer->size() != BLAKE3_KEY_LEN) {
|
|
21
|
+
throw std::runtime_error("BLAKE3 key must be exactly 32 bytes");
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
std::array<uint8_t, BLAKE3_KEY_LEN> keyArray;
|
|
25
|
+
std::memcpy(keyArray.data(), keyBuffer->data(), BLAKE3_KEY_LEN);
|
|
26
|
+
|
|
27
|
+
blake3_hasher_init_keyed(&hasher, keyArray.data());
|
|
28
|
+
mode = Mode::Keyed;
|
|
29
|
+
key = keyArray;
|
|
30
|
+
context = std::nullopt;
|
|
31
|
+
initialized = true;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
void HybridBlake3::initDeriveKey(const std::string& ctx) {
|
|
35
|
+
if (ctx.empty()) {
|
|
36
|
+
throw std::runtime_error("BLAKE3 context must be a non-empty string");
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
blake3_hasher_init_derive_key(&hasher, ctx.c_str());
|
|
40
|
+
mode = Mode::DeriveKey;
|
|
41
|
+
key = std::nullopt;
|
|
42
|
+
context = ctx;
|
|
43
|
+
initialized = true;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
void HybridBlake3::update(const std::shared_ptr<ArrayBuffer>& data) {
|
|
47
|
+
if (!initialized) {
|
|
48
|
+
throw std::runtime_error("BLAKE3 hasher not initialized");
|
|
49
|
+
}
|
|
50
|
+
if (!data) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
blake3_hasher_update(&hasher, data->data(), data->size());
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
std::shared_ptr<ArrayBuffer> HybridBlake3::digest(std::optional<double> length) {
|
|
57
|
+
if (!initialized) {
|
|
58
|
+
throw std::runtime_error("BLAKE3 hasher not initialized");
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
size_t outLen = BLAKE3_OUT_LEN;
|
|
62
|
+
if (length.has_value()) {
|
|
63
|
+
double len = length.value();
|
|
64
|
+
if (len <= 0 || len > 65535) {
|
|
65
|
+
throw std::runtime_error("BLAKE3 output length must be between 1 and 65535");
|
|
66
|
+
}
|
|
67
|
+
outLen = static_cast<size_t>(len);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
auto output = new uint8_t[outLen];
|
|
71
|
+
blake3_hasher_finalize(&hasher, output, outLen);
|
|
72
|
+
|
|
73
|
+
return std::make_shared<margelo::nitro::NativeArrayBuffer>(output, outLen, [=]() { delete[] output; });
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
void HybridBlake3::reset() {
|
|
77
|
+
if (!initialized) {
|
|
78
|
+
throw std::runtime_error("BLAKE3 hasher not initialized");
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
switch (mode) {
|
|
82
|
+
case Mode::Hash:
|
|
83
|
+
blake3_hasher_init(&hasher);
|
|
84
|
+
break;
|
|
85
|
+
case Mode::Keyed:
|
|
86
|
+
if (key.has_value()) {
|
|
87
|
+
blake3_hasher_init_keyed(&hasher, key->data());
|
|
88
|
+
}
|
|
89
|
+
break;
|
|
90
|
+
case Mode::DeriveKey:
|
|
91
|
+
if (context.has_value()) {
|
|
92
|
+
blake3_hasher_init_derive_key(&hasher, context->c_str());
|
|
93
|
+
}
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
std::shared_ptr<HybridBlake3Spec> HybridBlake3::copy() {
|
|
99
|
+
if (!initialized) {
|
|
100
|
+
throw std::runtime_error("BLAKE3 hasher not initialized");
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
auto copied = std::make_shared<HybridBlake3>();
|
|
104
|
+
|
|
105
|
+
std::memcpy(&copied->hasher, &hasher, sizeof(blake3_hasher));
|
|
106
|
+
copied->initialized = true;
|
|
107
|
+
copied->mode = mode;
|
|
108
|
+
copied->key = key;
|
|
109
|
+
copied->context = context;
|
|
110
|
+
|
|
111
|
+
return copied;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
std::string HybridBlake3::getVersion() {
|
|
115
|
+
return std::string(blake3_version());
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
} // namespace margelo::nitro::crypto
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <memory>
|
|
4
|
+
#include <optional>
|
|
5
|
+
#include <string>
|
|
6
|
+
|
|
7
|
+
#include "HybridBlake3Spec.hpp"
|
|
8
|
+
#include "blake3.h"
|
|
9
|
+
|
|
10
|
+
namespace margelo::nitro::crypto {
|
|
11
|
+
|
|
12
|
+
class HybridBlake3 : public HybridBlake3Spec {
|
|
13
|
+
public:
|
|
14
|
+
HybridBlake3() : HybridObject(TAG) {}
|
|
15
|
+
~HybridBlake3() = default;
|
|
16
|
+
|
|
17
|
+
public:
|
|
18
|
+
void initHash() override;
|
|
19
|
+
void initKeyed(const std::shared_ptr<ArrayBuffer>& key) override;
|
|
20
|
+
void initDeriveKey(const std::string& context) override;
|
|
21
|
+
void update(const std::shared_ptr<ArrayBuffer>& data) override;
|
|
22
|
+
std::shared_ptr<ArrayBuffer> digest(std::optional<double> length) override;
|
|
23
|
+
void reset() override;
|
|
24
|
+
std::shared_ptr<HybridBlake3Spec> copy() override;
|
|
25
|
+
std::string getVersion() override;
|
|
26
|
+
|
|
27
|
+
private:
|
|
28
|
+
blake3_hasher hasher;
|
|
29
|
+
bool initialized = false;
|
|
30
|
+
enum class Mode { Hash, Keyed, DeriveKey } mode = Mode::Hash;
|
|
31
|
+
std::optional<std::array<uint8_t, BLAKE3_KEY_LEN>> key;
|
|
32
|
+
std::optional<std::string> context;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
} // namespace margelo::nitro::crypto
|