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.
Files changed (561) hide show
  1. package/QuickCrypto.podspec +12 -38
  2. package/README.md +2 -0
  3. package/android/CMakeLists.txt +3 -0
  4. package/android/build.gradle +5 -1
  5. package/cpp/argon2/HybridArgon2.cpp +10 -3
  6. package/cpp/blake3/HybridBlake3.cpp +5 -3
  7. package/cpp/cipher/CCMCipher.cpp +29 -16
  8. package/cpp/cipher/CCMCipher.hpp +2 -4
  9. package/cpp/cipher/ChaCha20Cipher.cpp +14 -18
  10. package/cpp/cipher/ChaCha20Cipher.hpp +2 -4
  11. package/cpp/cipher/ChaCha20Poly1305Cipher.cpp +34 -23
  12. package/cpp/cipher/ChaCha20Poly1305Cipher.hpp +2 -4
  13. package/cpp/cipher/GCMCipher.cpp +14 -15
  14. package/cpp/cipher/HybridCipher.cpp +39 -36
  15. package/cpp/cipher/HybridCipher.hpp +17 -1
  16. package/cpp/cipher/HybridRsaCipher.cpp +74 -29
  17. package/cpp/cipher/OCBCipher.cpp +4 -3
  18. package/cpp/cipher/XChaCha20Poly1305Cipher.cpp +14 -13
  19. package/cpp/cipher/XSalsa20Cipher.cpp +72 -6
  20. package/cpp/cipher/XSalsa20Cipher.hpp +25 -3
  21. package/cpp/cipher/XSalsa20Poly1305Cipher.cpp +21 -25
  22. package/cpp/dh/HybridDiffieHellman.cpp +29 -0
  23. package/cpp/ec/HybridEcKeyPair.cpp +35 -33
  24. package/cpp/ec/HybridEcKeyPair.hpp +3 -7
  25. package/cpp/ecdh/HybridECDH.cpp +23 -0
  26. package/cpp/ed25519/HybridEdKeyPair.cpp +73 -117
  27. package/cpp/ed25519/HybridEdKeyPair.hpp +5 -9
  28. package/cpp/hash/HybridHash.cpp +5 -7
  29. package/cpp/hkdf/HybridHkdf.cpp +6 -4
  30. package/cpp/hmac/HybridHmac.cpp +4 -6
  31. package/cpp/kmac/HybridKmac.cpp +4 -4
  32. package/cpp/mldsa/HybridMlDsaKeyPair.cpp +37 -49
  33. package/cpp/mlkem/HybridMlKemKeyPair.cpp +39 -43
  34. package/cpp/pbkdf2/HybridPbkdf2.cpp +7 -8
  35. package/cpp/rsa/HybridRsaKeyPair.cpp +5 -8
  36. package/cpp/rsa/HybridRsaKeyPair.hpp +4 -7
  37. package/cpp/scrypt/HybridScrypt.cpp +6 -4
  38. package/cpp/sign/HybridSignHandle.cpp +25 -68
  39. package/cpp/sign/HybridVerifyHandle.cpp +23 -60
  40. package/cpp/utils/HybridUtils.cpp +213 -111
  41. package/cpp/utils/HybridUtils.hpp +9 -2
  42. package/cpp/utils/QuickCryptoUtils.hpp +72 -0
  43. package/deps/simdutf/LICENSE-APACHE +201 -0
  44. package/deps/simdutf/LICENSE-MIT +18 -0
  45. package/deps/simdutf/README.md +2782 -0
  46. package/deps/simdutf/include/simdutf/avx512.h +79 -0
  47. package/deps/simdutf/include/simdutf/base64_implementation.h +158 -0
  48. package/deps/simdutf/include/simdutf/base64_tables.h +887 -0
  49. package/deps/simdutf/include/simdutf/common_defs.h +186 -0
  50. package/deps/simdutf/include/simdutf/compiler_check.h +50 -0
  51. package/deps/simdutf/include/simdutf/constexpr_ptr.h +138 -0
  52. package/deps/simdutf/include/simdutf/encoding_types.h +189 -0
  53. package/deps/simdutf/include/simdutf/error.h +126 -0
  54. package/deps/simdutf/include/simdutf/implementation.h +7081 -0
  55. package/deps/simdutf/include/simdutf/internal/isadetection.h +325 -0
  56. package/deps/simdutf/include/simdutf/portability.h +285 -0
  57. package/deps/simdutf/include/simdutf/scalar/ascii.h +86 -0
  58. package/deps/simdutf/include/simdutf/scalar/atomic_util.h +105 -0
  59. package/deps/simdutf/include/simdutf/scalar/base64.h +911 -0
  60. package/deps/simdutf/include/simdutf/scalar/latin1.h +26 -0
  61. package/deps/simdutf/include/simdutf/scalar/latin1_to_utf16/latin1_to_utf16.h +52 -0
  62. package/deps/simdutf/include/simdutf/scalar/latin1_to_utf32/latin1_to_utf32.h +27 -0
  63. package/deps/simdutf/include/simdutf/scalar/latin1_to_utf8/latin1_to_utf8.h +191 -0
  64. package/deps/simdutf/include/simdutf/scalar/swap_bytes.h +35 -0
  65. package/deps/simdutf/include/simdutf/scalar/utf16.h +226 -0
  66. package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/utf16_to_latin1.h +108 -0
  67. package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/valid_utf16_to_latin1.h +40 -0
  68. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/utf16_to_utf32.h +86 -0
  69. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/valid_utf16_to_utf32.h +44 -0
  70. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/utf16_to_utf8.h +295 -0
  71. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/valid_utf16_to_utf8.h +91 -0
  72. package/deps/simdutf/include/simdutf/scalar/utf32.h +82 -0
  73. package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/utf32_to_latin1.h +68 -0
  74. package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/valid_utf32_to_latin1.h +67 -0
  75. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/utf32_to_utf16.h +84 -0
  76. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/valid_utf32_to_utf16.h +44 -0
  77. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/utf32_to_utf8.h +142 -0
  78. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/valid_utf32_to_utf8.h +72 -0
  79. package/deps/simdutf/include/simdutf/scalar/utf8.h +326 -0
  80. package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/utf8_to_latin1.h +225 -0
  81. package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/valid_utf8_to_latin1.h +87 -0
  82. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/utf8_to_utf16.h +342 -0
  83. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/valid_utf8_to_utf16.h +106 -0
  84. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/utf8_to_utf32.h +299 -0
  85. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/valid_utf8_to_utf32.h +83 -0
  86. package/deps/simdutf/include/simdutf/simdutf_version.h +26 -0
  87. package/deps/simdutf/include/simdutf.h +26 -0
  88. package/deps/simdutf/include/simdutf_c.h +342 -0
  89. package/deps/simdutf/src/arm64/arm_base64.cpp +791 -0
  90. package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf16.cpp +24 -0
  91. package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf32.cpp +24 -0
  92. package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf8.cpp +70 -0
  93. package/deps/simdutf/src/arm64/arm_convert_utf16_to_latin1.cpp +61 -0
  94. package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf32.cpp +185 -0
  95. package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf8.cpp +780 -0
  96. package/deps/simdutf/src/arm64/arm_convert_utf32_to_latin1.cpp +60 -0
  97. package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf16.cpp +208 -0
  98. package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf8.cpp +505 -0
  99. package/deps/simdutf/src/arm64/arm_convert_utf8_to_latin1.cpp +69 -0
  100. package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf16.cpp +313 -0
  101. package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf32.cpp +179 -0
  102. package/deps/simdutf/src/arm64/arm_find.cpp +199 -0
  103. package/deps/simdutf/src/arm64/arm_utf16fix.cpp +185 -0
  104. package/deps/simdutf/src/arm64/arm_validate_utf16.cpp +165 -0
  105. package/deps/simdutf/src/arm64/arm_validate_utf32le.cpp +65 -0
  106. package/deps/simdutf/src/arm64/implementation.cpp +1442 -0
  107. package/deps/simdutf/src/encoding_types.cpp +67 -0
  108. package/deps/simdutf/src/error.cpp +3 -0
  109. package/deps/simdutf/src/fallback/implementation.cpp +589 -0
  110. package/deps/simdutf/src/generic/ascii_validation.h +50 -0
  111. package/deps/simdutf/src/generic/base64.h +233 -0
  112. package/deps/simdutf/src/generic/base64lengths.h +63 -0
  113. package/deps/simdutf/src/generic/buf_block_reader.h +109 -0
  114. package/deps/simdutf/src/generic/find.h +75 -0
  115. package/deps/simdutf/src/generic/utf16/change_endianness.h +24 -0
  116. package/deps/simdutf/src/generic/utf16/count_code_points_bytemask.h +58 -0
  117. package/deps/simdutf/src/generic/utf16/to_well_formed.h +93 -0
  118. package/deps/simdutf/src/generic/utf16/utf32_length_from_utf16.h +15 -0
  119. package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16.h +35 -0
  120. package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16_bytemask.h +199 -0
  121. package/deps/simdutf/src/generic/utf16.h +73 -0
  122. package/deps/simdutf/src/generic/utf32.h +136 -0
  123. package/deps/simdutf/src/generic/utf8/utf16_length_from_utf8_bytemask.h +53 -0
  124. package/deps/simdutf/src/generic/utf8.h +92 -0
  125. package/deps/simdutf/src/generic/utf8_to_latin1/utf8_to_latin1.h +316 -0
  126. package/deps/simdutf/src/generic/utf8_to_latin1/valid_utf8_to_latin1.h +78 -0
  127. package/deps/simdutf/src/generic/utf8_to_utf16/utf8_to_utf16.h +332 -0
  128. package/deps/simdutf/src/generic/utf8_to_utf16/valid_utf8_to_utf16.h +74 -0
  129. package/deps/simdutf/src/generic/utf8_to_utf32/utf8_to_utf32.h +318 -0
  130. package/deps/simdutf/src/generic/utf8_to_utf32/valid_utf8_to_utf32.h +42 -0
  131. package/deps/simdutf/src/generic/utf8_validation/utf8_lookup4_algorithm.h +223 -0
  132. package/deps/simdutf/src/generic/utf8_validation/utf8_validator.h +84 -0
  133. package/deps/simdutf/src/generic/validate_utf16.h +164 -0
  134. package/deps/simdutf/src/generic/validate_utf32.h +99 -0
  135. package/deps/simdutf/src/haswell/avx2_base64.cpp +837 -0
  136. package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf16.cpp +28 -0
  137. package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf32.cpp +20 -0
  138. package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf8.cpp +83 -0
  139. package/deps/simdutf/src/haswell/avx2_convert_utf16_to_latin1.cpp +83 -0
  140. package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf32.cpp +210 -0
  141. package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf8.cpp +602 -0
  142. package/deps/simdutf/src/haswell/avx2_convert_utf32_to_latin1.cpp +116 -0
  143. package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf16.cpp +164 -0
  144. package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf8.cpp +569 -0
  145. package/deps/simdutf/src/haswell/avx2_convert_utf8_to_latin1.cpp +60 -0
  146. package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf16.cpp +195 -0
  147. package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf32.cpp +135 -0
  148. package/deps/simdutf/src/haswell/avx2_utf16fix.cpp +173 -0
  149. package/deps/simdutf/src/haswell/avx2_validate_utf16.cpp +17 -0
  150. package/deps/simdutf/src/haswell/implementation.cpp +1447 -0
  151. package/deps/simdutf/src/icelake/icelake_ascii_validation.inl.cpp +19 -0
  152. package/deps/simdutf/src/icelake/icelake_base64.inl.cpp +630 -0
  153. package/deps/simdutf/src/icelake/icelake_common.inl.cpp +37 -0
  154. package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf16.inl.cpp +36 -0
  155. package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf32.inl.cpp +23 -0
  156. package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf8.inl.cpp +107 -0
  157. package/deps/simdutf/src/icelake/icelake_convert_utf16_to_latin1.inl.cpp +103 -0
  158. package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf32.inl.cpp +136 -0
  159. package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf8.inl.cpp +206 -0
  160. package/deps/simdutf/src/icelake/icelake_convert_utf32_to_latin1.inl.cpp +74 -0
  161. package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf16.inl.cpp +338 -0
  162. package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf8.inl.cpp +574 -0
  163. package/deps/simdutf/src/icelake/icelake_convert_utf8_to_latin1.inl.cpp +104 -0
  164. package/deps/simdutf/src/icelake/icelake_convert_utf8_to_utf16.inl.cpp +75 -0
  165. package/deps/simdutf/src/icelake/icelake_convert_valid_utf8_to_latin1.inl.cpp +69 -0
  166. package/deps/simdutf/src/icelake/icelake_find.inl.cpp +146 -0
  167. package/deps/simdutf/src/icelake/icelake_from_utf8.inl.cpp +266 -0
  168. package/deps/simdutf/src/icelake/icelake_from_valid_utf8.inl.cpp +136 -0
  169. package/deps/simdutf/src/icelake/icelake_macros.inl.cpp +143 -0
  170. package/deps/simdutf/src/icelake/icelake_utf16fix.cpp +138 -0
  171. package/deps/simdutf/src/icelake/icelake_utf32_validation.inl.cpp +63 -0
  172. package/deps/simdutf/src/icelake/icelake_utf8_common.inl.cpp +753 -0
  173. package/deps/simdutf/src/icelake/icelake_utf8_length_from_utf16.inl.cpp +269 -0
  174. package/deps/simdutf/src/icelake/icelake_utf8_validation.inl.cpp +116 -0
  175. package/deps/simdutf/src/icelake/implementation.cpp +1903 -0
  176. package/deps/simdutf/src/implementation.cpp +2526 -0
  177. package/deps/simdutf/src/lasx/implementation.cpp +1531 -0
  178. package/deps/simdutf/src/lasx/lasx_base64.cpp +695 -0
  179. package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf16.cpp +76 -0
  180. package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf32.cpp +55 -0
  181. package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf8.cpp +65 -0
  182. package/deps/simdutf/src/lasx/lasx_convert_utf16_to_latin1.cpp +64 -0
  183. package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf32.cpp +183 -0
  184. package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf8.cpp +550 -0
  185. package/deps/simdutf/src/lasx/lasx_convert_utf32_to_latin1.cpp +73 -0
  186. package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf16.cpp +218 -0
  187. package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf8.cpp +589 -0
  188. package/deps/simdutf/src/lasx/lasx_convert_utf8_to_latin1.cpp +72 -0
  189. package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf16.cpp +296 -0
  190. package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf32.cpp +190 -0
  191. package/deps/simdutf/src/lasx/lasx_find.cpp +64 -0
  192. package/deps/simdutf/src/lasx/lasx_validate_utf16.cpp +13 -0
  193. package/deps/simdutf/src/lasx/lasx_validate_utf32le.cpp +84 -0
  194. package/deps/simdutf/src/lsx/implementation.cpp +1417 -0
  195. package/deps/simdutf/src/lsx/lsx_base64.cpp +675 -0
  196. package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf16.cpp +39 -0
  197. package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf32.cpp +27 -0
  198. package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf8.cpp +56 -0
  199. package/deps/simdutf/src/lsx/lsx_convert_utf16_to_latin1.cpp +64 -0
  200. package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf32.cpp +133 -0
  201. package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf8.cpp +518 -0
  202. package/deps/simdutf/src/lsx/lsx_convert_utf32_to_latin1.cpp +66 -0
  203. package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf16.cpp +155 -0
  204. package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf8.cpp +459 -0
  205. package/deps/simdutf/src/lsx/lsx_convert_utf8_to_latin1.cpp +75 -0
  206. package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf16.cpp +291 -0
  207. package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf32.cpp +179 -0
  208. package/deps/simdutf/src/lsx/lsx_find.cpp +60 -0
  209. package/deps/simdutf/src/lsx/lsx_validate_utf16.cpp +13 -0
  210. package/deps/simdutf/src/lsx/lsx_validate_utf32le.cpp +68 -0
  211. package/deps/simdutf/src/ppc64/implementation.cpp +992 -0
  212. package/deps/simdutf/src/ppc64/ppc64_base64.cpp +480 -0
  213. package/deps/simdutf/src/ppc64/ppc64_base64_internal_tests.cpp +401 -0
  214. package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf16.cpp +12 -0
  215. package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf32.cpp +12 -0
  216. package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf8.cpp +149 -0
  217. package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_latin1.cpp +67 -0
  218. package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf32.cpp +87 -0
  219. package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf8.cpp +296 -0
  220. package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_latin1.cpp +57 -0
  221. package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf16.cpp +117 -0
  222. package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf8.cpp +166 -0
  223. package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_latin1.cpp +69 -0
  224. package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf16.cpp +211 -0
  225. package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf32.cpp +153 -0
  226. package/deps/simdutf/src/ppc64/ppc64_utf16_to_utf8_tables.h +1011 -0
  227. package/deps/simdutf/src/ppc64/ppc64_utf8_length_from_latin1.cpp +37 -0
  228. package/deps/simdutf/src/ppc64/ppc64_validate_utf16.cpp +19 -0
  229. package/deps/simdutf/src/ppc64/templates.cpp +91 -0
  230. package/deps/simdutf/src/rvv/implementation.cpp +138 -0
  231. package/deps/simdutf/src/rvv/rvv_find.cpp +27 -0
  232. package/deps/simdutf/src/rvv/rvv_helpers.inl.cpp +23 -0
  233. package/deps/simdutf/src/rvv/rvv_latin1_to.inl.cpp +71 -0
  234. package/deps/simdutf/src/rvv/rvv_length_from.inl.cpp +164 -0
  235. package/deps/simdutf/src/rvv/rvv_utf16_to.inl.cpp +399 -0
  236. package/deps/simdutf/src/rvv/rvv_utf16fix.cpp +110 -0
  237. package/deps/simdutf/src/rvv/rvv_utf32_to.inl.cpp +307 -0
  238. package/deps/simdutf/src/rvv/rvv_utf8_to.inl.cpp +435 -0
  239. package/deps/simdutf/src/rvv/rvv_validate.inl.cpp +275 -0
  240. package/deps/simdutf/src/simdutf/arm64/begin.h +2 -0
  241. package/deps/simdutf/src/simdutf/arm64/bitmanipulation.h +34 -0
  242. package/deps/simdutf/src/simdutf/arm64/end.h +2 -0
  243. package/deps/simdutf/src/simdutf/arm64/implementation.h +307 -0
  244. package/deps/simdutf/src/simdutf/arm64/intrinsics.h +10 -0
  245. package/deps/simdutf/src/simdutf/arm64/simd.h +547 -0
  246. package/deps/simdutf/src/simdutf/arm64/simd16-inl.h +403 -0
  247. package/deps/simdutf/src/simdutf/arm64/simd32-inl.h +129 -0
  248. package/deps/simdutf/src/simdutf/arm64/simd64-inl.h +28 -0
  249. package/deps/simdutf/src/simdutf/arm64.h +43 -0
  250. package/deps/simdutf/src/simdutf/fallback/begin.h +1 -0
  251. package/deps/simdutf/src/simdutf/fallback/bitmanipulation.h +13 -0
  252. package/deps/simdutf/src/simdutf/fallback/end.h +1 -0
  253. package/deps/simdutf/src/simdutf/fallback/implementation.h +331 -0
  254. package/deps/simdutf/src/simdutf/fallback.h +42 -0
  255. package/deps/simdutf/src/simdutf/haswell/begin.h +15 -0
  256. package/deps/simdutf/src/simdutf/haswell/bitmanipulation.h +35 -0
  257. package/deps/simdutf/src/simdutf/haswell/end.h +13 -0
  258. package/deps/simdutf/src/simdutf/haswell/implementation.h +338 -0
  259. package/deps/simdutf/src/simdutf/haswell/intrinsics.h +67 -0
  260. package/deps/simdutf/src/simdutf/haswell/simd.h +363 -0
  261. package/deps/simdutf/src/simdutf/haswell/simd16-inl.h +261 -0
  262. package/deps/simdutf/src/simdutf/haswell/simd32-inl.h +111 -0
  263. package/deps/simdutf/src/simdutf/haswell/simd64-inl.h +34 -0
  264. package/deps/simdutf/src/simdutf/haswell.h +63 -0
  265. package/deps/simdutf/src/simdutf/icelake/begin.h +14 -0
  266. package/deps/simdutf/src/simdutf/icelake/bitmanipulation.h +44 -0
  267. package/deps/simdutf/src/simdutf/icelake/end.h +12 -0
  268. package/deps/simdutf/src/simdutf/icelake/implementation.h +346 -0
  269. package/deps/simdutf/src/simdutf/icelake/intrinsics.h +138 -0
  270. package/deps/simdutf/src/simdutf/icelake/simd.h +17 -0
  271. package/deps/simdutf/src/simdutf/icelake/simd16-inl.h +90 -0
  272. package/deps/simdutf/src/simdutf/icelake/simd32-inl.h +47 -0
  273. package/deps/simdutf/src/simdutf/icelake.h +81 -0
  274. package/deps/simdutf/src/simdutf/lasx/begin.h +8 -0
  275. package/deps/simdutf/src/simdutf/lasx/bitmanipulation.h +25 -0
  276. package/deps/simdutf/src/simdutf/lasx/end.h +8 -0
  277. package/deps/simdutf/src/simdutf/lasx/implementation.h +310 -0
  278. package/deps/simdutf/src/simdutf/lasx/intrinsics.h +319 -0
  279. package/deps/simdutf/src/simdutf/lasx/simd.h +551 -0
  280. package/deps/simdutf/src/simdutf/lasx/simd16-inl.h +234 -0
  281. package/deps/simdutf/src/simdutf/lasx/simd32-inl.h +74 -0
  282. package/deps/simdutf/src/simdutf/lasx/simd64-inl.h +52 -0
  283. package/deps/simdutf/src/simdutf/lasx.h +49 -0
  284. package/deps/simdutf/src/simdutf/lsx/begin.h +2 -0
  285. package/deps/simdutf/src/simdutf/lsx/bitmanipulation.h +25 -0
  286. package/deps/simdutf/src/simdutf/lsx/end.h +2 -0
  287. package/deps/simdutf/src/simdutf/lsx/implementation.h +309 -0
  288. package/deps/simdutf/src/simdutf/lsx/intrinsics.h +196 -0
  289. package/deps/simdutf/src/simdutf/lsx/simd.h +421 -0
  290. package/deps/simdutf/src/simdutf/lsx/simd16-inl.h +242 -0
  291. package/deps/simdutf/src/simdutf/lsx/simd32-inl.h +69 -0
  292. package/deps/simdutf/src/simdutf/lsx/simd64-inl.h +50 -0
  293. package/deps/simdutf/src/simdutf/lsx.h +52 -0
  294. package/deps/simdutf/src/simdutf/ppc64/begin.h +1 -0
  295. package/deps/simdutf/src/simdutf/ppc64/bitmanipulation.h +29 -0
  296. package/deps/simdutf/src/simdutf/ppc64/end.h +1 -0
  297. package/deps/simdutf/src/simdutf/ppc64/implementation.h +348 -0
  298. package/deps/simdutf/src/simdutf/ppc64/intrinsics.h +19 -0
  299. package/deps/simdutf/src/simdutf/ppc64/simd.h +177 -0
  300. package/deps/simdutf/src/simdutf/ppc64/simd16-inl.h +327 -0
  301. package/deps/simdutf/src/simdutf/ppc64/simd32-inl.h +247 -0
  302. package/deps/simdutf/src/simdutf/ppc64/simd8-inl.h +618 -0
  303. package/deps/simdutf/src/simdutf/ppc64.h +40 -0
  304. package/deps/simdutf/src/simdutf/rvv/begin.h +7 -0
  305. package/deps/simdutf/src/simdutf/rvv/end.h +7 -0
  306. package/deps/simdutf/src/simdutf/rvv/implementation.h +321 -0
  307. package/deps/simdutf/src/simdutf/rvv/intrinsics.h +131 -0
  308. package/deps/simdutf/src/simdutf/rvv.h +41 -0
  309. package/deps/simdutf/src/simdutf/westmere/begin.h +8 -0
  310. package/deps/simdutf/src/simdutf/westmere/bitmanipulation.h +37 -0
  311. package/deps/simdutf/src/simdutf/westmere/end.h +8 -0
  312. package/deps/simdutf/src/simdutf/westmere/implementation.h +338 -0
  313. package/deps/simdutf/src/simdutf/westmere/intrinsics.h +38 -0
  314. package/deps/simdutf/src/simdutf/westmere/simd.h +379 -0
  315. package/deps/simdutf/src/simdutf/westmere/simd16-inl.h +242 -0
  316. package/deps/simdutf/src/simdutf/westmere/simd32-inl.h +151 -0
  317. package/deps/simdutf/src/simdutf/westmere/simd64-inl.h +33 -0
  318. package/deps/simdutf/src/simdutf/westmere.h +59 -0
  319. package/deps/simdutf/src/simdutf.cpp +152 -0
  320. package/deps/simdutf/src/simdutf_c.cpp +525 -0
  321. package/deps/simdutf/src/tables/utf16_to_utf8_tables.h +768 -0
  322. package/deps/simdutf/src/tables/utf32_to_utf16_tables.h +53 -0
  323. package/deps/simdutf/src/tables/utf8_to_utf16_tables.h +826 -0
  324. package/deps/simdutf/src/westmere/implementation.cpp +1479 -0
  325. package/deps/simdutf/src/westmere/internal/loader.cpp +7 -0
  326. package/deps/simdutf/src/westmere/internal/write_v_u16_11bits_to_utf8.cpp +66 -0
  327. package/deps/simdutf/src/westmere/sse_base64.cpp +672 -0
  328. package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf16.cpp +21 -0
  329. package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf32.cpp +31 -0
  330. package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf8.cpp +71 -0
  331. package/deps/simdutf/src/westmere/sse_convert_utf16_to_latin1.cpp +70 -0
  332. package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf32.cpp +206 -0
  333. package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf8.cpp +504 -0
  334. package/deps/simdutf/src/westmere/sse_convert_utf32_to_latin1.cpp +82 -0
  335. package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf16.cpp +209 -0
  336. package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf8.cpp +589 -0
  337. package/deps/simdutf/src/westmere/sse_convert_utf8_to_latin1.cpp +58 -0
  338. package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf16.cpp +197 -0
  339. package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf32.cpp +141 -0
  340. package/deps/simdutf/src/westmere/sse_utf16fix.cpp +82 -0
  341. package/deps/simdutf/src/westmere/sse_validate_utf16.cpp +17 -0
  342. package/lib/commonjs/argon2.js +51 -2
  343. package/lib/commonjs/argon2.js.map +1 -1
  344. package/lib/commonjs/cipher.js +109 -11
  345. package/lib/commonjs/cipher.js.map +1 -1
  346. package/lib/commonjs/dsa.js +8 -2
  347. package/lib/commonjs/dsa.js.map +1 -1
  348. package/lib/commonjs/hash.js +15 -5
  349. package/lib/commonjs/hash.js.map +1 -1
  350. package/lib/commonjs/hkdf.js +33 -6
  351. package/lib/commonjs/hkdf.js.map +1 -1
  352. package/lib/commonjs/hmac.js +15 -5
  353. package/lib/commonjs/hmac.js.map +1 -1
  354. package/lib/commonjs/keys/publicCipher.js +10 -4
  355. package/lib/commonjs/keys/publicCipher.js.map +1 -1
  356. package/lib/commonjs/random.js +11 -2
  357. package/lib/commonjs/random.js.map +1 -1
  358. package/lib/commonjs/rsa.js +12 -5
  359. package/lib/commonjs/rsa.js.map +1 -1
  360. package/lib/commonjs/scrypt.js +47 -6
  361. package/lib/commonjs/scrypt.js.map +1 -1
  362. package/lib/commonjs/subtle.js +76 -5
  363. package/lib/commonjs/subtle.js.map +1 -1
  364. package/lib/commonjs/utils/cipher.js +18 -7
  365. package/lib/commonjs/utils/cipher.js.map +1 -1
  366. package/lib/commonjs/utils/conversion.js +33 -9
  367. package/lib/commonjs/utils/conversion.js.map +1 -1
  368. package/lib/commonjs/utils/timingSafeEqual.js +7 -2
  369. package/lib/commonjs/utils/timingSafeEqual.js.map +1 -1
  370. package/lib/commonjs/x509certificate.js +6 -6
  371. package/lib/commonjs/x509certificate.js.map +1 -1
  372. package/lib/module/argon2.js +51 -2
  373. package/lib/module/argon2.js.map +1 -1
  374. package/lib/module/cipher.js +109 -11
  375. package/lib/module/cipher.js.map +1 -1
  376. package/lib/module/dsa.js +8 -2
  377. package/lib/module/dsa.js.map +1 -1
  378. package/lib/module/hash.js +15 -5
  379. package/lib/module/hash.js.map +1 -1
  380. package/lib/module/hkdf.js +33 -6
  381. package/lib/module/hkdf.js.map +1 -1
  382. package/lib/module/hmac.js +15 -5
  383. package/lib/module/hmac.js.map +1 -1
  384. package/lib/module/keys/publicCipher.js +10 -4
  385. package/lib/module/keys/publicCipher.js.map +1 -1
  386. package/lib/module/random.js +11 -2
  387. package/lib/module/random.js.map +1 -1
  388. package/lib/module/rsa.js +11 -4
  389. package/lib/module/rsa.js.map +1 -1
  390. package/lib/module/scrypt.js +47 -6
  391. package/lib/module/scrypt.js.map +1 -1
  392. package/lib/module/subtle.js +76 -5
  393. package/lib/module/subtle.js.map +1 -1
  394. package/lib/module/utils/cipher.js +18 -7
  395. package/lib/module/utils/cipher.js.map +1 -1
  396. package/lib/module/utils/conversion.js +33 -9
  397. package/lib/module/utils/conversion.js.map +1 -1
  398. package/lib/module/utils/timingSafeEqual.js +8 -3
  399. package/lib/module/utils/timingSafeEqual.js.map +1 -1
  400. package/lib/module/x509certificate.js +6 -6
  401. package/lib/module/x509certificate.js.map +1 -1
  402. package/lib/typescript/argon2.d.ts.map +1 -1
  403. package/lib/typescript/cipher.d.ts +2 -2
  404. package/lib/typescript/cipher.d.ts.map +1 -1
  405. package/lib/typescript/dsa.d.ts.map +1 -1
  406. package/lib/typescript/hash.d.ts +2 -2
  407. package/lib/typescript/hash.d.ts.map +1 -1
  408. package/lib/typescript/hkdf.d.ts.map +1 -1
  409. package/lib/typescript/hmac.d.ts +2 -2
  410. package/lib/typescript/hmac.d.ts.map +1 -1
  411. package/lib/typescript/index.d.ts +1 -1
  412. package/lib/typescript/index.d.ts.map +1 -1
  413. package/lib/typescript/keys/publicCipher.d.ts.map +1 -1
  414. package/lib/typescript/random.d.ts.map +1 -1
  415. package/lib/typescript/rsa.d.ts.map +1 -1
  416. package/lib/typescript/scrypt.d.ts.map +1 -1
  417. package/lib/typescript/specs/utils.nitro.d.ts +0 -2
  418. package/lib/typescript/specs/utils.nitro.d.ts.map +1 -1
  419. package/lib/typescript/subtle.d.ts.map +1 -1
  420. package/lib/typescript/utils/cipher.d.ts +13 -1
  421. package/lib/typescript/utils/cipher.d.ts.map +1 -1
  422. package/lib/typescript/utils/conversion.d.ts +9 -6
  423. package/lib/typescript/utils/conversion.d.ts.map +1 -1
  424. package/lib/typescript/utils/timingSafeEqual.d.ts.map +1 -1
  425. package/lib/typescript/x509certificate.d.ts.map +1 -1
  426. package/nitrogen/generated/shared/c++/HybridUtilsSpec.cpp +0 -2
  427. package/nitrogen/generated/shared/c++/HybridUtilsSpec.hpp +0 -3
  428. package/package.json +38 -6
  429. package/src/argon2.ts +80 -2
  430. package/src/cipher.ts +139 -15
  431. package/src/dsa.ts +11 -2
  432. package/src/hash.ts +17 -7
  433. package/src/hkdf.ts +44 -6
  434. package/src/hmac.ts +17 -7
  435. package/src/keys/publicCipher.ts +10 -4
  436. package/src/random.ts +11 -2
  437. package/src/rsa.ts +18 -4
  438. package/src/scrypt.ts +73 -6
  439. package/src/specs/utils.nitro.ts +0 -2
  440. package/src/subtle.ts +90 -8
  441. package/src/utils/cipher.ts +30 -8
  442. package/src/utils/conversion.ts +58 -20
  443. package/src/utils/timingSafeEqual.ts +8 -3
  444. package/src/x509certificate.ts +5 -6
  445. package/deps/blake3/.cargo/config.toml +0 -2
  446. package/deps/blake3/.git-blame-ignore-revs +0 -2
  447. package/deps/blake3/.github/workflows/build_b3sum.py +0 -38
  448. package/deps/blake3/.github/workflows/ci.yml +0 -491
  449. package/deps/blake3/.github/workflows/tag.yml +0 -43
  450. package/deps/blake3/.github/workflows/upload_github_release_asset.py +0 -73
  451. package/deps/blake3/CONTRIBUTING.md +0 -31
  452. package/deps/blake3/Cargo.toml +0 -135
  453. package/deps/blake3/b3sum/Cargo.lock +0 -513
  454. package/deps/blake3/b3sum/Cargo.toml +0 -26
  455. package/deps/blake3/b3sum/README.md +0 -72
  456. package/deps/blake3/b3sum/src/main.rs +0 -564
  457. package/deps/blake3/b3sum/src/unit_tests.rs +0 -235
  458. package/deps/blake3/b3sum/tests/cli_tests.rs +0 -680
  459. package/deps/blake3/b3sum/what_does_check_do.md +0 -176
  460. package/deps/blake3/benches/bench.rs +0 -623
  461. package/deps/blake3/build.rs +0 -389
  462. package/deps/blake3/c/CMakeLists.txt +0 -383
  463. package/deps/blake3/c/CMakePresets.json +0 -73
  464. package/deps/blake3/c/Makefile.testing +0 -82
  465. package/deps/blake3/c/blake3-config.cmake.in +0 -14
  466. package/deps/blake3/c/blake3_avx2.c +0 -326
  467. package/deps/blake3/c/blake3_avx2_x86-64_unix.S +0 -1815
  468. package/deps/blake3/c/blake3_avx2_x86-64_windows_gnu.S +0 -1817
  469. package/deps/blake3/c/blake3_avx2_x86-64_windows_msvc.asm +0 -1828
  470. package/deps/blake3/c/blake3_avx512.c +0 -1388
  471. package/deps/blake3/c/blake3_avx512_x86-64_unix.S +0 -4824
  472. package/deps/blake3/c/blake3_avx512_x86-64_windows_gnu.S +0 -2615
  473. package/deps/blake3/c/blake3_avx512_x86-64_windows_msvc.asm +0 -2634
  474. package/deps/blake3/c/blake3_c_rust_bindings/Cargo.toml +0 -32
  475. package/deps/blake3/c/blake3_c_rust_bindings/README.md +0 -4
  476. package/deps/blake3/c/blake3_c_rust_bindings/benches/bench.rs +0 -477
  477. package/deps/blake3/c/blake3_c_rust_bindings/build.rs +0 -253
  478. package/deps/blake3/c/blake3_c_rust_bindings/cross_test.sh +0 -31
  479. package/deps/blake3/c/blake3_c_rust_bindings/src/lib.rs +0 -333
  480. package/deps/blake3/c/blake3_c_rust_bindings/src/test.rs +0 -696
  481. package/deps/blake3/c/blake3_sse2.c +0 -566
  482. package/deps/blake3/c/blake3_sse2_x86-64_unix.S +0 -2291
  483. package/deps/blake3/c/blake3_sse2_x86-64_windows_gnu.S +0 -2332
  484. package/deps/blake3/c/blake3_sse2_x86-64_windows_msvc.asm +0 -2350
  485. package/deps/blake3/c/blake3_sse41.c +0 -560
  486. package/deps/blake3/c/blake3_sse41_x86-64_unix.S +0 -2028
  487. package/deps/blake3/c/blake3_sse41_x86-64_windows_gnu.S +0 -2069
  488. package/deps/blake3/c/blake3_sse41_x86-64_windows_msvc.asm +0 -2089
  489. package/deps/blake3/c/blake3_tbb.cpp +0 -37
  490. package/deps/blake3/c/dependencies/CMakeLists.txt +0 -3
  491. package/deps/blake3/c/dependencies/tbb/CMakeLists.txt +0 -28
  492. package/deps/blake3/c/example.c +0 -36
  493. package/deps/blake3/c/example_tbb.c +0 -57
  494. package/deps/blake3/c/libblake3.pc.in +0 -12
  495. package/deps/blake3/c/main.c +0 -166
  496. package/deps/blake3/c/test.py +0 -97
  497. package/deps/blake3/media/B3.svg +0 -70
  498. package/deps/blake3/media/BLAKE3.svg +0 -85
  499. package/deps/blake3/media/speed.svg +0 -1474
  500. package/deps/blake3/reference_impl/Cargo.toml +0 -8
  501. package/deps/blake3/reference_impl/README.md +0 -14
  502. package/deps/blake3/reference_impl/reference_impl.rs +0 -374
  503. package/deps/blake3/src/ffi_avx2.rs +0 -65
  504. package/deps/blake3/src/ffi_avx512.rs +0 -169
  505. package/deps/blake3/src/ffi_neon.rs +0 -82
  506. package/deps/blake3/src/ffi_sse2.rs +0 -126
  507. package/deps/blake3/src/ffi_sse41.rs +0 -126
  508. package/deps/blake3/src/guts.rs +0 -60
  509. package/deps/blake3/src/hazmat.rs +0 -704
  510. package/deps/blake3/src/io.rs +0 -64
  511. package/deps/blake3/src/join.rs +0 -92
  512. package/deps/blake3/src/lib.rs +0 -1835
  513. package/deps/blake3/src/platform.rs +0 -587
  514. package/deps/blake3/src/portable.rs +0 -198
  515. package/deps/blake3/src/rust_avx2.rs +0 -474
  516. package/deps/blake3/src/rust_sse2.rs +0 -775
  517. package/deps/blake3/src/rust_sse41.rs +0 -766
  518. package/deps/blake3/src/test.rs +0 -1049
  519. package/deps/blake3/src/traits.rs +0 -227
  520. package/deps/blake3/src/wasm32_simd.rs +0 -794
  521. package/deps/blake3/test_vectors/Cargo.toml +0 -19
  522. package/deps/blake3/test_vectors/cross_test.sh +0 -25
  523. package/deps/blake3/test_vectors/src/bin/generate.rs +0 -4
  524. package/deps/blake3/test_vectors/src/lib.rs +0 -350
  525. package/deps/blake3/test_vectors/test_vectors.json +0 -217
  526. package/deps/blake3/tools/compiler_version/Cargo.toml +0 -7
  527. package/deps/blake3/tools/compiler_version/build.rs +0 -6
  528. package/deps/blake3/tools/compiler_version/src/main.rs +0 -27
  529. package/deps/blake3/tools/instruction_set_support/Cargo.toml +0 -6
  530. package/deps/blake3/tools/instruction_set_support/src/main.rs +0 -10
  531. package/deps/blake3/tools/release.md +0 -16
  532. package/deps/ncrypto/.bazelignore +0 -4
  533. package/deps/ncrypto/.bazelrc +0 -1
  534. package/deps/ncrypto/.bazelversion +0 -1
  535. package/deps/ncrypto/.clang-format +0 -111
  536. package/deps/ncrypto/.github/workflows/bazel.yml +0 -58
  537. package/deps/ncrypto/.github/workflows/commitlint.yml +0 -16
  538. package/deps/ncrypto/.github/workflows/linter.yml +0 -38
  539. package/deps/ncrypto/.github/workflows/macos.yml +0 -43
  540. package/deps/ncrypto/.github/workflows/release-please.yml +0 -16
  541. package/deps/ncrypto/.github/workflows/ubuntu.yml +0 -128
  542. package/deps/ncrypto/.github/workflows/visual-studio.yml +0 -49
  543. package/deps/ncrypto/.python-version +0 -1
  544. package/deps/ncrypto/.release-please-manifest.json +0 -3
  545. package/deps/ncrypto/BUILD.bazel +0 -44
  546. package/deps/ncrypto/CHANGELOG.md +0 -37
  547. package/deps/ncrypto/CMakeLists.txt +0 -79
  548. package/deps/ncrypto/MODULE.bazel +0 -16
  549. package/deps/ncrypto/MODULE.bazel.lock +0 -461
  550. package/deps/ncrypto/cmake/CPM.cmake +0 -1225
  551. package/deps/ncrypto/cmake/ncrypto-flags.cmake +0 -17
  552. package/deps/ncrypto/ncrypto.pc.in +0 -10
  553. package/deps/ncrypto/patches/0001-Expose-libdecrepit-so-NodeJS-can-use-it-for-ncrypto.patch +0 -28
  554. package/deps/ncrypto/pyproject.toml +0 -38
  555. package/deps/ncrypto/release-please-config.json +0 -11
  556. package/deps/ncrypto/src/CMakeLists.txt +0 -40
  557. package/deps/ncrypto/tests/BUILD.bazel +0 -11
  558. package/deps/ncrypto/tests/CMakeLists.txt +0 -7
  559. package/deps/ncrypto/tests/basic.cpp +0 -856
  560. package/deps/ncrypto/tools/run-clang-format.sh +0 -42
  561. package/lib/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,40 @@
1
+ #ifndef SIMDUTF_VALID_UTF16_TO_LATIN1_H
2
+ #define SIMDUTF_VALID_UTF16_TO_LATIN1_H
3
+
4
+ namespace simdutf {
5
+ namespace scalar {
6
+ namespace {
7
+ namespace utf16_to_latin1 {
8
+
9
+ template <endianness big_endian, class InputIterator, class OutputIterator>
10
+ simdutf_constexpr23 inline size_t
11
+ convert_valid_impl(InputIterator data, size_t len,
12
+ OutputIterator latin_output) {
13
+ static_assert(
14
+ std::is_same<typename std::decay<decltype(*data)>::type, uint16_t>::value,
15
+ "must decay to uint16_t");
16
+ size_t pos = 0;
17
+ const auto start = latin_output;
18
+ uint16_t word = 0;
19
+
20
+ while (pos < len) {
21
+ word = !match_system(big_endian) ? u16_swap_bytes(data[pos]) : data[pos];
22
+ *latin_output++ = char(word);
23
+ pos++;
24
+ }
25
+
26
+ return latin_output - start;
27
+ }
28
+
29
+ template <endianness big_endian>
30
+ simdutf_really_inline size_t convert_valid(const char16_t *buf, size_t len,
31
+ char *latin_output) {
32
+ return convert_valid_impl<big_endian>(reinterpret_cast<const uint16_t *>(buf),
33
+ len, latin_output);
34
+ }
35
+ } // namespace utf16_to_latin1
36
+ } // unnamed namespace
37
+ } // namespace scalar
38
+ } // namespace simdutf
39
+
40
+ #endif
@@ -0,0 +1,86 @@
1
+ #ifndef SIMDUTF_UTF16_TO_UTF32_H
2
+ #define SIMDUTF_UTF16_TO_UTF32_H
3
+
4
+ namespace simdutf {
5
+ namespace scalar {
6
+ namespace {
7
+ namespace utf16_to_utf32 {
8
+
9
+ template <endianness big_endian>
10
+ simdutf_constexpr23 size_t convert(const char16_t *data, size_t len,
11
+ char32_t *utf32_output) {
12
+ size_t pos = 0;
13
+ char32_t *start{utf32_output};
14
+ while (pos < len) {
15
+ uint16_t word =
16
+ !match_system(big_endian) ? u16_swap_bytes(data[pos]) : data[pos];
17
+ if ((word & 0xF800) != 0xD800) {
18
+ // No surrogate pair, extend 16-bit word to 32-bit word
19
+ *utf32_output++ = char32_t(word);
20
+ pos++;
21
+ } else {
22
+ // must be a surrogate pair
23
+ uint16_t diff = uint16_t(word - 0xD800);
24
+ if (diff > 0x3FF) {
25
+ return 0;
26
+ }
27
+ if (pos + 1 >= len) {
28
+ return 0;
29
+ } // minimal bound checking
30
+ uint16_t next_word = !match_system(big_endian)
31
+ ? u16_swap_bytes(data[pos + 1])
32
+ : data[pos + 1];
33
+ uint16_t diff2 = uint16_t(next_word - 0xDC00);
34
+ if (diff2 > 0x3FF) {
35
+ return 0;
36
+ }
37
+ uint32_t value = (diff << 10) + diff2 + 0x10000;
38
+ *utf32_output++ = char32_t(value);
39
+ pos += 2;
40
+ }
41
+ }
42
+ return utf32_output - start;
43
+ }
44
+
45
+ template <endianness big_endian>
46
+ simdutf_constexpr23 result convert_with_errors(const char16_t *data, size_t len,
47
+ char32_t *utf32_output) {
48
+ size_t pos = 0;
49
+ char32_t *start{utf32_output};
50
+ while (pos < len) {
51
+ uint16_t word =
52
+ !match_system(big_endian) ? u16_swap_bytes(data[pos]) : data[pos];
53
+ if ((word & 0xF800) != 0xD800) {
54
+ // No surrogate pair, extend 16-bit word to 32-bit word
55
+ *utf32_output++ = char32_t(word);
56
+ pos++;
57
+ } else {
58
+ // must be a surrogate pair
59
+ uint16_t diff = uint16_t(word - 0xD800);
60
+ if (diff > 0x3FF) {
61
+ return result(error_code::SURROGATE, pos);
62
+ }
63
+ if (pos + 1 >= len) {
64
+ return result(error_code::SURROGATE, pos);
65
+ } // minimal bound checking
66
+ uint16_t next_word = !match_system(big_endian)
67
+ ? u16_swap_bytes(data[pos + 1])
68
+ : data[pos + 1];
69
+ uint16_t diff2 = uint16_t(next_word - 0xDC00);
70
+ if (diff2 > 0x3FF) {
71
+ return result(error_code::SURROGATE, pos);
72
+ }
73
+ uint32_t value = (diff << 10) + diff2 + 0x10000;
74
+ *utf32_output++ = char32_t(value);
75
+ pos += 2;
76
+ }
77
+ }
78
+ return result(error_code::SUCCESS, utf32_output - start);
79
+ }
80
+
81
+ } // namespace utf16_to_utf32
82
+ } // unnamed namespace
83
+ } // namespace scalar
84
+ } // namespace simdutf
85
+
86
+ #endif
@@ -0,0 +1,44 @@
1
+ #ifndef SIMDUTF_VALID_UTF16_TO_UTF32_H
2
+ #define SIMDUTF_VALID_UTF16_TO_UTF32_H
3
+
4
+ namespace simdutf {
5
+ namespace scalar {
6
+ namespace {
7
+ namespace utf16_to_utf32 {
8
+
9
+ template <endianness big_endian>
10
+ simdutf_constexpr23 size_t convert_valid(const char16_t *data, size_t len,
11
+ char32_t *utf32_output) {
12
+ size_t pos = 0;
13
+ char32_t *start{utf32_output};
14
+ while (pos < len) {
15
+ uint16_t word =
16
+ !match_system(big_endian) ? u16_swap_bytes(data[pos]) : data[pos];
17
+ if ((word & 0xF800) != 0xD800) {
18
+ // No surrogate pair, extend 16-bit word to 32-bit word
19
+ *utf32_output++ = char32_t(word);
20
+ pos++;
21
+ } else {
22
+ // must be a surrogate pair
23
+ uint16_t diff = uint16_t(word - 0xD800);
24
+ if (pos + 1 >= len) {
25
+ return 0;
26
+ } // minimal bound checking
27
+ uint16_t next_word = !match_system(big_endian)
28
+ ? u16_swap_bytes(data[pos + 1])
29
+ : data[pos + 1];
30
+ uint16_t diff2 = uint16_t(next_word - 0xDC00);
31
+ uint32_t value = (diff << 10) + diff2 + 0x10000;
32
+ *utf32_output++ = char32_t(value);
33
+ pos += 2;
34
+ }
35
+ }
36
+ return utf32_output - start;
37
+ }
38
+
39
+ } // namespace utf16_to_utf32
40
+ } // unnamed namespace
41
+ } // namespace scalar
42
+ } // namespace simdutf
43
+
44
+ #endif
@@ -0,0 +1,295 @@
1
+ #ifndef SIMDUTF_UTF16_TO_UTF8_H
2
+ #define SIMDUTF_UTF16_TO_UTF8_H
3
+
4
+ namespace simdutf {
5
+ namespace scalar {
6
+ namespace {
7
+ namespace utf16_to_utf8 {
8
+
9
+ template <endianness big_endian, typename InputPtr, typename OutputPtr>
10
+ #if SIMDUTF_CPLUSPLUS20
11
+ requires simdutf::detail::indexes_into_utf16<InputPtr>
12
+ // FIXME constrain output as well
13
+ #endif
14
+ simdutf_constexpr23 size_t convert(InputPtr data, size_t len,
15
+ OutputPtr utf8_output) {
16
+ size_t pos = 0;
17
+ const auto start = utf8_output;
18
+ while (pos < len) {
19
+ #if SIMDUTF_CPLUSPLUS23
20
+ if !consteval
21
+ #endif
22
+ {
23
+ // try to convert the next block of 8 bytes
24
+ if (pos + 4 <= len) { // if it is safe to read 8 more bytes, check that
25
+ // they are ascii
26
+ uint64_t v;
27
+ ::memcpy(&v, data + pos, sizeof(uint64_t));
28
+ if simdutf_constexpr (!match_system(big_endian)) {
29
+ v = (v >> 8) | (v << (64 - 8));
30
+ }
31
+ if ((v & 0xFF80FF80FF80FF80) == 0) {
32
+ size_t final_pos = pos + 4;
33
+ while (pos < final_pos) {
34
+ *utf8_output++ = !match_system(big_endian)
35
+ ? char(u16_swap_bytes(data[pos]))
36
+ : char(data[pos]);
37
+ pos++;
38
+ }
39
+ continue;
40
+ }
41
+ }
42
+ }
43
+ uint16_t word =
44
+ !match_system(big_endian) ? u16_swap_bytes(data[pos]) : data[pos];
45
+ if ((word & 0xFF80) == 0) {
46
+ // will generate one UTF-8 bytes
47
+ *utf8_output++ = char(word);
48
+ pos++;
49
+ } else if ((word & 0xF800) == 0) {
50
+ // will generate two UTF-8 bytes
51
+ // we have 0b110XXXXX 0b10XXXXXX
52
+ *utf8_output++ = char((word >> 6) | 0b11000000);
53
+ *utf8_output++ = char((word & 0b111111) | 0b10000000);
54
+ pos++;
55
+ } else if ((word & 0xF800) != 0xD800) {
56
+ // will generate three UTF-8 bytes
57
+ // we have 0b1110XXXX 0b10XXXXXX 0b10XXXXXX
58
+ *utf8_output++ = char((word >> 12) | 0b11100000);
59
+ *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000);
60
+ *utf8_output++ = char((word & 0b111111) | 0b10000000);
61
+ pos++;
62
+ } else {
63
+ // must be a surrogate pair
64
+ if (pos + 1 >= len) {
65
+ return 0;
66
+ }
67
+ uint16_t diff = uint16_t(word - 0xD800);
68
+ if (diff > 0x3FF) {
69
+ return 0;
70
+ }
71
+ uint16_t next_word = !match_system(big_endian)
72
+ ? u16_swap_bytes(data[pos + 1])
73
+ : data[pos + 1];
74
+ uint16_t diff2 = uint16_t(next_word - 0xDC00);
75
+ if (diff2 > 0x3FF) {
76
+ return 0;
77
+ }
78
+ uint32_t value = (diff << 10) + diff2 + 0x10000;
79
+ // will generate four UTF-8 bytes
80
+ // we have 0b11110XXX 0b10XXXXXX 0b10XXXXXX 0b10XXXXXX
81
+ *utf8_output++ = char((value >> 18) | 0b11110000);
82
+ *utf8_output++ = char(((value >> 12) & 0b111111) | 0b10000000);
83
+ *utf8_output++ = char(((value >> 6) & 0b111111) | 0b10000000);
84
+ *utf8_output++ = char((value & 0b111111) | 0b10000000);
85
+ pos += 2;
86
+ }
87
+ }
88
+ return utf8_output - start;
89
+ }
90
+
91
+ template <endianness big_endian, bool check_output = false, typename InputPtr,
92
+ typename OutputPtr>
93
+ #if SIMDUTF_CPLUSPLUS20
94
+ requires(simdutf::detail::indexes_into_utf16<InputPtr> &&
95
+ simdutf::detail::index_assignable_from_char<OutputPtr>)
96
+ #endif
97
+ simdutf_constexpr23 full_result convert_with_errors(InputPtr data, size_t len,
98
+ OutputPtr utf8_output,
99
+ size_t utf8_len = 0) {
100
+ if (check_output && utf8_len == 0) {
101
+ return full_result(error_code::OUTPUT_BUFFER_TOO_SMALL, 0, 0);
102
+ }
103
+
104
+ size_t pos = 0;
105
+ auto start = utf8_output;
106
+ auto end = utf8_output + utf8_len;
107
+
108
+ while (pos < len) {
109
+ #if SIMDUTF_CPLUSPLUS23
110
+ if !consteval
111
+ #endif
112
+ {
113
+ // try to convert the next block of 8 bytes
114
+ if (pos + 4 <= len) { // if it is safe to read 8 more bytes, check that
115
+ // they are ascii
116
+ uint64_t v;
117
+ ::memcpy(&v, data + pos, sizeof(uint64_t));
118
+ if simdutf_constexpr (!match_system(big_endian))
119
+ v = (v >> 8) | (v << (64 - 8));
120
+ if ((v & 0xFF80FF80FF80FF80) == 0) {
121
+ size_t final_pos = pos + 4;
122
+ while (pos < final_pos) {
123
+ if (check_output && size_t(end - utf8_output) < 1) {
124
+ return full_result(error_code::OUTPUT_BUFFER_TOO_SMALL, pos,
125
+ utf8_output - start);
126
+ }
127
+ *utf8_output++ = !match_system(big_endian)
128
+ ? char(u16_swap_bytes(data[pos]))
129
+ : char(data[pos]);
130
+ pos++;
131
+ }
132
+ continue;
133
+ }
134
+ }
135
+ }
136
+
137
+ uint16_t word =
138
+ !match_system(big_endian) ? u16_swap_bytes(data[pos]) : data[pos];
139
+ if ((word & 0xFF80) == 0) {
140
+ // will generate one UTF-8 bytes
141
+ if (check_output && size_t(end - utf8_output) < 1) {
142
+ return full_result(error_code::OUTPUT_BUFFER_TOO_SMALL, pos,
143
+ utf8_output - start);
144
+ }
145
+ *utf8_output++ = char(word);
146
+ pos++;
147
+ } else if ((word & 0xF800) == 0) {
148
+ // will generate two UTF-8 bytes
149
+ // we have 0b110XXXXX 0b10XXXXXX
150
+ if (check_output && size_t(end - utf8_output) < 2) {
151
+ return full_result(error_code::OUTPUT_BUFFER_TOO_SMALL, pos,
152
+ utf8_output - start);
153
+ }
154
+ *utf8_output++ = char((word >> 6) | 0b11000000);
155
+ *utf8_output++ = char((word & 0b111111) | 0b10000000);
156
+ pos++;
157
+
158
+ } else if ((word & 0xF800) != 0xD800) {
159
+ // will generate three UTF-8 bytes
160
+ // we have 0b1110XXXX 0b10XXXXXX 0b10XXXXXX
161
+ if (check_output && size_t(end - utf8_output) < 3) {
162
+ return full_result(error_code::OUTPUT_BUFFER_TOO_SMALL, pos,
163
+ utf8_output - start);
164
+ }
165
+ *utf8_output++ = char((word >> 12) | 0b11100000);
166
+ *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000);
167
+ *utf8_output++ = char((word & 0b111111) | 0b10000000);
168
+ pos++;
169
+ } else {
170
+
171
+ if (check_output && size_t(end - utf8_output) < 4) {
172
+ return full_result(error_code::OUTPUT_BUFFER_TOO_SMALL, pos,
173
+ utf8_output - start);
174
+ }
175
+ // must be a surrogate pair
176
+ if (pos + 1 >= len) {
177
+ return full_result(error_code::SURROGATE, pos, utf8_output - start);
178
+ }
179
+ uint16_t diff = uint16_t(word - 0xD800);
180
+ if (diff > 0x3FF) {
181
+ return full_result(error_code::SURROGATE, pos, utf8_output - start);
182
+ }
183
+ uint16_t next_word = !match_system(big_endian)
184
+ ? u16_swap_bytes(data[pos + 1])
185
+ : data[pos + 1];
186
+ uint16_t diff2 = uint16_t(next_word - 0xDC00);
187
+ if (diff2 > 0x3FF) {
188
+ return full_result(error_code::SURROGATE, pos, utf8_output - start);
189
+ }
190
+ uint32_t value = (diff << 10) + diff2 + 0x10000;
191
+ // will generate four UTF-8 bytes
192
+ // we have 0b11110XXX 0b10XXXXXX 0b10XXXXXX 0b10XXXXXX
193
+ *utf8_output++ = char((value >> 18) | 0b11110000);
194
+ *utf8_output++ = char(((value >> 12) & 0b111111) | 0b10000000);
195
+ *utf8_output++ = char(((value >> 6) & 0b111111) | 0b10000000);
196
+ *utf8_output++ = char((value & 0b111111) | 0b10000000);
197
+ pos += 2;
198
+ }
199
+ }
200
+ return full_result(error_code::SUCCESS, pos, utf8_output - start);
201
+ }
202
+
203
+ template <endianness big_endian>
204
+ inline result simple_convert_with_errors(const char16_t *buf, size_t len,
205
+ char *utf8_output) {
206
+ return convert_with_errors<big_endian, false>(buf, len, utf8_output, 0);
207
+ }
208
+
209
+ template <endianness big_endian>
210
+ simdutf_constexpr23 size_t convert_with_replacement(const char16_t *data,
211
+ size_t len,
212
+ char *utf8_output) {
213
+ size_t pos = 0;
214
+ char *start = utf8_output;
215
+ while (pos < len) {
216
+ #if SIMDUTF_CPLUSPLUS23
217
+ if !consteval
218
+ #endif
219
+ {
220
+ // try to convert the next block of 8 bytes
221
+ if (pos + 4 <= len) { // if it is safe to read 8 more bytes, check that
222
+ // they are ascii
223
+ uint64_t v;
224
+ ::memcpy(&v, data + pos, sizeof(uint64_t));
225
+ if simdutf_constexpr (!match_system(big_endian)) {
226
+ v = (v >> 8) | (v << (64 - 8));
227
+ }
228
+ if ((v & 0xFF80FF80FF80FF80) == 0) {
229
+ size_t final_pos = pos + 4;
230
+ while (pos < final_pos) {
231
+ *utf8_output++ = !match_system(big_endian)
232
+ ? char(u16_swap_bytes(data[pos]))
233
+ : char(data[pos]);
234
+ pos++;
235
+ }
236
+ continue;
237
+ }
238
+ }
239
+ }
240
+ uint16_t word =
241
+ !match_system(big_endian) ? u16_swap_bytes(data[pos]) : data[pos];
242
+ if ((word & 0xFF80) == 0) {
243
+ // will generate one UTF-8 bytes
244
+ *utf8_output++ = char(word);
245
+ pos++;
246
+ } else if ((word & 0xF800) == 0) {
247
+ // will generate two UTF-8 bytes
248
+ // we have 0b110XXXXX 0b10XXXXXX
249
+ *utf8_output++ = char((word >> 6) | 0b11000000);
250
+ *utf8_output++ = char((word & 0b111111) | 0b10000000);
251
+ pos++;
252
+ } else if ((word & 0xF800) != 0xD800) {
253
+ // will generate three UTF-8 bytes
254
+ // we have 0b1110XXXX 0b10XXXXXX 0b10XXXXXX
255
+ *utf8_output++ = char((word >> 12) | 0b11100000);
256
+ *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000);
257
+ *utf8_output++ = char((word & 0b111111) | 0b10000000);
258
+ pos++;
259
+ } else {
260
+ // surrogate range
261
+ uint16_t diff = uint16_t(word - 0xD800);
262
+ if (diff <= 0x3FF && pos + 1 < len) {
263
+ // high surrogate, check for valid pair
264
+ uint16_t next_word = !match_system(big_endian)
265
+ ? u16_swap_bytes(data[pos + 1])
266
+ : data[pos + 1];
267
+ uint16_t diff2 = uint16_t(next_word - 0xDC00);
268
+ if (diff2 <= 0x3FF) {
269
+ // valid surrogate pair
270
+ uint32_t value = (diff << 10) + diff2 + 0x10000;
271
+ // will generate four UTF-8 bytes
272
+ *utf8_output++ = char((value >> 18) | 0b11110000);
273
+ *utf8_output++ = char(((value >> 12) & 0b111111) | 0b10000000);
274
+ *utf8_output++ = char(((value >> 6) & 0b111111) | 0b10000000);
275
+ *utf8_output++ = char((value & 0b111111) | 0b10000000);
276
+ pos += 2;
277
+ continue;
278
+ }
279
+ }
280
+ // unpaired surrogate: replace with U+FFFD (0xEF 0xBF 0xBD)
281
+ *utf8_output++ = char(0xef);
282
+ *utf8_output++ = char(0xbf);
283
+ *utf8_output++ = char(0xbd);
284
+ pos++;
285
+ }
286
+ }
287
+ return utf8_output - start;
288
+ }
289
+
290
+ } // namespace utf16_to_utf8
291
+ } // unnamed namespace
292
+ } // namespace scalar
293
+ } // namespace simdutf
294
+
295
+ #endif
@@ -0,0 +1,91 @@
1
+ #ifndef SIMDUTF_VALID_UTF16_TO_UTF8_H
2
+ #define SIMDUTF_VALID_UTF16_TO_UTF8_H
3
+
4
+ namespace simdutf {
5
+ namespace scalar {
6
+ namespace {
7
+ namespace utf16_to_utf8 {
8
+
9
+ template <endianness big_endian, typename InputPtr, typename OutputPtr>
10
+ #if SIMDUTF_CPLUSPLUS20
11
+ requires(simdutf::detail::indexes_into_utf16<InputPtr> &&
12
+ simdutf::detail::index_assignable_from_char<OutputPtr>)
13
+ #endif
14
+ simdutf_constexpr23 size_t convert_valid(InputPtr data, size_t len,
15
+ OutputPtr utf8_output) {
16
+ size_t pos = 0;
17
+ auto start = utf8_output;
18
+ while (pos < len) {
19
+ #if SIMDUTF_CPLUSPLUS23
20
+ if !consteval
21
+ #endif
22
+ {
23
+ // try to convert the next block of 4 ASCII characters
24
+ if (pos + 4 <= len) { // if it is safe to read 8 more bytes, check that
25
+ // they are ascii
26
+ uint64_t v;
27
+ ::memcpy(&v, data + pos, sizeof(uint64_t));
28
+ if simdutf_constexpr (!match_system(big_endian)) {
29
+ v = (v >> 8) | (v << (64 - 8));
30
+ }
31
+ if ((v & 0xFF80FF80FF80FF80) == 0) {
32
+ size_t final_pos = pos + 4;
33
+ while (pos < final_pos) {
34
+ *utf8_output++ = !match_system(big_endian)
35
+ ? char(u16_swap_bytes(data[pos]))
36
+ : char(data[pos]);
37
+ pos++;
38
+ }
39
+ continue;
40
+ }
41
+ }
42
+ }
43
+
44
+ uint16_t word =
45
+ !match_system(big_endian) ? u16_swap_bytes(data[pos]) : data[pos];
46
+ if ((word & 0xFF80) == 0) {
47
+ // will generate one UTF-8 bytes
48
+ *utf8_output++ = char(word);
49
+ pos++;
50
+ } else if ((word & 0xF800) == 0) {
51
+ // will generate two UTF-8 bytes
52
+ // we have 0b110XXXXX 0b10XXXXXX
53
+ *utf8_output++ = char((word >> 6) | 0b11000000);
54
+ *utf8_output++ = char((word & 0b111111) | 0b10000000);
55
+ pos++;
56
+ } else if ((word & 0xF800) != 0xD800) {
57
+ // will generate three UTF-8 bytes
58
+ // we have 0b1110XXXX 0b10XXXXXX 0b10XXXXXX
59
+ *utf8_output++ = char((word >> 12) | 0b11100000);
60
+ *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000);
61
+ *utf8_output++ = char((word & 0b111111) | 0b10000000);
62
+ pos++;
63
+ } else {
64
+ // must be a surrogate pair
65
+ uint16_t diff = uint16_t(word - 0xD800);
66
+ if (pos + 1 >= len) {
67
+ return 0;
68
+ } // minimal bound checking
69
+ uint16_t next_word = !match_system(big_endian)
70
+ ? u16_swap_bytes(data[pos + 1])
71
+ : data[pos + 1];
72
+ uint16_t diff2 = uint16_t(next_word - 0xDC00);
73
+ uint32_t value = (diff << 10) + diff2 + 0x10000;
74
+ // will generate four UTF-8 bytes
75
+ // we have 0b11110XXX 0b10XXXXXX 0b10XXXXXX 0b10XXXXXX
76
+ *utf8_output++ = char((value >> 18) | 0b11110000);
77
+ *utf8_output++ = char(((value >> 12) & 0b111111) | 0b10000000);
78
+ *utf8_output++ = char(((value >> 6) & 0b111111) | 0b10000000);
79
+ *utf8_output++ = char((value & 0b111111) | 0b10000000);
80
+ pos += 2;
81
+ }
82
+ }
83
+ return utf8_output - start;
84
+ }
85
+
86
+ } // namespace utf16_to_utf8
87
+ } // unnamed namespace
88
+ } // namespace scalar
89
+ } // namespace simdutf
90
+
91
+ #endif
@@ -0,0 +1,82 @@
1
+ #ifndef SIMDUTF_UTF32_H
2
+ #define SIMDUTF_UTF32_H
3
+
4
+ namespace simdutf {
5
+ namespace scalar {
6
+ namespace utf32 {
7
+
8
+ template <typename InputPtr>
9
+ #if SIMDUTF_CPLUSPLUS20
10
+ requires simdutf::detail::indexes_into_uint32<InputPtr>
11
+ #endif
12
+ simdutf_warn_unused simdutf_constexpr23 bool validate(InputPtr data,
13
+ size_t len) noexcept {
14
+ uint64_t pos = 0;
15
+ for (; pos < len; pos++) {
16
+ uint32_t word = data[pos];
17
+ if (word > 0x10FFFF || (word >= 0xD800 && word <= 0xDFFF)) {
18
+ return false;
19
+ }
20
+ }
21
+ return true;
22
+ }
23
+
24
+ simdutf_warn_unused simdutf_really_inline bool validate(const char32_t *buf,
25
+ size_t len) noexcept {
26
+ return validate(reinterpret_cast<const uint32_t *>(buf), len);
27
+ }
28
+
29
+ template <typename InputPtr>
30
+ #if SIMDUTF_CPLUSPLUS20
31
+ requires simdutf::detail::indexes_into_uint32<InputPtr>
32
+ #endif
33
+ simdutf_warn_unused simdutf_constexpr23 result
34
+ validate_with_errors(InputPtr data, size_t len) noexcept {
35
+ size_t pos = 0;
36
+ for (; pos < len; pos++) {
37
+ uint32_t word = data[pos];
38
+ if (word > 0x10FFFF) {
39
+ return result(error_code::TOO_LARGE, pos);
40
+ }
41
+ if (word >= 0xD800 && word <= 0xDFFF) {
42
+ return result(error_code::SURROGATE, pos);
43
+ }
44
+ }
45
+ return result(error_code::SUCCESS, pos);
46
+ }
47
+
48
+ simdutf_warn_unused simdutf_really_inline result
49
+ validate_with_errors(const char32_t *buf, size_t len) noexcept {
50
+ return validate_with_errors(reinterpret_cast<const uint32_t *>(buf), len);
51
+ }
52
+
53
+ inline simdutf_constexpr23 size_t utf8_length_from_utf32(const char32_t *p,
54
+ size_t len) {
55
+ // We are not BOM aware.
56
+ size_t counter{0};
57
+ for (size_t i = 0; i < len; i++) {
58
+ // credit: @ttsugriy for the vectorizable approach
59
+ counter++; // ASCII
60
+ counter += static_cast<size_t>(p[i] > 0x7F); // two-byte
61
+ counter += static_cast<size_t>(p[i] > 0x7FF); // three-byte
62
+ counter += static_cast<size_t>(p[i] > 0xFFFF); // four-bytes
63
+ }
64
+ return counter;
65
+ }
66
+
67
+ inline simdutf_warn_unused simdutf_constexpr23 size_t
68
+ utf16_length_from_utf32(const char32_t *p, size_t len) {
69
+ // We are not BOM aware.
70
+ size_t counter{0};
71
+ for (size_t i = 0; i < len; i++) {
72
+ counter++; // non-surrogate word
73
+ counter += static_cast<size_t>(p[i] > 0xFFFF); // surrogate pair
74
+ }
75
+ return counter;
76
+ }
77
+
78
+ } // namespace utf32
79
+ } // namespace scalar
80
+ } // namespace simdutf
81
+
82
+ #endif