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
|
@@ -15,6 +15,9 @@
|
|
|
15
15
|
|
|
16
16
|
namespace margelo::nitro::crypto {
|
|
17
17
|
|
|
18
|
+
using EVP_MD_CTX_ptr = std::unique_ptr<EVP_MD_CTX, decltype(&EVP_MD_CTX_free)>;
|
|
19
|
+
using EVP_PKEY_CTX_ptr = std::unique_ptr<EVP_PKEY_CTX, decltype(&EVP_PKEY_CTX_free)>;
|
|
20
|
+
|
|
18
21
|
int HybridMlDsaKeyPair::getEvpPkeyType() const {
|
|
19
22
|
#if RNQC_HAS_ML_DSA
|
|
20
23
|
if (variant_ == "ML-DSA-44")
|
|
@@ -39,8 +42,9 @@ void HybridMlDsaKeyPair::setVariant(const std::string& variant) {
|
|
|
39
42
|
|
|
40
43
|
std::shared_ptr<Promise<void>> HybridMlDsaKeyPair::generateKeyPair(double publicFormat, double publicType, double privateFormat,
|
|
41
44
|
double privateType) {
|
|
42
|
-
|
|
43
|
-
|
|
45
|
+
auto self = this->shared_cast<HybridMlDsaKeyPair>();
|
|
46
|
+
return Promise<void>::async([self, publicFormat, publicType, privateFormat, privateType]() {
|
|
47
|
+
self->generateKeyPairSync(publicFormat, publicType, privateFormat, privateType);
|
|
44
48
|
});
|
|
45
49
|
}
|
|
46
50
|
|
|
@@ -61,24 +65,20 @@ void HybridMlDsaKeyPair::generateKeyPairSync(double publicFormat, double publicT
|
|
|
61
65
|
|
|
62
66
|
pkey_.reset();
|
|
63
67
|
|
|
64
|
-
|
|
68
|
+
EVP_PKEY_CTX_ptr pctx(EVP_PKEY_CTX_new_from_name(nullptr, variant_.c_str(), nullptr), EVP_PKEY_CTX_free);
|
|
65
69
|
if (pctx == nullptr) {
|
|
66
70
|
throw std::runtime_error("Failed to create key context for " + variant_ + ": " + getOpenSSLError());
|
|
67
71
|
}
|
|
68
72
|
|
|
69
|
-
if (EVP_PKEY_keygen_init(pctx) <= 0) {
|
|
70
|
-
EVP_PKEY_CTX_free(pctx);
|
|
73
|
+
if (EVP_PKEY_keygen_init(pctx.get()) <= 0) {
|
|
71
74
|
throw std::runtime_error("Failed to initialize keygen: " + getOpenSSLError());
|
|
72
75
|
}
|
|
73
76
|
|
|
74
77
|
EVP_PKEY* raw = nullptr;
|
|
75
|
-
if (EVP_PKEY_keygen(pctx, &raw) <= 0) {
|
|
76
|
-
EVP_PKEY_CTX_free(pctx);
|
|
78
|
+
if (EVP_PKEY_keygen(pctx.get(), &raw) <= 0) {
|
|
77
79
|
throw std::runtime_error("Failed to generate ML-DSA key pair: " + getOpenSSLError());
|
|
78
80
|
}
|
|
79
81
|
pkey_.reset(raw);
|
|
80
|
-
|
|
81
|
-
EVP_PKEY_CTX_free(pctx);
|
|
82
82
|
#endif
|
|
83
83
|
}
|
|
84
84
|
|
|
@@ -108,13 +108,14 @@ std::shared_ptr<ArrayBuffer> HybridMlDsaKeyPair::getPublicKey() {
|
|
|
108
108
|
BUF_MEM* bptr;
|
|
109
109
|
BIO_get_mem_ptr(bio, &bptr);
|
|
110
110
|
|
|
111
|
-
uint8_t* data = new uint8_t[bptr->length];
|
|
112
|
-
memcpy(data, bptr->data, bptr->length);
|
|
113
111
|
size_t len = bptr->length;
|
|
112
|
+
auto buf = std::make_unique<uint8_t[]>(len);
|
|
113
|
+
memcpy(buf.get(), bptr->data, len);
|
|
114
114
|
|
|
115
115
|
BIO_free(bio);
|
|
116
116
|
|
|
117
|
-
|
|
117
|
+
uint8_t* raw_ptr = buf.get();
|
|
118
|
+
return std::make_shared<NativeArrayBuffer>(buf.release(), len, [raw_ptr]() { delete[] raw_ptr; });
|
|
118
119
|
#endif
|
|
119
120
|
}
|
|
120
121
|
|
|
@@ -144,19 +145,23 @@ std::shared_ptr<ArrayBuffer> HybridMlDsaKeyPair::getPrivateKey() {
|
|
|
144
145
|
BUF_MEM* bptr;
|
|
145
146
|
BIO_get_mem_ptr(bio, &bptr);
|
|
146
147
|
|
|
147
|
-
uint8_t* data = new uint8_t[bptr->length];
|
|
148
|
-
memcpy(data, bptr->data, bptr->length);
|
|
149
148
|
size_t len = bptr->length;
|
|
149
|
+
auto buf = std::make_unique<uint8_t[]>(len);
|
|
150
|
+
memcpy(buf.get(), bptr->data, len);
|
|
150
151
|
|
|
152
|
+
// Wipe the private key bytes from the BIO before freeing.
|
|
153
|
+
secureZero(bptr->data, bptr->length);
|
|
151
154
|
BIO_free(bio);
|
|
152
155
|
|
|
153
|
-
|
|
156
|
+
uint8_t* raw_ptr = buf.get();
|
|
157
|
+
return std::make_shared<NativeArrayBuffer>(buf.release(), len, [raw_ptr]() { delete[] raw_ptr; });
|
|
154
158
|
#endif
|
|
155
159
|
}
|
|
156
160
|
|
|
157
161
|
std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> HybridMlDsaKeyPair::sign(const std::shared_ptr<ArrayBuffer>& message) {
|
|
158
162
|
auto nativeMessage = ToNativeArrayBuffer(message);
|
|
159
|
-
|
|
163
|
+
auto self = this->shared_cast<HybridMlDsaKeyPair>();
|
|
164
|
+
return Promise<std::shared_ptr<ArrayBuffer>>::async([self, nativeMessage]() { return self->signSync(nativeMessage); });
|
|
160
165
|
}
|
|
161
166
|
|
|
162
167
|
std::shared_ptr<ArrayBuffer> HybridMlDsaKeyPair::signSync(const std::shared_ptr<ArrayBuffer>& message) {
|
|
@@ -166,40 +171,30 @@ std::shared_ptr<ArrayBuffer> HybridMlDsaKeyPair::signSync(const std::shared_ptr<
|
|
|
166
171
|
clearOpenSSLErrors();
|
|
167
172
|
checkKeyPair();
|
|
168
173
|
|
|
169
|
-
|
|
174
|
+
EVP_MD_CTX_ptr md_ctx(EVP_MD_CTX_new(), EVP_MD_CTX_free);
|
|
170
175
|
if (md_ctx == nullptr) {
|
|
171
176
|
throw std::runtime_error("Failed to create signing context");
|
|
172
177
|
}
|
|
173
178
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
throw std::runtime_error("Failed to create signing context for " + variant_);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
if (EVP_DigestSignInit(md_ctx, &pkey_ctx, nullptr, nullptr, pkey_.get()) <= 0) {
|
|
181
|
-
EVP_MD_CTX_free(md_ctx);
|
|
182
|
-
EVP_PKEY_CTX_free(pkey_ctx);
|
|
179
|
+
// Pass nullptr — EVP_DigestSignInit allocates the matching PKEY_CTX from
|
|
180
|
+
// pkey_ and the EVP_MD_CTX takes ownership of it.
|
|
181
|
+
if (EVP_DigestSignInit(md_ctx.get(), nullptr, nullptr, nullptr, pkey_.get()) <= 0) {
|
|
183
182
|
throw std::runtime_error("Failed to initialize signing: " + getOpenSSLError());
|
|
184
183
|
}
|
|
185
184
|
|
|
186
185
|
size_t sig_len = 0;
|
|
187
|
-
if (EVP_DigestSign(md_ctx, nullptr, &sig_len, message->data(), message->size()) <= 0) {
|
|
188
|
-
EVP_MD_CTX_free(md_ctx);
|
|
186
|
+
if (EVP_DigestSign(md_ctx.get(), nullptr, &sig_len, message->data(), message->size()) <= 0) {
|
|
189
187
|
throw std::runtime_error("Failed to calculate signature size: " + getOpenSSLError());
|
|
190
188
|
}
|
|
191
189
|
|
|
192
|
-
|
|
190
|
+
auto sig = std::make_unique<uint8_t[]>(sig_len);
|
|
193
191
|
|
|
194
|
-
if (EVP_DigestSign(md_ctx, sig, &sig_len, message->data(), message->size()) <= 0) {
|
|
195
|
-
EVP_MD_CTX_free(md_ctx);
|
|
196
|
-
delete[] sig;
|
|
192
|
+
if (EVP_DigestSign(md_ctx.get(), sig.get(), &sig_len, message->data(), message->size()) <= 0) {
|
|
197
193
|
throw std::runtime_error("Failed to sign message: " + getOpenSSLError());
|
|
198
194
|
}
|
|
199
195
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
return std::make_shared<NativeArrayBuffer>(sig, sig_len, [=]() { delete[] sig; });
|
|
196
|
+
uint8_t* raw_ptr = sig.get();
|
|
197
|
+
return std::make_shared<NativeArrayBuffer>(sig.release(), sig_len, [raw_ptr]() { delete[] raw_ptr; });
|
|
203
198
|
#endif
|
|
204
199
|
}
|
|
205
200
|
|
|
@@ -207,7 +202,8 @@ std::shared_ptr<Promise<bool>> HybridMlDsaKeyPair::verify(const std::shared_ptr<
|
|
|
207
202
|
const std::shared_ptr<ArrayBuffer>& message) {
|
|
208
203
|
auto nativeSignature = ToNativeArrayBuffer(signature);
|
|
209
204
|
auto nativeMessage = ToNativeArrayBuffer(message);
|
|
210
|
-
|
|
205
|
+
auto self = this->shared_cast<HybridMlDsaKeyPair>();
|
|
206
|
+
return Promise<bool>::async([self, nativeSignature, nativeMessage]() { return self->verifySync(nativeSignature, nativeMessage); });
|
|
211
207
|
}
|
|
212
208
|
|
|
213
209
|
bool HybridMlDsaKeyPair::verifySync(const std::shared_ptr<ArrayBuffer>& signature, const std::shared_ptr<ArrayBuffer>& message) {
|
|
@@ -217,26 +213,18 @@ bool HybridMlDsaKeyPair::verifySync(const std::shared_ptr<ArrayBuffer>& signatur
|
|
|
217
213
|
clearOpenSSLErrors();
|
|
218
214
|
checkKeyPair();
|
|
219
215
|
|
|
220
|
-
|
|
216
|
+
EVP_MD_CTX_ptr md_ctx(EVP_MD_CTX_new(), EVP_MD_CTX_free);
|
|
221
217
|
if (md_ctx == nullptr) {
|
|
222
218
|
throw std::runtime_error("Failed to create verify context");
|
|
223
219
|
}
|
|
224
220
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
throw std::runtime_error("Failed to create verify context for " + variant_);
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
if (EVP_DigestVerifyInit(md_ctx, &pkey_ctx, nullptr, nullptr, pkey_.get()) <= 0) {
|
|
232
|
-
EVP_MD_CTX_free(md_ctx);
|
|
233
|
-
EVP_PKEY_CTX_free(pkey_ctx);
|
|
221
|
+
// Pass nullptr — EVP_DigestVerifyInit allocates the matching PKEY_CTX from
|
|
222
|
+
// pkey_ and the EVP_MD_CTX takes ownership of it.
|
|
223
|
+
if (EVP_DigestVerifyInit(md_ctx.get(), nullptr, nullptr, nullptr, pkey_.get()) <= 0) {
|
|
234
224
|
throw std::runtime_error("Failed to initialize verification: " + getOpenSSLError());
|
|
235
225
|
}
|
|
236
226
|
|
|
237
|
-
int result = EVP_DigestVerify(md_ctx, signature->data(), signature->size(), message->data(), message->size());
|
|
238
|
-
|
|
239
|
-
EVP_MD_CTX_free(md_ctx);
|
|
227
|
+
int result = EVP_DigestVerify(md_ctx.get(), signature->data(), signature->size(), message->data(), message->size());
|
|
240
228
|
|
|
241
229
|
if (result < 0) {
|
|
242
230
|
throw std::runtime_error("Verification error: " + getOpenSSLError());
|
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
|
|
16
16
|
namespace margelo::nitro::crypto {
|
|
17
17
|
|
|
18
|
+
using EVP_PKEY_CTX_ptr = std::unique_ptr<EVP_PKEY_CTX, decltype(&EVP_PKEY_CTX_free)>;
|
|
19
|
+
|
|
18
20
|
void HybridMlKemKeyPair::setVariant(const std::string& variant) {
|
|
19
21
|
#if !RNQC_HAS_ML_KEM
|
|
20
22
|
throw std::runtime_error("ML-KEM requires OpenSSL 3.5+");
|
|
@@ -27,8 +29,9 @@ void HybridMlKemKeyPair::setVariant(const std::string& variant) {
|
|
|
27
29
|
|
|
28
30
|
std::shared_ptr<Promise<void>> HybridMlKemKeyPair::generateKeyPair(double publicFormat, double publicType, double privateFormat,
|
|
29
31
|
double privateType) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
auto self = this->shared_cast<HybridMlKemKeyPair>();
|
|
33
|
+
return Promise<void>::async([self, publicFormat, publicType, privateFormat, privateType]() {
|
|
34
|
+
self->generateKeyPairSync(publicFormat, publicType, privateFormat, privateType);
|
|
32
35
|
});
|
|
33
36
|
}
|
|
34
37
|
|
|
@@ -49,24 +52,21 @@ void HybridMlKemKeyPair::generateKeyPairSync(double publicFormat, double publicT
|
|
|
49
52
|
|
|
50
53
|
pkey_.reset();
|
|
51
54
|
|
|
52
|
-
|
|
55
|
+
EVP_PKEY_CTX_ptr pctx(EVP_PKEY_CTX_new_from_name(nullptr, variant_.c_str(), nullptr), EVP_PKEY_CTX_free);
|
|
53
56
|
if (pctx == nullptr) {
|
|
54
57
|
throw std::runtime_error("Failed to create key context for " + variant_ + ": " + getOpenSSLError());
|
|
55
58
|
}
|
|
56
59
|
|
|
57
|
-
if (EVP_PKEY_keygen_init(pctx) <= 0) {
|
|
58
|
-
EVP_PKEY_CTX_free(pctx);
|
|
60
|
+
if (EVP_PKEY_keygen_init(pctx.get()) <= 0) {
|
|
59
61
|
throw std::runtime_error("Failed to initialize keygen: " + getOpenSSLError());
|
|
60
62
|
}
|
|
61
63
|
|
|
62
64
|
EVP_PKEY* raw = nullptr;
|
|
63
|
-
if (EVP_PKEY_keygen(pctx, &raw) <= 0) {
|
|
64
|
-
EVP_PKEY_CTX_free(pctx);
|
|
65
|
+
if (EVP_PKEY_keygen(pctx.get(), &raw) <= 0) {
|
|
65
66
|
throw std::runtime_error("Failed to generate ML-KEM key pair: " + getOpenSSLError());
|
|
66
67
|
}
|
|
67
68
|
|
|
68
69
|
pkey_.reset(raw);
|
|
69
|
-
EVP_PKEY_CTX_free(pctx);
|
|
70
70
|
#endif
|
|
71
71
|
}
|
|
72
72
|
|
|
@@ -96,13 +96,14 @@ std::shared_ptr<ArrayBuffer> HybridMlKemKeyPair::getPublicKey() {
|
|
|
96
96
|
BUF_MEM* bptr;
|
|
97
97
|
BIO_get_mem_ptr(bio, &bptr);
|
|
98
98
|
|
|
99
|
-
uint8_t* data = new uint8_t[bptr->length];
|
|
100
|
-
memcpy(data, bptr->data, bptr->length);
|
|
101
99
|
size_t len = bptr->length;
|
|
100
|
+
auto buf = std::make_unique<uint8_t[]>(len);
|
|
101
|
+
memcpy(buf.get(), bptr->data, len);
|
|
102
102
|
|
|
103
103
|
BIO_free(bio);
|
|
104
104
|
|
|
105
|
-
|
|
105
|
+
uint8_t* raw_ptr = buf.get();
|
|
106
|
+
return std::make_shared<NativeArrayBuffer>(buf.release(), len, [raw_ptr]() { delete[] raw_ptr; });
|
|
106
107
|
#endif
|
|
107
108
|
}
|
|
108
109
|
|
|
@@ -132,13 +133,16 @@ std::shared_ptr<ArrayBuffer> HybridMlKemKeyPair::getPrivateKey() {
|
|
|
132
133
|
BUF_MEM* bptr;
|
|
133
134
|
BIO_get_mem_ptr(bio, &bptr);
|
|
134
135
|
|
|
135
|
-
uint8_t* data = new uint8_t[bptr->length];
|
|
136
|
-
memcpy(data, bptr->data, bptr->length);
|
|
137
136
|
size_t len = bptr->length;
|
|
137
|
+
auto buf = std::make_unique<uint8_t[]>(len);
|
|
138
|
+
memcpy(buf.get(), bptr->data, len);
|
|
138
139
|
|
|
140
|
+
// Wipe the private key bytes from the BIO before freeing.
|
|
141
|
+
secureZero(bptr->data, bptr->length);
|
|
139
142
|
BIO_free(bio);
|
|
140
143
|
|
|
141
|
-
|
|
144
|
+
uint8_t* raw_ptr = buf.get();
|
|
145
|
+
return std::make_shared<NativeArrayBuffer>(buf.release(), len, [raw_ptr]() { delete[] raw_ptr; });
|
|
142
146
|
#endif
|
|
143
147
|
}
|
|
144
148
|
|
|
@@ -213,7 +217,8 @@ void HybridMlKemKeyPair::setPrivateKey(const std::shared_ptr<ArrayBuffer>& keyDa
|
|
|
213
217
|
}
|
|
214
218
|
|
|
215
219
|
std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> HybridMlKemKeyPair::encapsulate() {
|
|
216
|
-
|
|
220
|
+
auto self = this->shared_cast<HybridMlKemKeyPair>();
|
|
221
|
+
return Promise<std::shared_ptr<ArrayBuffer>>::async([self]() { return self->encapsulateSync(); });
|
|
217
222
|
}
|
|
218
223
|
|
|
219
224
|
std::shared_ptr<ArrayBuffer> HybridMlKemKeyPair::encapsulateSync() {
|
|
@@ -223,51 +228,47 @@ std::shared_ptr<ArrayBuffer> HybridMlKemKeyPair::encapsulateSync() {
|
|
|
223
228
|
clearOpenSSLErrors();
|
|
224
229
|
checkKeyPair();
|
|
225
230
|
|
|
226
|
-
|
|
231
|
+
EVP_PKEY_CTX_ptr ctx(EVP_PKEY_CTX_new(pkey_.get(), nullptr), EVP_PKEY_CTX_free);
|
|
227
232
|
if (ctx == nullptr) {
|
|
228
233
|
throw std::runtime_error("Failed to create encapsulation context: " + getOpenSSLError());
|
|
229
234
|
}
|
|
230
235
|
|
|
231
|
-
if (EVP_PKEY_encapsulate_init(ctx, nullptr) <= 0) {
|
|
232
|
-
EVP_PKEY_CTX_free(ctx);
|
|
236
|
+
if (EVP_PKEY_encapsulate_init(ctx.get(), nullptr) <= 0) {
|
|
233
237
|
throw std::runtime_error("Failed to initialize encapsulation: " + getOpenSSLError());
|
|
234
238
|
}
|
|
235
239
|
|
|
236
240
|
size_t ct_len = 0;
|
|
237
241
|
size_t sk_len = 0;
|
|
238
|
-
if (EVP_PKEY_encapsulate(ctx, nullptr, &ct_len, nullptr, &sk_len) <= 0) {
|
|
239
|
-
EVP_PKEY_CTX_free(ctx);
|
|
242
|
+
if (EVP_PKEY_encapsulate(ctx.get(), nullptr, &ct_len, nullptr, &sk_len) <= 0) {
|
|
240
243
|
throw std::runtime_error("Failed to determine encapsulation output sizes: " + getOpenSSLError());
|
|
241
244
|
}
|
|
242
245
|
|
|
243
246
|
// Pack result as: [uint32 ct_len][uint32 sk_len][ciphertext][shared_key]
|
|
244
247
|
size_t header_size = sizeof(uint32_t) * 2;
|
|
245
248
|
size_t total_size = header_size + ct_len + sk_len;
|
|
246
|
-
|
|
249
|
+
auto out = std::make_unique<uint8_t[]>(total_size);
|
|
247
250
|
|
|
248
251
|
uint32_t ct_len_u32 = static_cast<uint32_t>(ct_len);
|
|
249
252
|
uint32_t sk_len_u32 = static_cast<uint32_t>(sk_len);
|
|
250
|
-
memcpy(out, &ct_len_u32, sizeof(uint32_t));
|
|
251
|
-
memcpy(out + sizeof(uint32_t), &sk_len_u32, sizeof(uint32_t));
|
|
253
|
+
memcpy(out.get(), &ct_len_u32, sizeof(uint32_t));
|
|
254
|
+
memcpy(out.get() + sizeof(uint32_t), &sk_len_u32, sizeof(uint32_t));
|
|
252
255
|
|
|
253
|
-
uint8_t* ct_data = out + header_size;
|
|
256
|
+
uint8_t* ct_data = out.get() + header_size;
|
|
254
257
|
uint8_t* sk_data = ct_data + ct_len;
|
|
255
258
|
|
|
256
|
-
if (EVP_PKEY_encapsulate(ctx, ct_data, &ct_len, sk_data, &sk_len) <= 0) {
|
|
257
|
-
EVP_PKEY_CTX_free(ctx);
|
|
258
|
-
delete[] out;
|
|
259
|
+
if (EVP_PKEY_encapsulate(ctx.get(), ct_data, &ct_len, sk_data, &sk_len) <= 0) {
|
|
259
260
|
throw std::runtime_error("Failed to encapsulate: " + getOpenSSLError());
|
|
260
261
|
}
|
|
261
262
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
return std::make_shared<NativeArrayBuffer>(out, total_size, [=]() { delete[] out; });
|
|
263
|
+
uint8_t* raw_ptr = out.get();
|
|
264
|
+
return std::make_shared<NativeArrayBuffer>(out.release(), total_size, [raw_ptr]() { delete[] raw_ptr; });
|
|
265
265
|
#endif
|
|
266
266
|
}
|
|
267
267
|
|
|
268
268
|
std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> HybridMlKemKeyPair::decapsulate(const std::shared_ptr<ArrayBuffer>& ciphertext) {
|
|
269
269
|
auto nativeCiphertext = ToNativeArrayBuffer(ciphertext);
|
|
270
|
-
|
|
270
|
+
auto self = this->shared_cast<HybridMlKemKeyPair>();
|
|
271
|
+
return Promise<std::shared_ptr<ArrayBuffer>>::async([self, nativeCiphertext]() { return self->decapsulateSync(nativeCiphertext); });
|
|
271
272
|
}
|
|
272
273
|
|
|
273
274
|
std::shared_ptr<ArrayBuffer> HybridMlKemKeyPair::decapsulateSync(const std::shared_ptr<ArrayBuffer>& ciphertext) {
|
|
@@ -277,13 +278,12 @@ std::shared_ptr<ArrayBuffer> HybridMlKemKeyPair::decapsulateSync(const std::shar
|
|
|
277
278
|
clearOpenSSLErrors();
|
|
278
279
|
checkKeyPair();
|
|
279
280
|
|
|
280
|
-
|
|
281
|
+
EVP_PKEY_CTX_ptr ctx(EVP_PKEY_CTX_new(pkey_.get(), nullptr), EVP_PKEY_CTX_free);
|
|
281
282
|
if (ctx == nullptr) {
|
|
282
283
|
throw std::runtime_error("Failed to create decapsulation context: " + getOpenSSLError());
|
|
283
284
|
}
|
|
284
285
|
|
|
285
|
-
if (EVP_PKEY_decapsulate_init(ctx, nullptr) <= 0) {
|
|
286
|
-
EVP_PKEY_CTX_free(ctx);
|
|
286
|
+
if (EVP_PKEY_decapsulate_init(ctx.get(), nullptr) <= 0) {
|
|
287
287
|
throw std::runtime_error("Failed to initialize decapsulation: " + getOpenSSLError());
|
|
288
288
|
}
|
|
289
289
|
|
|
@@ -291,22 +291,18 @@ std::shared_ptr<ArrayBuffer> HybridMlKemKeyPair::decapsulateSync(const std::shar
|
|
|
291
291
|
size_t ct_size = ciphertext->size();
|
|
292
292
|
|
|
293
293
|
size_t sk_len = 0;
|
|
294
|
-
if (EVP_PKEY_decapsulate(ctx, nullptr, &sk_len, ct_data, ct_size) <= 0) {
|
|
295
|
-
EVP_PKEY_CTX_free(ctx);
|
|
294
|
+
if (EVP_PKEY_decapsulate(ctx.get(), nullptr, &sk_len, ct_data, ct_size) <= 0) {
|
|
296
295
|
throw std::runtime_error("Failed to determine shared key size: " + getOpenSSLError());
|
|
297
296
|
}
|
|
298
297
|
|
|
299
|
-
|
|
298
|
+
auto sk_buf = std::make_unique<uint8_t[]>(sk_len);
|
|
300
299
|
|
|
301
|
-
if (EVP_PKEY_decapsulate(ctx,
|
|
302
|
-
EVP_PKEY_CTX_free(ctx);
|
|
303
|
-
delete[] sk_data;
|
|
300
|
+
if (EVP_PKEY_decapsulate(ctx.get(), sk_buf.get(), &sk_len, ct_data, ct_size) <= 0) {
|
|
304
301
|
throw std::runtime_error("Failed to decapsulate: " + getOpenSSLError());
|
|
305
302
|
}
|
|
306
303
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
return std::make_shared<NativeArrayBuffer>(sk_data, sk_len, [=]() { delete[] sk_data; });
|
|
304
|
+
uint8_t* raw_ptr = sk_buf.get();
|
|
305
|
+
return std::make_shared<NativeArrayBuffer>(sk_buf.release(), sk_len, [raw_ptr]() { delete[] raw_ptr; });
|
|
310
306
|
#endif
|
|
311
307
|
}
|
|
312
308
|
|
|
@@ -19,19 +19,18 @@ std::shared_ptr<ArrayBuffer> HybridPbkdf2::pbkdf2Sync(const std::shared_ptr<Arra
|
|
|
19
19
|
const std::shared_ptr<ArrayBuffer>& salt, double iterations, double keylen,
|
|
20
20
|
const std::string& digest) {
|
|
21
21
|
size_t bufferSize = static_cast<size_t>(keylen);
|
|
22
|
-
|
|
23
|
-
auto result = std::make_shared<NativeArrayBuffer>(data, bufferSize, [=]() { delete[] data; });
|
|
22
|
+
auto out_buf = std::make_unique<uint8_t[]>(bufferSize);
|
|
24
23
|
|
|
25
24
|
// use fastpbkdf2 when possible
|
|
26
25
|
if (digest == "sha1") {
|
|
27
26
|
fastpbkdf2_hmac_sha1(password.get()->data(), password.get()->size(), salt.get()->data(), salt.get()->size(),
|
|
28
|
-
static_cast<uint32_t>(iterations),
|
|
27
|
+
static_cast<uint32_t>(iterations), out_buf.get(), bufferSize);
|
|
29
28
|
} else if (digest == "sha256") {
|
|
30
29
|
fastpbkdf2_hmac_sha256(password.get()->data(), password.get()->size(), salt.get()->data(), salt.get()->size(),
|
|
31
|
-
static_cast<uint32_t>(iterations),
|
|
30
|
+
static_cast<uint32_t>(iterations), out_buf.get(), bufferSize);
|
|
32
31
|
} else if (digest == "sha512") {
|
|
33
32
|
fastpbkdf2_hmac_sha512(password.get()->data(), password.get()->size(), salt.get()->data(), salt.get()->size(),
|
|
34
|
-
static_cast<uint32_t>(iterations),
|
|
33
|
+
static_cast<uint32_t>(iterations), out_buf.get(), bufferSize);
|
|
35
34
|
} else {
|
|
36
35
|
// fallback to OpenSSL
|
|
37
36
|
auto* digestByName = EVP_get_digestbyname(digest.c_str());
|
|
@@ -40,12 +39,12 @@ std::shared_ptr<ArrayBuffer> HybridPbkdf2::pbkdf2Sync(const std::shared_ptr<Arra
|
|
|
40
39
|
}
|
|
41
40
|
char* passAsCharA = reinterpret_cast<char*>(password.get()->data());
|
|
42
41
|
const unsigned char* saltAsCharA = reinterpret_cast<const unsigned char*>(salt.get()->data());
|
|
43
|
-
unsigned char* resultAsCharA = reinterpret_cast<unsigned char*>(result.get()->data());
|
|
44
42
|
PKCS5_PBKDF2_HMAC(passAsCharA, password.get()->size(), saltAsCharA, salt.get()->size(), static_cast<uint32_t>(iterations), digestByName,
|
|
45
|
-
|
|
43
|
+
bufferSize, out_buf.get());
|
|
46
44
|
}
|
|
47
45
|
|
|
48
|
-
|
|
46
|
+
uint8_t* raw_ptr = out_buf.get();
|
|
47
|
+
return std::make_shared<NativeArrayBuffer>(out_buf.release(), bufferSize, [raw_ptr]() { delete[] raw_ptr; });
|
|
49
48
|
}
|
|
50
49
|
|
|
51
50
|
} // namespace margelo::nitro::crypto
|
|
@@ -21,10 +21,7 @@ std::shared_ptr<Promise<void>> HybridRsaKeyPair::generateKeyPair() {
|
|
|
21
21
|
|
|
22
22
|
void HybridRsaKeyPair::generateKeyPairSync() {
|
|
23
23
|
// Clean up existing key if any
|
|
24
|
-
|
|
25
|
-
EVP_PKEY_free(this->pkey);
|
|
26
|
-
this->pkey = nullptr;
|
|
27
|
-
}
|
|
24
|
+
this->pkey_.reset();
|
|
28
25
|
|
|
29
26
|
// Create key generation context
|
|
30
27
|
std::unique_ptr<EVP_PKEY_CTX, decltype(&EVP_PKEY_CTX_free)> ctx(EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, nullptr), EVP_PKEY_CTX_free);
|
|
@@ -69,7 +66,7 @@ void HybridRsaKeyPair::generateKeyPairSync() {
|
|
|
69
66
|
throw std::runtime_error("Failed to generate RSA key pair");
|
|
70
67
|
}
|
|
71
68
|
|
|
72
|
-
this->
|
|
69
|
+
this->pkey_.reset(raw_pkey);
|
|
73
70
|
}
|
|
74
71
|
|
|
75
72
|
void HybridRsaKeyPair::setModulusLength(double modulusLength) {
|
|
@@ -96,7 +93,7 @@ std::shared_ptr<ArrayBuffer> HybridRsaKeyPair::getPublicKey() {
|
|
|
96
93
|
throw std::runtime_error("Failed to create BIO for public key export");
|
|
97
94
|
}
|
|
98
95
|
|
|
99
|
-
if (i2d_PUBKEY_bio(bio, this->
|
|
96
|
+
if (i2d_PUBKEY_bio(bio, this->pkey_.get()) != 1) {
|
|
100
97
|
BIO_free(bio);
|
|
101
98
|
throw std::runtime_error("Failed to export public key to DER format");
|
|
102
99
|
}
|
|
@@ -120,7 +117,7 @@ std::shared_ptr<ArrayBuffer> HybridRsaKeyPair::getPrivateKey() {
|
|
|
120
117
|
throw std::runtime_error("Failed to create BIO for private key export");
|
|
121
118
|
}
|
|
122
119
|
|
|
123
|
-
if (i2d_PKCS8PrivateKey_bio(bio, this->
|
|
120
|
+
if (i2d_PKCS8PrivateKey_bio(bio, this->pkey_.get(), nullptr, nullptr, 0, nullptr, nullptr) != 1) {
|
|
124
121
|
BIO_free(bio);
|
|
125
122
|
throw std::runtime_error("Failed to export private key to DER PKCS8 format");
|
|
126
123
|
}
|
|
@@ -146,7 +143,7 @@ std::shared_ptr<ArrayBuffer> HybridRsaKeyPair::exportKey(const KeyObject& /* key
|
|
|
146
143
|
}
|
|
147
144
|
|
|
148
145
|
void HybridRsaKeyPair::checkKeyPair() {
|
|
149
|
-
if (this->
|
|
146
|
+
if (!this->pkey_) {
|
|
150
147
|
throw std::runtime_error("RSA KeyPair not initialized");
|
|
151
148
|
}
|
|
152
149
|
}
|
|
@@ -13,12 +13,8 @@ namespace margelo::nitro::crypto {
|
|
|
13
13
|
|
|
14
14
|
class HybridRsaKeyPair : public HybridRsaKeyPairSpec {
|
|
15
15
|
public:
|
|
16
|
-
HybridRsaKeyPair() : HybridObject(TAG),
|
|
17
|
-
~HybridRsaKeyPair()
|
|
18
|
-
if (pkey) {
|
|
19
|
-
EVP_PKEY_free(pkey);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
16
|
+
HybridRsaKeyPair() : HybridObject(TAG), modulusLength(2048), hashAlgorithm("SHA-256") {}
|
|
17
|
+
~HybridRsaKeyPair() override = default;
|
|
22
18
|
|
|
23
19
|
std::shared_ptr<Promise<void>> generateKeyPair() override;
|
|
24
20
|
void generateKeyPairSync() override;
|
|
@@ -32,7 +28,8 @@ class HybridRsaKeyPair : public HybridRsaKeyPairSpec {
|
|
|
32
28
|
std::shared_ptr<ArrayBuffer> exportKey(const KeyObject& key, const std::string& format) override;
|
|
33
29
|
|
|
34
30
|
private:
|
|
35
|
-
EVP_PKEY
|
|
31
|
+
using EVP_PKEY_ptr = std::unique_ptr<EVP_PKEY, decltype(&EVP_PKEY_free)>;
|
|
32
|
+
EVP_PKEY_ptr pkey_{nullptr, EVP_PKEY_free};
|
|
36
33
|
int modulusLength;
|
|
37
34
|
std::vector<unsigned char> publicExponent;
|
|
38
35
|
std::string hashAlgorithm;
|
|
@@ -46,17 +46,19 @@ std::shared_ptr<ArrayBuffer> HybridScrypt::deriveKeySync(const std::shared_ptr<A
|
|
|
46
46
|
size_t salt_len = salt ? salt->size() : 0;
|
|
47
47
|
|
|
48
48
|
// Allocate output buffer
|
|
49
|
-
|
|
49
|
+
auto out_buf = std::make_unique<uint8_t[]>(outLen);
|
|
50
50
|
|
|
51
51
|
// Use EVP_PBE_scrypt - the same API Node.js uses
|
|
52
|
-
int result = EVP_PBE_scrypt(pass_data, pass_len, salt_data, salt_len, n_val, r_val, p_val, maxmem_val,
|
|
52
|
+
int result = EVP_PBE_scrypt(pass_data, pass_len, salt_data, salt_len, n_val, r_val, p_val, maxmem_val, out_buf.get(), outLen);
|
|
53
53
|
|
|
54
54
|
if (result != 1) {
|
|
55
|
-
|
|
55
|
+
// Zero any partially-derived secret bits before unique_ptr frees the buffer.
|
|
56
|
+
secureZero(out_buf.get(), outLen);
|
|
56
57
|
throw std::runtime_error("SCRYPT derivation failed: " + getOpenSSLError());
|
|
57
58
|
}
|
|
58
59
|
|
|
59
|
-
|
|
60
|
+
uint8_t* raw_ptr = out_buf.get();
|
|
61
|
+
return std::make_shared<NativeArrayBuffer>(out_buf.release(), outLen, [raw_ptr]() { delete[] raw_ptr; });
|
|
60
62
|
}
|
|
61
63
|
|
|
62
64
|
} // namespace margelo::nitro::crypto
|