react-native-quick-crypto 1.0.0-beta.2 → 1.0.0-beta.21
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 +143 -7
- package/README.md +12 -6
- package/android/CMakeLists.txt +82 -21
- package/android/build.gradle +47 -4
- package/android/src/main/cpp/cpp-adapter.cpp +3 -10
- package/android/src/main/java/com/margelo/nitro/quickcrypto/QuickCryptoPackage.java +13 -10
- 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/HybridCipher.cpp +322 -0
- package/cpp/cipher/HybridCipher.hpp +68 -0
- package/cpp/cipher/HybridCipherFactory.hpp +97 -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 +300 -0
- package/cpp/ed25519/HybridEdKeyPair.hpp +63 -0
- 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 +243 -0
- package/cpp/keys/HybridKeyObjectHandle.hpp +42 -0
- package/cpp/keys/KeyObjectData.cpp +226 -0
- package/cpp/keys/KeyObjectData.hpp +71 -0
- package/cpp/keys/node.h +5 -0
- package/cpp/pbkdf2/HybridPbkdf2.cpp +51 -0
- package/cpp/pbkdf2/HybridPbkdf2.hpp +24 -0
- package/cpp/random/HybridRandom.cpp +32 -18
- package/cpp/random/HybridRandom.hpp +18 -30
- package/cpp/rsa/HybridRsaKeyPair.cpp +154 -0
- package/cpp/rsa/HybridRsaKeyPair.hpp +43 -0
- package/cpp/utils/Macros.hpp +68 -0
- package/cpp/utils/Utils.hpp +53 -1
- 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 +356 -0
- package/deps/fastpbkdf2/fastpbkdf2.h +68 -0
- 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/ec.js +344 -0
- package/lib/commonjs/ec.js.map +1 -0
- package/lib/commonjs/ed.js +185 -0
- package/lib/commonjs/ed.js.map +1 -0
- 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 +152 -32
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/keys/classes.js +250 -0
- package/lib/commonjs/keys/classes.js.map +1 -0
- package/lib/commonjs/keys/generateKeyPair.js +102 -0
- package/lib/commonjs/keys/generateKeyPair.js.map +1 -0
- package/lib/commonjs/keys/index.js +89 -0
- package/lib/commonjs/keys/index.js.map +1 -0
- package/lib/commonjs/keys/signVerify.js +41 -0
- package/lib/commonjs/keys/signVerify.js.map +1 -0
- package/lib/commonjs/keys/utils.js +123 -0
- package/lib/commonjs/keys/utils.js.map +1 -0
- package/lib/commonjs/pbkdf2.js +89 -0
- package/lib/commonjs/pbkdf2.js.map +1 -0
- package/lib/commonjs/random.js +9 -3
- package/lib/commonjs/random.js.map +1 -1
- package/lib/commonjs/rsa.js +129 -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/edKeyPair.nitro.js +6 -0
- package/lib/commonjs/specs/edKeyPair.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/keyObjectHandle.nitro.js +6 -0
- package/lib/commonjs/specs/keyObjectHandle.nitro.js.map +1 -0
- package/lib/commonjs/specs/pbkdf2.nitro.js +6 -0
- package/lib/commonjs/specs/pbkdf2.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/subtle.js +365 -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 +140 -6
- package/lib/commonjs/utils/conversion.js.map +1 -1
- package/lib/commonjs/utils/errors.js +14 -0
- package/lib/commonjs/utils/errors.js.map +1 -0
- package/lib/commonjs/utils/hashnames.js +91 -0
- package/lib/commonjs/utils/hashnames.js.map +1 -0
- package/lib/commonjs/utils/index.js +65 -5
- 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 +52 -0
- package/lib/commonjs/utils/types.js.map +1 -1
- package/lib/commonjs/utils/validation.js +98 -0
- package/lib/commonjs/utils/validation.js.map +1 -0
- 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/ec.js +336 -0
- package/lib/module/ec.js.map +1 -0
- package/lib/module/ed.js +178 -0
- package/lib/module/ed.js.map +1 -0
- 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 +33 -29
- package/lib/module/index.js.map +1 -1
- package/lib/module/keys/classes.js +241 -0
- package/lib/module/keys/classes.js.map +1 -0
- package/lib/module/keys/generateKeyPair.js +96 -0
- package/lib/module/keys/generateKeyPair.js.map +1 -0
- package/lib/module/keys/index.js +32 -0
- package/lib/module/keys/index.js.map +1 -0
- package/lib/module/keys/signVerify.js +41 -0
- package/lib/module/keys/signVerify.js.map +1 -0
- package/lib/module/keys/utils.js +114 -0
- package/lib/module/keys/utils.js.map +1 -0
- package/lib/module/pbkdf2.js +83 -0
- package/lib/module/pbkdf2.js.map +1 -0
- package/lib/module/random.js +7 -1
- package/lib/module/random.js.map +1 -1
- package/lib/module/rsa.js +123 -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/edKeyPair.nitro.js +4 -0
- package/lib/module/specs/edKeyPair.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/keyObjectHandle.nitro.js +4 -0
- package/lib/module/specs/keyObjectHandle.nitro.js.map +1 -0
- package/lib/module/specs/pbkdf2.nitro.js +4 -0
- package/lib/module/specs/pbkdf2.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/subtle.js +360 -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 +120 -8
- package/lib/module/utils/conversion.js.map +1 -1
- package/lib/module/utils/errors.js +10 -0
- package/lib/module/utils/errors.js.map +1 -0
- package/lib/module/utils/hashnames.js +89 -0
- package/lib/module/utils/hashnames.js.map +1 -0
- package/lib/module/utils/index.js +6 -5
- 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 +53 -0
- package/lib/module/utils/types.js.map +1 -1
- package/lib/module/utils/validation.js +87 -0
- package/lib/module/utils/validation.js.map +1 -0
- 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/ec.d.ts +13 -0
- package/lib/typescript/ec.d.ts.map +1 -0
- package/lib/typescript/ed.d.ts +43 -0
- package/lib/typescript/ed.d.ts.map +1 -0
- 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 +110 -9
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/keys/classes.d.ts +79 -0
- package/lib/typescript/keys/classes.d.ts.map +1 -0
- package/lib/typescript/keys/generateKeyPair.d.ts +6 -0
- package/lib/typescript/keys/generateKeyPair.d.ts.map +1 -0
- package/lib/typescript/keys/index.d.ts +7 -0
- package/lib/typescript/keys/index.d.ts.map +1 -0
- package/lib/typescript/keys/signVerify.d.ts +1 -0
- package/lib/typescript/keys/signVerify.d.ts.map +1 -0
- package/lib/typescript/keys/utils.d.ts +34 -0
- package/lib/typescript/keys/utils.d.ts.map +1 -0
- package/lib/typescript/pbkdf2.d.ts +12 -0
- package/lib/typescript/pbkdf2.d.ts.map +1 -0
- package/lib/typescript/random.d.ts +11 -5
- package/lib/typescript/random.d.ts.map +1 -1
- package/lib/typescript/rsa.d.ts +10 -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 +17 -0
- package/lib/typescript/specs/edKeyPair.nitro.d.ts.map +1 -0
- 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 +14 -0
- package/lib/typescript/specs/keyObjectHandle.nitro.d.ts.map +1 -0
- package/lib/typescript/specs/pbkdf2.nitro.d.ts +9 -0
- package/lib/typescript/specs/pbkdf2.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/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 +24 -2
- package/lib/typescript/utils/conversion.d.ts.map +1 -1
- package/lib/typescript/utils/errors.d.ts +7 -0
- package/lib/typescript/utils/errors.d.ts.map +1 -0
- package/lib/typescript/utils/hashnames.d.ts +13 -0
- package/lib/typescript/utils/hashnames.d.ts.map +1 -0
- package/lib/typescript/utils/index.d.ts +6 -5
- 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 +252 -2
- package/lib/typescript/utils/types.d.ts.map +1 -1
- package/lib/typescript/utils/validation.d.ts +13 -0
- package/lib/typescript/utils/validation.d.ts.map +1 -0
- package/nitrogen/generated/.gitattributes +1 -0
- package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +47 -4
- package/nitrogen/generated/android/QuickCrypto+autolinking.gradle +4 -3
- package/nitrogen/generated/android/QuickCryptoOnLoad.cpp +144 -0
- package/nitrogen/generated/android/QuickCryptoOnLoad.hpp +25 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/crypto/QuickCryptoOnLoad.kt +35 -0
- package/nitrogen/generated/ios/QuickCrypto+autolinking.rb +11 -8
- package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.cpp +11 -3
- package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.hpp +5 -3
- package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Umbrella.hpp +16 -7
- package/nitrogen/generated/ios/QuickCryptoAutolinking.mm +135 -0
- package/nitrogen/generated/ios/QuickCryptoAutolinking.swift +12 -0
- package/nitrogen/generated/shared/c++/CFRGKeyPairType.hpp +84 -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 +30 -0
- package/nitrogen/generated/shared/c++/HybridEdKeyPairSpec.hpp +75 -0
- 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 +26 -0
- package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.hpp +92 -0
- package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.cpp +22 -0
- package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.hpp +66 -0
- package/nitrogen/generated/shared/c++/HybridRandomSpec.cpp +2 -3
- package/nitrogen/generated/shared/c++/HybridRandomSpec.hpp +9 -6
- package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.cpp +29 -0
- package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.hpp +77 -0
- package/nitrogen/generated/shared/c++/JWK.hpp +161 -0
- package/nitrogen/generated/shared/c++/JWKkty.hpp +84 -0
- package/nitrogen/generated/shared/c++/JWKuse.hpp +76 -0
- package/nitrogen/generated/shared/c++/KFormatType.hpp +63 -0
- package/nitrogen/generated/shared/c++/KeyDetail.hpp +92 -0
- package/nitrogen/generated/shared/c++/KeyEncoding.hpp +64 -0
- package/nitrogen/generated/shared/c++/KeyObject.hpp +67 -0
- package/nitrogen/generated/shared/c++/KeyType.hpp +63 -0
- package/nitrogen/generated/shared/c++/KeyUsage.hpp +116 -0
- package/nitrogen/generated/shared/c++/NamedCurve.hpp +80 -0
- package/package.json +66 -39
- package/src/blake3.ts +123 -0
- package/src/cipher.ts +335 -0
- package/src/ec.ts +432 -0
- package/src/ed.ts +256 -0
- 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 +32 -29
- package/src/keys/classes.ts +317 -0
- package/src/keys/generateKeyPair.ts +145 -0
- package/src/keys/index.ts +52 -0
- package/src/keys/signVerify.ts +39 -0
- package/src/keys/utils.ts +190 -0
- package/src/pbkdf2.ts +154 -0
- package/src/random.ts +26 -23
- package/src/rsa.ts +176 -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 +43 -0
- package/src/specs/hash.nitro.ts +10 -0
- package/src/specs/hmac.nitro.ts +7 -0
- package/src/specs/keyObjectHandle.nitro.ts +31 -0
- package/src/specs/pbkdf2.nitro.ts +18 -0
- package/src/specs/random.nitro.ts +2 -2
- package/src/specs/rsaKeyPair.nitro.ts +33 -0
- package/src/subtle.ts +614 -0
- package/src/utils/cipher.ts +60 -0
- package/src/utils/conversion.ts +143 -9
- package/src/utils/errors.ts +15 -0
- package/src/utils/hashnames.ts +98 -0
- package/src/utils/index.ts +6 -6
- package/src/utils/noble.ts +85 -0
- package/src/utils/types.ts +423 -3
- package/src/utils/validation.ts +130 -0
- package/ios/QuickCryptoOnLoad.mm +0 -19
- package/lib/module/package.json +0 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#include <openssl/evp.h>
|
|
2
|
+
|
|
3
|
+
#include "HybridPbkdf2Spec.hpp"
|
|
4
|
+
#include "fastpbkdf2.h"
|
|
5
|
+
|
|
6
|
+
namespace margelo::nitro::crypto {
|
|
7
|
+
|
|
8
|
+
using namespace facebook;
|
|
9
|
+
|
|
10
|
+
class HybridPbkdf2 : public HybridPbkdf2Spec {
|
|
11
|
+
public:
|
|
12
|
+
HybridPbkdf2() : HybridObject(TAG) {}
|
|
13
|
+
|
|
14
|
+
public:
|
|
15
|
+
// Methods
|
|
16
|
+
std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> pbkdf2(const std::shared_ptr<ArrayBuffer>& password,
|
|
17
|
+
const std::shared_ptr<ArrayBuffer>& salt, double iterations, double keylen,
|
|
18
|
+
const std::string& digest) override;
|
|
19
|
+
|
|
20
|
+
std::shared_ptr<ArrayBuffer> pbkdf2Sync(const std::shared_ptr<ArrayBuffer>& password, const std::shared_ptr<ArrayBuffer>& salt,
|
|
21
|
+
double iterations, double keylen, const std::string& digest) override;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
} // namespace margelo::nitro::crypto
|
|
@@ -1,34 +1,48 @@
|
|
|
1
|
-
#include "HybridRandom.hpp"
|
|
2
|
-
|
|
3
1
|
#include <openssl/err.h>
|
|
4
2
|
#include <openssl/rand.h>
|
|
5
3
|
|
|
6
|
-
|
|
4
|
+
#include "HybridRandom.hpp"
|
|
5
|
+
#include "Utils.hpp"
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
using namespace margelo::nitro::crypto;
|
|
7
|
+
namespace margelo::nitro::crypto {
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
9
|
+
size_t checkSize(double size) {
|
|
10
|
+
if (!CheckIsUint32(size)) {
|
|
11
|
+
throw std::runtime_error("size must be uint32");
|
|
12
|
+
}
|
|
13
|
+
if (static_cast<uint32_t>(size) > pow(2, 31) - 1) {
|
|
14
|
+
throw std::runtime_error("size must be less than 2^31 - 1");
|
|
15
|
+
}
|
|
16
|
+
return static_cast<size_t>(size);
|
|
17
|
+
}
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
size_t checkOffset(double size, double offset) {
|
|
20
|
+
if (!CheckIsUint32(offset)) {
|
|
21
|
+
throw std::runtime_error("offset must be uint32");
|
|
22
|
+
}
|
|
23
|
+
if (offset > size) {
|
|
24
|
+
throw std::runtime_error("offset must be less than size");
|
|
25
|
+
}
|
|
26
|
+
return static_cast<size_t>(offset);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> HybridRandom::randomFill(const std::shared_ptr<ArrayBuffer>& buffer, double dOffset,
|
|
30
|
+
double dSize) {
|
|
31
|
+
// get owned NativeArrayBuffer before passing to sync function
|
|
32
|
+
auto nativeBuffer = ToNativeArrayBuffer(buffer);
|
|
33
|
+
|
|
34
|
+
return Promise<std::shared_ptr<ArrayBuffer>>::async(
|
|
35
|
+
[this, nativeBuffer, dOffset, dSize]() { return this->randomFillSync(nativeBuffer, dOffset, dSize); });
|
|
21
36
|
};
|
|
22
37
|
|
|
23
38
|
std::shared_ptr<ArrayBuffer> HybridRandom::randomFillSync(const std::shared_ptr<ArrayBuffer>& buffer, double dOffset, double dSize) {
|
|
24
39
|
size_t size = checkSize(dSize);
|
|
25
40
|
size_t offset = checkOffset(dSize, dOffset);
|
|
26
41
|
uint8_t* data = buffer.get()->data();
|
|
27
|
-
|
|
28
42
|
if (RAND_bytes(data + offset, (int)size) != 1) {
|
|
29
|
-
throw std::runtime_error("error calling RAND_bytes" + std::to_string(ERR_get_error()));
|
|
43
|
+
throw std::runtime_error("error calling RAND_bytes: " + std::to_string(ERR_get_error()));
|
|
30
44
|
}
|
|
31
|
-
return
|
|
45
|
+
return buffer;
|
|
32
46
|
};
|
|
33
47
|
|
|
34
|
-
} // namespace margelo::crypto
|
|
48
|
+
} // namespace margelo::nitro::crypto
|
|
@@ -1,44 +1,32 @@
|
|
|
1
|
-
#include <NitroModules/ArrayBuffer.hpp>
|
|
2
1
|
#include <cmath>
|
|
3
2
|
#include <future>
|
|
3
|
+
#include <iostream>
|
|
4
|
+
#include <memory>
|
|
4
5
|
|
|
5
6
|
#include "HybridRandomSpec.hpp"
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
#include "utils/Utils.hpp"
|
|
9
|
-
#else
|
|
10
|
-
#include "Utils.hpp"
|
|
11
|
-
#endif
|
|
8
|
+
namespace margelo::nitro::crypto {
|
|
12
9
|
|
|
13
|
-
namespace
|
|
14
|
-
|
|
15
|
-
using namespace margelo::nitro;
|
|
16
|
-
using namespace margelo::nitro::crypto;
|
|
10
|
+
using namespace facebook;
|
|
17
11
|
|
|
18
12
|
class HybridRandom : public HybridRandomSpec {
|
|
19
|
-
public:
|
|
20
|
-
|
|
13
|
+
public:
|
|
14
|
+
HybridRandom() : HybridObject(TAG) {}
|
|
15
|
+
|
|
16
|
+
public:
|
|
17
|
+
// Methods
|
|
18
|
+
std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> randomFill(const std::shared_ptr<ArrayBuffer>& buffer, double dOffset,
|
|
19
|
+
double dSize) override;
|
|
20
|
+
|
|
21
21
|
std::shared_ptr<ArrayBuffer> randomFillSync(const std::shared_ptr<ArrayBuffer>& buffer, double dOffset, double dSize) override;
|
|
22
22
|
};
|
|
23
23
|
|
|
24
|
-
inline
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if (static_cast<uint32_t>(size) > pow(2, 31) - 1) {
|
|
29
|
-
throw std::runtime_error("size must be less than 2^31 - 1");
|
|
30
|
-
}
|
|
31
|
-
return static_cast<size_t>(size);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
inline size_t checkOffset(double size, double offset) {
|
|
35
|
-
if (!CheckIsUint32(offset)) {
|
|
36
|
-
throw std::runtime_error("offset must be uint32");
|
|
37
|
-
}
|
|
38
|
-
if (offset > size) {
|
|
39
|
-
throw std::runtime_error("offset must be less than size");
|
|
24
|
+
inline void printData(std::string name, uint8_t* data, size_t size) {
|
|
25
|
+
std::cout << "data - " << name << std::endl;
|
|
26
|
+
for (size_t i = 0; i < size; i++) {
|
|
27
|
+
printf("%u ", data[i]);
|
|
40
28
|
}
|
|
41
|
-
|
|
29
|
+
printf("\n");
|
|
42
30
|
}
|
|
43
31
|
|
|
44
|
-
} // namespace margelo::crypto
|
|
32
|
+
} // namespace margelo::nitro::crypto
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
#include <NitroModules/ArrayBuffer.hpp>
|
|
2
|
+
#include <NitroModules/Promise.hpp>
|
|
3
|
+
#include <memory>
|
|
4
|
+
#include <openssl/bio.h>
|
|
5
|
+
#include <openssl/buffer.h>
|
|
6
|
+
#include <openssl/err.h>
|
|
7
|
+
#include <openssl/evp.h>
|
|
8
|
+
#include <openssl/pem.h>
|
|
9
|
+
#include <openssl/rsa.h>
|
|
10
|
+
#include <stdexcept>
|
|
11
|
+
#include <string>
|
|
12
|
+
|
|
13
|
+
#include "HybridRsaKeyPair.hpp"
|
|
14
|
+
#include "Utils.hpp"
|
|
15
|
+
|
|
16
|
+
namespace margelo::nitro::crypto {
|
|
17
|
+
|
|
18
|
+
std::shared_ptr<Promise<void>> HybridRsaKeyPair::generateKeyPair() {
|
|
19
|
+
return Promise<void>::async([this]() { this->generateKeyPairSync(); });
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
void HybridRsaKeyPair::generateKeyPairSync() {
|
|
23
|
+
// Clean up existing key if any
|
|
24
|
+
if (this->pkey != nullptr) {
|
|
25
|
+
EVP_PKEY_free(this->pkey);
|
|
26
|
+
this->pkey = nullptr;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Create key generation context
|
|
30
|
+
std::unique_ptr<EVP_PKEY_CTX, decltype(&EVP_PKEY_CTX_free)> ctx(EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, nullptr), EVP_PKEY_CTX_free);
|
|
31
|
+
|
|
32
|
+
if (!ctx) {
|
|
33
|
+
throw std::runtime_error("Failed to create RSA key generation context");
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (EVP_PKEY_keygen_init(ctx.get()) <= 0) {
|
|
37
|
+
throw std::runtime_error("Failed to initialize RSA key generation");
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Set modulus length
|
|
41
|
+
if (EVP_PKEY_CTX_set_rsa_keygen_bits(ctx.get(), this->modulusLength) <= 0) {
|
|
42
|
+
throw std::runtime_error("Failed to set RSA modulus length");
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Set public exponent
|
|
46
|
+
std::unique_ptr<BIGNUM, decltype(&BN_free)> exponent(BN_new(), BN_free);
|
|
47
|
+
if (!exponent) {
|
|
48
|
+
throw std::runtime_error("Failed to create BIGNUM for public exponent");
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Default to 65537 (0x10001) if no public exponent is set
|
|
52
|
+
if (this->publicExponent.empty()) {
|
|
53
|
+
if (BN_set_word(exponent.get(), RSA_F4) != 1) {
|
|
54
|
+
throw std::runtime_error("Failed to set default public exponent");
|
|
55
|
+
}
|
|
56
|
+
} else {
|
|
57
|
+
if (BN_bin2bn(this->publicExponent.data(), this->publicExponent.size(), exponent.get()) == nullptr) {
|
|
58
|
+
throw std::runtime_error("Failed to convert public exponent to BIGNUM");
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (EVP_PKEY_CTX_set1_rsa_keygen_pubexp(ctx.get(), exponent.get()) <= 0) {
|
|
63
|
+
throw std::runtime_error("Failed to set RSA public exponent");
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Generate the key pair
|
|
67
|
+
EVP_PKEY* raw_pkey = nullptr;
|
|
68
|
+
if (EVP_PKEY_keygen(ctx.get(), &raw_pkey) <= 0) {
|
|
69
|
+
throw std::runtime_error("Failed to generate RSA key pair");
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
this->pkey = raw_pkey;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
void HybridRsaKeyPair::setModulusLength(double modulusLength) {
|
|
76
|
+
this->modulusLength = static_cast<int>(modulusLength);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
void HybridRsaKeyPair::setPublicExponent(const std::shared_ptr<ArrayBuffer>& publicExponent) {
|
|
80
|
+
if (publicExponent && publicExponent->size() > 0) {
|
|
81
|
+
const uint8_t* data = publicExponent->data();
|
|
82
|
+
this->publicExponent.assign(data, data + publicExponent->size());
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
void HybridRsaKeyPair::setHashAlgorithm(const std::string& hashAlgorithm) {
|
|
87
|
+
this->hashAlgorithm = hashAlgorithm;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
std::shared_ptr<ArrayBuffer> HybridRsaKeyPair::getPublicKey() {
|
|
91
|
+
this->checkKeyPair();
|
|
92
|
+
|
|
93
|
+
// Export as DER format using direct OpenSSL calls
|
|
94
|
+
BIO* bio = BIO_new(BIO_s_mem());
|
|
95
|
+
if (!bio) {
|
|
96
|
+
throw std::runtime_error("Failed to create BIO for public key export");
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (i2d_PUBKEY_bio(bio, this->pkey) != 1) {
|
|
100
|
+
BIO_free(bio);
|
|
101
|
+
throw std::runtime_error("Failed to export public key to DER format");
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
BUF_MEM* mem;
|
|
105
|
+
BIO_get_mem_ptr(bio, &mem);
|
|
106
|
+
|
|
107
|
+
// Create a string from the DER data and use ToNativeArrayBuffer utility
|
|
108
|
+
std::string derData(mem->data, mem->length);
|
|
109
|
+
BIO_free(bio);
|
|
110
|
+
|
|
111
|
+
return ToNativeArrayBuffer(derData);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
std::shared_ptr<ArrayBuffer> HybridRsaKeyPair::getPrivateKey() {
|
|
115
|
+
this->checkKeyPair();
|
|
116
|
+
|
|
117
|
+
// Export as DER format in PKCS8 format using direct OpenSSL calls
|
|
118
|
+
BIO* bio = BIO_new(BIO_s_mem());
|
|
119
|
+
if (!bio) {
|
|
120
|
+
throw std::runtime_error("Failed to create BIO for private key export");
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (i2d_PKCS8PrivateKey_bio(bio, this->pkey, nullptr, nullptr, 0, nullptr, nullptr) != 1) {
|
|
124
|
+
BIO_free(bio);
|
|
125
|
+
throw std::runtime_error("Failed to export private key to DER PKCS8 format");
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
BUF_MEM* mem;
|
|
129
|
+
BIO_get_mem_ptr(bio, &mem);
|
|
130
|
+
|
|
131
|
+
// Create a string from the DER data and use ToNativeArrayBuffer utility
|
|
132
|
+
std::string derData(mem->data, mem->length);
|
|
133
|
+
BIO_free(bio);
|
|
134
|
+
|
|
135
|
+
return ToNativeArrayBuffer(derData);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
KeyObject HybridRsaKeyPair::importKey(const std::string& /* format */, const std::shared_ptr<ArrayBuffer>& /* keyData */,
|
|
139
|
+
const std::string& /* algorithm */, bool /* extractable */,
|
|
140
|
+
const std::vector<std::string>& /* keyUsages */) {
|
|
141
|
+
throw std::runtime_error("HybridRsaKeyPair::importKey() is not yet implemented");
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
std::shared_ptr<ArrayBuffer> HybridRsaKeyPair::exportKey(const KeyObject& /* key */, const std::string& /* format */) {
|
|
145
|
+
throw std::runtime_error("HybridRsaKeyPair::exportKey() is not yet implemented");
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
void HybridRsaKeyPair::checkKeyPair() {
|
|
149
|
+
if (this->pkey == nullptr) {
|
|
150
|
+
throw std::runtime_error("RSA KeyPair not initialized");
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
} // namespace margelo::nitro::crypto
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "HybridRsaKeyPairSpec.hpp"
|
|
4
|
+
#include <NitroModules/ArrayBuffer.hpp>
|
|
5
|
+
#include <NitroModules/Promise.hpp>
|
|
6
|
+
#include <memory>
|
|
7
|
+
#include <openssl/evp.h>
|
|
8
|
+
#include <openssl/rsa.h>
|
|
9
|
+
#include <string>
|
|
10
|
+
#include <vector>
|
|
11
|
+
|
|
12
|
+
namespace margelo::nitro::crypto {
|
|
13
|
+
|
|
14
|
+
class HybridRsaKeyPair : public HybridRsaKeyPairSpec {
|
|
15
|
+
public:
|
|
16
|
+
HybridRsaKeyPair() : HybridObject(TAG), pkey(nullptr), modulusLength(2048), hashAlgorithm("SHA-256") {}
|
|
17
|
+
~HybridRsaKeyPair() {
|
|
18
|
+
if (pkey) {
|
|
19
|
+
EVP_PKEY_free(pkey);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
std::shared_ptr<Promise<void>> generateKeyPair() override;
|
|
24
|
+
void generateKeyPairSync() override;
|
|
25
|
+
void setModulusLength(double modulusLength) override;
|
|
26
|
+
void setPublicExponent(const std::shared_ptr<ArrayBuffer>& publicExponent) override;
|
|
27
|
+
void setHashAlgorithm(const std::string& hashAlgorithm) override;
|
|
28
|
+
std::shared_ptr<ArrayBuffer> getPublicKey() override;
|
|
29
|
+
std::shared_ptr<ArrayBuffer> getPrivateKey() override;
|
|
30
|
+
KeyObject importKey(const std::string& format, const std::shared_ptr<ArrayBuffer>& keyData, const std::string& algorithm,
|
|
31
|
+
bool extractable, const std::vector<std::string>& keyUsages) override;
|
|
32
|
+
std::shared_ptr<ArrayBuffer> exportKey(const KeyObject& key, const std::string& format) override;
|
|
33
|
+
|
|
34
|
+
private:
|
|
35
|
+
EVP_PKEY* pkey;
|
|
36
|
+
int modulusLength;
|
|
37
|
+
std::vector<unsigned char> publicExponent;
|
|
38
|
+
std::string hashAlgorithm;
|
|
39
|
+
|
|
40
|
+
void checkKeyPair();
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
} // namespace margelo::nitro::crypto
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#include <utility>
|
|
2
|
+
|
|
3
|
+
// Windows 8+ does not like abort() in Release mode
|
|
4
|
+
#ifdef _WIN32
|
|
5
|
+
#define ABORT_NO_BACKTRACE() _exit(134)
|
|
6
|
+
#else
|
|
7
|
+
#define ABORT_NO_BACKTRACE() abort()
|
|
8
|
+
#endif
|
|
9
|
+
|
|
10
|
+
struct AssertionInfo {
|
|
11
|
+
const char* file_line; // filename:line
|
|
12
|
+
const char* message;
|
|
13
|
+
const char* function;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
inline void Abort() {
|
|
17
|
+
// DumpBacktrace(stderr);
|
|
18
|
+
fflush(stderr);
|
|
19
|
+
ABORT_NO_BACKTRACE();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
inline void Assert(const AssertionInfo& info) {
|
|
23
|
+
// std::string name = GetHumanReadableProcessName();
|
|
24
|
+
|
|
25
|
+
fprintf(stderr, "%s:%s%s Assertion `%s' failed.\n", info.file_line, info.function, *info.function ? ":" : "", info.message);
|
|
26
|
+
fflush(stderr);
|
|
27
|
+
|
|
28
|
+
Abort();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Macros stolen from Node
|
|
32
|
+
#define ERROR_AND_ABORT(expr) \
|
|
33
|
+
do { \
|
|
34
|
+
/* Make sure that this struct does not end up in inline code, but */ \
|
|
35
|
+
/* rather in a read-only data section when modifying this code. */ \
|
|
36
|
+
static const AssertionInfo args = {__FILE__ ":" STRINGIFY(__LINE__), #expr, PRETTY_FUNCTION_NAME}; \
|
|
37
|
+
Assert(args); \
|
|
38
|
+
} while (0)
|
|
39
|
+
|
|
40
|
+
#ifdef __GNUC__
|
|
41
|
+
#define LIKELY(expr) __builtin_expect(!!(expr), 1)
|
|
42
|
+
#define UNLIKELY(expr) __builtin_expect(!!(expr), 0)
|
|
43
|
+
#define PRETTY_FUNCTION_NAME __PRETTY_FUNCTION__
|
|
44
|
+
#else
|
|
45
|
+
#define LIKELY(expr) expr
|
|
46
|
+
#define UNLIKELY(expr) expr
|
|
47
|
+
#define PRETTY_FUNCTION_NAME ""
|
|
48
|
+
#endif
|
|
49
|
+
|
|
50
|
+
#define STRINGIFY_(x) #x
|
|
51
|
+
#define STRINGIFY(x) STRINGIFY_(x)
|
|
52
|
+
|
|
53
|
+
#define CHECK(expr) \
|
|
54
|
+
do { \
|
|
55
|
+
if (UNLIKELY(!(expr))) { \
|
|
56
|
+
ERROR_AND_ABORT(expr); \
|
|
57
|
+
} \
|
|
58
|
+
} while (0)
|
|
59
|
+
|
|
60
|
+
#define CHECK_EQ(a, b) CHECK((a) == (b))
|
|
61
|
+
#define CHECK_GE(a, b) CHECK((a) >= (b))
|
|
62
|
+
#define CHECK_GT(a, b) CHECK((a) > (b))
|
|
63
|
+
#define CHECK_LE(a, b) CHECK((a) <= (b))
|
|
64
|
+
#define CHECK_LT(a, b) CHECK((a) < (b))
|
|
65
|
+
#define CHECK_NE(a, b) CHECK((a) != (b))
|
|
66
|
+
#define CHECK_NULL(val) CHECK((val) == nullptr)
|
|
67
|
+
#define CHECK_NOT_NULL(val) CHECK((val) != nullptr)
|
|
68
|
+
#define CHECK_IMPLIES(a, b) CHECK(!(a) || (b))
|
package/cpp/utils/Utils.hpp
CHANGED
|
@@ -1,4 +1,48 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <algorithm>
|
|
4
|
+
#include <cctype>
|
|
1
5
|
#include <limits>
|
|
6
|
+
#include <openssl/err.h>
|
|
7
|
+
#include <string>
|
|
8
|
+
|
|
9
|
+
#include "Macros.hpp"
|
|
10
|
+
#include <NitroModules/ArrayBuffer.hpp>
|
|
11
|
+
|
|
12
|
+
namespace margelo::nitro::crypto {
|
|
13
|
+
|
|
14
|
+
// Function to get the last OpenSSL error message and clear the error stack
|
|
15
|
+
inline std::string getOpenSSLError() {
|
|
16
|
+
unsigned long errCode = ERR_get_error();
|
|
17
|
+
if (errCode == 0) {
|
|
18
|
+
return "";
|
|
19
|
+
}
|
|
20
|
+
char errStr[256];
|
|
21
|
+
ERR_error_string_n(errCode, errStr, sizeof(errStr));
|
|
22
|
+
// Clear any remaining errors from the error stack to prevent pollution
|
|
23
|
+
ERR_clear_error();
|
|
24
|
+
return std::string(errStr);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Function to clear OpenSSL error stack without getting error message
|
|
28
|
+
inline void clearOpenSSLErrors() {
|
|
29
|
+
ERR_clear_error();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// copy a JSArrayBuffer that we do not own into a NativeArrayBuffer that we do own
|
|
33
|
+
inline std::shared_ptr<margelo::nitro::NativeArrayBuffer> ToNativeArrayBuffer(const std::shared_ptr<margelo::nitro::ArrayBuffer>& buffer) {
|
|
34
|
+
size_t bufferSize = buffer.get()->size();
|
|
35
|
+
uint8_t* data = new uint8_t[bufferSize];
|
|
36
|
+
memcpy(data, buffer.get()->data(), bufferSize);
|
|
37
|
+
return std::make_shared<margelo::nitro::NativeArrayBuffer>(data, bufferSize, [=]() { delete[] data; });
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
inline std::shared_ptr<margelo::nitro::NativeArrayBuffer> ToNativeArrayBuffer(std::string str) {
|
|
41
|
+
size_t size = str.size();
|
|
42
|
+
uint8_t* data = new uint8_t[size];
|
|
43
|
+
memcpy(data, str.data(), size);
|
|
44
|
+
return std::make_shared<margelo::nitro::NativeArrayBuffer>(data, size, [=]() { delete[] data; });
|
|
45
|
+
}
|
|
2
46
|
|
|
3
47
|
inline bool CheckIsUint32(double value) {
|
|
4
48
|
return (value >= std::numeric_limits<uint32_t>::lowest() && value <= std::numeric_limits<uint32_t>::max());
|
|
@@ -6,4 +50,12 @@ inline bool CheckIsUint32(double value) {
|
|
|
6
50
|
|
|
7
51
|
inline bool CheckIsInt32(double value) {
|
|
8
52
|
return (value >= std::numeric_limits<int32_t>::lowest() && value <= std::numeric_limits<int32_t>::max());
|
|
9
|
-
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Function to convert a string to lowercase
|
|
56
|
+
inline std::string toLower(std::string s) {
|
|
57
|
+
std::transform(s.begin(), s.end(), s.begin(), [](unsigned char c) { return static_cast<char>(std::tolower(c)); });
|
|
58
|
+
return s;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
} // namespace margelo::nitro::crypto
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#! /usr/bin/env python3
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
import platform
|
|
5
|
+
import shutil
|
|
6
|
+
import subprocess
|
|
7
|
+
import sys
|
|
8
|
+
|
|
9
|
+
ROOT = Path(__file__).parent.parent.parent
|
|
10
|
+
RUST_TARGET = sys.argv[1]
|
|
11
|
+
|
|
12
|
+
subprocess.run(
|
|
13
|
+
["cargo", "build", "--target", sys.argv[1], "--release"], cwd=ROOT / "b3sum"
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
if platform.system() == "Windows":
|
|
17
|
+
original_exe_name = "b3sum.exe"
|
|
18
|
+
else:
|
|
19
|
+
original_exe_name = "b3sum"
|
|
20
|
+
|
|
21
|
+
if platform.system() == "Windows":
|
|
22
|
+
new_exe_name = "b3sum_windows_x64_bin.exe"
|
|
23
|
+
elif platform.system() == "Darwin":
|
|
24
|
+
new_exe_name = "b3sum_macos_x64_bin"
|
|
25
|
+
elif platform.system() == "Linux":
|
|
26
|
+
new_exe_name = "b3sum_linux_x64_bin"
|
|
27
|
+
else:
|
|
28
|
+
raise RuntimeError("Unexpected platform: " + platform.system())
|
|
29
|
+
|
|
30
|
+
# Copy the built binary so that it has the upload name we want.
|
|
31
|
+
out_dir = ROOT / "b3sum/target" / RUST_TARGET / "release"
|
|
32
|
+
original_exe_path = str(out_dir / original_exe_name)
|
|
33
|
+
new_exe_path = str(out_dir / new_exe_name)
|
|
34
|
+
print("copying", repr(original_exe_path), "to", repr(new_exe_path))
|
|
35
|
+
shutil.copyfile(original_exe_path, new_exe_path)
|
|
36
|
+
|
|
37
|
+
# This lets the subsequent upload step get the filepath.
|
|
38
|
+
print("::set-output name=bin_path::" + new_exe_path)
|