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,253 @@
|
|
|
1
|
+
use std::env;
|
|
2
|
+
|
|
3
|
+
fn defined(var: &str) -> bool {
|
|
4
|
+
env::var_os(var).is_some()
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
fn target_components() -> Vec<String> {
|
|
8
|
+
let target = env::var("TARGET").unwrap();
|
|
9
|
+
target.split("-").map(|s| s.to_string()).collect()
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
fn is_x86_64() -> bool {
|
|
13
|
+
target_components()[0] == "x86_64"
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
fn is_windows_target() -> bool {
|
|
17
|
+
env::var("CARGO_CFG_TARGET_OS").unwrap() == "windows"
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
fn use_msvc_asm() -> bool {
|
|
21
|
+
const MSVC_NAMES: &[&str] = &["", "cl", "cl.exe"];
|
|
22
|
+
let target_os = env::var("CARGO_CFG_TARGET_OS").unwrap_or_default();
|
|
23
|
+
let target_env = env::var("CARGO_CFG_TARGET_ENV").unwrap_or_default();
|
|
24
|
+
let target_windows_msvc = target_os == "windows" && target_env == "msvc";
|
|
25
|
+
let host_triple = env::var("HOST").unwrap_or_default();
|
|
26
|
+
let target_triple = env::var("TARGET").unwrap_or_default();
|
|
27
|
+
let cross_compiling = host_triple != target_triple;
|
|
28
|
+
let cc = env::var("CC").unwrap_or_default().to_ascii_lowercase();
|
|
29
|
+
if !target_windows_msvc {
|
|
30
|
+
// We are not building for Windows with the MSVC toolchain.
|
|
31
|
+
false
|
|
32
|
+
} else if !cross_compiling && MSVC_NAMES.contains(&&*cc) {
|
|
33
|
+
// We are building on Windows with the MSVC toolchain (and not cross-compiling for another architecture or target).
|
|
34
|
+
true
|
|
35
|
+
} else {
|
|
36
|
+
// We are cross-compiling to Windows with the MSVC toolchain.
|
|
37
|
+
let target_arch = env::var("CARGO_CFG_TARGET_ARCH").unwrap_or_default();
|
|
38
|
+
let target_vendor = env::var("CARGO_CFG_TARGET_VENDOR").unwrap_or_default();
|
|
39
|
+
let cc = env::var(format!("CC_{target_arch}_{target_vendor}_windows_msvc"))
|
|
40
|
+
.unwrap_or_default()
|
|
41
|
+
.to_ascii_lowercase();
|
|
42
|
+
// Check if we are using the MSVC compiler.
|
|
43
|
+
MSVC_NAMES.contains(&&*cc)
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
fn is_x86_32() -> bool {
|
|
48
|
+
let arch = &target_components()[0];
|
|
49
|
+
arch == "i386" || arch == "i586" || arch == "i686"
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
fn is_armv7() -> bool {
|
|
53
|
+
target_components()[0] == "armv7"
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
fn is_aarch64() -> bool {
|
|
57
|
+
target_components()[0] == "aarch64"
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Windows targets may be using the MSVC toolchain or the GNU toolchain. The
|
|
61
|
+
// right compiler flags to use depend on the toolchain. (And we don't want to
|
|
62
|
+
// use flag_if_supported, because we don't want features to be silently
|
|
63
|
+
// disabled by old compilers.)
|
|
64
|
+
fn is_windows_msvc() -> bool {
|
|
65
|
+
// Some targets are only two components long, so check in steps.
|
|
66
|
+
target_components()[1] == "pc"
|
|
67
|
+
&& target_components()[2] == "windows"
|
|
68
|
+
&& target_components()[3] == "msvc"
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
fn new_build() -> cc::Build {
|
|
72
|
+
let mut build = cc::Build::new();
|
|
73
|
+
if !is_windows_msvc() {
|
|
74
|
+
build.flag("-std=c11");
|
|
75
|
+
}
|
|
76
|
+
build
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
fn new_cpp_build() -> cc::Build {
|
|
80
|
+
let mut build = cc::Build::new();
|
|
81
|
+
build.cpp(true);
|
|
82
|
+
if is_windows_msvc() {
|
|
83
|
+
build.flag("/std:c++20");
|
|
84
|
+
build.flag("/EHs-c-");
|
|
85
|
+
build.flag("/GR-");
|
|
86
|
+
} else {
|
|
87
|
+
build.flag("-std=c++20");
|
|
88
|
+
build.flag("-fno-exceptions");
|
|
89
|
+
build.flag("-fno-rtti");
|
|
90
|
+
}
|
|
91
|
+
build
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
fn c_dir_path(filename: &str) -> String {
|
|
95
|
+
// The `cross` tool doesn't support reading files in parent directories. As a hacky workaround
|
|
96
|
+
// in `cross_test.sh`, we move the c/ directory around and set BLAKE3_C_DIR_OVERRIDE. Regular
|
|
97
|
+
// building and testing doesn't require this.
|
|
98
|
+
if let Ok(c_dir_override) = env::var("BLAKE3_C_DIR_OVERRIDE") {
|
|
99
|
+
c_dir_override + "/" + filename
|
|
100
|
+
} else {
|
|
101
|
+
"../".to_string() + filename
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
106
|
+
let mut base_build = new_build();
|
|
107
|
+
base_build.file(c_dir_path("blake3.c"));
|
|
108
|
+
base_build.file(c_dir_path("blake3_dispatch.c"));
|
|
109
|
+
base_build.file(c_dir_path("blake3_portable.c"));
|
|
110
|
+
if cfg!(feature = "tbb") {
|
|
111
|
+
base_build.define("BLAKE3_USE_TBB", "1");
|
|
112
|
+
}
|
|
113
|
+
base_build.compile("blake3_base");
|
|
114
|
+
|
|
115
|
+
if cfg!(feature = "tbb") {
|
|
116
|
+
let mut tbb_build = new_cpp_build();
|
|
117
|
+
tbb_build.define("BLAKE3_USE_TBB", "1");
|
|
118
|
+
tbb_build.file(c_dir_path("blake3_tbb.cpp"));
|
|
119
|
+
tbb_build.compile("blake3_tbb");
|
|
120
|
+
println!("cargo::rustc-link-lib=tbb");
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if is_x86_64() && !defined("CARGO_FEATURE_PREFER_INTRINSICS") {
|
|
124
|
+
// On 64-bit, use the assembly implementations, unless the
|
|
125
|
+
// "prefer_intrinsics" feature is enabled.
|
|
126
|
+
if is_windows_target() {
|
|
127
|
+
if use_msvc_asm() {
|
|
128
|
+
let mut build = new_build();
|
|
129
|
+
build.file(c_dir_path("blake3_sse2_x86-64_windows_msvc.asm"));
|
|
130
|
+
build.file(c_dir_path("blake3_sse41_x86-64_windows_msvc.asm"));
|
|
131
|
+
build.file(c_dir_path("blake3_avx2_x86-64_windows_msvc.asm"));
|
|
132
|
+
build.file(c_dir_path("blake3_avx512_x86-64_windows_msvc.asm"));
|
|
133
|
+
build.compile("blake3_asm");
|
|
134
|
+
} else {
|
|
135
|
+
let mut build = new_build();
|
|
136
|
+
build.file(c_dir_path("blake3_sse2_x86-64_windows_gnu.S"));
|
|
137
|
+
build.file(c_dir_path("blake3_sse41_x86-64_windows_gnu.S"));
|
|
138
|
+
build.file(c_dir_path("blake3_avx2_x86-64_windows_gnu.S"));
|
|
139
|
+
build.file(c_dir_path("blake3_avx512_x86-64_windows_gnu.S"));
|
|
140
|
+
build.compile("blake3_asm");
|
|
141
|
+
}
|
|
142
|
+
} else {
|
|
143
|
+
// All non-Windows implementations are assumed to support
|
|
144
|
+
// Linux-style assembly. These files do contain a small
|
|
145
|
+
// explicit workaround for macOS also.
|
|
146
|
+
let mut build = new_build();
|
|
147
|
+
build.file(c_dir_path("blake3_sse2_x86-64_unix.S"));
|
|
148
|
+
build.file(c_dir_path("blake3_sse41_x86-64_unix.S"));
|
|
149
|
+
build.file(c_dir_path("blake3_avx2_x86-64_unix.S"));
|
|
150
|
+
build.file(c_dir_path("blake3_avx512_x86-64_unix.S"));
|
|
151
|
+
build.compile("blake3_asm");
|
|
152
|
+
}
|
|
153
|
+
} else if is_x86_64() || is_x86_32() {
|
|
154
|
+
// Assembly implementations are only for 64-bit. On 32-bit, or if
|
|
155
|
+
// the "prefer_intrinsics" feature is enabled, use the
|
|
156
|
+
// intrinsics-based C implementations. These each need to be
|
|
157
|
+
// compiled separately, with the corresponding instruction set
|
|
158
|
+
// extension explicitly enabled in the compiler.
|
|
159
|
+
|
|
160
|
+
let mut sse2_build = new_build();
|
|
161
|
+
sse2_build.file(c_dir_path("blake3_sse2.c"));
|
|
162
|
+
if is_windows_msvc() {
|
|
163
|
+
// /arch:SSE2 is the default on x86 and undefined on x86_64:
|
|
164
|
+
// https://docs.microsoft.com/en-us/cpp/build/reference/arch-x86
|
|
165
|
+
// It also includes SSE4.1 intrinsics:
|
|
166
|
+
// https://stackoverflow.com/a/32183222/823869
|
|
167
|
+
} else {
|
|
168
|
+
sse2_build.flag("-msse2");
|
|
169
|
+
}
|
|
170
|
+
sse2_build.compile("blake3_sse2");
|
|
171
|
+
|
|
172
|
+
let mut sse41_build = new_build();
|
|
173
|
+
sse41_build.file(c_dir_path("blake3_sse41.c"));
|
|
174
|
+
if is_windows_msvc() {
|
|
175
|
+
// /arch:SSE2 is the default on x86 and undefined on x86_64:
|
|
176
|
+
// https://docs.microsoft.com/en-us/cpp/build/reference/arch-x86
|
|
177
|
+
// It also includes SSE4.1 intrinsics:
|
|
178
|
+
// https://stackoverflow.com/a/32183222/823869
|
|
179
|
+
} else {
|
|
180
|
+
sse41_build.flag("-msse4.1");
|
|
181
|
+
}
|
|
182
|
+
sse41_build.compile("blake3_sse41");
|
|
183
|
+
|
|
184
|
+
let mut avx2_build = new_build();
|
|
185
|
+
avx2_build.file(c_dir_path("blake3_avx2.c"));
|
|
186
|
+
if is_windows_msvc() {
|
|
187
|
+
avx2_build.flag("/arch:AVX2");
|
|
188
|
+
} else {
|
|
189
|
+
avx2_build.flag("-mavx2");
|
|
190
|
+
}
|
|
191
|
+
avx2_build.compile("blake3_avx2");
|
|
192
|
+
|
|
193
|
+
let mut avx512_build = new_build();
|
|
194
|
+
avx512_build.file(c_dir_path("blake3_avx512.c"));
|
|
195
|
+
if is_windows_msvc() {
|
|
196
|
+
// Note that a lot of versions of MSVC don't support /arch:AVX512,
|
|
197
|
+
// and they'll discard it with a warning, hopefully leading to a
|
|
198
|
+
// build error.
|
|
199
|
+
avx512_build.flag("/arch:AVX512");
|
|
200
|
+
} else {
|
|
201
|
+
avx512_build.flag("-mavx512f");
|
|
202
|
+
avx512_build.flag("-mavx512vl");
|
|
203
|
+
}
|
|
204
|
+
avx512_build.compile("blake3_avx512");
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// We only build NEON code here if
|
|
208
|
+
// 1) it's requested
|
|
209
|
+
// and 2) the root crate is not already building it.
|
|
210
|
+
// The only time this will really happen is if you build this
|
|
211
|
+
// crate by hand with the "neon" feature for some reason.
|
|
212
|
+
//
|
|
213
|
+
// In addition, 3) if the target is aarch64, NEON is on by default.
|
|
214
|
+
if defined("CARGO_FEATURE_NEON") || is_aarch64() {
|
|
215
|
+
let mut neon_build = new_build();
|
|
216
|
+
neon_build.file(c_dir_path("blake3_neon.c"));
|
|
217
|
+
// ARMv7 platforms that support NEON generally need the following
|
|
218
|
+
// flags. AArch64 supports NEON by default and does not support -mpfu.
|
|
219
|
+
if is_armv7() {
|
|
220
|
+
neon_build.flag("-mfpu=neon-vfpv4");
|
|
221
|
+
neon_build.flag("-mfloat-abi=hard");
|
|
222
|
+
}
|
|
223
|
+
neon_build.compile("blake3_neon");
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// The `cc` crate does not automatically emit rerun-if directives for the
|
|
227
|
+
// environment variables it supports, in particular for $CC. We expect to
|
|
228
|
+
// do a lot of benchmarking across different compilers, so we explicitly
|
|
229
|
+
// add the variables that we're likely to need.
|
|
230
|
+
println!("cargo:rerun-if-env-changed=CC");
|
|
231
|
+
println!("cargo:rerun-if-env-changed=CFLAGS");
|
|
232
|
+
|
|
233
|
+
// Ditto for source files, though these shouldn't change as often. `ignore::Walk` respects
|
|
234
|
+
// .gitignore, so this doesn't traverse target/.
|
|
235
|
+
for result in ignore::Walk::new("..") {
|
|
236
|
+
let result = result?;
|
|
237
|
+
let path = result.path();
|
|
238
|
+
if path.is_file() {
|
|
239
|
+
println!("cargo:rerun-if-changed={}", path.to_str().unwrap());
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// When compiling with clang-cl for windows, it adds .asm files to the root
|
|
244
|
+
// which we need to delete so cargo doesn't get angry
|
|
245
|
+
if is_windows_target() && !use_msvc_asm() {
|
|
246
|
+
let _ = std::fs::remove_file("blake3_avx2_x86-64_windows_gnu.asm");
|
|
247
|
+
let _ = std::fs::remove_file("blake3_avx512_x86-64_windows_gnu.asm");
|
|
248
|
+
let _ = std::fs::remove_file("blake3_sse2_x86-64_windows_gnu.asm");
|
|
249
|
+
let _ = std::fs::remove_file("blake3_sse41_x86-64_windows_gnu.asm");
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
Ok(())
|
|
253
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#! /usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# This hacky script works around the fact that `cross test` does not support
|
|
4
|
+
# path dependencies. (It uses a docker shared folder to let the guest access
|
|
5
|
+
# project files, so parent directories aren't available.) Solve this problem by
|
|
6
|
+
# copying the entire project to a temp dir and rearranging paths to put "c" and
|
|
7
|
+
# "reference_impl" underneath "blake3_c_rust_bindings", so that everything is
|
|
8
|
+
# accessible. Hopefully this will just run on CI forever and no one will ever
|
|
9
|
+
# read this and discover my deep shame.
|
|
10
|
+
|
|
11
|
+
set -e -u -o pipefail
|
|
12
|
+
|
|
13
|
+
project_root="$(realpath "$(dirname "$BASH_SOURCE")/../..")"
|
|
14
|
+
tmpdir="$(mktemp -d)"
|
|
15
|
+
echo "Running cross tests in $tmpdir"
|
|
16
|
+
cd "$tmpdir"
|
|
17
|
+
git clone "$project_root" blake3
|
|
18
|
+
mv blake3/c/blake3_c_rust_bindings .
|
|
19
|
+
mv blake3/reference_impl blake3_c_rust_bindings
|
|
20
|
+
mv blake3/c blake3_c_rust_bindings
|
|
21
|
+
cd blake3_c_rust_bindings
|
|
22
|
+
sed -i 's|reference_impl = { path = "../../reference_impl" }|reference_impl = { path = "reference_impl" }|' Cargo.toml
|
|
23
|
+
|
|
24
|
+
export BLAKE3_C_DIR_OVERRIDE="./c"
|
|
25
|
+
cat > Cross.toml << EOF
|
|
26
|
+
[build.env]
|
|
27
|
+
passthrough = [
|
|
28
|
+
"BLAKE3_C_DIR_OVERRIDE",
|
|
29
|
+
]
|
|
30
|
+
EOF
|
|
31
|
+
cross test "$@"
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
//! These are Rust bindings for the C implementation of BLAKE3. As there is a
|
|
2
|
+
//! native (and faster) Rust implementation of BLAKE3 provided in this same
|
|
3
|
+
//! repo, these bindings are not expected to be used in production. They're
|
|
4
|
+
//! intended for testing and benchmarking.
|
|
5
|
+
|
|
6
|
+
use std::ffi::{c_void, CString};
|
|
7
|
+
use std::mem::MaybeUninit;
|
|
8
|
+
|
|
9
|
+
#[cfg(test)]
|
|
10
|
+
mod test;
|
|
11
|
+
|
|
12
|
+
pub const BLOCK_LEN: usize = 64;
|
|
13
|
+
pub const CHUNK_LEN: usize = 1024;
|
|
14
|
+
pub const OUT_LEN: usize = 32;
|
|
15
|
+
|
|
16
|
+
// Feature detection functions for tests and benchmarks. Note that the C code
|
|
17
|
+
// does its own feature detection in blake3_dispatch.c.
|
|
18
|
+
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
|
|
19
|
+
pub fn sse2_detected() -> bool {
|
|
20
|
+
is_x86_feature_detected!("sse2")
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
|
|
24
|
+
pub fn sse41_detected() -> bool {
|
|
25
|
+
is_x86_feature_detected!("sse4.1")
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
|
|
29
|
+
pub fn avx2_detected() -> bool {
|
|
30
|
+
is_x86_feature_detected!("avx2")
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
|
|
34
|
+
pub fn avx512_detected() -> bool {
|
|
35
|
+
is_x86_feature_detected!("avx512f") && is_x86_feature_detected!("avx512vl")
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
#[derive(Clone)]
|
|
39
|
+
pub struct Hasher(ffi::blake3_hasher);
|
|
40
|
+
|
|
41
|
+
impl Hasher {
|
|
42
|
+
pub fn new() -> Self {
|
|
43
|
+
let mut c_state = MaybeUninit::uninit();
|
|
44
|
+
unsafe {
|
|
45
|
+
ffi::blake3_hasher_init(c_state.as_mut_ptr());
|
|
46
|
+
Self(c_state.assume_init())
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
pub fn new_keyed(key: &[u8; 32]) -> Self {
|
|
51
|
+
let mut c_state = MaybeUninit::uninit();
|
|
52
|
+
unsafe {
|
|
53
|
+
ffi::blake3_hasher_init_keyed(c_state.as_mut_ptr(), key.as_ptr());
|
|
54
|
+
Self(c_state.assume_init())
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
pub fn new_derive_key(context: &str) -> Self {
|
|
59
|
+
let mut c_state = MaybeUninit::uninit();
|
|
60
|
+
let context_c_string = CString::new(context).expect("valid C string, no null bytes");
|
|
61
|
+
unsafe {
|
|
62
|
+
ffi::blake3_hasher_init_derive_key(c_state.as_mut_ptr(), context_c_string.as_ptr());
|
|
63
|
+
Self(c_state.assume_init())
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
pub fn new_derive_key_raw(context: &[u8]) -> Self {
|
|
68
|
+
let mut c_state = MaybeUninit::uninit();
|
|
69
|
+
unsafe {
|
|
70
|
+
ffi::blake3_hasher_init_derive_key_raw(
|
|
71
|
+
c_state.as_mut_ptr(),
|
|
72
|
+
context.as_ptr() as *const _,
|
|
73
|
+
context.len(),
|
|
74
|
+
);
|
|
75
|
+
Self(c_state.assume_init())
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
pub fn update(&mut self, input: &[u8]) {
|
|
80
|
+
unsafe {
|
|
81
|
+
ffi::blake3_hasher_update(&mut self.0, input.as_ptr() as *const c_void, input.len());
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
#[cfg(feature = "tbb")]
|
|
86
|
+
pub fn update_tbb(&mut self, input: &[u8]) {
|
|
87
|
+
unsafe {
|
|
88
|
+
ffi::blake3_hasher_update_tbb(
|
|
89
|
+
&mut self.0,
|
|
90
|
+
input.as_ptr() as *const c_void,
|
|
91
|
+
input.len(),
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
pub fn finalize(&self, output: &mut [u8]) {
|
|
97
|
+
unsafe {
|
|
98
|
+
ffi::blake3_hasher_finalize(&self.0, output.as_mut_ptr(), output.len());
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
pub fn finalize_seek(&self, seek: u64, output: &mut [u8]) {
|
|
103
|
+
unsafe {
|
|
104
|
+
ffi::blake3_hasher_finalize_seek(&self.0, seek, output.as_mut_ptr(), output.len());
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
pub fn reset(&mut self) {
|
|
109
|
+
unsafe {
|
|
110
|
+
ffi::blake3_hasher_reset(&mut self.0);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
pub mod ffi {
|
|
116
|
+
#[repr(C)]
|
|
117
|
+
#[derive(Copy, Clone)]
|
|
118
|
+
pub struct blake3_chunk_state {
|
|
119
|
+
pub cv: [u32; 8usize],
|
|
120
|
+
pub chunk_counter: u64,
|
|
121
|
+
pub buf: [u8; 64usize],
|
|
122
|
+
pub buf_len: u8,
|
|
123
|
+
pub blocks_compressed: u8,
|
|
124
|
+
pub flags: u8,
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
#[repr(C)]
|
|
128
|
+
#[derive(Copy, Clone)]
|
|
129
|
+
pub struct blake3_hasher {
|
|
130
|
+
pub key: [u32; 8usize],
|
|
131
|
+
pub chunk: blake3_chunk_state,
|
|
132
|
+
pub cv_stack_len: u8,
|
|
133
|
+
pub cv_stack: [u8; 1728usize],
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
extern "C" {
|
|
137
|
+
// public interface
|
|
138
|
+
pub fn blake3_hasher_init(self_: *mut blake3_hasher);
|
|
139
|
+
pub fn blake3_hasher_init_keyed(self_: *mut blake3_hasher, key: *const u8);
|
|
140
|
+
pub fn blake3_hasher_init_derive_key(
|
|
141
|
+
self_: *mut blake3_hasher,
|
|
142
|
+
context: *const ::std::os::raw::c_char,
|
|
143
|
+
);
|
|
144
|
+
pub fn blake3_hasher_init_derive_key_raw(
|
|
145
|
+
self_: *mut blake3_hasher,
|
|
146
|
+
context: *const ::std::os::raw::c_void,
|
|
147
|
+
context_len: usize,
|
|
148
|
+
);
|
|
149
|
+
pub fn blake3_hasher_update(
|
|
150
|
+
self_: *mut blake3_hasher,
|
|
151
|
+
input: *const ::std::os::raw::c_void,
|
|
152
|
+
input_len: usize,
|
|
153
|
+
);
|
|
154
|
+
#[cfg(feature = "tbb")]
|
|
155
|
+
pub fn blake3_hasher_update_tbb(
|
|
156
|
+
self_: *mut blake3_hasher,
|
|
157
|
+
input: *const ::std::os::raw::c_void,
|
|
158
|
+
input_len: usize,
|
|
159
|
+
);
|
|
160
|
+
pub fn blake3_hasher_finalize(self_: *const blake3_hasher, out: *mut u8, out_len: usize);
|
|
161
|
+
pub fn blake3_hasher_finalize_seek(
|
|
162
|
+
self_: *const blake3_hasher,
|
|
163
|
+
seek: u64,
|
|
164
|
+
out: *mut u8,
|
|
165
|
+
out_len: usize,
|
|
166
|
+
);
|
|
167
|
+
pub fn blake3_hasher_reset(self_: *mut blake3_hasher);
|
|
168
|
+
|
|
169
|
+
// portable low-level functions
|
|
170
|
+
pub fn blake3_compress_in_place_portable(
|
|
171
|
+
cv: *mut u32,
|
|
172
|
+
block: *const u8,
|
|
173
|
+
block_len: u8,
|
|
174
|
+
counter: u64,
|
|
175
|
+
flags: u8,
|
|
176
|
+
);
|
|
177
|
+
pub fn blake3_compress_xof_portable(
|
|
178
|
+
cv: *const u32,
|
|
179
|
+
block: *const u8,
|
|
180
|
+
block_len: u8,
|
|
181
|
+
counter: u64,
|
|
182
|
+
flags: u8,
|
|
183
|
+
out: *mut u8,
|
|
184
|
+
);
|
|
185
|
+
pub fn blake3_hash_many_portable(
|
|
186
|
+
inputs: *const *const u8,
|
|
187
|
+
num_inputs: usize,
|
|
188
|
+
blocks: usize,
|
|
189
|
+
key: *const u32,
|
|
190
|
+
counter: u64,
|
|
191
|
+
increment_counter: bool,
|
|
192
|
+
flags: u8,
|
|
193
|
+
flags_start: u8,
|
|
194
|
+
flags_end: u8,
|
|
195
|
+
out: *mut u8,
|
|
196
|
+
);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
|
|
200
|
+
pub mod x86 {
|
|
201
|
+
extern "C" {
|
|
202
|
+
// SSE2 low level functions
|
|
203
|
+
pub fn blake3_compress_in_place_sse2(
|
|
204
|
+
cv: *mut u32,
|
|
205
|
+
block: *const u8,
|
|
206
|
+
block_len: u8,
|
|
207
|
+
counter: u64,
|
|
208
|
+
flags: u8,
|
|
209
|
+
);
|
|
210
|
+
pub fn blake3_compress_xof_sse2(
|
|
211
|
+
cv: *const u32,
|
|
212
|
+
block: *const u8,
|
|
213
|
+
block_len: u8,
|
|
214
|
+
counter: u64,
|
|
215
|
+
flags: u8,
|
|
216
|
+
out: *mut u8,
|
|
217
|
+
);
|
|
218
|
+
pub fn blake3_hash_many_sse2(
|
|
219
|
+
inputs: *const *const u8,
|
|
220
|
+
num_inputs: usize,
|
|
221
|
+
blocks: usize,
|
|
222
|
+
key: *const u32,
|
|
223
|
+
counter: u64,
|
|
224
|
+
increment_counter: bool,
|
|
225
|
+
flags: u8,
|
|
226
|
+
flags_start: u8,
|
|
227
|
+
flags_end: u8,
|
|
228
|
+
out: *mut u8,
|
|
229
|
+
);
|
|
230
|
+
|
|
231
|
+
// SSE4.1 low level functions
|
|
232
|
+
pub fn blake3_compress_in_place_sse41(
|
|
233
|
+
cv: *mut u32,
|
|
234
|
+
block: *const u8,
|
|
235
|
+
block_len: u8,
|
|
236
|
+
counter: u64,
|
|
237
|
+
flags: u8,
|
|
238
|
+
);
|
|
239
|
+
pub fn blake3_compress_xof_sse41(
|
|
240
|
+
cv: *const u32,
|
|
241
|
+
block: *const u8,
|
|
242
|
+
block_len: u8,
|
|
243
|
+
counter: u64,
|
|
244
|
+
flags: u8,
|
|
245
|
+
out: *mut u8,
|
|
246
|
+
);
|
|
247
|
+
pub fn blake3_hash_many_sse41(
|
|
248
|
+
inputs: *const *const u8,
|
|
249
|
+
num_inputs: usize,
|
|
250
|
+
blocks: usize,
|
|
251
|
+
key: *const u32,
|
|
252
|
+
counter: u64,
|
|
253
|
+
increment_counter: bool,
|
|
254
|
+
flags: u8,
|
|
255
|
+
flags_start: u8,
|
|
256
|
+
flags_end: u8,
|
|
257
|
+
out: *mut u8,
|
|
258
|
+
);
|
|
259
|
+
|
|
260
|
+
// AVX2 low level functions
|
|
261
|
+
pub fn blake3_hash_many_avx2(
|
|
262
|
+
inputs: *const *const u8,
|
|
263
|
+
num_inputs: usize,
|
|
264
|
+
blocks: usize,
|
|
265
|
+
key: *const u32,
|
|
266
|
+
counter: u64,
|
|
267
|
+
increment_counter: bool,
|
|
268
|
+
flags: u8,
|
|
269
|
+
flags_start: u8,
|
|
270
|
+
flags_end: u8,
|
|
271
|
+
out: *mut u8,
|
|
272
|
+
);
|
|
273
|
+
|
|
274
|
+
// AVX-512 low level functions
|
|
275
|
+
pub fn blake3_compress_xof_avx512(
|
|
276
|
+
cv: *const u32,
|
|
277
|
+
block: *const u8,
|
|
278
|
+
block_len: u8,
|
|
279
|
+
counter: u64,
|
|
280
|
+
flags: u8,
|
|
281
|
+
out: *mut u8,
|
|
282
|
+
);
|
|
283
|
+
pub fn blake3_compress_in_place_avx512(
|
|
284
|
+
cv: *mut u32,
|
|
285
|
+
block: *const u8,
|
|
286
|
+
block_len: u8,
|
|
287
|
+
counter: u64,
|
|
288
|
+
flags: u8,
|
|
289
|
+
);
|
|
290
|
+
pub fn blake3_hash_many_avx512(
|
|
291
|
+
inputs: *const *const u8,
|
|
292
|
+
num_inputs: usize,
|
|
293
|
+
blocks: usize,
|
|
294
|
+
key: *const u32,
|
|
295
|
+
counter: u64,
|
|
296
|
+
increment_counter: bool,
|
|
297
|
+
flags: u8,
|
|
298
|
+
flags_start: u8,
|
|
299
|
+
flags_end: u8,
|
|
300
|
+
out: *mut u8,
|
|
301
|
+
);
|
|
302
|
+
#[cfg(unix)]
|
|
303
|
+
pub fn blake3_xof_many_avx512(
|
|
304
|
+
cv: *const u32,
|
|
305
|
+
block: *const u8,
|
|
306
|
+
block_len: u8,
|
|
307
|
+
counter: u64,
|
|
308
|
+
flags: u8,
|
|
309
|
+
out: *mut u8,
|
|
310
|
+
outblocks: usize,
|
|
311
|
+
);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
#[cfg(feature = "neon")]
|
|
316
|
+
pub mod neon {
|
|
317
|
+
extern "C" {
|
|
318
|
+
// NEON low level functions
|
|
319
|
+
pub fn blake3_hash_many_neon(
|
|
320
|
+
inputs: *const *const u8,
|
|
321
|
+
num_inputs: usize,
|
|
322
|
+
blocks: usize,
|
|
323
|
+
key: *const u32,
|
|
324
|
+
counter: u64,
|
|
325
|
+
increment_counter: bool,
|
|
326
|
+
flags: u8,
|
|
327
|
+
flags_start: u8,
|
|
328
|
+
flags_end: u8,
|
|
329
|
+
out: *mut u8,
|
|
330
|
+
);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|