react-native-quick-crypto 1.0.18 → 1.1.0
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/cpp/utils/HybridUtils.cpp +39 -77
- package/deps/simdutf/.clang-format +4 -0
- package/deps/simdutf/.github/ISSUE_TEMPLATE/bug_report.md +62 -0
- package/deps/simdutf/.github/ISSUE_TEMPLATE/config.yml +1 -0
- package/deps/simdutf/.github/ISSUE_TEMPLATE/feature_request.md +35 -0
- package/deps/simdutf/.github/ISSUE_TEMPLATE/standard-issue-template.md +29 -0
- package/deps/simdutf/.github/pull_request_template.md +51 -0
- package/deps/simdutf/.github/workflows/aarch64.yml +39 -0
- package/deps/simdutf/.github/workflows/alpine.yml +27 -0
- package/deps/simdutf/.github/workflows/amalgamation_demos.yml +34 -0
- package/deps/simdutf/.github/workflows/armv7.yml +32 -0
- package/deps/simdutf/.github/workflows/atomic_fuzz.yml +25 -0
- package/deps/simdutf/.github/workflows/cifuzz.yml +37 -0
- package/deps/simdutf/.github/workflows/clangformat.yml +36 -0
- package/deps/simdutf/.github/workflows/debian-latestcxxstandards.yml +40 -0
- package/deps/simdutf/.github/workflows/debian.yml +33 -0
- package/deps/simdutf/.github/workflows/documentation.yml +36 -0
- package/deps/simdutf/.github/workflows/emscripten.yml +19 -0
- package/deps/simdutf/.github/workflows/loongarch64-gcc-14.2.yml +39 -0
- package/deps/simdutf/.github/workflows/macos-latest.yml +29 -0
- package/deps/simdutf/.github/workflows/msys2-clang.yml +48 -0
- package/deps/simdutf/.github/workflows/msys2.yml +50 -0
- package/deps/simdutf/.github/workflows/ppc64le.yml +29 -0
- package/deps/simdutf/.github/workflows/rvv-1024-clang-18.yml +35 -0
- package/deps/simdutf/.github/workflows/rvv-128-clang-17.yml +35 -0
- package/deps/simdutf/.github/workflows/rvv-256-gcc-14.yml +31 -0
- package/deps/simdutf/.github/workflows/s390x.yml +29 -0
- package/deps/simdutf/.github/workflows/selective-amalgamation.yml +29 -0
- package/deps/simdutf/.github/workflows/typos.yml +19 -0
- package/deps/simdutf/.github/workflows/ubuntu22-cxx20.yml +30 -0
- package/deps/simdutf/.github/workflows/ubuntu22.yml +32 -0
- package/deps/simdutf/.github/workflows/ubuntu22_gcc12.yml +27 -0
- package/deps/simdutf/.github/workflows/ubuntu22sani.yml +29 -0
- package/deps/simdutf/.github/workflows/ubuntu24-cxxstandards.yml +34 -0
- package/deps/simdutf/.github/workflows/ubuntu24-unsignedchar.yml +34 -0
- package/deps/simdutf/.github/workflows/ubuntu24.yml +32 -0
- package/deps/simdutf/.github/workflows/ubuntu24sani.yml +36 -0
- package/deps/simdutf/.github/workflows/ubuntu24sani_clang.yml +29 -0
- package/deps/simdutf/.github/workflows/vs17-arm-ci.yml +21 -0
- package/deps/simdutf/.github/workflows/vs17-ci-cxx20.yml +41 -0
- package/deps/simdutf/.github/workflows/vs17-ci.yml +41 -0
- package/deps/simdutf/.github/workflows/vs17-clang-ci.yml +41 -0
- package/deps/simdutf/.github/workflows/vs17-cxxstandards.yml +36 -0
- package/deps/simdutf/AI_USAGE_POLICY.md +56 -0
- package/deps/simdutf/AUTHORS +6 -0
- package/deps/simdutf/CMakeLists.txt +231 -0
- package/deps/simdutf/CONTRIBUTING.md +214 -0
- package/deps/simdutf/CONTRIBUTORS +1 -0
- package/deps/simdutf/Doxyfile +2584 -0
- package/deps/simdutf/LICENSE-APACHE +201 -0
- package/deps/simdutf/LICENSE-MIT +18 -0
- package/deps/simdutf/Makefile.crosscompile +54 -0
- package/deps/simdutf/README-RVV.md +16 -0
- package/deps/simdutf/README.md +2782 -0
- package/deps/simdutf/SECURITY.md +8 -0
- package/deps/simdutf/benchmarks/CMakeLists.txt +101 -0
- package/deps/simdutf/benchmarks/alignment.cpp +150 -0
- package/deps/simdutf/benchmarks/base64/CMakeLists.txt +30 -0
- package/deps/simdutf/benchmarks/base64/benchmark_base64.cpp +875 -0
- package/deps/simdutf/benchmarks/base64/libbase64_spaces.h +49 -0
- package/deps/simdutf/benchmarks/base64/node_base64.h +227 -0
- package/deps/simdutf/benchmarks/base64/openssl3_base64.h +334 -0
- package/deps/simdutf/benchmarks/benchmark.cpp +65 -0
- package/deps/simdutf/benchmarks/benchmark_to_well_formed_utf16.cpp +347 -0
- package/deps/simdutf/benchmarks/competition/.clang-format-ignore +5 -0
- package/deps/simdutf/benchmarks/competition/CppCon2018/utf_utils.cpp +1276 -0
- package/deps/simdutf/benchmarks/competition/CppCon2018/utf_utils.h +595 -0
- package/deps/simdutf/benchmarks/competition/README.md +7 -0
- package/deps/simdutf/benchmarks/competition/hoehrmann/hoehrmann.h +91 -0
- package/deps/simdutf/benchmarks/competition/inoue2008/inoue_utf8_to_utf16.h +444 -0
- package/deps/simdutf/benchmarks/competition/inoue2008/inoue_utf8_to_utf16_tables.h +13183 -0
- package/deps/simdutf/benchmarks/competition/inoue2008/script.py +73 -0
- package/deps/simdutf/benchmarks/competition/llvm/ConvertUTF.cpp +738 -0
- package/deps/simdutf/benchmarks/competition/llvm/ConvertUTF.h +293 -0
- package/deps/simdutf/benchmarks/competition/u8u16/COPYRIGHT +8 -0
- package/deps/simdutf/benchmarks/competition/u8u16/Makefile +44 -0
- package/deps/simdutf/benchmarks/competition/u8u16/OSL3.0.txt +169 -0
- package/deps/simdutf/benchmarks/competition/u8u16/Profiling/BOM_Profiler.h +148 -0
- package/deps/simdutf/benchmarks/competition/u8u16/Profiling/i386_timer.h +45 -0
- package/deps/simdutf/benchmarks/competition/u8u16/Profiling/ppc_timer.c +34 -0
- package/deps/simdutf/benchmarks/competition/u8u16/README +56 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/config_defs.h +43 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/g4_config.h +27 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/mmx_config.h +16 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/p4_config.h +18 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/p4_ideal_config.h +16 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/spu_config.h +28 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/ssse3_config.h +20 -0
- package/deps/simdutf/benchmarks/competition/u8u16/iconv_u8u16.c +2 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/altivec_simd.h +440 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_basic_ops.py +121 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_half_operand_versions.py +158 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_test.py +270 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd.h +141 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_basic.h +216 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_built_in.h +119 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_modified.h +2430 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/outline.txt +39 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/spu_simd.h +421 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/sse_simd.h +836 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/stdint.h +222 -0
- package/deps/simdutf/benchmarks/competition/u8u16/libu8u16_BE.c +4 -0
- package/deps/simdutf/benchmarks/competition/u8u16/libu8u16_LE.c +5 -0
- package/deps/simdutf/benchmarks/competition/u8u16/proto/u8u16.py +390 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/Makefile +18 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/bytelex.h +448 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/charsets/ASCII_EBCDIC.h +284 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.c +1975 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.pdf +0 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.w +2263 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/multiliteral.h +239 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/u8u16.c +232 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/x8x16.c +194 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/xml_error.c +193 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/xml_error.h +167 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/xmldecl.c +288 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/xmldecl.h +117 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_g4.c +2 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_mmx.c +2 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_p4.c +3 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_p4_ideal.c +2 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_spu.c +2 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_ssse3.c +3 -0
- package/deps/simdutf/benchmarks/competition/u8u16/x8x16_p4.c +2 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/LICENSE +23 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/data/test_minimal.txt +44 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/readme.md +106 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_clang_corr_tests.cmd +11 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_clang_corr_tests.sh +13 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_corr_tests.sh +13 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_example.sh +13 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_file_conv.sh +14 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_iconv_lib.sh +11 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_iconv_sample.sh +8 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_corr_tests.cmd +12 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_example.cmd +13 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_file_conv.cmd +14 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_iconv_lib.cmd +11 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_iconv_sample.cmd +8 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_corr_tests.cmd +11 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_example.cmd +12 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_file_conv.cmd +13 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_iconv_lib.cmd +10 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_iconv_sample.cmd +9 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/html_table.py +25 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/measure.py +94 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/resize.py +20 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/wipe_all.cmd +2 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/wipe_interm.cmd +1 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/base/CustomMemcpy.h +75 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/base/PerfDefs.h +47 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/base/Timing.cpp +17 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/base/Timing.h +76 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/AllProcessors.cpp +35 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BaseBufferProcessor.cpp +117 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BaseBufferProcessor.h +210 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BufferDecoder.h +158 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BufferEncoder.h +104 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/ProcessorPlugins.h +334 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/ProcessorSelector.h +186 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderLut.cpp +140 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderLut.h +42 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderProcess.h +100 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/Dfa.h +57 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderLut.cpp +85 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderLut.h +27 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderProcess.h +126 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/ProcessTrivial.h +108 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/iconv/iconv.cpp +139 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/iconv/iconv.h +74 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/message/MessageConverter.cpp +65 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/message/MessageConverter.h +91 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/CorrectnessTests.cpp +772 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/Example.cpp +12 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/FileConverter.cpp +486 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/iconv_sample.c +162 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/utf8lut.h +15 -0
- package/deps/simdutf/benchmarks/competition/utf8sse4/fromutf8-sse.cpp +292 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/LICENSE +23 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/README.md +1503 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/checked.h +335 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/core.h +338 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/cpp11.h +103 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/cpp17.h +103 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/unchecked.h +274 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8.h +34 -0
- package/deps/simdutf/benchmarks/dataset/README.md +155 -0
- package/deps/simdutf/benchmarks/dataset/emoji.txt +204 -0
- package/deps/simdutf/benchmarks/dataset/scripts/utf8type.py +40 -0
- package/deps/simdutf/benchmarks/dataset/wikipedia_mars/Makefile +80 -0
- package/deps/simdutf/benchmarks/dataset/wikipedia_mars/convert_to_utf6.py +20 -0
- package/deps/simdutf/benchmarks/find/CMakeLists.txt +6 -0
- package/deps/simdutf/benchmarks/find/findbenchmark.cpp +63 -0
- package/deps/simdutf/benchmarks/find/findbenchmarker.h +46 -0
- package/deps/simdutf/benchmarks/shortbench.cpp +555 -0
- package/deps/simdutf/benchmarks/src/CMakeLists.txt +52 -0
- package/deps/simdutf/benchmarks/src/apple_arm_events.h +1104 -0
- package/deps/simdutf/benchmarks/src/benchmark.cpp +3899 -0
- package/deps/simdutf/benchmarks/src/benchmark.h +317 -0
- package/deps/simdutf/benchmarks/src/benchmark_base.cpp +144 -0
- package/deps/simdutf/benchmarks/src/benchmark_base.h +98 -0
- package/deps/simdutf/benchmarks/src/cmdline.cpp +176 -0
- package/deps/simdutf/benchmarks/src/cmdline.h +35 -0
- package/deps/simdutf/benchmarks/src/event_counter.h +162 -0
- package/deps/simdutf/benchmarks/src/linux-perf-events.h +104 -0
- package/deps/simdutf/benchmarks/stream.cpp +209 -0
- package/deps/simdutf/benchmarks/threaded.cpp +123 -0
- package/deps/simdutf/cmake/CPM.cmake +1363 -0
- package/deps/simdutf/cmake/JoinPaths.cmake +23 -0
- package/deps/simdutf/cmake/add_cpp_test.cmake +68 -0
- package/deps/simdutf/cmake/simdutf-config.cmake.in +2 -0
- package/deps/simdutf/cmake/simdutf-flags.cmake +26 -0
- package/deps/simdutf/cmake/toolchains-ci/riscv64-linux-gnu.cmake +4 -0
- package/deps/simdutf/cmake/toolchains-dev/README.md +32 -0
- package/deps/simdutf/cmake/toolchains-dev/aarch64.cmake +14 -0
- package/deps/simdutf/cmake/toolchains-dev/loongarch64.cmake +22 -0
- package/deps/simdutf/cmake/toolchains-dev/powerpc64.cmake +16 -0
- package/deps/simdutf/cmake/toolchains-dev/powerpc64le.cmake +16 -0
- package/deps/simdutf/cmake/toolchains-dev/riscv64.cmake +16 -0
- package/deps/simdutf/cmake/toolchains-dev/rvv-spike.cmake +38 -0
- package/deps/simdutf/doc/avx512.png +0 -0
- package/deps/simdutf/doc/logo.png +0 -0
- package/deps/simdutf/doc/logo.svg +165 -0
- package/deps/simdutf/doc/node2023.png +0 -0
- package/deps/simdutf/doc/shortinput.md +78 -0
- package/deps/simdutf/doc/utf16utf8.png +0 -0
- package/deps/simdutf/doc/utf8utf16.png +0 -0
- package/deps/simdutf/doc/widelogo.png +0 -0
- package/deps/simdutf/doxygen.py +50 -0
- package/deps/simdutf/fuzz/.clang-format +9 -0
- package/deps/simdutf/fuzz/CMakeLists.txt +45 -0
- package/deps/simdutf/fuzz/README.md +168 -0
- package/deps/simdutf/fuzz/atomic_base64.cpp +448 -0
- package/deps/simdutf/fuzz/base64.cpp +278 -0
- package/deps/simdutf/fuzz/build.sh +83 -0
- package/deps/simdutf/fuzz/conversion.cpp +669 -0
- package/deps/simdutf/fuzz/helpers/.clang-format-ignore +1 -0
- package/deps/simdutf/fuzz/helpers/common.h +135 -0
- package/deps/simdutf/fuzz/helpers/nameof.hpp +1258 -0
- package/deps/simdutf/fuzz/main.cpp +72 -0
- package/deps/simdutf/fuzz/minimize_and_cleanse.sh +87 -0
- package/deps/simdutf/fuzz/misc.cpp +216 -0
- package/deps/simdutf/fuzz/random_fuzz.sh +154 -0
- package/deps/simdutf/fuzz/roundtrip.cpp +588 -0
- package/deps/simdutf/fuzz/safe_conversion.cpp +104 -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/riscv/Dockerfile +16 -0
- package/deps/simdutf/riscv/README.md +24 -0
- package/deps/simdutf/riscv/remove-docker-station +8 -0
- package/deps/simdutf/riscv/run-docker-station +31 -0
- package/deps/simdutf/scripts/.flake8 +2 -0
- package/deps/simdutf/scripts/Makefile +2 -0
- package/deps/simdutf/scripts/README_ADD_FUNCTION.md +49 -0
- package/deps/simdutf/scripts/add_function.py +330 -0
- package/deps/simdutf/scripts/amalgamation_tests.py +156 -0
- package/deps/simdutf/scripts/base64/Makefile +2 -0
- package/deps/simdutf/scripts/base64/README.md +2 -0
- package/deps/simdutf/scripts/base64/avx512.py +76 -0
- package/deps/simdutf/scripts/base64/neon_decode.py +143 -0
- package/deps/simdutf/scripts/base64/neon_generate_lut.py +101 -0
- package/deps/simdutf/scripts/base64/sse.py +252 -0
- package/deps/simdutf/scripts/base64/sseregular.py +160 -0
- package/deps/simdutf/scripts/base64/sseurl.py +283 -0
- package/deps/simdutf/scripts/base64/table.py +59 -0
- package/deps/simdutf/scripts/base64bench_print.py +145 -0
- package/deps/simdutf/scripts/benchmark-all.py +119 -0
- package/deps/simdutf/scripts/benchmark_print.py +324 -0
- package/deps/simdutf/scripts/check_feature_macros.py +156 -0
- package/deps/simdutf/scripts/check_typos.sh +13 -0
- package/deps/simdutf/scripts/clang_format.sh +35 -0
- package/deps/simdutf/scripts/clang_format_docker.sh +38 -0
- package/deps/simdutf/scripts/common.py +24 -0
- package/deps/simdutf/scripts/compilation_benchmark.py +55 -0
- package/deps/simdutf/scripts/compile_many_variations.sh +64 -0
- package/deps/simdutf/scripts/create_latex_table.py +62 -0
- package/deps/simdutf/scripts/docker/Dockerfile +14 -0
- package/deps/simdutf/scripts/docker/Makefile +9 -0
- package/deps/simdutf/scripts/docker/README.md +30 -0
- package/deps/simdutf/scripts/docker/llvm.gpg +0 -0
- package/deps/simdutf/scripts/ppc64_convert_utf16_to_utf8.py +155 -0
- package/deps/simdutf/scripts/prepare_doxygen.sh +21 -0
- package/deps/simdutf/scripts/release.py +197 -0
- package/deps/simdutf/scripts/shortinputplots.py +97 -0
- package/deps/simdutf/scripts/sse_convert_utf16_to_utf8.py +422 -0
- package/deps/simdutf/scripts/sse_convert_utf32_to_utf16.py +105 -0
- package/deps/simdutf/scripts/sse_utf8_utf16_decode.py +186 -0
- package/deps/simdutf/scripts/sse_validate_utf16le_proof.py +137 -0
- package/deps/simdutf/scripts/sse_validate_utf16le_testcases.py +129 -0
- package/deps/simdutf/scripts/table.py +207 -0
- package/deps/simdutf/scripts/tests/new.txt +33 -0
- package/deps/simdutf/scripts/tests/old.txt +33 -0
- package/deps/simdutf/scripts/tests/results.txt +272 -0
- package/deps/simdutf/simdutf.pc.in +11 -0
- package/deps/simdutf/singleheader/.flake8 +2 -0
- package/deps/simdutf/singleheader/CMakeLists.txt +64 -0
- package/deps/simdutf/singleheader/README-dev.md +81 -0
- package/deps/simdutf/singleheader/README.md +19 -0
- package/deps/simdutf/singleheader/amalgamate.py +513 -0
- package/deps/simdutf/singleheader/amalgamation_demo.c +59 -0
- package/deps/simdutf/singleheader/amalgamation_demo.cpp +54 -0
- package/deps/simdutf/singleheader/test-features.py +262 -0
- package/deps/simdutf/src/CMakeLists.txt +78 -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/deps/simdutf/tests/CMakeLists.txt +483 -0
- package/deps/simdutf/tests/atomic_base64_tests.cpp +2845 -0
- package/deps/simdutf/tests/base64_tests.cpp +3617 -0
- package/deps/simdutf/tests/basic_fuzzer.cpp +805 -0
- package/deps/simdutf/tests/bele_tests.cpp +182 -0
- package/deps/simdutf/tests/constexpr_base64_tests.cpp +387 -0
- package/deps/simdutf/tests/convert_latin1_to_utf16be_tests.cpp +52 -0
- package/deps/simdutf/tests/convert_latin1_to_utf16le_tests.cpp +80 -0
- package/deps/simdutf/tests/convert_latin1_to_utf32_tests.cpp +66 -0
- package/deps/simdutf/tests/convert_latin1_to_utf8_tests.cpp +120 -0
- package/deps/simdutf/tests/convert_utf16_to_utf8_safe_tests.cpp +203 -0
- package/deps/simdutf/tests/convert_utf16_to_utf8_with_replacement_tests.cpp +276 -0
- package/deps/simdutf/tests/convert_utf16be_to_latin1_tests.cpp +109 -0
- package/deps/simdutf/tests/convert_utf16be_to_latin1_tests_with_errors.cpp +136 -0
- package/deps/simdutf/tests/convert_utf16be_to_utf32_tests.cpp +193 -0
- package/deps/simdutf/tests/convert_utf16be_to_utf32_with_errors_tests.cpp +381 -0
- package/deps/simdutf/tests/convert_utf16be_to_utf8_tests.cpp +259 -0
- package/deps/simdutf/tests/convert_utf16be_to_utf8_with_errors_tests.cpp +266 -0
- package/deps/simdutf/tests/convert_utf16le_to_latin1_tests.cpp +148 -0
- package/deps/simdutf/tests/convert_utf16le_to_latin1_tests_with_errors.cpp +176 -0
- package/deps/simdutf/tests/convert_utf16le_to_utf32_tests.cpp +213 -0
- package/deps/simdutf/tests/convert_utf16le_to_utf32_with_errors_tests.cpp +318 -0
- package/deps/simdutf/tests/convert_utf16le_to_utf8_tests.cpp +343 -0
- package/deps/simdutf/tests/convert_utf16le_to_utf8_with_errors_tests.cpp +271 -0
- package/deps/simdutf/tests/convert_utf32_to_latin1_tests.cpp +111 -0
- package/deps/simdutf/tests/convert_utf32_to_latin1_with_errors_tests.cpp +96 -0
- package/deps/simdutf/tests/convert_utf32_to_utf16be_tests.cpp +148 -0
- package/deps/simdutf/tests/convert_utf32_to_utf16be_with_errors_tests.cpp +192 -0
- package/deps/simdutf/tests/convert_utf32_to_utf16le_tests.cpp +166 -0
- package/deps/simdutf/tests/convert_utf32_to_utf16le_with_errors_tests.cpp +215 -0
- package/deps/simdutf/tests/convert_utf32_to_utf8_tests.cpp +181 -0
- package/deps/simdutf/tests/convert_utf32_to_utf8_with_errors_tests.cpp +261 -0
- package/deps/simdutf/tests/convert_utf8_to_latin1_tests.cpp +516 -0
- package/deps/simdutf/tests/convert_utf8_to_latin1_with_errors_tests.cpp +579 -0
- package/deps/simdutf/tests/convert_utf8_to_utf16be_tests.cpp +412 -0
- package/deps/simdutf/tests/convert_utf8_to_utf16be_with_errors_tests.cpp +480 -0
- package/deps/simdutf/tests/convert_utf8_to_utf16le_tests.cpp +671 -0
- package/deps/simdutf/tests/convert_utf8_to_utf16le_with_errors_tests.cpp +455 -0
- package/deps/simdutf/tests/convert_utf8_to_utf32_tests.cpp +1204 -0
- package/deps/simdutf/tests/convert_utf8_to_utf32_with_errors_tests.cpp +337 -0
- package/deps/simdutf/tests/convert_valid_utf16be_to_latin1_tests.cpp +37 -0
- package/deps/simdutf/tests/convert_valid_utf16be_to_utf32_tests.cpp +97 -0
- package/deps/simdutf/tests/convert_valid_utf16be_to_utf8_tests.cpp +126 -0
- package/deps/simdutf/tests/convert_valid_utf16le_to_latin1_tests.cpp +71 -0
- package/deps/simdutf/tests/convert_valid_utf16le_to_utf32_tests.cpp +122 -0
- package/deps/simdutf/tests/convert_valid_utf16le_to_utf8_tests.cpp +244 -0
- package/deps/simdutf/tests/convert_valid_utf32_to_latin1_tests.cpp +49 -0
- package/deps/simdutf/tests/convert_valid_utf32_to_utf16be_tests.cpp +92 -0
- package/deps/simdutf/tests/convert_valid_utf32_to_utf16le_tests.cpp +114 -0
- package/deps/simdutf/tests/convert_valid_utf32_to_utf8_tests.cpp +109 -0
- package/deps/simdutf/tests/convert_valid_utf8_to_latin1_tests.cpp +84 -0
- package/deps/simdutf/tests/convert_valid_utf8_to_utf16be_tests.cpp +124 -0
- package/deps/simdutf/tests/convert_valid_utf8_to_utf16le_tests.cpp +221 -0
- package/deps/simdutf/tests/convert_valid_utf8_to_utf32_tests.cpp +155 -0
- package/deps/simdutf/tests/count_utf16be.cpp +64 -0
- package/deps/simdutf/tests/count_utf16le.cpp +61 -0
- package/deps/simdutf/tests/count_utf8.cpp +87 -0
- package/deps/simdutf/tests/detect_encodings_tests.cpp +312 -0
- package/deps/simdutf/tests/embed/valid_utf8.txt +1 -0
- package/deps/simdutf/tests/embed_tests.cpp +22 -0
- package/deps/simdutf/tests/find_tests.cpp +77 -0
- package/deps/simdutf/tests/fixed_string_tests.cpp +153 -0
- package/deps/simdutf/tests/helpers/CMakeLists.txt +25 -0
- package/deps/simdutf/tests/helpers/compiletime_conversions.h +222 -0
- package/deps/simdutf/tests/helpers/fixed_string.h +267 -0
- package/deps/simdutf/tests/helpers/random_int.cpp +30 -0
- package/deps/simdutf/tests/helpers/random_int.h +39 -0
- package/deps/simdutf/tests/helpers/random_utf16.cpp +123 -0
- package/deps/simdutf/tests/helpers/random_utf16.h +52 -0
- package/deps/simdutf/tests/helpers/random_utf32.cpp +41 -0
- package/deps/simdutf/tests/helpers/random_utf32.h +40 -0
- package/deps/simdutf/tests/helpers/random_utf8.cpp +93 -0
- package/deps/simdutf/tests/helpers/random_utf8.h +36 -0
- package/deps/simdutf/tests/helpers/test.cpp +231 -0
- package/deps/simdutf/tests/helpers/test.h +193 -0
- package/deps/simdutf/tests/helpers/transcode_test_base.cpp +1257 -0
- package/deps/simdutf/tests/helpers/transcode_test_base.h +683 -0
- package/deps/simdutf/tests/helpers/utf16.h +27 -0
- package/deps/simdutf/tests/installation_tests/find/CMakeLists.txt +43 -0
- package/deps/simdutf/tests/installation_tests/from_fetch/CMakeLists.txt +47 -0
- package/deps/simdutf/tests/internal_tests.cpp +27 -0
- package/deps/simdutf/tests/null_safety_tests.cpp +94 -0
- package/deps/simdutf/tests/random_fuzzer.cpp +779 -0
- package/deps/simdutf/tests/readme_tests.cpp +274 -0
- package/deps/simdutf/tests/reference/CMakeLists.txt +23 -0
- package/deps/simdutf/tests/reference/decode_utf16.h +81 -0
- package/deps/simdutf/tests/reference/decode_utf32.h +47 -0
- package/deps/simdutf/tests/reference/encode_latin1.cpp +1 -0
- package/deps/simdutf/tests/reference/encode_latin1.h +32 -0
- package/deps/simdutf/tests/reference/encode_utf16.cpp +49 -0
- package/deps/simdutf/tests/reference/encode_utf16.h +20 -0
- package/deps/simdutf/tests/reference/encode_utf32.cpp +1 -0
- package/deps/simdutf/tests/reference/encode_utf32.h +36 -0
- package/deps/simdutf/tests/reference/encode_utf8.cpp +1 -0
- package/deps/simdutf/tests/reference/encode_utf8.h +40 -0
- package/deps/simdutf/tests/reference/validate_utf16.cpp +60 -0
- package/deps/simdutf/tests/reference/validate_utf16.h +14 -0
- package/deps/simdutf/tests/reference/validate_utf16_to_latin1.cpp +35 -0
- package/deps/simdutf/tests/reference/validate_utf16_to_latin1.h +13 -0
- package/deps/simdutf/tests/reference/validate_utf32.cpp +27 -0
- package/deps/simdutf/tests/reference/validate_utf32.h +12 -0
- package/deps/simdutf/tests/reference/validate_utf32_to_latin1.cpp +27 -0
- package/deps/simdutf/tests/reference/validate_utf32_to_latin1.h +12 -0
- package/deps/simdutf/tests/reference/validate_utf8.cpp +82 -0
- package/deps/simdutf/tests/reference/validate_utf8.h +11 -0
- package/deps/simdutf/tests/reference/validate_utf8_to_latin1.cpp +43 -0
- package/deps/simdutf/tests/reference/validate_utf8_to_latin1.h +12 -0
- package/deps/simdutf/tests/select_implementation.cpp +43 -0
- package/deps/simdutf/tests/simdutf_c_tests.cpp +244 -0
- package/deps/simdutf/tests/span_tests.cpp +401 -0
- package/deps/simdutf/tests/special_tests.cpp +559 -0
- package/deps/simdutf/tests/straight_c_test.c +187 -0
- package/deps/simdutf/tests/text_encoding_tests.cpp +77 -0
- package/deps/simdutf/tests/to_well_formed_utf16_tests.cpp +377 -0
- package/deps/simdutf/tests/utf8_length_from_utf16_tests.cpp +202 -0
- package/deps/simdutf/tests/validate_ascii_basic_tests.cpp +165 -0
- package/deps/simdutf/tests/validate_ascii_with_errors_tests.cpp +77 -0
- package/deps/simdutf/tests/validate_utf16be_basic_tests.cpp +175 -0
- package/deps/simdutf/tests/validate_utf16be_with_errors_tests.cpp +188 -0
- package/deps/simdutf/tests/validate_utf16le_basic_tests.cpp +268 -0
- package/deps/simdutf/tests/validate_utf16le_with_errors_tests.cpp +274 -0
- package/deps/simdutf/tests/validate_utf32_basic_tests.cpp +92 -0
- package/deps/simdutf/tests/validate_utf32_with_errors_tests.cpp +114 -0
- package/deps/simdutf/tests/validate_utf8_basic_tests.cpp +178 -0
- package/deps/simdutf/tests/validate_utf8_brute_force_tests.cpp +88 -0
- package/deps/simdutf/tests/validate_utf8_puzzler_tests.cpp +33 -0
- package/deps/simdutf/tests/validate_utf8_with_errors_tests.cpp +228 -0
- package/deps/simdutf/tools/CMakeLists.txt +85 -0
- package/deps/simdutf/tools/fastbase64.cpp +250 -0
- package/deps/simdutf/tools/sutf.cpp +556 -0
- package/deps/simdutf/tools/sutf.h +40 -0
- package/lib/commonjs/blake3.js +2 -1
- package/lib/commonjs/blake3.js.map +1 -1
- package/lib/commonjs/diffie-hellman.js +5 -4
- package/lib/commonjs/diffie-hellman.js.map +1 -1
- package/lib/commonjs/ecdh.js +5 -4
- package/lib/commonjs/ecdh.js.map +1 -1
- package/lib/module/blake3.js +2 -1
- package/lib/module/blake3.js.map +1 -1
- package/lib/module/diffie-hellman.js +5 -4
- package/lib/module/diffie-hellman.js.map +1 -1
- package/lib/module/ecdh.js +5 -4
- package/lib/module/ecdh.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/typescript/blake3.d.ts.map +1 -1
- package/lib/typescript/diffie-hellman.d.ts.map +1 -1
- package/lib/typescript/ecdh.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/blake3.ts +2 -1
- package/src/diffie-hellman.ts +5 -7
- package/src/ecdh.ts +5 -8
|
@@ -0,0 +1,911 @@
|
|
|
1
|
+
#ifndef SIMDUTF_BASE64_H
|
|
2
|
+
#define SIMDUTF_BASE64_H
|
|
3
|
+
|
|
4
|
+
#include <algorithm>
|
|
5
|
+
#include <cstddef>
|
|
6
|
+
#include <cstdint>
|
|
7
|
+
#include <cstring>
|
|
8
|
+
#include <iostream>
|
|
9
|
+
|
|
10
|
+
namespace simdutf {
|
|
11
|
+
namespace scalar {
|
|
12
|
+
namespace {
|
|
13
|
+
namespace base64 {
|
|
14
|
+
|
|
15
|
+
// This function is not expected to be fast. Do not use in long loops.
|
|
16
|
+
// In most instances you should be using is_ignorable.
|
|
17
|
+
template <class char_type> bool is_ascii_white_space(char_type c) {
|
|
18
|
+
return c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '\f';
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
template <class char_type> simdutf_constexpr23 bool is_eight_byte(char_type c) {
|
|
22
|
+
if simdutf_constexpr (sizeof(char_type) == 1) {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
return uint8_t(c) == c;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
template <class char_type>
|
|
29
|
+
simdutf_constexpr23 bool is_ignorable(char_type c,
|
|
30
|
+
simdutf::base64_options options) {
|
|
31
|
+
const uint8_t *to_base64 =
|
|
32
|
+
(options & base64_default_or_url)
|
|
33
|
+
? tables::base64::to_base64_default_or_url_value
|
|
34
|
+
: ((options & base64_url) ? tables::base64::to_base64_url_value
|
|
35
|
+
: tables::base64::to_base64_value);
|
|
36
|
+
const bool ignore_garbage =
|
|
37
|
+
(options == base64_options::base64_url_accept_garbage) ||
|
|
38
|
+
(options == base64_options::base64_default_accept_garbage) ||
|
|
39
|
+
(options == base64_options::base64_default_or_url_accept_garbage);
|
|
40
|
+
uint8_t code = to_base64[uint8_t(c)];
|
|
41
|
+
if (is_eight_byte(c) && code <= 63) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
if (is_eight_byte(c) && code == 64) {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
return ignore_garbage;
|
|
48
|
+
}
|
|
49
|
+
template <class char_type>
|
|
50
|
+
simdutf_constexpr23 bool is_base64(char_type c,
|
|
51
|
+
simdutf::base64_options options) {
|
|
52
|
+
const uint8_t *to_base64 =
|
|
53
|
+
(options & base64_default_or_url)
|
|
54
|
+
? tables::base64::to_base64_default_or_url_value
|
|
55
|
+
: ((options & base64_url) ? tables::base64::to_base64_url_value
|
|
56
|
+
: tables::base64::to_base64_value);
|
|
57
|
+
uint8_t code = to_base64[uint8_t(c)];
|
|
58
|
+
if (is_eight_byte(c) && code <= 63) {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
template <class char_type>
|
|
65
|
+
simdutf_constexpr23 bool is_base64_or_padding(char_type c,
|
|
66
|
+
simdutf::base64_options options) {
|
|
67
|
+
const uint8_t *to_base64 =
|
|
68
|
+
(options & base64_default_or_url)
|
|
69
|
+
? tables::base64::to_base64_default_or_url_value
|
|
70
|
+
: ((options & base64_url) ? tables::base64::to_base64_url_value
|
|
71
|
+
: tables::base64::to_base64_value);
|
|
72
|
+
if (c == '=') {
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
uint8_t code = to_base64[uint8_t(c)];
|
|
76
|
+
if (is_eight_byte(c) && code <= 63) {
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
template <class char_type>
|
|
83
|
+
bool is_ignorable_or_padding(char_type c, simdutf::base64_options options) {
|
|
84
|
+
return is_ignorable(c, options) || c == '=';
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
struct reduced_input {
|
|
88
|
+
size_t equalsigns; // number of padding characters '=', typically 0, 1, 2.
|
|
89
|
+
size_t equallocation; // location of the first padding character if any
|
|
90
|
+
size_t srclen; // length of the input buffer before padding
|
|
91
|
+
size_t full_input_length; // length of the input buffer with padding but
|
|
92
|
+
// without ignorable characters
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
// find the end of the base64 input buffer
|
|
96
|
+
// It returns the number of padding characters, the location of the first
|
|
97
|
+
// padding character if any, the length of the input buffer before padding
|
|
98
|
+
// and the length of the input buffer with padding. The input buffer is not
|
|
99
|
+
// modified. The function assumes that there are at most two padding characters.
|
|
100
|
+
template <class char_type>
|
|
101
|
+
simdutf_constexpr23 reduced_input find_end(const char_type *src, size_t srclen,
|
|
102
|
+
simdutf::base64_options options) {
|
|
103
|
+
const uint8_t *to_base64 =
|
|
104
|
+
(options & base64_default_or_url)
|
|
105
|
+
? tables::base64::to_base64_default_or_url_value
|
|
106
|
+
: ((options & base64_url) ? tables::base64::to_base64_url_value
|
|
107
|
+
: tables::base64::to_base64_value);
|
|
108
|
+
const bool ignore_garbage =
|
|
109
|
+
(options == base64_options::base64_url_accept_garbage) ||
|
|
110
|
+
(options == base64_options::base64_default_accept_garbage) ||
|
|
111
|
+
(options == base64_options::base64_default_or_url_accept_garbage);
|
|
112
|
+
|
|
113
|
+
size_t equalsigns = 0;
|
|
114
|
+
// We intentionally include trailing spaces in the full input length.
|
|
115
|
+
// See https://github.com/simdutf/simdutf/issues/824
|
|
116
|
+
size_t full_input_length = srclen;
|
|
117
|
+
// skip trailing spaces
|
|
118
|
+
while (!ignore_garbage && srclen > 0 &&
|
|
119
|
+
scalar::base64::is_eight_byte(src[srclen - 1]) &&
|
|
120
|
+
to_base64[uint8_t(src[srclen - 1])] == 64) {
|
|
121
|
+
srclen--;
|
|
122
|
+
}
|
|
123
|
+
size_t equallocation =
|
|
124
|
+
srclen; // location of the first padding character if any
|
|
125
|
+
if (ignore_garbage) {
|
|
126
|
+
// Technically, we don't need to find the first padding character, we can
|
|
127
|
+
// just change our algorithms, but it adds substantial complexity.
|
|
128
|
+
auto it = simdutf::find(src, src + srclen, '=');
|
|
129
|
+
if (it != src + srclen) {
|
|
130
|
+
equallocation = it - src;
|
|
131
|
+
equalsigns = 1;
|
|
132
|
+
srclen = equallocation;
|
|
133
|
+
full_input_length = equallocation + 1;
|
|
134
|
+
}
|
|
135
|
+
return {equalsigns, equallocation, srclen, full_input_length};
|
|
136
|
+
}
|
|
137
|
+
if (!ignore_garbage && srclen > 0 && src[srclen - 1] == '=') {
|
|
138
|
+
// This is the last '=' sign.
|
|
139
|
+
equallocation = srclen - 1;
|
|
140
|
+
srclen--;
|
|
141
|
+
equalsigns = 1;
|
|
142
|
+
// skip trailing spaces
|
|
143
|
+
while (srclen > 0 && scalar::base64::is_eight_byte(src[srclen - 1]) &&
|
|
144
|
+
to_base64[uint8_t(src[srclen - 1])] == 64) {
|
|
145
|
+
srclen--;
|
|
146
|
+
}
|
|
147
|
+
if (srclen > 0 && src[srclen - 1] == '=') {
|
|
148
|
+
// This is the second '=' sign.
|
|
149
|
+
equallocation = srclen - 1;
|
|
150
|
+
srclen--;
|
|
151
|
+
equalsigns = 2;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return {equalsigns, equallocation, srclen, full_input_length};
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Returns true upon success. The destination buffer must be large enough.
|
|
158
|
+
// This functions assumes that the padding (=) has been removed.
|
|
159
|
+
// if check_capacity is true, it will check that the destination buffer is
|
|
160
|
+
// large enough. If it is not, it will return OUTPUT_BUFFER_TOO_SMALL.
|
|
161
|
+
template <bool check_capacity, class char_type>
|
|
162
|
+
simdutf_constexpr23 full_result base64_tail_decode_impl(
|
|
163
|
+
char *dst, size_t outlen, const char_type *src, size_t length,
|
|
164
|
+
size_t padding_characters, // number of padding characters
|
|
165
|
+
// '=', typically 0, 1, 2.
|
|
166
|
+
base64_options options, last_chunk_handling_options last_chunk_options) {
|
|
167
|
+
char *dstend = dst + outlen;
|
|
168
|
+
(void)dstend;
|
|
169
|
+
// This looks like 10 branches, but we expect the compiler to resolve this to
|
|
170
|
+
// two branches (easily predicted):
|
|
171
|
+
const uint8_t *to_base64 =
|
|
172
|
+
(options & base64_default_or_url)
|
|
173
|
+
? tables::base64::to_base64_default_or_url_value
|
|
174
|
+
: ((options & base64_url) ? tables::base64::to_base64_url_value
|
|
175
|
+
: tables::base64::to_base64_value);
|
|
176
|
+
const uint32_t *d0 =
|
|
177
|
+
(options & base64_default_or_url)
|
|
178
|
+
? tables::base64::base64_default_or_url::d0
|
|
179
|
+
: ((options & base64_url) ? tables::base64::base64_url::d0
|
|
180
|
+
: tables::base64::base64_default::d0);
|
|
181
|
+
const uint32_t *d1 =
|
|
182
|
+
(options & base64_default_or_url)
|
|
183
|
+
? tables::base64::base64_default_or_url::d1
|
|
184
|
+
: ((options & base64_url) ? tables::base64::base64_url::d1
|
|
185
|
+
: tables::base64::base64_default::d1);
|
|
186
|
+
const uint32_t *d2 =
|
|
187
|
+
(options & base64_default_or_url)
|
|
188
|
+
? tables::base64::base64_default_or_url::d2
|
|
189
|
+
: ((options & base64_url) ? tables::base64::base64_url::d2
|
|
190
|
+
: tables::base64::base64_default::d2);
|
|
191
|
+
const uint32_t *d3 =
|
|
192
|
+
(options & base64_default_or_url)
|
|
193
|
+
? tables::base64::base64_default_or_url::d3
|
|
194
|
+
: ((options & base64_url) ? tables::base64::base64_url::d3
|
|
195
|
+
: tables::base64::base64_default::d3);
|
|
196
|
+
const bool ignore_garbage =
|
|
197
|
+
(options == base64_options::base64_url_accept_garbage) ||
|
|
198
|
+
(options == base64_options::base64_default_accept_garbage) ||
|
|
199
|
+
(options == base64_options::base64_default_or_url_accept_garbage);
|
|
200
|
+
|
|
201
|
+
const char_type *srcend = src + length;
|
|
202
|
+
const char_type *srcinit = src;
|
|
203
|
+
const char *dstinit = dst;
|
|
204
|
+
|
|
205
|
+
uint32_t x;
|
|
206
|
+
size_t idx;
|
|
207
|
+
uint8_t buffer[4];
|
|
208
|
+
while (true) {
|
|
209
|
+
while (srcend - src >= 4 && is_eight_byte(src[0]) &&
|
|
210
|
+
is_eight_byte(src[1]) && is_eight_byte(src[2]) &&
|
|
211
|
+
is_eight_byte(src[3]) &&
|
|
212
|
+
(x = d0[uint8_t(src[0])] | d1[uint8_t(src[1])] |
|
|
213
|
+
d2[uint8_t(src[2])] | d3[uint8_t(src[3])]) < 0x01FFFFFF) {
|
|
214
|
+
if (check_capacity && dstend - dst < 3) {
|
|
215
|
+
return {OUTPUT_BUFFER_TOO_SMALL, size_t(src - srcinit),
|
|
216
|
+
size_t(dst - dstinit)};
|
|
217
|
+
}
|
|
218
|
+
*dst++ = static_cast<char>(x & 0xFF);
|
|
219
|
+
*dst++ = static_cast<char>((x >> 8) & 0xFF);
|
|
220
|
+
*dst++ = static_cast<char>((x >> 16) & 0xFF);
|
|
221
|
+
src += 4;
|
|
222
|
+
}
|
|
223
|
+
const char_type *srccur = src;
|
|
224
|
+
idx = 0;
|
|
225
|
+
// we need at least four characters.
|
|
226
|
+
#ifdef __clang__
|
|
227
|
+
// If possible, we read four characters at a time. (It is an optimization.)
|
|
228
|
+
if (ignore_garbage && src + 4 <= srcend) {
|
|
229
|
+
char_type c0 = src[0];
|
|
230
|
+
char_type c1 = src[1];
|
|
231
|
+
char_type c2 = src[2];
|
|
232
|
+
char_type c3 = src[3];
|
|
233
|
+
|
|
234
|
+
uint8_t code0 = to_base64[uint8_t(c0)];
|
|
235
|
+
uint8_t code1 = to_base64[uint8_t(c1)];
|
|
236
|
+
uint8_t code2 = to_base64[uint8_t(c2)];
|
|
237
|
+
uint8_t code3 = to_base64[uint8_t(c3)];
|
|
238
|
+
|
|
239
|
+
buffer[idx] = code0;
|
|
240
|
+
idx += (is_eight_byte(c0) && code0 <= 63);
|
|
241
|
+
buffer[idx] = code1;
|
|
242
|
+
idx += (is_eight_byte(c1) && code1 <= 63);
|
|
243
|
+
buffer[idx] = code2;
|
|
244
|
+
idx += (is_eight_byte(c2) && code2 <= 63);
|
|
245
|
+
buffer[idx] = code3;
|
|
246
|
+
idx += (is_eight_byte(c3) && code3 <= 63);
|
|
247
|
+
src += 4;
|
|
248
|
+
}
|
|
249
|
+
#endif
|
|
250
|
+
while ((idx < 4) && (src < srcend)) {
|
|
251
|
+
char_type c = *src;
|
|
252
|
+
|
|
253
|
+
uint8_t code = to_base64[uint8_t(c)];
|
|
254
|
+
buffer[idx] = uint8_t(code);
|
|
255
|
+
if (is_eight_byte(c) && code <= 63) {
|
|
256
|
+
idx++;
|
|
257
|
+
} else if (!ignore_garbage &&
|
|
258
|
+
(code > 64 || !scalar::base64::is_eight_byte(c))) {
|
|
259
|
+
return {INVALID_BASE64_CHARACTER, size_t(src - srcinit),
|
|
260
|
+
size_t(dst - dstinit)};
|
|
261
|
+
} else {
|
|
262
|
+
// We have a space or a newline or garbage. We ignore it.
|
|
263
|
+
}
|
|
264
|
+
src++;
|
|
265
|
+
}
|
|
266
|
+
if (idx != 4) {
|
|
267
|
+
simdutf_log_assert(idx < 4, "idx should be less than 4");
|
|
268
|
+
// We never should have that the number of base64 characters + the
|
|
269
|
+
// number of padding characters is more than 4.
|
|
270
|
+
if (!ignore_garbage && (idx + padding_characters > 4)) {
|
|
271
|
+
return {INVALID_BASE64_CHARACTER, size_t(src - srcinit),
|
|
272
|
+
size_t(dst - dstinit), true};
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
// The idea here is that in loose mode,
|
|
276
|
+
// if there is padding at all, it must be used
|
|
277
|
+
// to form 4-wise chunk. However, in loose mode,
|
|
278
|
+
// we do accept no padding at all.
|
|
279
|
+
if (!ignore_garbage &&
|
|
280
|
+
last_chunk_options == last_chunk_handling_options::loose &&
|
|
281
|
+
(idx >= 2) && padding_characters > 0 &&
|
|
282
|
+
((idx + padding_characters) & 3) != 0) {
|
|
283
|
+
return {INVALID_BASE64_CHARACTER, size_t(src - srcinit),
|
|
284
|
+
size_t(dst - dstinit), true};
|
|
285
|
+
} else
|
|
286
|
+
|
|
287
|
+
// The idea here is that in strict mode, we do not want to accept
|
|
288
|
+
// incomplete base64 chunks. So if the chunk was otherwise valid, we
|
|
289
|
+
// return BASE64_INPUT_REMAINDER.
|
|
290
|
+
if (!ignore_garbage &&
|
|
291
|
+
last_chunk_options == last_chunk_handling_options::strict &&
|
|
292
|
+
(idx >= 2) && ((idx + padding_characters) & 3) != 0) {
|
|
293
|
+
// The partial chunk was at src - idx
|
|
294
|
+
return {BASE64_INPUT_REMAINDER, size_t(src - srcinit),
|
|
295
|
+
size_t(dst - dstinit), true};
|
|
296
|
+
} else
|
|
297
|
+
// If there is a partial chunk with insufficient padding, with
|
|
298
|
+
// stop_before_partial, we need to just ignore it. In "only full"
|
|
299
|
+
// mode, skip the minute there are padding characters.
|
|
300
|
+
if ((last_chunk_options ==
|
|
301
|
+
last_chunk_handling_options::stop_before_partial &&
|
|
302
|
+
(padding_characters + idx < 4) && (idx != 0) &&
|
|
303
|
+
(idx >= 2 || padding_characters == 0)) ||
|
|
304
|
+
(last_chunk_options ==
|
|
305
|
+
last_chunk_handling_options::only_full_chunks &&
|
|
306
|
+
(idx >= 2 || padding_characters == 0))) {
|
|
307
|
+
// partial means that we are *not* going to consume the read
|
|
308
|
+
// characters. We need to rewind the src pointer.
|
|
309
|
+
src = srccur;
|
|
310
|
+
return {SUCCESS, size_t(src - srcinit), size_t(dst - dstinit)};
|
|
311
|
+
} else {
|
|
312
|
+
if (idx == 2) {
|
|
313
|
+
uint32_t triple = (uint32_t(buffer[0]) << 3 * 6) +
|
|
314
|
+
(uint32_t(buffer[1]) << 2 * 6);
|
|
315
|
+
if (!ignore_garbage &&
|
|
316
|
+
(last_chunk_options == last_chunk_handling_options::strict) &&
|
|
317
|
+
(triple & 0xffff)) {
|
|
318
|
+
return {BASE64_EXTRA_BITS, size_t(src - srcinit),
|
|
319
|
+
size_t(dst - dstinit)};
|
|
320
|
+
}
|
|
321
|
+
if (check_capacity && dstend - dst < 1) {
|
|
322
|
+
return {OUTPUT_BUFFER_TOO_SMALL, size_t(srccur - srcinit),
|
|
323
|
+
size_t(dst - dstinit)};
|
|
324
|
+
}
|
|
325
|
+
*dst++ = static_cast<char>((triple >> 16) & 0xFF);
|
|
326
|
+
} else if (idx == 3) {
|
|
327
|
+
uint32_t triple = (uint32_t(buffer[0]) << 3 * 6) +
|
|
328
|
+
(uint32_t(buffer[1]) << 2 * 6) +
|
|
329
|
+
(uint32_t(buffer[2]) << 1 * 6);
|
|
330
|
+
if (!ignore_garbage &&
|
|
331
|
+
(last_chunk_options == last_chunk_handling_options::strict) &&
|
|
332
|
+
(triple & 0xff)) {
|
|
333
|
+
return {BASE64_EXTRA_BITS, size_t(src - srcinit),
|
|
334
|
+
size_t(dst - dstinit)};
|
|
335
|
+
}
|
|
336
|
+
if (check_capacity && dstend - dst < 2) {
|
|
337
|
+
return {OUTPUT_BUFFER_TOO_SMALL, size_t(srccur - srcinit),
|
|
338
|
+
size_t(dst - dstinit)};
|
|
339
|
+
}
|
|
340
|
+
*dst++ = static_cast<char>((triple >> 16) & 0xFF);
|
|
341
|
+
*dst++ = static_cast<char>((triple >> 8) & 0xFF);
|
|
342
|
+
} else if (!ignore_garbage && idx == 1 &&
|
|
343
|
+
(!is_partial(last_chunk_options) ||
|
|
344
|
+
(is_partial(last_chunk_options) &&
|
|
345
|
+
padding_characters > 0))) {
|
|
346
|
+
return {BASE64_INPUT_REMAINDER, size_t(src - srcinit),
|
|
347
|
+
size_t(dst - dstinit)};
|
|
348
|
+
} else if (!ignore_garbage && idx == 0 && padding_characters > 0) {
|
|
349
|
+
return {INVALID_BASE64_CHARACTER, size_t(src - srcinit),
|
|
350
|
+
size_t(dst - dstinit), true};
|
|
351
|
+
}
|
|
352
|
+
return {SUCCESS, size_t(src - srcinit), size_t(dst - dstinit)};
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
if (check_capacity && dstend - dst < 3) {
|
|
356
|
+
return {OUTPUT_BUFFER_TOO_SMALL, size_t(srccur - srcinit),
|
|
357
|
+
size_t(dst - dstinit)};
|
|
358
|
+
}
|
|
359
|
+
uint32_t triple =
|
|
360
|
+
(uint32_t(buffer[0]) << 3 * 6) + (uint32_t(buffer[1]) << 2 * 6) +
|
|
361
|
+
(uint32_t(buffer[2]) << 1 * 6) + (uint32_t(buffer[3]) << 0 * 6);
|
|
362
|
+
*dst++ = static_cast<char>((triple >> 16) & 0xFF);
|
|
363
|
+
*dst++ = static_cast<char>((triple >> 8) & 0xFF);
|
|
364
|
+
*dst++ = static_cast<char>(triple & 0xFF);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
template <class char_type>
|
|
369
|
+
simdutf_constexpr23 full_result base64_tail_decode(
|
|
370
|
+
char *dst, const char_type *src, size_t length,
|
|
371
|
+
size_t padding_characters, // number of padding characters
|
|
372
|
+
// '=', typically 0, 1, 2.
|
|
373
|
+
base64_options options, last_chunk_handling_options last_chunk_options) {
|
|
374
|
+
return base64_tail_decode_impl<false>(dst, 0, src, length, padding_characters,
|
|
375
|
+
options, last_chunk_options);
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
// like base64_tail_decode, but it will not write past the end of the output
|
|
379
|
+
// buffer. The outlen parameter is modified to reflect the number of bytes
|
|
380
|
+
// written. This functions assumes that the padding (=) has been removed.
|
|
381
|
+
//
|
|
382
|
+
template <class char_type>
|
|
383
|
+
simdutf_constexpr23 full_result base64_tail_decode_safe(
|
|
384
|
+
char *dst, size_t outlen, const char_type *src, size_t length,
|
|
385
|
+
size_t padding_characters, // number of padding characters
|
|
386
|
+
// '=', typically 0, 1, 2.
|
|
387
|
+
base64_options options, last_chunk_handling_options last_chunk_options) {
|
|
388
|
+
return base64_tail_decode_impl<true>(dst, outlen, src, length,
|
|
389
|
+
padding_characters, options,
|
|
390
|
+
last_chunk_options);
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
inline simdutf_constexpr23 full_result
|
|
394
|
+
patch_tail_result(full_result r, size_t previous_input, size_t previous_output,
|
|
395
|
+
size_t equallocation, size_t full_input_length,
|
|
396
|
+
last_chunk_handling_options last_chunk_options) {
|
|
397
|
+
r.input_count += previous_input;
|
|
398
|
+
r.output_count += previous_output;
|
|
399
|
+
if (r.padding_error) {
|
|
400
|
+
r.input_count = equallocation;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
if (r.error == error_code::SUCCESS) {
|
|
404
|
+
if (!is_partial(last_chunk_options)) {
|
|
405
|
+
// A success when we are not in stop_before_partial mode.
|
|
406
|
+
// means that we have consumed the whole input buffer.
|
|
407
|
+
r.input_count = full_input_length;
|
|
408
|
+
} else if (r.output_count % 3 != 0) {
|
|
409
|
+
r.input_count = full_input_length;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
return r;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
// Returns the number of bytes written. The destination buffer must be large
|
|
416
|
+
// enough. It will add padding (=) if needed.
|
|
417
|
+
template <bool use_lines = false>
|
|
418
|
+
simdutf_constexpr23 size_t tail_encode_base64_impl(
|
|
419
|
+
char *dst, const char *src, size_t srclen, base64_options options,
|
|
420
|
+
size_t line_length = simdutf::default_line_length, size_t line_offset = 0) {
|
|
421
|
+
if simdutf_constexpr (use_lines) {
|
|
422
|
+
// sanitize line_length and starting_line_offset.
|
|
423
|
+
// line_length must be greater than 3.
|
|
424
|
+
if (line_length < 4) {
|
|
425
|
+
line_length = 4;
|
|
426
|
+
}
|
|
427
|
+
simdutf_log_assert(line_offset <= line_length,
|
|
428
|
+
"line_offset should be less than line_length");
|
|
429
|
+
}
|
|
430
|
+
// By default, we use padding if we are not using the URL variant.
|
|
431
|
+
// This is check with ((options & base64_url) == 0) which returns true if we
|
|
432
|
+
// are not using the URL variant. However, we also allow 'inversion' of the
|
|
433
|
+
// convention with the base64_reverse_padding option. If the
|
|
434
|
+
// base64_reverse_padding option is set, we use padding if we are using the
|
|
435
|
+
// URL variant, and we omit it if we are not using the URL variant. This is
|
|
436
|
+
// checked with
|
|
437
|
+
// ((options & base64_reverse_padding) == base64_reverse_padding).
|
|
438
|
+
bool use_padding =
|
|
439
|
+
((options & base64_url) == 0) ^
|
|
440
|
+
((options & base64_reverse_padding) == base64_reverse_padding);
|
|
441
|
+
// This looks like 3 branches, but we expect the compiler to resolve this to
|
|
442
|
+
// a single branch:
|
|
443
|
+
const char *e0 = (options & base64_url) ? tables::base64::base64_url::e0
|
|
444
|
+
: tables::base64::base64_default::e0;
|
|
445
|
+
const char *e1 = (options & base64_url) ? tables::base64::base64_url::e1
|
|
446
|
+
: tables::base64::base64_default::e1;
|
|
447
|
+
const char *e2 = (options & base64_url) ? tables::base64::base64_url::e2
|
|
448
|
+
: tables::base64::base64_default::e2;
|
|
449
|
+
char *out = dst;
|
|
450
|
+
size_t i = 0;
|
|
451
|
+
uint8_t t1, t2, t3;
|
|
452
|
+
for (; i + 2 < srclen; i += 3) {
|
|
453
|
+
t1 = uint8_t(src[i]);
|
|
454
|
+
t2 = uint8_t(src[i + 1]);
|
|
455
|
+
t3 = uint8_t(src[i + 2]);
|
|
456
|
+
if simdutf_constexpr (use_lines) {
|
|
457
|
+
if (line_offset + 3 >= line_length) {
|
|
458
|
+
if (line_offset == line_length) {
|
|
459
|
+
*out++ = '\n';
|
|
460
|
+
*out++ = e0[t1];
|
|
461
|
+
*out++ = e1[((t1 & 0x03) << 4) | ((t2 >> 4) & 0x0F)];
|
|
462
|
+
*out++ = e1[((t2 & 0x0F) << 2) | ((t3 >> 6) & 0x03)];
|
|
463
|
+
*out++ = e2[t3];
|
|
464
|
+
line_offset = 4;
|
|
465
|
+
} else if (line_offset + 1 == line_length) {
|
|
466
|
+
*out++ = e0[t1];
|
|
467
|
+
*out++ = '\n';
|
|
468
|
+
*out++ = e1[((t1 & 0x03) << 4) | ((t2 >> 4) & 0x0F)];
|
|
469
|
+
*out++ = e1[((t2 & 0x0F) << 2) | ((t3 >> 6) & 0x03)];
|
|
470
|
+
*out++ = e2[t3];
|
|
471
|
+
line_offset = 3;
|
|
472
|
+
} else if (line_offset + 2 == line_length) {
|
|
473
|
+
*out++ = e0[t1];
|
|
474
|
+
*out++ = e1[((t1 & 0x03) << 4) | ((t2 >> 4) & 0x0F)];
|
|
475
|
+
*out++ = '\n';
|
|
476
|
+
*out++ = e1[((t2 & 0x0F) << 2) | ((t3 >> 6) & 0x03)];
|
|
477
|
+
*out++ = e2[t3];
|
|
478
|
+
line_offset = 2;
|
|
479
|
+
} else if (line_offset + 3 == line_length) {
|
|
480
|
+
*out++ = e0[t1];
|
|
481
|
+
*out++ = e1[((t1 & 0x03) << 4) | ((t2 >> 4) & 0x0F)];
|
|
482
|
+
*out++ = e1[((t2 & 0x0F) << 2) | ((t3 >> 6) & 0x03)];
|
|
483
|
+
*out++ = '\n';
|
|
484
|
+
*out++ = e2[t3];
|
|
485
|
+
line_offset = 1;
|
|
486
|
+
}
|
|
487
|
+
} else {
|
|
488
|
+
*out++ = e0[t1];
|
|
489
|
+
*out++ = e1[((t1 & 0x03) << 4) | ((t2 >> 4) & 0x0F)];
|
|
490
|
+
*out++ = e1[((t2 & 0x0F) << 2) | ((t3 >> 6) & 0x03)];
|
|
491
|
+
*out++ = e2[t3];
|
|
492
|
+
line_offset += 4;
|
|
493
|
+
}
|
|
494
|
+
} else {
|
|
495
|
+
*out++ = e0[t1];
|
|
496
|
+
*out++ = e1[((t1 & 0x03) << 4) | ((t2 >> 4) & 0x0F)];
|
|
497
|
+
*out++ = e1[((t2 & 0x0F) << 2) | ((t3 >> 6) & 0x03)];
|
|
498
|
+
*out++ = e2[t3];
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
switch (srclen - i) {
|
|
502
|
+
case 0:
|
|
503
|
+
break;
|
|
504
|
+
case 1:
|
|
505
|
+
t1 = uint8_t(src[i]);
|
|
506
|
+
if simdutf_constexpr (use_lines) {
|
|
507
|
+
if (use_padding) {
|
|
508
|
+
if (line_offset + 3 >= line_length) {
|
|
509
|
+
if (line_offset == line_length) {
|
|
510
|
+
*out++ = '\n';
|
|
511
|
+
*out++ = e0[t1];
|
|
512
|
+
*out++ = e1[(t1 & 0x03) << 4];
|
|
513
|
+
*out++ = '=';
|
|
514
|
+
*out++ = '=';
|
|
515
|
+
} else if (line_offset + 1 == line_length) {
|
|
516
|
+
*out++ = e0[t1];
|
|
517
|
+
*out++ = '\n';
|
|
518
|
+
*out++ = e1[(t1 & 0x03) << 4];
|
|
519
|
+
*out++ = '=';
|
|
520
|
+
*out++ = '=';
|
|
521
|
+
} else if (line_offset + 2 == line_length) {
|
|
522
|
+
*out++ = e0[t1];
|
|
523
|
+
*out++ = e1[(t1 & 0x03) << 4];
|
|
524
|
+
*out++ = '\n';
|
|
525
|
+
*out++ = '=';
|
|
526
|
+
*out++ = '=';
|
|
527
|
+
} else if (line_offset + 3 == line_length) {
|
|
528
|
+
*out++ = e0[t1];
|
|
529
|
+
*out++ = e1[(t1 & 0x03) << 4];
|
|
530
|
+
*out++ = '=';
|
|
531
|
+
*out++ = '\n';
|
|
532
|
+
*out++ = '=';
|
|
533
|
+
}
|
|
534
|
+
} else {
|
|
535
|
+
*out++ = e0[t1];
|
|
536
|
+
*out++ = e1[(t1 & 0x03) << 4];
|
|
537
|
+
*out++ = '=';
|
|
538
|
+
*out++ = '=';
|
|
539
|
+
}
|
|
540
|
+
} else {
|
|
541
|
+
if (line_offset + 2 >= line_length) {
|
|
542
|
+
if (line_offset == line_length) {
|
|
543
|
+
*out++ = '\n';
|
|
544
|
+
*out++ = e0[uint8_t(src[i])];
|
|
545
|
+
*out++ = e1[(uint8_t(src[i]) & 0x03) << 4];
|
|
546
|
+
} else if (line_offset + 1 == line_length) {
|
|
547
|
+
*out++ = e0[uint8_t(src[i])];
|
|
548
|
+
*out++ = '\n';
|
|
549
|
+
*out++ = e1[(uint8_t(src[i]) & 0x03) << 4];
|
|
550
|
+
} else {
|
|
551
|
+
*out++ = e0[uint8_t(src[i])];
|
|
552
|
+
*out++ = e1[(uint8_t(src[i]) & 0x03) << 4];
|
|
553
|
+
// *out++ = '\n'; ==> no newline at the end of the output
|
|
554
|
+
}
|
|
555
|
+
} else {
|
|
556
|
+
*out++ = e0[uint8_t(src[i])];
|
|
557
|
+
*out++ = e1[(uint8_t(src[i]) & 0x03) << 4];
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
} else {
|
|
561
|
+
*out++ = e0[t1];
|
|
562
|
+
*out++ = e1[(t1 & 0x03) << 4];
|
|
563
|
+
if (use_padding) {
|
|
564
|
+
*out++ = '=';
|
|
565
|
+
*out++ = '=';
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
break;
|
|
569
|
+
default: /* case 2 */
|
|
570
|
+
t1 = uint8_t(src[i]);
|
|
571
|
+
t2 = uint8_t(src[i + 1]);
|
|
572
|
+
if simdutf_constexpr (use_lines) {
|
|
573
|
+
if (use_padding) {
|
|
574
|
+
if (line_offset + 3 >= line_length) {
|
|
575
|
+
if (line_offset == line_length) {
|
|
576
|
+
*out++ = '\n';
|
|
577
|
+
*out++ = e0[t1];
|
|
578
|
+
*out++ = e1[((t1 & 0x03) << 4) | ((t2 >> 4) & 0x0F)];
|
|
579
|
+
*out++ = e2[(t2 & 0x0F) << 2];
|
|
580
|
+
*out++ = '=';
|
|
581
|
+
} else if (line_offset + 1 == line_length) {
|
|
582
|
+
*out++ = e0[t1];
|
|
583
|
+
*out++ = '\n';
|
|
584
|
+
*out++ = e1[((t1 & 0x03) << 4) | ((t2 >> 4) & 0x0F)];
|
|
585
|
+
*out++ = e2[(t2 & 0x0F) << 2];
|
|
586
|
+
*out++ = '=';
|
|
587
|
+
} else if (line_offset + 2 == line_length) {
|
|
588
|
+
*out++ = e0[t1];
|
|
589
|
+
*out++ = e1[((t1 & 0x03) << 4) | ((t2 >> 4) & 0x0F)];
|
|
590
|
+
*out++ = '\n';
|
|
591
|
+
*out++ = e2[(t2 & 0x0F) << 2];
|
|
592
|
+
*out++ = '=';
|
|
593
|
+
} else if (line_offset + 3 == line_length) {
|
|
594
|
+
*out++ = e0[t1];
|
|
595
|
+
*out++ = e1[((t1 & 0x03) << 4) | ((t2 >> 4) & 0x0F)];
|
|
596
|
+
*out++ = e2[(t2 & 0x0F) << 2];
|
|
597
|
+
*out++ = '\n';
|
|
598
|
+
*out++ = '=';
|
|
599
|
+
}
|
|
600
|
+
} else {
|
|
601
|
+
*out++ = e0[t1];
|
|
602
|
+
*out++ = e1[((t1 & 0x03) << 4) | ((t2 >> 4) & 0x0F)];
|
|
603
|
+
*out++ = e2[(t2 & 0x0F) << 2];
|
|
604
|
+
*out++ = '=';
|
|
605
|
+
}
|
|
606
|
+
} else {
|
|
607
|
+
if (line_offset + 3 >= line_length) {
|
|
608
|
+
if (line_offset == line_length) {
|
|
609
|
+
*out++ = '\n';
|
|
610
|
+
*out++ = e0[t1];
|
|
611
|
+
*out++ = e1[((t1 & 0x03) << 4) | ((t2 >> 4) & 0x0F)];
|
|
612
|
+
*out++ = e2[(t2 & 0x0F) << 2];
|
|
613
|
+
} else if (line_offset + 1 == line_length) {
|
|
614
|
+
*out++ = e0[t1];
|
|
615
|
+
*out++ = '\n';
|
|
616
|
+
*out++ = e1[((t1 & 0x03) << 4) | ((t2 >> 4) & 0x0F)];
|
|
617
|
+
*out++ = e2[(t2 & 0x0F) << 2];
|
|
618
|
+
} else if (line_offset + 2 == line_length) {
|
|
619
|
+
*out++ = e0[t1];
|
|
620
|
+
*out++ = e1[((t1 & 0x03) << 4) | ((t2 >> 4) & 0x0F)];
|
|
621
|
+
*out++ = '\n';
|
|
622
|
+
*out++ = e2[(t2 & 0x0F) << 2];
|
|
623
|
+
} else {
|
|
624
|
+
*out++ = e0[t1];
|
|
625
|
+
*out++ = e1[((t1 & 0x03) << 4) | ((t2 >> 4) & 0x0F)];
|
|
626
|
+
*out++ = e2[(t2 & 0x0F) << 2];
|
|
627
|
+
// *out++ = '\n'; ==> no newline at the end of the output
|
|
628
|
+
}
|
|
629
|
+
} else {
|
|
630
|
+
*out++ = e0[t1];
|
|
631
|
+
*out++ = e1[((t1 & 0x03) << 4) | ((t2 >> 4) & 0x0F)];
|
|
632
|
+
*out++ = e2[(t2 & 0x0F) << 2];
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
} else {
|
|
636
|
+
*out++ = e0[t1];
|
|
637
|
+
*out++ = e1[((t1 & 0x03) << 4) | ((t2 >> 4) & 0x0F)];
|
|
638
|
+
*out++ = e2[(t2 & 0x0F) << 2];
|
|
639
|
+
if (use_padding) {
|
|
640
|
+
*out++ = '=';
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
return (size_t)(out - dst);
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
// Returns the number of bytes written. The destination buffer must be large
|
|
648
|
+
// enough. It will add padding (=) if needed.
|
|
649
|
+
inline simdutf_constexpr23 size_t tail_encode_base64(char *dst, const char *src,
|
|
650
|
+
size_t srclen,
|
|
651
|
+
base64_options options) {
|
|
652
|
+
return tail_encode_base64_impl(dst, src, srclen, options);
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
template <class InputPtr>
|
|
656
|
+
simdutf_warn_unused simdutf_constexpr23 size_t
|
|
657
|
+
maximal_binary_length_from_base64(InputPtr input, size_t length) noexcept {
|
|
658
|
+
// We process the padding characters ('=') at the end to make sure
|
|
659
|
+
// that we return an exact result when the input has no ignorable characters
|
|
660
|
+
// (e.g., spaces).
|
|
661
|
+
size_t padding = 0;
|
|
662
|
+
if (length > 0) {
|
|
663
|
+
if (input[length - 1] == '=') {
|
|
664
|
+
padding++;
|
|
665
|
+
if (length > 1 && input[length - 2] == '=') {
|
|
666
|
+
padding++;
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
// The input is not otherwise processed for ignorable characters or
|
|
671
|
+
// validation, so that the function runs in constant time (very fast). In
|
|
672
|
+
// practice, base64 inputs without ignorable characters are common and the
|
|
673
|
+
// common case are line separated inputs with relatively long lines (e.g., 76
|
|
674
|
+
// characters) which leads this function to a slight (1%) overestimation of
|
|
675
|
+
// the output size.
|
|
676
|
+
//
|
|
677
|
+
// Of course, some inputs might contain an arbitrary number of spaces or
|
|
678
|
+
// newlines, which would make this function return a very pessimistic output
|
|
679
|
+
// size but systems that produce base64 outputs typically do not do that and
|
|
680
|
+
// if they do, they do not care much about minimizing memory usage.
|
|
681
|
+
//
|
|
682
|
+
// In specialized applications, users may know that their input is line
|
|
683
|
+
// separated, which can be checked very quickly by by iterating (e.g., over 76
|
|
684
|
+
// character chunks, looking for the linefeed characters only). We could
|
|
685
|
+
// provide a specialized function for that, but it is not clear that the added
|
|
686
|
+
// complexity is worth it for us.
|
|
687
|
+
//
|
|
688
|
+
size_t actual_length = length - padding;
|
|
689
|
+
if (actual_length % 4 <= 1) {
|
|
690
|
+
return actual_length / 4 * 3;
|
|
691
|
+
}
|
|
692
|
+
// if we have a valid input, then the remainder must be 2 or 3 adding one or
|
|
693
|
+
// two extra bytes.
|
|
694
|
+
return actual_length / 4 * 3 + (actual_length % 4) - 1;
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
// This function computes the binary length by iterating through the input
|
|
698
|
+
// and counting non-whitespace characters (excluding padding characters).
|
|
699
|
+
// We use a simple check (c > ' ') which is easy to parallelize and matches
|
|
700
|
+
// SIMD behavior. Only the last few characters are checked for padding '='.
|
|
701
|
+
template <class char_type>
|
|
702
|
+
simdutf_warn_unused simdutf_constexpr23 size_t
|
|
703
|
+
binary_length_from_base64(const char_type *input, size_t length) noexcept {
|
|
704
|
+
// Count non-whitespace characters (c > ' ') with loop unrolling
|
|
705
|
+
size_t count = 0;
|
|
706
|
+
for (size_t i = 0; i < length; i++) {
|
|
707
|
+
count += (input[i] > ' ');
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
// Check for padding '=' at the end (at most 2 padding characters)
|
|
711
|
+
// Scan backwards, skipping whitespace, to find padding
|
|
712
|
+
size_t padding = 0;
|
|
713
|
+
size_t pos = length;
|
|
714
|
+
// Skip trailing whitespace
|
|
715
|
+
while (pos > 0 && padding < 2) {
|
|
716
|
+
char_type c = input[--pos];
|
|
717
|
+
if (c == '=') {
|
|
718
|
+
padding++;
|
|
719
|
+
} else if (c > ' ') {
|
|
720
|
+
break;
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
return ((count - padding) * 3) / 4;
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
template <typename char_type>
|
|
727
|
+
simdutf_warn_unused simdutf_constexpr23 full_result
|
|
728
|
+
base64_to_binary_details_impl(
|
|
729
|
+
const char_type *input, size_t length, char *output, base64_options options,
|
|
730
|
+
last_chunk_handling_options last_chunk_options) noexcept {
|
|
731
|
+
const bool ignore_garbage =
|
|
732
|
+
(options == base64_options::base64_url_accept_garbage) ||
|
|
733
|
+
(options == base64_options::base64_default_accept_garbage) ||
|
|
734
|
+
(options == base64_options::base64_default_or_url_accept_garbage);
|
|
735
|
+
auto ri = simdutf::scalar::base64::find_end(input, length, options);
|
|
736
|
+
size_t equallocation = ri.equallocation;
|
|
737
|
+
size_t equalsigns = ri.equalsigns;
|
|
738
|
+
length = ri.srclen;
|
|
739
|
+
size_t full_input_length = ri.full_input_length;
|
|
740
|
+
if (length == 0) {
|
|
741
|
+
if (!ignore_garbage && equalsigns > 0) {
|
|
742
|
+
return {INVALID_BASE64_CHARACTER, equallocation, 0};
|
|
743
|
+
}
|
|
744
|
+
return {SUCCESS, full_input_length, 0};
|
|
745
|
+
}
|
|
746
|
+
full_result r = scalar::base64::base64_tail_decode(
|
|
747
|
+
output, input, length, equalsigns, options, last_chunk_options);
|
|
748
|
+
r = scalar::base64::patch_tail_result(r, 0, 0, equallocation,
|
|
749
|
+
full_input_length, last_chunk_options);
|
|
750
|
+
if (!is_partial(last_chunk_options) && r.error == error_code::SUCCESS &&
|
|
751
|
+
equalsigns > 0 && !ignore_garbage) {
|
|
752
|
+
// additional checks
|
|
753
|
+
if ((r.output_count % 3 == 0) ||
|
|
754
|
+
((r.output_count % 3) + 1 + equalsigns != 4)) {
|
|
755
|
+
return {INVALID_BASE64_CHARACTER, equallocation, r.output_count};
|
|
756
|
+
}
|
|
757
|
+
}
|
|
758
|
+
// When is_partial(last_chunk_options) is true, we must either end with
|
|
759
|
+
// the end of the stream (beyond whitespace) or right after a non-ignorable
|
|
760
|
+
// character or at the very beginning of the stream.
|
|
761
|
+
// See https://tc39.es/proposal-arraybuffer-base64/spec/#sec-frombase64
|
|
762
|
+
if (is_partial(last_chunk_options) && r.error == error_code::SUCCESS &&
|
|
763
|
+
r.input_count < full_input_length) {
|
|
764
|
+
// First check if we can extend the input to the end of the stream
|
|
765
|
+
while (r.input_count < full_input_length &&
|
|
766
|
+
base64_ignorable(*(input + r.input_count), options)) {
|
|
767
|
+
r.input_count++;
|
|
768
|
+
}
|
|
769
|
+
// If we are still not at the end of the stream, then we must backtrack
|
|
770
|
+
// to the last non-ignorable character.
|
|
771
|
+
if (r.input_count < full_input_length) {
|
|
772
|
+
while (r.input_count > 0 &&
|
|
773
|
+
base64_ignorable(*(input + r.input_count - 1), options)) {
|
|
774
|
+
r.input_count--;
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
return r;
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
template <typename char_type>
|
|
782
|
+
simdutf_constexpr23 simdutf_warn_unused full_result
|
|
783
|
+
base64_to_binary_details_safe_impl(
|
|
784
|
+
const char_type *input, size_t length, char *output, size_t outlen,
|
|
785
|
+
base64_options options,
|
|
786
|
+
last_chunk_handling_options last_chunk_options) noexcept {
|
|
787
|
+
const bool ignore_garbage =
|
|
788
|
+
(options == base64_options::base64_url_accept_garbage) ||
|
|
789
|
+
(options == base64_options::base64_default_accept_garbage) ||
|
|
790
|
+
(options == base64_options::base64_default_or_url_accept_garbage);
|
|
791
|
+
auto ri = simdutf::scalar::base64::find_end(input, length, options);
|
|
792
|
+
size_t equallocation = ri.equallocation;
|
|
793
|
+
size_t equalsigns = ri.equalsigns;
|
|
794
|
+
length = ri.srclen;
|
|
795
|
+
size_t full_input_length = ri.full_input_length;
|
|
796
|
+
if (length == 0) {
|
|
797
|
+
if (!ignore_garbage && equalsigns > 0) {
|
|
798
|
+
return {INVALID_BASE64_CHARACTER, equallocation, 0};
|
|
799
|
+
}
|
|
800
|
+
return {SUCCESS, full_input_length, 0};
|
|
801
|
+
}
|
|
802
|
+
full_result r = scalar::base64::base64_tail_decode_safe(
|
|
803
|
+
output, outlen, input, length, equalsigns, options, last_chunk_options);
|
|
804
|
+
r = scalar::base64::patch_tail_result(r, 0, 0, equallocation,
|
|
805
|
+
full_input_length, last_chunk_options);
|
|
806
|
+
if (!is_partial(last_chunk_options) && r.error == error_code::SUCCESS &&
|
|
807
|
+
equalsigns > 0 && !ignore_garbage) {
|
|
808
|
+
// additional checks
|
|
809
|
+
if ((r.output_count % 3 == 0) ||
|
|
810
|
+
((r.output_count % 3) + 1 + equalsigns != 4)) {
|
|
811
|
+
return {INVALID_BASE64_CHARACTER, equallocation, r.output_count};
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
// When is_partial(last_chunk_options) is true, we must either end with
|
|
816
|
+
// the end of the stream (beyond whitespace) or right after a non-ignorable
|
|
817
|
+
// character or at the very beginning of the stream.
|
|
818
|
+
// See https://tc39.es/proposal-arraybuffer-base64/spec/#sec-frombase64
|
|
819
|
+
if (is_partial(last_chunk_options) && r.error == error_code::SUCCESS &&
|
|
820
|
+
r.input_count < full_input_length) {
|
|
821
|
+
// First check if we can extend the input to the end of the stream
|
|
822
|
+
while (r.input_count < full_input_length &&
|
|
823
|
+
base64_ignorable(*(input + r.input_count), options)) {
|
|
824
|
+
r.input_count++;
|
|
825
|
+
}
|
|
826
|
+
// If we are still not at the end of the stream, then we must backtrack
|
|
827
|
+
// to the last non-ignorable character.
|
|
828
|
+
if (r.input_count < full_input_length) {
|
|
829
|
+
while (r.input_count > 0 &&
|
|
830
|
+
base64_ignorable(*(input + r.input_count - 1), options)) {
|
|
831
|
+
r.input_count--;
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
}
|
|
835
|
+
return r;
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
simdutf_warn_unused simdutf_constexpr23 size_t
|
|
839
|
+
base64_length_from_binary(size_t length, base64_options options) noexcept {
|
|
840
|
+
// By default, we use padding if we are not using the URL variant.
|
|
841
|
+
// This is check with ((options & base64_url) == 0) which returns true if we
|
|
842
|
+
// are not using the URL variant. However, we also allow 'inversion' of the
|
|
843
|
+
// convention with the base64_reverse_padding option. If the
|
|
844
|
+
// base64_reverse_padding option is set, we use padding if we are using the
|
|
845
|
+
// URL variant, and we omit it if we are not using the URL variant. This is
|
|
846
|
+
// checked with
|
|
847
|
+
// ((options & base64_reverse_padding) == base64_reverse_padding).
|
|
848
|
+
bool use_padding =
|
|
849
|
+
((options & base64_url) == 0) ^
|
|
850
|
+
((options & base64_reverse_padding) == base64_reverse_padding);
|
|
851
|
+
if (!use_padding) {
|
|
852
|
+
return length / 3 * 4 + ((length % 3) ? (length % 3) + 1 : 0);
|
|
853
|
+
}
|
|
854
|
+
return (length + 2) / 3 *
|
|
855
|
+
4; // We use padding to make the length a multiple of 4.
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
simdutf_warn_unused simdutf_constexpr23 size_t
|
|
859
|
+
base64_length_from_binary_with_lines(size_t length, base64_options options,
|
|
860
|
+
size_t line_length) noexcept {
|
|
861
|
+
if (length == 0) {
|
|
862
|
+
return 0;
|
|
863
|
+
}
|
|
864
|
+
size_t base64_length =
|
|
865
|
+
scalar::base64::base64_length_from_binary(length, options);
|
|
866
|
+
if (line_length < 4) {
|
|
867
|
+
line_length = 4;
|
|
868
|
+
}
|
|
869
|
+
size_t lines =
|
|
870
|
+
(base64_length + line_length - 1) / line_length; // number of lines
|
|
871
|
+
return base64_length + lines - 1;
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
// Return the length of the prefix that contains count base64 characters.
|
|
875
|
+
// Thus, if count is 3, the function returns the length of the prefix
|
|
876
|
+
// that contains 3 base64 characters.
|
|
877
|
+
// The function returns (size_t)-1 if there is not enough base64 characters in
|
|
878
|
+
// the input.
|
|
879
|
+
template <typename char_type>
|
|
880
|
+
simdutf_warn_unused size_t prefix_length(size_t count,
|
|
881
|
+
simdutf::base64_options options,
|
|
882
|
+
const char_type *input,
|
|
883
|
+
size_t length) noexcept {
|
|
884
|
+
size_t i = 0;
|
|
885
|
+
while (i < length && is_ignorable(input[i], options)) {
|
|
886
|
+
i++;
|
|
887
|
+
}
|
|
888
|
+
if (count == 0) {
|
|
889
|
+
return i; // duh!
|
|
890
|
+
}
|
|
891
|
+
for (; i < length; i++) {
|
|
892
|
+
if (is_ignorable(input[i], options)) {
|
|
893
|
+
continue;
|
|
894
|
+
}
|
|
895
|
+
// We have a base64 character or a padding character.
|
|
896
|
+
count--;
|
|
897
|
+
if (count == 0) {
|
|
898
|
+
return i + 1;
|
|
899
|
+
}
|
|
900
|
+
}
|
|
901
|
+
simdutf_log_assert(false, "You never get here");
|
|
902
|
+
|
|
903
|
+
return -1; // should never happen
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
} // namespace base64
|
|
907
|
+
} // unnamed namespace
|
|
908
|
+
} // namespace scalar
|
|
909
|
+
} // namespace simdutf
|
|
910
|
+
|
|
911
|
+
#endif
|