react-native-quick-crypto 1.0.19 → 1.1.1
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 +12 -38
- package/README.md +2 -0
- package/android/CMakeLists.txt +3 -0
- package/android/build.gradle +5 -1
- package/cpp/argon2/HybridArgon2.cpp +10 -3
- package/cpp/blake3/HybridBlake3.cpp +5 -3
- package/cpp/cipher/CCMCipher.cpp +29 -16
- package/cpp/cipher/CCMCipher.hpp +2 -4
- package/cpp/cipher/ChaCha20Cipher.cpp +14 -18
- package/cpp/cipher/ChaCha20Cipher.hpp +2 -4
- package/cpp/cipher/ChaCha20Poly1305Cipher.cpp +34 -23
- package/cpp/cipher/ChaCha20Poly1305Cipher.hpp +2 -4
- package/cpp/cipher/GCMCipher.cpp +14 -15
- package/cpp/cipher/HybridCipher.cpp +39 -36
- package/cpp/cipher/HybridCipher.hpp +17 -1
- package/cpp/cipher/HybridRsaCipher.cpp +74 -29
- package/cpp/cipher/OCBCipher.cpp +4 -3
- package/cpp/cipher/XChaCha20Poly1305Cipher.cpp +14 -13
- package/cpp/cipher/XSalsa20Cipher.cpp +72 -6
- package/cpp/cipher/XSalsa20Cipher.hpp +25 -3
- package/cpp/cipher/XSalsa20Poly1305Cipher.cpp +21 -25
- package/cpp/dh/HybridDiffieHellman.cpp +29 -0
- package/cpp/ec/HybridEcKeyPair.cpp +35 -33
- package/cpp/ec/HybridEcKeyPair.hpp +3 -7
- package/cpp/ecdh/HybridECDH.cpp +23 -0
- package/cpp/ed25519/HybridEdKeyPair.cpp +73 -117
- package/cpp/ed25519/HybridEdKeyPair.hpp +5 -9
- package/cpp/hash/HybridHash.cpp +5 -7
- package/cpp/hkdf/HybridHkdf.cpp +6 -4
- package/cpp/hmac/HybridHmac.cpp +4 -6
- package/cpp/kmac/HybridKmac.cpp +4 -4
- package/cpp/mldsa/HybridMlDsaKeyPair.cpp +37 -49
- package/cpp/mlkem/HybridMlKemKeyPair.cpp +39 -43
- package/cpp/pbkdf2/HybridPbkdf2.cpp +7 -8
- package/cpp/rsa/HybridRsaKeyPair.cpp +5 -8
- package/cpp/rsa/HybridRsaKeyPair.hpp +4 -7
- package/cpp/scrypt/HybridScrypt.cpp +6 -4
- package/cpp/sign/HybridSignHandle.cpp +25 -68
- package/cpp/sign/HybridVerifyHandle.cpp +23 -60
- package/cpp/utils/HybridUtils.cpp +213 -111
- package/cpp/utils/HybridUtils.hpp +9 -2
- package/cpp/utils/QuickCryptoUtils.hpp +72 -0
- package/deps/simdutf/LICENSE-APACHE +201 -0
- package/deps/simdutf/LICENSE-MIT +18 -0
- package/deps/simdutf/README.md +2782 -0
- package/deps/simdutf/include/simdutf/avx512.h +79 -0
- package/deps/simdutf/include/simdutf/base64_implementation.h +158 -0
- package/deps/simdutf/include/simdutf/base64_tables.h +887 -0
- package/deps/simdutf/include/simdutf/common_defs.h +186 -0
- package/deps/simdutf/include/simdutf/compiler_check.h +50 -0
- package/deps/simdutf/include/simdutf/constexpr_ptr.h +138 -0
- package/deps/simdutf/include/simdutf/encoding_types.h +189 -0
- package/deps/simdutf/include/simdutf/error.h +126 -0
- package/deps/simdutf/include/simdutf/implementation.h +7081 -0
- package/deps/simdutf/include/simdutf/internal/isadetection.h +325 -0
- package/deps/simdutf/include/simdutf/portability.h +285 -0
- package/deps/simdutf/include/simdutf/scalar/ascii.h +86 -0
- package/deps/simdutf/include/simdutf/scalar/atomic_util.h +105 -0
- package/deps/simdutf/include/simdutf/scalar/base64.h +911 -0
- package/deps/simdutf/include/simdutf/scalar/latin1.h +26 -0
- package/deps/simdutf/include/simdutf/scalar/latin1_to_utf16/latin1_to_utf16.h +52 -0
- package/deps/simdutf/include/simdutf/scalar/latin1_to_utf32/latin1_to_utf32.h +27 -0
- package/deps/simdutf/include/simdutf/scalar/latin1_to_utf8/latin1_to_utf8.h +191 -0
- package/deps/simdutf/include/simdutf/scalar/swap_bytes.h +35 -0
- package/deps/simdutf/include/simdutf/scalar/utf16.h +226 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/utf16_to_latin1.h +108 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/valid_utf16_to_latin1.h +40 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/utf16_to_utf32.h +86 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/valid_utf16_to_utf32.h +44 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/utf16_to_utf8.h +295 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/valid_utf16_to_utf8.h +91 -0
- package/deps/simdutf/include/simdutf/scalar/utf32.h +82 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/utf32_to_latin1.h +68 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/valid_utf32_to_latin1.h +67 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/utf32_to_utf16.h +84 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/valid_utf32_to_utf16.h +44 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/utf32_to_utf8.h +142 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/valid_utf32_to_utf8.h +72 -0
- package/deps/simdutf/include/simdutf/scalar/utf8.h +326 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/utf8_to_latin1.h +225 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/valid_utf8_to_latin1.h +87 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/utf8_to_utf16.h +342 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/valid_utf8_to_utf16.h +106 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/utf8_to_utf32.h +299 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/valid_utf8_to_utf32.h +83 -0
- package/deps/simdutf/include/simdutf/simdutf_version.h +26 -0
- package/deps/simdutf/include/simdutf.h +26 -0
- package/deps/simdutf/include/simdutf_c.h +342 -0
- package/deps/simdutf/src/arm64/arm_base64.cpp +791 -0
- package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf16.cpp +24 -0
- package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf32.cpp +24 -0
- package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf8.cpp +70 -0
- package/deps/simdutf/src/arm64/arm_convert_utf16_to_latin1.cpp +61 -0
- package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf32.cpp +185 -0
- package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf8.cpp +780 -0
- package/deps/simdutf/src/arm64/arm_convert_utf32_to_latin1.cpp +60 -0
- package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf16.cpp +208 -0
- package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf8.cpp +505 -0
- package/deps/simdutf/src/arm64/arm_convert_utf8_to_latin1.cpp +69 -0
- package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf16.cpp +313 -0
- package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf32.cpp +179 -0
- package/deps/simdutf/src/arm64/arm_find.cpp +199 -0
- package/deps/simdutf/src/arm64/arm_utf16fix.cpp +185 -0
- package/deps/simdutf/src/arm64/arm_validate_utf16.cpp +165 -0
- package/deps/simdutf/src/arm64/arm_validate_utf32le.cpp +65 -0
- package/deps/simdutf/src/arm64/implementation.cpp +1442 -0
- package/deps/simdutf/src/encoding_types.cpp +67 -0
- package/deps/simdutf/src/error.cpp +3 -0
- package/deps/simdutf/src/fallback/implementation.cpp +589 -0
- package/deps/simdutf/src/generic/ascii_validation.h +50 -0
- package/deps/simdutf/src/generic/base64.h +233 -0
- package/deps/simdutf/src/generic/base64lengths.h +63 -0
- package/deps/simdutf/src/generic/buf_block_reader.h +109 -0
- package/deps/simdutf/src/generic/find.h +75 -0
- package/deps/simdutf/src/generic/utf16/change_endianness.h +24 -0
- package/deps/simdutf/src/generic/utf16/count_code_points_bytemask.h +58 -0
- package/deps/simdutf/src/generic/utf16/to_well_formed.h +93 -0
- package/deps/simdutf/src/generic/utf16/utf32_length_from_utf16.h +15 -0
- package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16.h +35 -0
- package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16_bytemask.h +199 -0
- package/deps/simdutf/src/generic/utf16.h +73 -0
- package/deps/simdutf/src/generic/utf32.h +136 -0
- package/deps/simdutf/src/generic/utf8/utf16_length_from_utf8_bytemask.h +53 -0
- package/deps/simdutf/src/generic/utf8.h +92 -0
- package/deps/simdutf/src/generic/utf8_to_latin1/utf8_to_latin1.h +316 -0
- package/deps/simdutf/src/generic/utf8_to_latin1/valid_utf8_to_latin1.h +78 -0
- package/deps/simdutf/src/generic/utf8_to_utf16/utf8_to_utf16.h +332 -0
- package/deps/simdutf/src/generic/utf8_to_utf16/valid_utf8_to_utf16.h +74 -0
- package/deps/simdutf/src/generic/utf8_to_utf32/utf8_to_utf32.h +318 -0
- package/deps/simdutf/src/generic/utf8_to_utf32/valid_utf8_to_utf32.h +42 -0
- package/deps/simdutf/src/generic/utf8_validation/utf8_lookup4_algorithm.h +223 -0
- package/deps/simdutf/src/generic/utf8_validation/utf8_validator.h +84 -0
- package/deps/simdutf/src/generic/validate_utf16.h +164 -0
- package/deps/simdutf/src/generic/validate_utf32.h +99 -0
- package/deps/simdutf/src/haswell/avx2_base64.cpp +837 -0
- package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf16.cpp +28 -0
- package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf32.cpp +20 -0
- package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf8.cpp +83 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf16_to_latin1.cpp +83 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf32.cpp +210 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf8.cpp +602 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf32_to_latin1.cpp +116 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf16.cpp +164 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf8.cpp +569 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf8_to_latin1.cpp +60 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf16.cpp +195 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf32.cpp +135 -0
- package/deps/simdutf/src/haswell/avx2_utf16fix.cpp +173 -0
- package/deps/simdutf/src/haswell/avx2_validate_utf16.cpp +17 -0
- package/deps/simdutf/src/haswell/implementation.cpp +1447 -0
- package/deps/simdutf/src/icelake/icelake_ascii_validation.inl.cpp +19 -0
- package/deps/simdutf/src/icelake/icelake_base64.inl.cpp +630 -0
- package/deps/simdutf/src/icelake/icelake_common.inl.cpp +37 -0
- package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf16.inl.cpp +36 -0
- package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf32.inl.cpp +23 -0
- package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf8.inl.cpp +107 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf16_to_latin1.inl.cpp +103 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf32.inl.cpp +136 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf8.inl.cpp +206 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf32_to_latin1.inl.cpp +74 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf16.inl.cpp +338 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf8.inl.cpp +574 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf8_to_latin1.inl.cpp +104 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf8_to_utf16.inl.cpp +75 -0
- package/deps/simdutf/src/icelake/icelake_convert_valid_utf8_to_latin1.inl.cpp +69 -0
- package/deps/simdutf/src/icelake/icelake_find.inl.cpp +146 -0
- package/deps/simdutf/src/icelake/icelake_from_utf8.inl.cpp +266 -0
- package/deps/simdutf/src/icelake/icelake_from_valid_utf8.inl.cpp +136 -0
- package/deps/simdutf/src/icelake/icelake_macros.inl.cpp +143 -0
- package/deps/simdutf/src/icelake/icelake_utf16fix.cpp +138 -0
- package/deps/simdutf/src/icelake/icelake_utf32_validation.inl.cpp +63 -0
- package/deps/simdutf/src/icelake/icelake_utf8_common.inl.cpp +753 -0
- package/deps/simdutf/src/icelake/icelake_utf8_length_from_utf16.inl.cpp +269 -0
- package/deps/simdutf/src/icelake/icelake_utf8_validation.inl.cpp +116 -0
- package/deps/simdutf/src/icelake/implementation.cpp +1903 -0
- package/deps/simdutf/src/implementation.cpp +2526 -0
- package/deps/simdutf/src/lasx/implementation.cpp +1531 -0
- package/deps/simdutf/src/lasx/lasx_base64.cpp +695 -0
- package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf16.cpp +76 -0
- package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf32.cpp +55 -0
- package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf8.cpp +65 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf16_to_latin1.cpp +64 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf32.cpp +183 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf8.cpp +550 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf32_to_latin1.cpp +73 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf16.cpp +218 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf8.cpp +589 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf8_to_latin1.cpp +72 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf16.cpp +296 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf32.cpp +190 -0
- package/deps/simdutf/src/lasx/lasx_find.cpp +64 -0
- package/deps/simdutf/src/lasx/lasx_validate_utf16.cpp +13 -0
- package/deps/simdutf/src/lasx/lasx_validate_utf32le.cpp +84 -0
- package/deps/simdutf/src/lsx/implementation.cpp +1417 -0
- package/deps/simdutf/src/lsx/lsx_base64.cpp +675 -0
- package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf16.cpp +39 -0
- package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf32.cpp +27 -0
- package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf8.cpp +56 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf16_to_latin1.cpp +64 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf32.cpp +133 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf8.cpp +518 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf32_to_latin1.cpp +66 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf16.cpp +155 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf8.cpp +459 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf8_to_latin1.cpp +75 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf16.cpp +291 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf32.cpp +179 -0
- package/deps/simdutf/src/lsx/lsx_find.cpp +60 -0
- package/deps/simdutf/src/lsx/lsx_validate_utf16.cpp +13 -0
- package/deps/simdutf/src/lsx/lsx_validate_utf32le.cpp +68 -0
- package/deps/simdutf/src/ppc64/implementation.cpp +992 -0
- package/deps/simdutf/src/ppc64/ppc64_base64.cpp +480 -0
- package/deps/simdutf/src/ppc64/ppc64_base64_internal_tests.cpp +401 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf16.cpp +12 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf32.cpp +12 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf8.cpp +149 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_latin1.cpp +67 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf32.cpp +87 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf8.cpp +296 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_latin1.cpp +57 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf16.cpp +117 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf8.cpp +166 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_latin1.cpp +69 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf16.cpp +211 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf32.cpp +153 -0
- package/deps/simdutf/src/ppc64/ppc64_utf16_to_utf8_tables.h +1011 -0
- package/deps/simdutf/src/ppc64/ppc64_utf8_length_from_latin1.cpp +37 -0
- package/deps/simdutf/src/ppc64/ppc64_validate_utf16.cpp +19 -0
- package/deps/simdutf/src/ppc64/templates.cpp +91 -0
- package/deps/simdutf/src/rvv/implementation.cpp +138 -0
- package/deps/simdutf/src/rvv/rvv_find.cpp +27 -0
- package/deps/simdutf/src/rvv/rvv_helpers.inl.cpp +23 -0
- package/deps/simdutf/src/rvv/rvv_latin1_to.inl.cpp +71 -0
- package/deps/simdutf/src/rvv/rvv_length_from.inl.cpp +164 -0
- package/deps/simdutf/src/rvv/rvv_utf16_to.inl.cpp +399 -0
- package/deps/simdutf/src/rvv/rvv_utf16fix.cpp +110 -0
- package/deps/simdutf/src/rvv/rvv_utf32_to.inl.cpp +307 -0
- package/deps/simdutf/src/rvv/rvv_utf8_to.inl.cpp +435 -0
- package/deps/simdutf/src/rvv/rvv_validate.inl.cpp +275 -0
- package/deps/simdutf/src/simdutf/arm64/begin.h +2 -0
- package/deps/simdutf/src/simdutf/arm64/bitmanipulation.h +34 -0
- package/deps/simdutf/src/simdutf/arm64/end.h +2 -0
- package/deps/simdutf/src/simdutf/arm64/implementation.h +307 -0
- package/deps/simdutf/src/simdutf/arm64/intrinsics.h +10 -0
- package/deps/simdutf/src/simdutf/arm64/simd.h +547 -0
- package/deps/simdutf/src/simdutf/arm64/simd16-inl.h +403 -0
- package/deps/simdutf/src/simdutf/arm64/simd32-inl.h +129 -0
- package/deps/simdutf/src/simdutf/arm64/simd64-inl.h +28 -0
- package/deps/simdutf/src/simdutf/arm64.h +43 -0
- package/deps/simdutf/src/simdutf/fallback/begin.h +1 -0
- package/deps/simdutf/src/simdutf/fallback/bitmanipulation.h +13 -0
- package/deps/simdutf/src/simdutf/fallback/end.h +1 -0
- package/deps/simdutf/src/simdutf/fallback/implementation.h +331 -0
- package/deps/simdutf/src/simdutf/fallback.h +42 -0
- package/deps/simdutf/src/simdutf/haswell/begin.h +15 -0
- package/deps/simdutf/src/simdutf/haswell/bitmanipulation.h +35 -0
- package/deps/simdutf/src/simdutf/haswell/end.h +13 -0
- package/deps/simdutf/src/simdutf/haswell/implementation.h +338 -0
- package/deps/simdutf/src/simdutf/haswell/intrinsics.h +67 -0
- package/deps/simdutf/src/simdutf/haswell/simd.h +363 -0
- package/deps/simdutf/src/simdutf/haswell/simd16-inl.h +261 -0
- package/deps/simdutf/src/simdutf/haswell/simd32-inl.h +111 -0
- package/deps/simdutf/src/simdutf/haswell/simd64-inl.h +34 -0
- package/deps/simdutf/src/simdutf/haswell.h +63 -0
- package/deps/simdutf/src/simdutf/icelake/begin.h +14 -0
- package/deps/simdutf/src/simdutf/icelake/bitmanipulation.h +44 -0
- package/deps/simdutf/src/simdutf/icelake/end.h +12 -0
- package/deps/simdutf/src/simdutf/icelake/implementation.h +346 -0
- package/deps/simdutf/src/simdutf/icelake/intrinsics.h +138 -0
- package/deps/simdutf/src/simdutf/icelake/simd.h +17 -0
- package/deps/simdutf/src/simdutf/icelake/simd16-inl.h +90 -0
- package/deps/simdutf/src/simdutf/icelake/simd32-inl.h +47 -0
- package/deps/simdutf/src/simdutf/icelake.h +81 -0
- package/deps/simdutf/src/simdutf/lasx/begin.h +8 -0
- package/deps/simdutf/src/simdutf/lasx/bitmanipulation.h +25 -0
- package/deps/simdutf/src/simdutf/lasx/end.h +8 -0
- package/deps/simdutf/src/simdutf/lasx/implementation.h +310 -0
- package/deps/simdutf/src/simdutf/lasx/intrinsics.h +319 -0
- package/deps/simdutf/src/simdutf/lasx/simd.h +551 -0
- package/deps/simdutf/src/simdutf/lasx/simd16-inl.h +234 -0
- package/deps/simdutf/src/simdutf/lasx/simd32-inl.h +74 -0
- package/deps/simdutf/src/simdutf/lasx/simd64-inl.h +52 -0
- package/deps/simdutf/src/simdutf/lasx.h +49 -0
- package/deps/simdutf/src/simdutf/lsx/begin.h +2 -0
- package/deps/simdutf/src/simdutf/lsx/bitmanipulation.h +25 -0
- package/deps/simdutf/src/simdutf/lsx/end.h +2 -0
- package/deps/simdutf/src/simdutf/lsx/implementation.h +309 -0
- package/deps/simdutf/src/simdutf/lsx/intrinsics.h +196 -0
- package/deps/simdutf/src/simdutf/lsx/simd.h +421 -0
- package/deps/simdutf/src/simdutf/lsx/simd16-inl.h +242 -0
- package/deps/simdutf/src/simdutf/lsx/simd32-inl.h +69 -0
- package/deps/simdutf/src/simdutf/lsx/simd64-inl.h +50 -0
- package/deps/simdutf/src/simdutf/lsx.h +52 -0
- package/deps/simdutf/src/simdutf/ppc64/begin.h +1 -0
- package/deps/simdutf/src/simdutf/ppc64/bitmanipulation.h +29 -0
- package/deps/simdutf/src/simdutf/ppc64/end.h +1 -0
- package/deps/simdutf/src/simdutf/ppc64/implementation.h +348 -0
- package/deps/simdutf/src/simdutf/ppc64/intrinsics.h +19 -0
- package/deps/simdutf/src/simdutf/ppc64/simd.h +177 -0
- package/deps/simdutf/src/simdutf/ppc64/simd16-inl.h +327 -0
- package/deps/simdutf/src/simdutf/ppc64/simd32-inl.h +247 -0
- package/deps/simdutf/src/simdutf/ppc64/simd8-inl.h +618 -0
- package/deps/simdutf/src/simdutf/ppc64.h +40 -0
- package/deps/simdutf/src/simdutf/rvv/begin.h +7 -0
- package/deps/simdutf/src/simdutf/rvv/end.h +7 -0
- package/deps/simdutf/src/simdutf/rvv/implementation.h +321 -0
- package/deps/simdutf/src/simdutf/rvv/intrinsics.h +131 -0
- package/deps/simdutf/src/simdutf/rvv.h +41 -0
- package/deps/simdutf/src/simdutf/westmere/begin.h +8 -0
- package/deps/simdutf/src/simdutf/westmere/bitmanipulation.h +37 -0
- package/deps/simdutf/src/simdutf/westmere/end.h +8 -0
- package/deps/simdutf/src/simdutf/westmere/implementation.h +338 -0
- package/deps/simdutf/src/simdutf/westmere/intrinsics.h +38 -0
- package/deps/simdutf/src/simdutf/westmere/simd.h +379 -0
- package/deps/simdutf/src/simdutf/westmere/simd16-inl.h +242 -0
- package/deps/simdutf/src/simdutf/westmere/simd32-inl.h +151 -0
- package/deps/simdutf/src/simdutf/westmere/simd64-inl.h +33 -0
- package/deps/simdutf/src/simdutf/westmere.h +59 -0
- package/deps/simdutf/src/simdutf.cpp +152 -0
- package/deps/simdutf/src/simdutf_c.cpp +525 -0
- package/deps/simdutf/src/tables/utf16_to_utf8_tables.h +768 -0
- package/deps/simdutf/src/tables/utf32_to_utf16_tables.h +53 -0
- package/deps/simdutf/src/tables/utf8_to_utf16_tables.h +826 -0
- package/deps/simdutf/src/westmere/implementation.cpp +1479 -0
- package/deps/simdutf/src/westmere/internal/loader.cpp +7 -0
- package/deps/simdutf/src/westmere/internal/write_v_u16_11bits_to_utf8.cpp +66 -0
- package/deps/simdutf/src/westmere/sse_base64.cpp +672 -0
- package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf16.cpp +21 -0
- package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf32.cpp +31 -0
- package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf8.cpp +71 -0
- package/deps/simdutf/src/westmere/sse_convert_utf16_to_latin1.cpp +70 -0
- package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf32.cpp +206 -0
- package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf8.cpp +504 -0
- package/deps/simdutf/src/westmere/sse_convert_utf32_to_latin1.cpp +82 -0
- package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf16.cpp +209 -0
- package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf8.cpp +589 -0
- package/deps/simdutf/src/westmere/sse_convert_utf8_to_latin1.cpp +58 -0
- package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf16.cpp +197 -0
- package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf32.cpp +141 -0
- package/deps/simdutf/src/westmere/sse_utf16fix.cpp +82 -0
- package/deps/simdutf/src/westmere/sse_validate_utf16.cpp +17 -0
- package/lib/commonjs/argon2.js +51 -2
- package/lib/commonjs/argon2.js.map +1 -1
- package/lib/commonjs/cipher.js +109 -11
- package/lib/commonjs/cipher.js.map +1 -1
- package/lib/commonjs/dsa.js +8 -2
- package/lib/commonjs/dsa.js.map +1 -1
- package/lib/commonjs/hash.js +15 -5
- package/lib/commonjs/hash.js.map +1 -1
- package/lib/commonjs/hkdf.js +33 -6
- package/lib/commonjs/hkdf.js.map +1 -1
- package/lib/commonjs/hmac.js +15 -5
- package/lib/commonjs/hmac.js.map +1 -1
- package/lib/commonjs/keys/publicCipher.js +10 -4
- package/lib/commonjs/keys/publicCipher.js.map +1 -1
- package/lib/commonjs/random.js +11 -2
- package/lib/commonjs/random.js.map +1 -1
- package/lib/commonjs/rsa.js +12 -5
- package/lib/commonjs/rsa.js.map +1 -1
- package/lib/commonjs/scrypt.js +47 -6
- package/lib/commonjs/scrypt.js.map +1 -1
- package/lib/commonjs/subtle.js +76 -5
- package/lib/commonjs/subtle.js.map +1 -1
- package/lib/commonjs/utils/cipher.js +18 -7
- package/lib/commonjs/utils/cipher.js.map +1 -1
- package/lib/commonjs/utils/conversion.js +33 -9
- package/lib/commonjs/utils/conversion.js.map +1 -1
- package/lib/commonjs/utils/timingSafeEqual.js +7 -2
- package/lib/commonjs/utils/timingSafeEqual.js.map +1 -1
- package/lib/commonjs/x509certificate.js +6 -6
- package/lib/commonjs/x509certificate.js.map +1 -1
- package/lib/module/argon2.js +51 -2
- package/lib/module/argon2.js.map +1 -1
- package/lib/module/cipher.js +109 -11
- package/lib/module/cipher.js.map +1 -1
- package/lib/module/dsa.js +8 -2
- package/lib/module/dsa.js.map +1 -1
- package/lib/module/hash.js +15 -5
- package/lib/module/hash.js.map +1 -1
- package/lib/module/hkdf.js +33 -6
- package/lib/module/hkdf.js.map +1 -1
- package/lib/module/hmac.js +15 -5
- package/lib/module/hmac.js.map +1 -1
- package/lib/module/keys/publicCipher.js +10 -4
- package/lib/module/keys/publicCipher.js.map +1 -1
- package/lib/module/random.js +11 -2
- package/lib/module/random.js.map +1 -1
- package/lib/module/rsa.js +11 -4
- package/lib/module/rsa.js.map +1 -1
- package/lib/module/scrypt.js +47 -6
- package/lib/module/scrypt.js.map +1 -1
- package/lib/module/subtle.js +76 -5
- package/lib/module/subtle.js.map +1 -1
- package/lib/module/utils/cipher.js +18 -7
- package/lib/module/utils/cipher.js.map +1 -1
- package/lib/module/utils/conversion.js +33 -9
- package/lib/module/utils/conversion.js.map +1 -1
- package/lib/module/utils/timingSafeEqual.js +8 -3
- package/lib/module/utils/timingSafeEqual.js.map +1 -1
- package/lib/module/x509certificate.js +6 -6
- package/lib/module/x509certificate.js.map +1 -1
- package/lib/typescript/argon2.d.ts.map +1 -1
- package/lib/typescript/cipher.d.ts +2 -2
- package/lib/typescript/cipher.d.ts.map +1 -1
- package/lib/typescript/dsa.d.ts.map +1 -1
- package/lib/typescript/hash.d.ts +2 -2
- package/lib/typescript/hash.d.ts.map +1 -1
- package/lib/typescript/hkdf.d.ts.map +1 -1
- package/lib/typescript/hmac.d.ts +2 -2
- package/lib/typescript/hmac.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +1 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/keys/publicCipher.d.ts.map +1 -1
- package/lib/typescript/random.d.ts.map +1 -1
- package/lib/typescript/rsa.d.ts.map +1 -1
- package/lib/typescript/scrypt.d.ts.map +1 -1
- package/lib/typescript/specs/utils.nitro.d.ts +0 -2
- package/lib/typescript/specs/utils.nitro.d.ts.map +1 -1
- package/lib/typescript/subtle.d.ts.map +1 -1
- package/lib/typescript/utils/cipher.d.ts +13 -1
- package/lib/typescript/utils/cipher.d.ts.map +1 -1
- package/lib/typescript/utils/conversion.d.ts +9 -6
- package/lib/typescript/utils/conversion.d.ts.map +1 -1
- package/lib/typescript/utils/timingSafeEqual.d.ts.map +1 -1
- package/lib/typescript/x509certificate.d.ts.map +1 -1
- package/nitrogen/generated/shared/c++/HybridUtilsSpec.cpp +0 -2
- package/nitrogen/generated/shared/c++/HybridUtilsSpec.hpp +0 -3
- package/package.json +38 -6
- package/src/argon2.ts +80 -2
- package/src/cipher.ts +139 -15
- package/src/dsa.ts +11 -2
- package/src/hash.ts +17 -7
- package/src/hkdf.ts +44 -6
- package/src/hmac.ts +17 -7
- package/src/keys/publicCipher.ts +10 -4
- package/src/random.ts +11 -2
- package/src/rsa.ts +18 -4
- package/src/scrypt.ts +73 -6
- package/src/specs/utils.nitro.ts +0 -2
- package/src/subtle.ts +90 -8
- package/src/utils/cipher.ts +30 -8
- package/src/utils/conversion.ts +58 -20
- package/src/utils/timingSafeEqual.ts +8 -3
- package/src/x509certificate.ts +5 -6
- package/deps/blake3/.cargo/config.toml +0 -2
- package/deps/blake3/.git-blame-ignore-revs +0 -2
- package/deps/blake3/.github/workflows/build_b3sum.py +0 -38
- package/deps/blake3/.github/workflows/ci.yml +0 -491
- package/deps/blake3/.github/workflows/tag.yml +0 -43
- package/deps/blake3/.github/workflows/upload_github_release_asset.py +0 -73
- package/deps/blake3/CONTRIBUTING.md +0 -31
- package/deps/blake3/Cargo.toml +0 -135
- package/deps/blake3/b3sum/Cargo.lock +0 -513
- package/deps/blake3/b3sum/Cargo.toml +0 -26
- package/deps/blake3/b3sum/README.md +0 -72
- package/deps/blake3/b3sum/src/main.rs +0 -564
- package/deps/blake3/b3sum/src/unit_tests.rs +0 -235
- package/deps/blake3/b3sum/tests/cli_tests.rs +0 -680
- package/deps/blake3/b3sum/what_does_check_do.md +0 -176
- package/deps/blake3/benches/bench.rs +0 -623
- package/deps/blake3/build.rs +0 -389
- package/deps/blake3/c/CMakeLists.txt +0 -383
- package/deps/blake3/c/CMakePresets.json +0 -73
- package/deps/blake3/c/Makefile.testing +0 -82
- package/deps/blake3/c/blake3-config.cmake.in +0 -14
- package/deps/blake3/c/blake3_avx2.c +0 -326
- package/deps/blake3/c/blake3_avx2_x86-64_unix.S +0 -1815
- package/deps/blake3/c/blake3_avx2_x86-64_windows_gnu.S +0 -1817
- package/deps/blake3/c/blake3_avx2_x86-64_windows_msvc.asm +0 -1828
- package/deps/blake3/c/blake3_avx512.c +0 -1388
- package/deps/blake3/c/blake3_avx512_x86-64_unix.S +0 -4824
- package/deps/blake3/c/blake3_avx512_x86-64_windows_gnu.S +0 -2615
- package/deps/blake3/c/blake3_avx512_x86-64_windows_msvc.asm +0 -2634
- package/deps/blake3/c/blake3_c_rust_bindings/Cargo.toml +0 -32
- package/deps/blake3/c/blake3_c_rust_bindings/README.md +0 -4
- package/deps/blake3/c/blake3_c_rust_bindings/benches/bench.rs +0 -477
- package/deps/blake3/c/blake3_c_rust_bindings/build.rs +0 -253
- package/deps/blake3/c/blake3_c_rust_bindings/cross_test.sh +0 -31
- package/deps/blake3/c/blake3_c_rust_bindings/src/lib.rs +0 -333
- package/deps/blake3/c/blake3_c_rust_bindings/src/test.rs +0 -696
- package/deps/blake3/c/blake3_sse2.c +0 -566
- package/deps/blake3/c/blake3_sse2_x86-64_unix.S +0 -2291
- package/deps/blake3/c/blake3_sse2_x86-64_windows_gnu.S +0 -2332
- package/deps/blake3/c/blake3_sse2_x86-64_windows_msvc.asm +0 -2350
- package/deps/blake3/c/blake3_sse41.c +0 -560
- package/deps/blake3/c/blake3_sse41_x86-64_unix.S +0 -2028
- package/deps/blake3/c/blake3_sse41_x86-64_windows_gnu.S +0 -2069
- package/deps/blake3/c/blake3_sse41_x86-64_windows_msvc.asm +0 -2089
- package/deps/blake3/c/blake3_tbb.cpp +0 -37
- package/deps/blake3/c/dependencies/CMakeLists.txt +0 -3
- package/deps/blake3/c/dependencies/tbb/CMakeLists.txt +0 -28
- package/deps/blake3/c/example.c +0 -36
- package/deps/blake3/c/example_tbb.c +0 -57
- package/deps/blake3/c/libblake3.pc.in +0 -12
- package/deps/blake3/c/main.c +0 -166
- package/deps/blake3/c/test.py +0 -97
- package/deps/blake3/media/B3.svg +0 -70
- package/deps/blake3/media/BLAKE3.svg +0 -85
- package/deps/blake3/media/speed.svg +0 -1474
- package/deps/blake3/reference_impl/Cargo.toml +0 -8
- package/deps/blake3/reference_impl/README.md +0 -14
- package/deps/blake3/reference_impl/reference_impl.rs +0 -374
- package/deps/blake3/src/ffi_avx2.rs +0 -65
- package/deps/blake3/src/ffi_avx512.rs +0 -169
- package/deps/blake3/src/ffi_neon.rs +0 -82
- package/deps/blake3/src/ffi_sse2.rs +0 -126
- package/deps/blake3/src/ffi_sse41.rs +0 -126
- package/deps/blake3/src/guts.rs +0 -60
- package/deps/blake3/src/hazmat.rs +0 -704
- package/deps/blake3/src/io.rs +0 -64
- package/deps/blake3/src/join.rs +0 -92
- package/deps/blake3/src/lib.rs +0 -1835
- package/deps/blake3/src/platform.rs +0 -587
- package/deps/blake3/src/portable.rs +0 -198
- package/deps/blake3/src/rust_avx2.rs +0 -474
- package/deps/blake3/src/rust_sse2.rs +0 -775
- package/deps/blake3/src/rust_sse41.rs +0 -766
- package/deps/blake3/src/test.rs +0 -1049
- package/deps/blake3/src/traits.rs +0 -227
- package/deps/blake3/src/wasm32_simd.rs +0 -794
- package/deps/blake3/test_vectors/Cargo.toml +0 -19
- package/deps/blake3/test_vectors/cross_test.sh +0 -25
- package/deps/blake3/test_vectors/src/bin/generate.rs +0 -4
- package/deps/blake3/test_vectors/src/lib.rs +0 -350
- package/deps/blake3/test_vectors/test_vectors.json +0 -217
- package/deps/blake3/tools/compiler_version/Cargo.toml +0 -7
- package/deps/blake3/tools/compiler_version/build.rs +0 -6
- package/deps/blake3/tools/compiler_version/src/main.rs +0 -27
- package/deps/blake3/tools/instruction_set_support/Cargo.toml +0 -6
- package/deps/blake3/tools/instruction_set_support/src/main.rs +0 -10
- package/deps/blake3/tools/release.md +0 -16
- package/deps/ncrypto/.bazelignore +0 -4
- package/deps/ncrypto/.bazelrc +0 -1
- package/deps/ncrypto/.bazelversion +0 -1
- package/deps/ncrypto/.clang-format +0 -111
- package/deps/ncrypto/.github/workflows/bazel.yml +0 -58
- package/deps/ncrypto/.github/workflows/commitlint.yml +0 -16
- package/deps/ncrypto/.github/workflows/linter.yml +0 -38
- package/deps/ncrypto/.github/workflows/macos.yml +0 -43
- package/deps/ncrypto/.github/workflows/release-please.yml +0 -16
- package/deps/ncrypto/.github/workflows/ubuntu.yml +0 -128
- package/deps/ncrypto/.github/workflows/visual-studio.yml +0 -49
- package/deps/ncrypto/.python-version +0 -1
- package/deps/ncrypto/.release-please-manifest.json +0 -3
- package/deps/ncrypto/BUILD.bazel +0 -44
- package/deps/ncrypto/CHANGELOG.md +0 -37
- package/deps/ncrypto/CMakeLists.txt +0 -79
- package/deps/ncrypto/MODULE.bazel +0 -16
- package/deps/ncrypto/MODULE.bazel.lock +0 -461
- package/deps/ncrypto/cmake/CPM.cmake +0 -1225
- package/deps/ncrypto/cmake/ncrypto-flags.cmake +0 -17
- package/deps/ncrypto/ncrypto.pc.in +0 -10
- package/deps/ncrypto/patches/0001-Expose-libdecrepit-so-NodeJS-can-use-it-for-ncrypto.patch +0 -28
- package/deps/ncrypto/pyproject.toml +0 -38
- package/deps/ncrypto/release-please-config.json +0 -11
- package/deps/ncrypto/src/CMakeLists.txt +0 -40
- package/deps/ncrypto/tests/BUILD.bazel +0 -11
- package/deps/ncrypto/tests/CMakeLists.txt +0 -7
- package/deps/ncrypto/tests/basic.cpp +0 -856
- package/deps/ncrypto/tools/run-clang-format.sh +0 -42
- package/lib/tsconfig.tsbuildinfo +0 -1
package/src/cipher.ts
CHANGED
|
@@ -65,6 +65,100 @@ export function getCipherInfo(
|
|
|
65
65
|
return CipherUtils.getCipherInfo(name, options?.keyLength, options?.ivLength);
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
+
// libsodium ciphers aren't visible to OpenSSL's EVP_CIPHER_fetch, so
|
|
69
|
+
// getCipherInfo() returns undefined for them. Hard-code the (key, iv)
|
|
70
|
+
// byte-lengths the C++ factory will accept.
|
|
71
|
+
const LIBSODIUM_CIPHER_PARAMS: Readonly<
|
|
72
|
+
Record<string, { keyLength: number; ivLength: number }>
|
|
73
|
+
> = {
|
|
74
|
+
xsalsa20: { keyLength: 32, ivLength: 24 },
|
|
75
|
+
'xsalsa20-poly1305': { keyLength: 32, ivLength: 24 },
|
|
76
|
+
'xchacha20-poly1305': { keyLength: 32, ivLength: 24 },
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
function validateCipherParams(
|
|
80
|
+
cipherType: string,
|
|
81
|
+
keyByteLength: number,
|
|
82
|
+
ivByteLength: number,
|
|
83
|
+
): void {
|
|
84
|
+
if (typeof cipherType !== 'string' || cipherType.length === 0) {
|
|
85
|
+
throw new TypeError('cipher algorithm must be a non-empty string');
|
|
86
|
+
}
|
|
87
|
+
// ArrayBuffer.byteLength is always a non-negative integer, so the only
|
|
88
|
+
// out-of-range value we need to guard is 0 — empty key buffers must not
|
|
89
|
+
// reach OpenSSL's EVP_CipherInit_ex.
|
|
90
|
+
if (keyByteLength === 0) {
|
|
91
|
+
throw new RangeError(`Invalid key length 0 for cipher ${cipherType}`);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const lower = cipherType.toLowerCase();
|
|
95
|
+
const sodium = LIBSODIUM_CIPHER_PARAMS[lower];
|
|
96
|
+
if (sodium) {
|
|
97
|
+
// libsodium parlance: "nonce" rather than "iv". Phrase the expected
|
|
98
|
+
// size as a natural-language clause so callers asserting on either
|
|
99
|
+
// `key must be N bytes` or `Invalid key length N` both match.
|
|
100
|
+
if (keyByteLength !== sodium.keyLength) {
|
|
101
|
+
throw new RangeError(
|
|
102
|
+
`Invalid key length ${keyByteLength} for cipher ${cipherType} ` +
|
|
103
|
+
`(key must be ${sodium.keyLength} bytes)`,
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
if (ivByteLength !== sodium.ivLength) {
|
|
107
|
+
throw new RangeError(
|
|
108
|
+
`Invalid nonce length ${ivByteLength} for cipher ${cipherType} ` +
|
|
109
|
+
`(nonce must be ${sodium.ivLength} bytes)`,
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// OpenSSL path. Look up the cipher's defaults once. Most callers pass
|
|
116
|
+
// exactly the cipher's default key/iv lengths (e.g. AES-128-CBC always
|
|
117
|
+
// wants 16/16) — short-circuit those to a single native round-trip.
|
|
118
|
+
// Variable-length ciphers (GCM, CCM, OCB, ChaCha20-Poly1305) fall through
|
|
119
|
+
// to per-parameter validation calls so the error message can name which
|
|
120
|
+
// of {key, iv} is wrong.
|
|
121
|
+
const info = CipherUtils.getCipherInfo(cipherType);
|
|
122
|
+
if (info === undefined) {
|
|
123
|
+
throw new TypeError(`Unsupported or unknown cipher type: ${cipherType}`);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const expectedIv = info.ivLength ?? 0;
|
|
127
|
+
if (expectedIv === 0 && ivByteLength > 0) {
|
|
128
|
+
throw new RangeError(
|
|
129
|
+
`Cipher ${cipherType} does not use an iv (got ${ivByteLength} bytes)`,
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
if (expectedIv > 0 && ivByteLength === 0) {
|
|
133
|
+
throw new RangeError(
|
|
134
|
+
`Cipher ${cipherType} requires an iv but none was provided`,
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Fast path: lengths match the cipher's defaults exactly.
|
|
139
|
+
if (info.keyLength === keyByteLength && expectedIv === ivByteLength) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Variable-length: verify against native one parameter at a time.
|
|
144
|
+
if (
|
|
145
|
+
CipherUtils.getCipherInfo(cipherType, keyByteLength, undefined) ===
|
|
146
|
+
undefined
|
|
147
|
+
) {
|
|
148
|
+
throw new RangeError(
|
|
149
|
+
`Invalid key length ${keyByteLength} for cipher ${cipherType}`,
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
if (
|
|
153
|
+
expectedIv > 0 &&
|
|
154
|
+
CipherUtils.getCipherInfo(cipherType, undefined, ivByteLength) === undefined
|
|
155
|
+
) {
|
|
156
|
+
throw new RangeError(
|
|
157
|
+
`Invalid iv length ${ivByteLength} for cipher ${cipherType}`,
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
68
162
|
interface CipherArgs {
|
|
69
163
|
isCipher: boolean;
|
|
70
164
|
cipherType: string;
|
|
@@ -107,18 +201,24 @@ class CipherCommon extends Stream.Transform {
|
|
|
107
201
|
}
|
|
108
202
|
super(streamOptions); // Pass filtered options
|
|
109
203
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
204
|
+
// defaults to 16 bytes for AEAD modes; non-AEAD callers ignore it.
|
|
205
|
+
const authTagLen =
|
|
206
|
+
getUIntOption(
|
|
207
|
+
options as Readonly<Record<string, unknown>> | undefined,
|
|
208
|
+
'authTagLength',
|
|
209
|
+
) ?? 16;
|
|
210
|
+
|
|
211
|
+
const cipherKeyAB = binaryLikeToArrayBuffer(cipherKey);
|
|
212
|
+
const ivAB = binaryLikeToArrayBuffer(iv);
|
|
213
|
+
validateCipherParams(cipherType, cipherKeyAB.byteLength, ivAB.byteLength);
|
|
114
214
|
|
|
115
215
|
const factory =
|
|
116
216
|
NitroModules.createHybridObject<CipherFactory>('CipherFactory');
|
|
117
217
|
this.native = factory.createCipher({
|
|
118
218
|
isCipher,
|
|
119
219
|
cipherType,
|
|
120
|
-
cipherKey:
|
|
121
|
-
iv:
|
|
220
|
+
cipherKey: cipherKeyAB,
|
|
221
|
+
iv: ivAB,
|
|
122
222
|
authTagLen,
|
|
123
223
|
});
|
|
124
224
|
}
|
|
@@ -179,18 +279,31 @@ class CipherCommon extends Stream.Transform {
|
|
|
179
279
|
return Buffer.from(ret);
|
|
180
280
|
}
|
|
181
281
|
|
|
282
|
+
// Stream interface — surface synchronous errors (bad encoding,
|
|
283
|
+
// OpenSSL EVP failures, AEAD tag mismatch in `final()`, etc.) via
|
|
284
|
+
// the callback so they emit as stream 'error' events instead of
|
|
285
|
+
// throwing out of the Transform plumbing and crashing the host
|
|
286
|
+
// pipeline.
|
|
182
287
|
_transform(
|
|
183
288
|
chunk: BinaryLike,
|
|
184
289
|
encoding: BufferEncoding,
|
|
185
|
-
callback: () => void,
|
|
290
|
+
callback: (err?: Error | null) => void,
|
|
186
291
|
) {
|
|
187
|
-
|
|
188
|
-
|
|
292
|
+
try {
|
|
293
|
+
this.push(this.update(chunk, normalizeEncoding(encoding)));
|
|
294
|
+
callback();
|
|
295
|
+
} catch (err) {
|
|
296
|
+
callback(err as Error);
|
|
297
|
+
}
|
|
189
298
|
}
|
|
190
299
|
|
|
191
|
-
_flush(callback: () => void) {
|
|
192
|
-
|
|
193
|
-
|
|
300
|
+
_flush(callback: (err?: Error | null) => void) {
|
|
301
|
+
try {
|
|
302
|
+
this.push(this.final());
|
|
303
|
+
callback();
|
|
304
|
+
} catch (err) {
|
|
305
|
+
callback(err as Error);
|
|
306
|
+
}
|
|
194
307
|
}
|
|
195
308
|
|
|
196
309
|
public setAutoPadding(autoPadding?: boolean): this {
|
|
@@ -211,7 +324,14 @@ class CipherCommon extends Stream.Transform {
|
|
|
211
324
|
if (!this.native || typeof this.native.setAAD !== 'function') {
|
|
212
325
|
throw new Error('Cipher native object or setAAD method not initialized.');
|
|
213
326
|
}
|
|
214
|
-
|
|
327
|
+
// Use binaryLikeToArrayBuffer (not `buffer.buffer`) so that sliced /
|
|
328
|
+
// offset views send only the AAD bytes the caller intended. Passing the
|
|
329
|
+
// raw backing ArrayBuffer authenticates the wrong data and silently
|
|
330
|
+
// breaks the AEAD integrity guarantee.
|
|
331
|
+
const res = this.native.setAAD(
|
|
332
|
+
binaryLikeToArrayBuffer(buffer),
|
|
333
|
+
options?.plaintextLength,
|
|
334
|
+
);
|
|
215
335
|
if (!res) {
|
|
216
336
|
throw new Error('setAAD failed (native call returned false)');
|
|
217
337
|
}
|
|
@@ -360,13 +480,17 @@ export function xsalsa20(
|
|
|
360
480
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
361
481
|
counter?: number,
|
|
362
482
|
): Uint8Array {
|
|
483
|
+
const cipherKeyAB = binaryLikeToArrayBuffer(key);
|
|
484
|
+
const ivAB = binaryLikeToArrayBuffer(nonce);
|
|
485
|
+
validateCipherParams('xsalsa20', cipherKeyAB.byteLength, ivAB.byteLength);
|
|
486
|
+
|
|
363
487
|
const factory =
|
|
364
488
|
NitroModules.createHybridObject<CipherFactory>('CipherFactory');
|
|
365
489
|
const native = factory.createCipher({
|
|
366
490
|
isCipher: true,
|
|
367
491
|
cipherType: 'xsalsa20',
|
|
368
|
-
cipherKey:
|
|
369
|
-
iv:
|
|
492
|
+
cipherKey: cipherKeyAB,
|
|
493
|
+
iv: ivAB,
|
|
370
494
|
});
|
|
371
495
|
const result = native.update(binaryLikeToArrayBuffer(data));
|
|
372
496
|
return new Uint8Array(result);
|
package/src/dsa.ts
CHANGED
|
@@ -25,6 +25,12 @@ export class Dsa {
|
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
+
// FIPS 186-4 §4.2: only L = 1024, 2048, 3072 are sanctioned. NIST has
|
|
29
|
+
// deprecated DSA-1024 for new applications, but we retain it for
|
|
30
|
+
// interop with legacy systems and match Node's permissive default. We
|
|
31
|
+
// reject anything below 1024 outright.
|
|
32
|
+
const DSA_MIN_MODULUS_LENGTH = 1024;
|
|
33
|
+
|
|
28
34
|
function dsa_prepareKeyGenParams(
|
|
29
35
|
options: GenerateKeyPairOptions | undefined,
|
|
30
36
|
): Dsa {
|
|
@@ -34,8 +40,11 @@ function dsa_prepareKeyGenParams(
|
|
|
34
40
|
|
|
35
41
|
const { modulusLength, divisorLength } = options;
|
|
36
42
|
|
|
37
|
-
if (!modulusLength || modulusLength
|
|
38
|
-
throw new
|
|
43
|
+
if (!modulusLength || modulusLength < DSA_MIN_MODULUS_LENGTH) {
|
|
44
|
+
throw new RangeError(
|
|
45
|
+
`DSA modulusLength must be at least ${DSA_MIN_MODULUS_LENGTH} bits ` +
|
|
46
|
+
`(got ${modulusLength ?? 0})`,
|
|
47
|
+
);
|
|
39
48
|
}
|
|
40
49
|
|
|
41
50
|
return new Dsa(modulusLength, divisorLength);
|
package/src/hash.ts
CHANGED
|
@@ -183,18 +183,28 @@ class Hash extends Stream.Transform {
|
|
|
183
183
|
return this.native.getOpenSSLVersion();
|
|
184
184
|
}
|
|
185
185
|
|
|
186
|
-
//
|
|
186
|
+
// Stream interface — surface synchronous errors via the callback so
|
|
187
|
+
// they emit as stream 'error' events instead of throwing out of the
|
|
188
|
+
// Transform plumbing (which would crash the host pipeline).
|
|
187
189
|
_transform(
|
|
188
190
|
chunk: BinaryLike,
|
|
189
191
|
encoding: BufferEncoding,
|
|
190
|
-
callback: () => void,
|
|
192
|
+
callback: (err?: Error | null) => void,
|
|
191
193
|
) {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
+
try {
|
|
195
|
+
this.update(chunk, encoding as Encoding);
|
|
196
|
+
callback();
|
|
197
|
+
} catch (err) {
|
|
198
|
+
callback(err as Error);
|
|
199
|
+
}
|
|
194
200
|
}
|
|
195
|
-
_flush(callback: () => void) {
|
|
196
|
-
|
|
197
|
-
|
|
201
|
+
_flush(callback: (err?: Error | null) => void) {
|
|
202
|
+
try {
|
|
203
|
+
this.push(this.digest());
|
|
204
|
+
callback();
|
|
205
|
+
} catch (err) {
|
|
206
|
+
callback(err as Error);
|
|
207
|
+
}
|
|
198
208
|
}
|
|
199
209
|
}
|
|
200
210
|
|
package/src/hkdf.ts
CHANGED
|
@@ -45,6 +45,46 @@ function sanitizeInput(input: BinaryLike, name: string): ArrayBuffer {
|
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
// Output byte-length of each fixed-length digest. HKDF requires a fixed-
|
|
49
|
+
// output hash (it builds on HMAC), so XOFs like SHAKE128/256 are not
|
|
50
|
+
// included even though `normalizeHashName` will accept them — passing
|
|
51
|
+
// SHAKE here is a caller bug we surface as `Unsupported HKDF digest`
|
|
52
|
+
// instead of letting the native side return an opaque error.
|
|
53
|
+
const HKDF_HASH_BYTES: Readonly<Record<string, number>> = {
|
|
54
|
+
sha1: 20,
|
|
55
|
+
sha224: 28,
|
|
56
|
+
sha256: 32,
|
|
57
|
+
sha384: 48,
|
|
58
|
+
sha512: 64,
|
|
59
|
+
'sha3-256': 32,
|
|
60
|
+
'sha3-384': 48,
|
|
61
|
+
'sha3-512': 64,
|
|
62
|
+
ripemd160: 20,
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
function validateHkdfKeylen(digest: string, keylen: number): void {
|
|
66
|
+
if (
|
|
67
|
+
typeof keylen !== 'number' ||
|
|
68
|
+
!Number.isFinite(keylen) ||
|
|
69
|
+
!Number.isInteger(keylen) ||
|
|
70
|
+
keylen < 0 ||
|
|
71
|
+
keylen > 0x7fff_ffff
|
|
72
|
+
) {
|
|
73
|
+
throw new TypeError('Bad key length');
|
|
74
|
+
}
|
|
75
|
+
const hashLen = HKDF_HASH_BYTES[digest.toLowerCase()];
|
|
76
|
+
if (hashLen === undefined) {
|
|
77
|
+
throw new TypeError(`Unsupported HKDF digest: ${digest}`);
|
|
78
|
+
}
|
|
79
|
+
// RFC 5869 §2.3: L ≤ 255 * HashLen.
|
|
80
|
+
if (keylen > 255 * hashLen) {
|
|
81
|
+
throw new RangeError(
|
|
82
|
+
`HKDF keylen ${keylen} exceeds RFC 5869 ceiling ` +
|
|
83
|
+
`255 * HashLen (${255 * hashLen}) for ${digest}`,
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
48
88
|
export function hkdf(
|
|
49
89
|
digest: string,
|
|
50
90
|
key: KeyMaterial,
|
|
@@ -61,9 +101,7 @@ export function hkdf(
|
|
|
61
101
|
const sanitizedSalt = sanitizeInput(salt, 'Salt');
|
|
62
102
|
const sanitizedInfo = sanitizeInput(info, 'Info');
|
|
63
103
|
|
|
64
|
-
|
|
65
|
-
throw new TypeError('Bad key length');
|
|
66
|
-
}
|
|
104
|
+
validateHkdfKeylen(normalizedDigest, keylen);
|
|
67
105
|
|
|
68
106
|
const nativeMod = getNative();
|
|
69
107
|
nativeMod
|
|
@@ -99,9 +137,7 @@ export function hkdfSync(
|
|
|
99
137
|
const sanitizedSalt = sanitizeInput(salt, 'Salt');
|
|
100
138
|
const sanitizedInfo = sanitizeInput(info, 'Info');
|
|
101
139
|
|
|
102
|
-
|
|
103
|
-
throw new TypeError('Bad key length');
|
|
104
|
-
}
|
|
140
|
+
validateHkdfKeylen(normalizedDigest, keylen);
|
|
105
141
|
|
|
106
142
|
const nativeMod = getNative();
|
|
107
143
|
const result = nativeMod.deriveKeySync(
|
|
@@ -134,6 +170,8 @@ export function hkdfDeriveBits(
|
|
|
134
170
|
const hashName = typeof hash === 'string' ? hash : hash.name;
|
|
135
171
|
const normalizedDigest = normalizeHashName(hashName);
|
|
136
172
|
|
|
173
|
+
validateHkdfKeylen(normalizedDigest, keylen);
|
|
174
|
+
|
|
137
175
|
const nativeMod = getNative();
|
|
138
176
|
const result = nativeMod.deriveKeySync(
|
|
139
177
|
normalizedDigest,
|
package/src/hmac.ts
CHANGED
|
@@ -85,18 +85,28 @@ class Hmac extends Stream.Transform {
|
|
|
85
85
|
return Buffer.from(nativeDigest);
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
//
|
|
88
|
+
// Stream interface — surface synchronous errors via the callback so
|
|
89
|
+
// they emit as stream 'error' events instead of throwing out of the
|
|
90
|
+
// Transform plumbing.
|
|
89
91
|
_transform(
|
|
90
92
|
chunk: BinaryLike,
|
|
91
93
|
encoding: BufferEncoding,
|
|
92
|
-
callback: () => void,
|
|
94
|
+
callback: (err?: Error | null) => void,
|
|
93
95
|
) {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
+
try {
|
|
97
|
+
this.update(chunk, encoding as Encoding);
|
|
98
|
+
callback();
|
|
99
|
+
} catch (err) {
|
|
100
|
+
callback(err as Error);
|
|
101
|
+
}
|
|
96
102
|
}
|
|
97
|
-
_flush(callback: () => void) {
|
|
98
|
-
|
|
99
|
-
|
|
103
|
+
_flush(callback: (err?: Error | null) => void) {
|
|
104
|
+
try {
|
|
105
|
+
this.push(this.digest());
|
|
106
|
+
callback();
|
|
107
|
+
} catch (err) {
|
|
108
|
+
callback(err as Error);
|
|
109
|
+
}
|
|
100
110
|
}
|
|
101
111
|
}
|
|
102
112
|
|
package/src/keys/publicCipher.ts
CHANGED
|
@@ -144,8 +144,13 @@ export function publicDecrypt(
|
|
|
144
144
|
paddingMode,
|
|
145
145
|
);
|
|
146
146
|
return Buffer.from(decrypted);
|
|
147
|
-
} catch
|
|
148
|
-
|
|
147
|
+
} catch {
|
|
148
|
+
// Bleichenbacher mitigation: surface a single, content-independent error
|
|
149
|
+
// for every decrypt failure so an attacker cannot use error-message
|
|
150
|
+
// differences as a padding oracle. The native side already collapses its
|
|
151
|
+
// OpenSSL error codes to the same opaque message; we drop it here too
|
|
152
|
+
// rather than re-leaking it via string interpolation.
|
|
153
|
+
throw new Error('publicDecrypt failed');
|
|
149
154
|
}
|
|
150
155
|
}
|
|
151
156
|
|
|
@@ -244,7 +249,8 @@ export function privateDecrypt(
|
|
|
244
249
|
oaepLabel,
|
|
245
250
|
);
|
|
246
251
|
return Buffer.from(decrypted);
|
|
247
|
-
} catch
|
|
248
|
-
|
|
252
|
+
} catch {
|
|
253
|
+
// Bleichenbacher mitigation — see publicDecrypt above.
|
|
254
|
+
throw new Error('privateDecrypt failed');
|
|
249
255
|
}
|
|
250
256
|
}
|
package/src/random.ts
CHANGED
|
@@ -59,8 +59,17 @@ export function randomFill(buffer: ABV, ...rest: unknown[]): void {
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
getNative();
|
|
62
|
-
|
|
62
|
+
const ab = abvToArrayBuffer(buffer);
|
|
63
|
+
const start = viewOffset + offset;
|
|
64
|
+
random.randomFill(ab, start, size).then(
|
|
63
65
|
(res: ArrayBuffer) => {
|
|
66
|
+
// The native async path operates on a copy of the underlying buffer to
|
|
67
|
+
// avoid races with JS-owned memory on the worker thread, so the
|
|
68
|
+
// randomized bytes live in `res`, not in the caller's buffer. Copy them
|
|
69
|
+
// back to preserve Node's in-place randomFill semantics.
|
|
70
|
+
if (res !== ab) {
|
|
71
|
+
new Uint8Array(ab, start, size).set(new Uint8Array(res, start, size));
|
|
72
|
+
}
|
|
64
73
|
callback(null, res);
|
|
65
74
|
},
|
|
66
75
|
(e: Error) => {
|
|
@@ -224,7 +233,7 @@ export function randomInt(
|
|
|
224
233
|
if (x < randLimit) {
|
|
225
234
|
const n = (x % range) + min;
|
|
226
235
|
if (isSync) return n;
|
|
227
|
-
process.nextTick(callback as RandomIntCallback,
|
|
236
|
+
process.nextTick(callback as RandomIntCallback, null, n);
|
|
228
237
|
return;
|
|
229
238
|
}
|
|
230
239
|
}
|
package/src/rsa.ts
CHANGED
|
@@ -60,6 +60,13 @@ export class Rsa {
|
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
+
// Modern best practice (NIST SP 800-131A Rev. 2, IETF RFC 8017): RSA keys
|
|
64
|
+
// shorter than 2048 bits are deprecated for both signing and encryption.
|
|
65
|
+
// 1024-bit moduli have been factored in academic settings; 768-bit keys
|
|
66
|
+
// have been factored on commodity hardware. Reject anything below 2048
|
|
67
|
+
// at the JS boundary so callers can't accidentally generate weak keys.
|
|
68
|
+
const RSA_MIN_MODULUS_LENGTH = 2048;
|
|
69
|
+
|
|
63
70
|
// Node API
|
|
64
71
|
export async function rsa_generateKeyPair(
|
|
65
72
|
algorithm: SubtleAlgorithm,
|
|
@@ -70,8 +77,12 @@ export async function rsa_generateKeyPair(
|
|
|
70
77
|
algorithm as RsaHashedKeyGenParams;
|
|
71
78
|
|
|
72
79
|
// Validate parameters first
|
|
73
|
-
if (!modulusLength || modulusLength <
|
|
74
|
-
throw lazyDOMException(
|
|
80
|
+
if (!modulusLength || modulusLength < RSA_MIN_MODULUS_LENGTH) {
|
|
81
|
+
throw lazyDOMException(
|
|
82
|
+
`RSA modulusLength must be at least ${RSA_MIN_MODULUS_LENGTH} bits ` +
|
|
83
|
+
`(got ${modulusLength ?? 0})`,
|
|
84
|
+
'OperationError',
|
|
85
|
+
);
|
|
75
86
|
}
|
|
76
87
|
|
|
77
88
|
if (!publicExponent || publicExponent.length === 0) {
|
|
@@ -198,8 +209,11 @@ function rsa_prepareKeyGenParams(
|
|
|
198
209
|
hash?: string;
|
|
199
210
|
};
|
|
200
211
|
|
|
201
|
-
if (!modulusLength || modulusLength <
|
|
202
|
-
throw new
|
|
212
|
+
if (!modulusLength || modulusLength < RSA_MIN_MODULUS_LENGTH) {
|
|
213
|
+
throw new RangeError(
|
|
214
|
+
`RSA modulusLength must be at least ${RSA_MIN_MODULUS_LENGTH} bits ` +
|
|
215
|
+
`(got ${modulusLength ?? 0})`,
|
|
216
|
+
);
|
|
203
217
|
}
|
|
204
218
|
|
|
205
219
|
const pubExp = publicExponent || 65537;
|
package/src/scrypt.ts
CHANGED
|
@@ -35,12 +35,83 @@ const defaults = {
|
|
|
35
35
|
maxmem: 32 * 1024 * 1024,
|
|
36
36
|
};
|
|
37
37
|
|
|
38
|
+
// RFC 7914 § 2: scrypt parameters
|
|
39
|
+
// N — CPU/memory cost; must be a power of 2 > 1.
|
|
40
|
+
// r — block size; positive integer.
|
|
41
|
+
// p — parallelization factor; positive integer.
|
|
42
|
+
// r * p must be < 2^30 (otherwise the spec output is undefined).
|
|
43
|
+
// The work buffer is 128 * r * N bytes, which must fit in maxmem.
|
|
44
|
+
const SCRYPT_MAX_RP = 1 << 30; // 2^30 per RFC 7914
|
|
45
|
+
|
|
46
|
+
function isPositiveInteger(value: unknown): value is number {
|
|
47
|
+
return (
|
|
48
|
+
typeof value === 'number' &&
|
|
49
|
+
Number.isFinite(value) &&
|
|
50
|
+
Number.isInteger(value) &&
|
|
51
|
+
value > 0
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function validateScryptParams(
|
|
56
|
+
N: number,
|
|
57
|
+
r: number,
|
|
58
|
+
p: number,
|
|
59
|
+
maxmem: number,
|
|
60
|
+
): void {
|
|
61
|
+
if (!isPositiveInteger(N)) {
|
|
62
|
+
throw new RangeError(`Invalid scrypt cost (N): ${N}`);
|
|
63
|
+
}
|
|
64
|
+
// Power-of-two & > 1 check (RFC 7914 §6 step 1).
|
|
65
|
+
if (N <= 1 || (N & (N - 1)) !== 0) {
|
|
66
|
+
throw new RangeError(
|
|
67
|
+
`Invalid scrypt cost (N): ${N} — must be a power of 2 greater than 1`,
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
if (!isPositiveInteger(r)) {
|
|
71
|
+
throw new RangeError(`Invalid scrypt blockSize (r): ${r}`);
|
|
72
|
+
}
|
|
73
|
+
if (!isPositiveInteger(p)) {
|
|
74
|
+
throw new RangeError(`Invalid scrypt parallelization (p): ${p}`);
|
|
75
|
+
}
|
|
76
|
+
if (r * p >= SCRYPT_MAX_RP) {
|
|
77
|
+
throw new RangeError(
|
|
78
|
+
`Invalid scrypt parameters: r * p (${r * p}) must be < 2^30`,
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
if (!isPositiveInteger(maxmem)) {
|
|
82
|
+
throw new RangeError(`Invalid scrypt maxmem: ${maxmem}`);
|
|
83
|
+
}
|
|
84
|
+
// 128 * r * N is the minimum working memory. Reject early so we don't
|
|
85
|
+
// hand a doomed parameter set to native and OOM the device.
|
|
86
|
+
const required = 128 * r * N;
|
|
87
|
+
if (required > maxmem) {
|
|
88
|
+
throw new RangeError(
|
|
89
|
+
`Invalid scrypt parameters: working memory ${required} bytes ` +
|
|
90
|
+
`exceeds maxmem ${maxmem}`,
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function validateScryptKeylen(keylen: number): void {
|
|
96
|
+
if (
|
|
97
|
+
typeof keylen !== 'number' ||
|
|
98
|
+
!Number.isFinite(keylen) ||
|
|
99
|
+
!Number.isInteger(keylen) ||
|
|
100
|
+
keylen < 0 ||
|
|
101
|
+
keylen > 0x7fff_ffff
|
|
102
|
+
) {
|
|
103
|
+
throw new TypeError('Bad key length');
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
38
107
|
function getScryptParams(options?: ScryptOptions) {
|
|
39
108
|
const N = options?.N ?? options?.cost ?? defaults.N;
|
|
40
109
|
const r = options?.r ?? options?.blockSize ?? defaults.r;
|
|
41
110
|
const p = options?.p ?? options?.parallelization ?? defaults.p;
|
|
42
111
|
const maxmem = options?.maxmem ?? defaults.maxmem;
|
|
43
112
|
|
|
113
|
+
validateScryptParams(N, r, p, maxmem);
|
|
114
|
+
|
|
44
115
|
return { N, r, p, maxmem };
|
|
45
116
|
}
|
|
46
117
|
|
|
@@ -85,9 +156,7 @@ export function scrypt(
|
|
|
85
156
|
const sanitizedPassword = sanitizeInput(password, 'Password');
|
|
86
157
|
const sanitizedSalt = sanitizeInput(salt, 'Salt');
|
|
87
158
|
|
|
88
|
-
|
|
89
|
-
throw new TypeError('Bad key length');
|
|
90
|
-
}
|
|
159
|
+
validateScryptKeylen(keylen);
|
|
91
160
|
|
|
92
161
|
const nativeMod = getNative();
|
|
93
162
|
nativeMod
|
|
@@ -115,9 +184,7 @@ export function scryptSync(
|
|
|
115
184
|
const sanitizedPassword = sanitizeInput(password, 'Password');
|
|
116
185
|
const sanitizedSalt = sanitizeInput(salt, 'Salt');
|
|
117
186
|
|
|
118
|
-
|
|
119
|
-
throw new TypeError('Bad key length');
|
|
120
|
-
}
|
|
187
|
+
validateScryptKeylen(keylen);
|
|
121
188
|
|
|
122
189
|
const nativeMod = getNative();
|
|
123
190
|
const result = nativeMod.deriveKeySync(
|
package/src/specs/utils.nitro.ts
CHANGED
|
@@ -2,6 +2,4 @@ import { type HybridObject } from 'react-native-nitro-modules';
|
|
|
2
2
|
|
|
3
3
|
export interface Utils extends HybridObject<{ ios: 'c++'; android: 'c++' }> {
|
|
4
4
|
timingSafeEqual(a: ArrayBuffer, b: ArrayBuffer): boolean;
|
|
5
|
-
bufferToString(buffer: ArrayBuffer, encoding: string): string;
|
|
6
|
-
stringToBuffer(str: string, encoding: string): ArrayBuffer;
|
|
7
5
|
}
|