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
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
namespace simdutf {
|
|
2
|
+
namespace SIMDUTF_IMPLEMENTATION {
|
|
3
|
+
namespace {
|
|
4
|
+
namespace ascii_validation {
|
|
5
|
+
|
|
6
|
+
result generic_validate_ascii_with_errors(const char *input, size_t length) {
|
|
7
|
+
buf_block_reader<64> reader(reinterpret_cast<const uint8_t *>(input), length);
|
|
8
|
+
size_t count{0};
|
|
9
|
+
while (reader.has_full_block()) {
|
|
10
|
+
simd::simd8x64<uint8_t> in(reader.full_block());
|
|
11
|
+
if (!in.is_ascii()) {
|
|
12
|
+
result res = scalar::ascii::validate_with_errors(
|
|
13
|
+
reinterpret_cast<const char *>(input + count), length - count);
|
|
14
|
+
return result(res.error, count + res.count);
|
|
15
|
+
}
|
|
16
|
+
reader.advance();
|
|
17
|
+
|
|
18
|
+
count += 64;
|
|
19
|
+
}
|
|
20
|
+
uint8_t block[64]{};
|
|
21
|
+
reader.get_remainder(block);
|
|
22
|
+
simd::simd8x64<uint8_t> in(block);
|
|
23
|
+
if (!in.is_ascii()) {
|
|
24
|
+
result res = scalar::ascii::validate_with_errors(
|
|
25
|
+
reinterpret_cast<const char *>(input + count), length - count);
|
|
26
|
+
return result(res.error, count + res.count);
|
|
27
|
+
} else {
|
|
28
|
+
return result(error_code::SUCCESS, length);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
bool generic_validate_ascii(const char *input, size_t length) {
|
|
33
|
+
buf_block_reader<64> reader(reinterpret_cast<const uint8_t *>(input), length);
|
|
34
|
+
while (reader.has_full_block()) {
|
|
35
|
+
simd::simd8x64<uint8_t> in(reader.full_block());
|
|
36
|
+
if (!in.is_ascii()) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
reader.advance();
|
|
40
|
+
}
|
|
41
|
+
uint8_t block[64]{};
|
|
42
|
+
reader.get_remainder(block);
|
|
43
|
+
simd::simd8x64<uint8_t> in(block);
|
|
44
|
+
return in.is_ascii();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
} // namespace ascii_validation
|
|
48
|
+
} // unnamed namespace
|
|
49
|
+
} // namespace SIMDUTF_IMPLEMENTATION
|
|
50
|
+
} // namespace simdutf
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* References and further reading:
|
|
3
|
+
*
|
|
4
|
+
* Wojciech Muła, Daniel Lemire, Base64 encoding and decoding at almost the
|
|
5
|
+
* speed of a memory copy, Software: Practice and Experience 50 (2), 2020.
|
|
6
|
+
* https://arxiv.org/abs/1910.05109
|
|
7
|
+
*
|
|
8
|
+
* Wojciech Muła, Daniel Lemire, Faster Base64 Encoding and Decoding using AVX2
|
|
9
|
+
* Instructions, ACM Transactions on the Web 12 (3), 2018.
|
|
10
|
+
* https://arxiv.org/abs/1704.00605
|
|
11
|
+
*
|
|
12
|
+
* Simon Josefsson. 2006. The Base16, Base32, and Base64 Data Encodings.
|
|
13
|
+
* https://tools.ietf.org/html/rfc4648. (2006). Internet Engineering Task Force,
|
|
14
|
+
* Request for Comments: 4648.
|
|
15
|
+
*
|
|
16
|
+
* Alfred Klomp. 2014a. Fast Base64 encoding/decoding with SSE vectorization.
|
|
17
|
+
* http://www.alfredklomp.com/programming/sse-base64/. (2014).
|
|
18
|
+
*
|
|
19
|
+
* Alfred Klomp. 2014b. Fast Base64 stream encoder/decoder in C99, with SIMD
|
|
20
|
+
* acceleration. https://github.com/aklomp/base64. (2014).
|
|
21
|
+
*
|
|
22
|
+
* Hanson Char. 2014. A Fast and Correct Base 64 Codec. (2014).
|
|
23
|
+
* https://aws.amazon.com/blogs/developer/a-fast-and-correct-base-64-codec/
|
|
24
|
+
*
|
|
25
|
+
* Nick Kopp. 2013. Base64 Encoding on a GPU.
|
|
26
|
+
* https://www.codeproject.com/Articles/276993/Base-Encoding-on-a-GPU. (2013).
|
|
27
|
+
*/
|
|
28
|
+
namespace simdutf {
|
|
29
|
+
namespace SIMDUTF_IMPLEMENTATION {
|
|
30
|
+
namespace {
|
|
31
|
+
namespace base64 {
|
|
32
|
+
|
|
33
|
+
/*
|
|
34
|
+
The following template function implements API for Base64 decoding.
|
|
35
|
+
|
|
36
|
+
An implementation is responsible for providing the `block64` type and
|
|
37
|
+
associated methods that perform actual conversion. Please refer
|
|
38
|
+
to any vectorized implementation to learn the API of these procedures.
|
|
39
|
+
*/
|
|
40
|
+
template <bool base64_url, bool ignore_garbage, bool default_or_url,
|
|
41
|
+
typename chartype>
|
|
42
|
+
full_result
|
|
43
|
+
compress_decode_base64(char *dst, const chartype *src, size_t srclen,
|
|
44
|
+
base64_options options,
|
|
45
|
+
last_chunk_handling_options last_chunk_options) {
|
|
46
|
+
const uint8_t *to_base64 =
|
|
47
|
+
default_or_url ? tables::base64::to_base64_default_or_url_value
|
|
48
|
+
: (base64_url ? tables::base64::to_base64_url_value
|
|
49
|
+
: tables::base64::to_base64_value);
|
|
50
|
+
auto ri = simdutf::scalar::base64::find_end(src, srclen, options);
|
|
51
|
+
size_t equallocation = ri.equallocation;
|
|
52
|
+
size_t equalsigns = ri.equalsigns;
|
|
53
|
+
srclen = ri.srclen;
|
|
54
|
+
size_t full_input_length = ri.full_input_length;
|
|
55
|
+
if (srclen == 0) {
|
|
56
|
+
if (!ignore_garbage && equalsigns > 0) {
|
|
57
|
+
return {INVALID_BASE64_CHARACTER, equallocation, 0};
|
|
58
|
+
}
|
|
59
|
+
return {SUCCESS, full_input_length, 0};
|
|
60
|
+
}
|
|
61
|
+
char *end_of_safe_64byte_zone =
|
|
62
|
+
dst == nullptr
|
|
63
|
+
? nullptr
|
|
64
|
+
: ((srclen + 3) / 4 * 3 >= 63 ? dst + (srclen + 3) / 4 * 3 - 63
|
|
65
|
+
: dst);
|
|
66
|
+
|
|
67
|
+
const chartype *const srcinit = src;
|
|
68
|
+
const char *const dstinit = dst;
|
|
69
|
+
const chartype *const srcend = src + srclen;
|
|
70
|
+
|
|
71
|
+
constexpr size_t block_size = 6;
|
|
72
|
+
static_assert(block_size >= 2, "block_size must be at least two");
|
|
73
|
+
char buffer[block_size * 64];
|
|
74
|
+
char *bufferptr = buffer;
|
|
75
|
+
if (srclen >= 64) {
|
|
76
|
+
const chartype *const srcend64 = src + srclen - 64;
|
|
77
|
+
while (src <= srcend64) {
|
|
78
|
+
block64 b(src);
|
|
79
|
+
src += 64;
|
|
80
|
+
uint64_t error = 0;
|
|
81
|
+
const uint64_t badcharmask =
|
|
82
|
+
b.to_base64_mask<base64_url, ignore_garbage, default_or_url>(&error);
|
|
83
|
+
if (!ignore_garbage && error) {
|
|
84
|
+
src -= 64;
|
|
85
|
+
const size_t error_offset = trailing_zeroes(error);
|
|
86
|
+
return {error_code::INVALID_BASE64_CHARACTER,
|
|
87
|
+
size_t(src - srcinit + error_offset), size_t(dst - dstinit)};
|
|
88
|
+
}
|
|
89
|
+
if (badcharmask != 0) {
|
|
90
|
+
bufferptr += b.compress_block(badcharmask, bufferptr);
|
|
91
|
+
} else if (bufferptr != buffer) {
|
|
92
|
+
b.copy_block(bufferptr);
|
|
93
|
+
bufferptr += 64;
|
|
94
|
+
} else {
|
|
95
|
+
if (dst >= end_of_safe_64byte_zone) {
|
|
96
|
+
b.base64_decode_block_safe(dst);
|
|
97
|
+
} else {
|
|
98
|
+
b.base64_decode_block(dst);
|
|
99
|
+
}
|
|
100
|
+
dst += 48;
|
|
101
|
+
}
|
|
102
|
+
if (bufferptr >= (block_size - 1) * 64 + buffer) {
|
|
103
|
+
for (size_t i = 0; i < (block_size - 2); i++) {
|
|
104
|
+
base64_decode_block(dst, buffer + i * 64);
|
|
105
|
+
dst += 48;
|
|
106
|
+
}
|
|
107
|
+
if (dst >= end_of_safe_64byte_zone) {
|
|
108
|
+
base64_decode_block_safe(dst, buffer + (block_size - 2) * 64);
|
|
109
|
+
} else {
|
|
110
|
+
base64_decode_block(dst, buffer + (block_size - 2) * 64);
|
|
111
|
+
}
|
|
112
|
+
dst += 48;
|
|
113
|
+
std::memcpy(buffer, buffer + (block_size - 1) * 64,
|
|
114
|
+
64); // 64 might be too much
|
|
115
|
+
bufferptr -= (block_size - 1) * 64;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
char *buffer_start = buffer;
|
|
121
|
+
// Optimization note: if this is almost full, then it is worth our
|
|
122
|
+
// time, otherwise, we should just decode directly.
|
|
123
|
+
int last_block = (int)((bufferptr - buffer_start) % 64);
|
|
124
|
+
if (last_block != 0 && srcend - src + last_block >= 64) {
|
|
125
|
+
|
|
126
|
+
while ((bufferptr - buffer_start) % 64 != 0 && src < srcend) {
|
|
127
|
+
uint8_t val = to_base64[uint8_t(*src)];
|
|
128
|
+
*bufferptr = char(val);
|
|
129
|
+
if (!ignore_garbage &&
|
|
130
|
+
(!scalar::base64::is_eight_byte(*src) || val > 64)) {
|
|
131
|
+
return {error_code::INVALID_BASE64_CHARACTER, size_t(src - srcinit),
|
|
132
|
+
size_t(dst - dstinit)};
|
|
133
|
+
}
|
|
134
|
+
bufferptr += (val <= 63);
|
|
135
|
+
src++;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
for (; buffer_start + 64 <= bufferptr; buffer_start += 64) {
|
|
140
|
+
if (dst >= end_of_safe_64byte_zone) {
|
|
141
|
+
base64_decode_block_safe(dst, buffer_start);
|
|
142
|
+
} else {
|
|
143
|
+
base64_decode_block(dst, buffer_start);
|
|
144
|
+
}
|
|
145
|
+
dst += 48;
|
|
146
|
+
}
|
|
147
|
+
if ((bufferptr - buffer_start) % 64 != 0) {
|
|
148
|
+
while (buffer_start + 4 < bufferptr) {
|
|
149
|
+
uint32_t triple = ((uint32_t(uint8_t(buffer_start[0])) << 3 * 6) +
|
|
150
|
+
(uint32_t(uint8_t(buffer_start[1])) << 2 * 6) +
|
|
151
|
+
(uint32_t(uint8_t(buffer_start[2])) << 1 * 6) +
|
|
152
|
+
(uint32_t(uint8_t(buffer_start[3])) << 0 * 6))
|
|
153
|
+
<< 8;
|
|
154
|
+
#if !SIMDUTF_IS_BIG_ENDIAN
|
|
155
|
+
triple = scalar::u32_swap_bytes(triple);
|
|
156
|
+
#endif
|
|
157
|
+
std::memcpy(dst, &triple, 3);
|
|
158
|
+
|
|
159
|
+
dst += 3;
|
|
160
|
+
buffer_start += 4;
|
|
161
|
+
}
|
|
162
|
+
if (buffer_start + 4 <= bufferptr) {
|
|
163
|
+
uint32_t triple = ((uint32_t(uint8_t(buffer_start[0])) << 3 * 6) +
|
|
164
|
+
(uint32_t(uint8_t(buffer_start[1])) << 2 * 6) +
|
|
165
|
+
(uint32_t(uint8_t(buffer_start[2])) << 1 * 6) +
|
|
166
|
+
(uint32_t(uint8_t(buffer_start[3])) << 0 * 6))
|
|
167
|
+
<< 8;
|
|
168
|
+
#if !SIMDUTF_IS_BIG_ENDIAN
|
|
169
|
+
triple = scalar::u32_swap_bytes(triple);
|
|
170
|
+
#endif
|
|
171
|
+
std::memcpy(dst, &triple, 3);
|
|
172
|
+
|
|
173
|
+
dst += 3;
|
|
174
|
+
buffer_start += 4;
|
|
175
|
+
}
|
|
176
|
+
// we may have 1, 2 or 3 bytes left and we need to decode them so let us
|
|
177
|
+
// backtrack
|
|
178
|
+
int leftover = int(bufferptr - buffer_start);
|
|
179
|
+
while (leftover > 0) {
|
|
180
|
+
if (!ignore_garbage) {
|
|
181
|
+
while (to_base64[uint8_t(*(src - 1))] == 64) {
|
|
182
|
+
src--;
|
|
183
|
+
}
|
|
184
|
+
} else {
|
|
185
|
+
while (to_base64[uint8_t(*(src - 1))] >= 64) {
|
|
186
|
+
src--;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
src--;
|
|
190
|
+
leftover--;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (src < srcend + equalsigns) {
|
|
194
|
+
full_result r = scalar::base64::base64_tail_decode(
|
|
195
|
+
dst, src, srcend - src, equalsigns, options, last_chunk_options);
|
|
196
|
+
r = scalar::base64::patch_tail_result(
|
|
197
|
+
r, size_t(src - srcinit), size_t(dst - dstinit), equallocation,
|
|
198
|
+
full_input_length, last_chunk_options);
|
|
199
|
+
// When is_partial(last_chunk_options) is true, we must either end with
|
|
200
|
+
// the end of the stream (beyond whitespace) or right after a non-ignorable
|
|
201
|
+
// character or at the very beginning of the stream.
|
|
202
|
+
// See https://tc39.es/proposal-arraybuffer-base64/spec/#sec-frombase64
|
|
203
|
+
if (is_partial(last_chunk_options) && r.error == error_code::SUCCESS &&
|
|
204
|
+
r.input_count < full_input_length) {
|
|
205
|
+
// First check if we can extend the input to the end of the stream
|
|
206
|
+
while (r.input_count < full_input_length &&
|
|
207
|
+
base64_ignorable(*(srcinit + r.input_count), options)) {
|
|
208
|
+
r.input_count++;
|
|
209
|
+
}
|
|
210
|
+
// If we are still not at the end of the stream, then we must backtrack
|
|
211
|
+
// to the last non-ignorable character.
|
|
212
|
+
if (r.input_count < full_input_length) {
|
|
213
|
+
while (r.input_count > 0 &&
|
|
214
|
+
base64_ignorable(*(srcinit + r.input_count - 1), options)) {
|
|
215
|
+
r.input_count--;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return r;
|
|
220
|
+
}
|
|
221
|
+
if (!ignore_garbage && equalsigns > 0) {
|
|
222
|
+
if ((size_t(dst - dstinit) % 3 == 0) ||
|
|
223
|
+
((size_t(dst - dstinit) % 3) + 1 + equalsigns != 4)) {
|
|
224
|
+
return {INVALID_BASE64_CHARACTER, equallocation, size_t(dst - dstinit)};
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return {SUCCESS, srclen, size_t(dst - dstinit)};
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
} // namespace base64
|
|
231
|
+
} // unnamed namespace
|
|
232
|
+
} // namespace SIMDUTF_IMPLEMENTATION
|
|
233
|
+
} // namespace simdutf
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
namespace simdutf {
|
|
2
|
+
namespace SIMDUTF_IMPLEMENTATION {
|
|
3
|
+
namespace {
|
|
4
|
+
namespace base64_lengths {
|
|
5
|
+
|
|
6
|
+
simdutf_warn_unused size_t binary_length_from_base64(const char *input,
|
|
7
|
+
size_t length) {
|
|
8
|
+
size_t pos = 0;
|
|
9
|
+
size_t count = 0;
|
|
10
|
+
for (; pos + 64 <= length; pos += 64) {
|
|
11
|
+
simd8x64<uint8_t> block(reinterpret_cast<const uint8_t *>(input + pos));
|
|
12
|
+
uint64_t maybe_base64 = block.gteq(33); // >= 33 which is '!' in ASCII
|
|
13
|
+
count += count_ones(maybe_base64);
|
|
14
|
+
}
|
|
15
|
+
while (pos < length) {
|
|
16
|
+
count += (input[pos] > 0x20) ? 1 : 0;
|
|
17
|
+
pos++;
|
|
18
|
+
}
|
|
19
|
+
// Count padding at the end.
|
|
20
|
+
size_t padding = 0;
|
|
21
|
+
pos = length;
|
|
22
|
+
while (pos > 0 && padding < 2) {
|
|
23
|
+
char c = input[--pos];
|
|
24
|
+
if (c == '=') {
|
|
25
|
+
padding++;
|
|
26
|
+
} else if (c > ' ') {
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return ((count - padding) * 3) / 4;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
simdutf_warn_unused size_t binary_length_from_base64(const char16_t *input,
|
|
34
|
+
size_t length) {
|
|
35
|
+
size_t pos = 0;
|
|
36
|
+
size_t count = 0;
|
|
37
|
+
for (; pos + 32 <= length; pos += 32) {
|
|
38
|
+
simd16x32<uint16_t> block(reinterpret_cast<const uint16_t *>(input + pos));
|
|
39
|
+
uint64_t maybe_base64 = block.gteq(33); // >= 33 which is '!' in ASCII
|
|
40
|
+
count += count_ones(maybe_base64);
|
|
41
|
+
}
|
|
42
|
+
while (pos < length) {
|
|
43
|
+
count += (input[pos] > 0x20) ? 1 : 0;
|
|
44
|
+
pos++;
|
|
45
|
+
}
|
|
46
|
+
// Count padding at the end.
|
|
47
|
+
size_t padding = 0;
|
|
48
|
+
pos = length;
|
|
49
|
+
while (pos > 0 && padding < 2) {
|
|
50
|
+
char16_t c = input[--pos];
|
|
51
|
+
if (c == '=') {
|
|
52
|
+
padding++;
|
|
53
|
+
} else if (c > ' ') {
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return ((count - padding) * 3) / 4;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
} // namespace base64_lengths
|
|
61
|
+
} // unnamed namespace
|
|
62
|
+
} // namespace SIMDUTF_IMPLEMENTATION
|
|
63
|
+
} // namespace simdutf
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
namespace simdutf {
|
|
2
|
+
namespace SIMDUTF_IMPLEMENTATION {
|
|
3
|
+
namespace {
|
|
4
|
+
|
|
5
|
+
// Walks through a buffer in block-sized increments, loading the last part with
|
|
6
|
+
// spaces
|
|
7
|
+
template <size_t STEP_SIZE> struct buf_block_reader {
|
|
8
|
+
public:
|
|
9
|
+
simdutf_really_inline buf_block_reader(const uint8_t *_buf, size_t _len);
|
|
10
|
+
simdutf_really_inline size_t block_index();
|
|
11
|
+
simdutf_really_inline bool has_full_block() const;
|
|
12
|
+
simdutf_really_inline const uint8_t *full_block() const;
|
|
13
|
+
/**
|
|
14
|
+
* Get the last block, padded with spaces.
|
|
15
|
+
*
|
|
16
|
+
* There will always be a last block, with at least 1 byte, unless len == 0
|
|
17
|
+
* (in which case this function fills the buffer with spaces and returns 0. In
|
|
18
|
+
* particular, if len == STEP_SIZE there will be 0 full_blocks and 1 remainder
|
|
19
|
+
* block with STEP_SIZE bytes and no spaces for padding.
|
|
20
|
+
*
|
|
21
|
+
* @return the number of effective characters in the last block.
|
|
22
|
+
*/
|
|
23
|
+
simdutf_really_inline size_t get_remainder(uint8_t *dst) const;
|
|
24
|
+
simdutf_really_inline void advance();
|
|
25
|
+
|
|
26
|
+
private:
|
|
27
|
+
const uint8_t *buf;
|
|
28
|
+
const size_t len;
|
|
29
|
+
const size_t lenminusstep;
|
|
30
|
+
size_t idx;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
// Routines to print masks and text for debugging bitmask operations
|
|
34
|
+
simdutf_unused static char *format_input_text_64(const uint8_t *text) {
|
|
35
|
+
static char *buf =
|
|
36
|
+
reinterpret_cast<char *>(malloc(sizeof(simd8x64<uint8_t>) + 1));
|
|
37
|
+
for (size_t i = 0; i < sizeof(simd8x64<uint8_t>); i++) {
|
|
38
|
+
buf[i] = int8_t(text[i]) < ' ' ? '_' : int8_t(text[i]);
|
|
39
|
+
}
|
|
40
|
+
buf[sizeof(simd8x64<uint8_t>)] = '\0';
|
|
41
|
+
return buf;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Routines to print masks and text for debugging bitmask operations
|
|
45
|
+
simdutf_unused static char *format_input_text(const simd8x64<uint8_t> &in) {
|
|
46
|
+
static char *buf =
|
|
47
|
+
reinterpret_cast<char *>(malloc(sizeof(simd8x64<uint8_t>) + 1));
|
|
48
|
+
in.store(reinterpret_cast<uint8_t *>(buf));
|
|
49
|
+
for (size_t i = 0; i < sizeof(simd8x64<uint8_t>); i++) {
|
|
50
|
+
if (buf[i] < ' ') {
|
|
51
|
+
buf[i] = '_';
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
buf[sizeof(simd8x64<uint8_t>)] = '\0';
|
|
55
|
+
return buf;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
simdutf_unused static char *format_mask(uint64_t mask) {
|
|
59
|
+
static char *buf = reinterpret_cast<char *>(malloc(64 + 1));
|
|
60
|
+
for (size_t i = 0; i < 64; i++) {
|
|
61
|
+
buf[i] = (mask & (size_t(1) << i)) ? 'X' : ' ';
|
|
62
|
+
}
|
|
63
|
+
buf[64] = '\0';
|
|
64
|
+
return buf;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
template <size_t STEP_SIZE>
|
|
68
|
+
simdutf_really_inline
|
|
69
|
+
buf_block_reader<STEP_SIZE>::buf_block_reader(const uint8_t *_buf, size_t _len)
|
|
70
|
+
: buf{_buf}, len{_len}, lenminusstep{len < STEP_SIZE ? 0 : len - STEP_SIZE},
|
|
71
|
+
idx{0} {}
|
|
72
|
+
|
|
73
|
+
template <size_t STEP_SIZE>
|
|
74
|
+
simdutf_really_inline size_t buf_block_reader<STEP_SIZE>::block_index() {
|
|
75
|
+
return idx;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
template <size_t STEP_SIZE>
|
|
79
|
+
simdutf_really_inline bool buf_block_reader<STEP_SIZE>::has_full_block() const {
|
|
80
|
+
return idx < lenminusstep;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
template <size_t STEP_SIZE>
|
|
84
|
+
simdutf_really_inline const uint8_t *
|
|
85
|
+
buf_block_reader<STEP_SIZE>::full_block() const {
|
|
86
|
+
return &buf[idx];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
template <size_t STEP_SIZE>
|
|
90
|
+
simdutf_really_inline size_t
|
|
91
|
+
buf_block_reader<STEP_SIZE>::get_remainder(uint8_t *dst) const {
|
|
92
|
+
if (len == idx) {
|
|
93
|
+
return 0;
|
|
94
|
+
} // memcpy(dst, null, 0) will trigger an error with some sanitizers
|
|
95
|
+
std::memset(dst, 0x20,
|
|
96
|
+
STEP_SIZE); // std::memset STEP_SIZE because it is more efficient
|
|
97
|
+
// to write out 8 or 16 bytes at once.
|
|
98
|
+
std::memcpy(dst, buf + idx, len - idx);
|
|
99
|
+
return len - idx;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
template <size_t STEP_SIZE>
|
|
103
|
+
simdutf_really_inline void buf_block_reader<STEP_SIZE>::advance() {
|
|
104
|
+
idx += STEP_SIZE;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
} // unnamed namespace
|
|
108
|
+
} // namespace SIMDUTF_IMPLEMENTATION
|
|
109
|
+
} // namespace simdutf
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
namespace simdutf {
|
|
2
|
+
namespace SIMDUTF_IMPLEMENTATION {
|
|
3
|
+
namespace {
|
|
4
|
+
namespace util {
|
|
5
|
+
|
|
6
|
+
simdutf_really_inline const char *find(const char *start, const char *end,
|
|
7
|
+
char character) noexcept {
|
|
8
|
+
// Handle empty or invalid range
|
|
9
|
+
if (start >= end)
|
|
10
|
+
return end;
|
|
11
|
+
// Align the start pointer to 64 bytes
|
|
12
|
+
uintptr_t misalignment = reinterpret_cast<uintptr_t>(start) % 64;
|
|
13
|
+
if (misalignment != 0) {
|
|
14
|
+
size_t adjustment = 64 - misalignment;
|
|
15
|
+
if (size_t(std::distance(start, end)) < adjustment) {
|
|
16
|
+
adjustment = std::distance(start, end);
|
|
17
|
+
}
|
|
18
|
+
for (size_t i = 0; i < adjustment; i++) {
|
|
19
|
+
if (start[i] == character) {
|
|
20
|
+
return start + i;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
start += adjustment;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Main loop for 64-byte aligned data
|
|
27
|
+
for (; std::distance(start, end) >= 64; start += 64) {
|
|
28
|
+
simd8x64<uint8_t> input(reinterpret_cast<const uint8_t *>(start));
|
|
29
|
+
uint64_t matches = input.eq(uint8_t(character));
|
|
30
|
+
if (matches != 0) {
|
|
31
|
+
// Found a match, return the first one
|
|
32
|
+
int index = trailing_zeroes(matches);
|
|
33
|
+
return start + index;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return std::find(start, end, character);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
simdutf_really_inline const char16_t *
|
|
40
|
+
find(const char16_t *start, const char16_t *end, char16_t character) noexcept {
|
|
41
|
+
// Handle empty or invalid range
|
|
42
|
+
if (start >= end)
|
|
43
|
+
return end;
|
|
44
|
+
// Align the start pointer to 64 bytes if misalignment is even
|
|
45
|
+
uintptr_t misalignment = reinterpret_cast<uintptr_t>(start) % 64;
|
|
46
|
+
if (misalignment != 0 && misalignment % 2 == 0) {
|
|
47
|
+
size_t adjustment = (64 - misalignment) / sizeof(char16_t);
|
|
48
|
+
if (size_t(std::distance(start, end)) < adjustment) {
|
|
49
|
+
adjustment = std::distance(start, end);
|
|
50
|
+
}
|
|
51
|
+
for (size_t i = 0; i < adjustment; i++) {
|
|
52
|
+
if (start[i] == character) {
|
|
53
|
+
return start + i;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
start += adjustment;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Main loop for 64-byte aligned data
|
|
60
|
+
for (; std::distance(start, end) >= 32; start += 32) {
|
|
61
|
+
simd16x32<uint16_t> input(reinterpret_cast<const uint16_t *>(start));
|
|
62
|
+
uint64_t matches = input.eq(uint16_t(character));
|
|
63
|
+
if (matches != 0) {
|
|
64
|
+
// Found a match, return the first one
|
|
65
|
+
int index = trailing_zeroes(matches) / 2;
|
|
66
|
+
return start + index;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return std::find(start, end, character);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
} // namespace util
|
|
73
|
+
} // namespace
|
|
74
|
+
} // namespace SIMDUTF_IMPLEMENTATION
|
|
75
|
+
} // namespace simdutf
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
namespace simdutf {
|
|
2
|
+
namespace SIMDUTF_IMPLEMENTATION {
|
|
3
|
+
namespace {
|
|
4
|
+
namespace utf16 {
|
|
5
|
+
|
|
6
|
+
simdutf_really_inline void
|
|
7
|
+
change_endianness_utf16(const char16_t *in, size_t size, char16_t *output) {
|
|
8
|
+
size_t pos = 0;
|
|
9
|
+
|
|
10
|
+
while (pos < size / 32 * 32) {
|
|
11
|
+
simd16x32<uint16_t> input(reinterpret_cast<const uint16_t *>(in + pos));
|
|
12
|
+
input.swap_bytes();
|
|
13
|
+
input.store(reinterpret_cast<uint16_t *>(output));
|
|
14
|
+
pos += 32;
|
|
15
|
+
output += 32;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
scalar::utf16::change_endianness_utf16(in + pos, size - pos, output);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
} // namespace utf16
|
|
22
|
+
} // unnamed namespace
|
|
23
|
+
} // namespace SIMDUTF_IMPLEMENTATION
|
|
24
|
+
} // namespace simdutf
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
namespace simdutf {
|
|
2
|
+
namespace SIMDUTF_IMPLEMENTATION {
|
|
3
|
+
namespace {
|
|
4
|
+
namespace utf16 {
|
|
5
|
+
|
|
6
|
+
using namespace simd;
|
|
7
|
+
|
|
8
|
+
template <endianness big_endian>
|
|
9
|
+
simdutf_really_inline size_t count_code_points(const char16_t *in,
|
|
10
|
+
size_t size) {
|
|
11
|
+
using vector_u16 = simd16<uint16_t>;
|
|
12
|
+
constexpr size_t N = vector_u16::ELEMENTS;
|
|
13
|
+
|
|
14
|
+
size_t pos = 0;
|
|
15
|
+
size_t count = 0;
|
|
16
|
+
|
|
17
|
+
constexpr size_t max_iterations = 65535;
|
|
18
|
+
const auto one = vector_u16::splat(1);
|
|
19
|
+
const auto zero = vector_u16::zero();
|
|
20
|
+
|
|
21
|
+
size_t iteration = 0;
|
|
22
|
+
|
|
23
|
+
auto counters = zero;
|
|
24
|
+
for (; pos < size / N * N; pos += N) {
|
|
25
|
+
auto input = vector_u16::load(in + pos);
|
|
26
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
27
|
+
input = input.swap_bytes();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const auto t0 = input & uint16_t(0xfc00);
|
|
31
|
+
const auto t1 = t0 ^ uint16_t(0xdc00);
|
|
32
|
+
|
|
33
|
+
// t2[0] == 1 iff input[0] outside range 0xdc00..dfff (the word is not a
|
|
34
|
+
// high surrogate)
|
|
35
|
+
const auto t2 = min(t1, one);
|
|
36
|
+
|
|
37
|
+
counters += t2;
|
|
38
|
+
|
|
39
|
+
iteration += 1;
|
|
40
|
+
if (iteration == max_iterations) {
|
|
41
|
+
count += counters.sum();
|
|
42
|
+
counters = zero;
|
|
43
|
+
iteration = 0;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (iteration > 0) {
|
|
48
|
+
count += counters.sum();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return count +
|
|
52
|
+
scalar::utf16::count_code_points<big_endian>(in + pos, size - pos);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
} // namespace utf16
|
|
56
|
+
} // unnamed namespace
|
|
57
|
+
} // namespace SIMDUTF_IMPLEMENTATION
|
|
58
|
+
} // namespace simdutf
|