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,269 @@
1
+ template <endianness big_endian>
2
+ simdutf_really_inline size_t icelake_utf8_length_from_utf16(const char16_t *in,
3
+ size_t size) {
4
+
5
+ using vector_u16 = simd16<uint16_t>;
6
+ constexpr size_t N = vector_u16::ELEMENTS; // 32 on AVX-512
7
+ if (N + 1 > size) {
8
+ result scalar_result =
9
+ scalar::utf16::utf8_length_from_utf16_with_replacement<big_endian>(
10
+ in, size);
11
+ return scalar_result.count;
12
+ } // special case for short inputs
13
+ size_t pos = 0;
14
+
15
+ const __m512i byteflip = _mm512_setr_epi64(
16
+ 0x0607040502030001, 0x0e0f0c0d0a0b0809, 0x0607040502030001,
17
+ 0x0e0f0c0d0a0b0809, 0x0607040502030001, 0x0e0f0c0d0a0b0809,
18
+ 0x0607040502030001, 0x0e0f0c0d0a0b0809);
19
+
20
+ size_t count = 0;
21
+
22
+ for (; pos < size / (2 * N) * (2 * N); pos += 2 * N) {
23
+
24
+ __m512i input1 =
25
+ _mm512_loadu_si512(reinterpret_cast<const __m512i *>(in + pos));
26
+ __m512i input2 =
27
+ _mm512_loadu_si512(reinterpret_cast<const __m512i *>(in + pos + N));
28
+
29
+ if simdutf_constexpr (!match_system(big_endian)) {
30
+ input1 = _mm512_shuffle_epi8(input1, byteflip);
31
+ input2 = _mm512_shuffle_epi8(input2, byteflip);
32
+ }
33
+ // 0xd800 .. 0xdbff - low surrogate
34
+ // 0xdc00 .. 0xdfff - high surrogate
35
+ __mmask32 is_surrogate1 = _mm512_cmpeq_epi16_mask(
36
+ _mm512_and_si512(input1, _mm512_set1_epi16(uint16_t(0xf800))),
37
+ _mm512_set1_epi16(uint16_t(0xd800)));
38
+ __mmask32 is_surrogate2 = _mm512_cmpeq_epi16_mask(
39
+ _mm512_and_si512(input2, _mm512_set1_epi16(uint16_t(0xf800))),
40
+ _mm512_set1_epi16(uint16_t(0xd800)));
41
+ // c0 - chars that yield 2- or 3-byte UTF-8 codes
42
+ __mmask32 c01 =
43
+ _mm512_test_epi16_mask(input1, _mm512_set1_epi16(uint16_t(0xff80)));
44
+ __mmask32 c02 =
45
+ _mm512_test_epi16_mask(input2, _mm512_set1_epi16(uint16_t(0xff80)));
46
+
47
+ // c1 - chars that yield 3-byte UTF-8 codes (including surrogates)
48
+ __mmask32 c11 =
49
+ _mm512_test_epi16_mask(input1, _mm512_set1_epi16(uint16_t(0xf800)));
50
+ __mmask32 c12 =
51
+ _mm512_test_epi16_mask(input2, _mm512_set1_epi16(uint16_t(0xf800)));
52
+ count += count_ones32(c01);
53
+ count += count_ones32(c11);
54
+ count -= count_ones32(is_surrogate1);
55
+ count += count_ones32(c02);
56
+ count += count_ones32(c12);
57
+ count -= count_ones32(is_surrogate2);
58
+ }
59
+ if (pos + N <= size) {
60
+ __m512i input =
61
+ _mm512_loadu_si512(reinterpret_cast<const __m512i *>(in + pos));
62
+ if simdutf_constexpr (!match_system(big_endian)) {
63
+ input = _mm512_shuffle_epi8(input, byteflip);
64
+ }
65
+ // 0xd800 .. 0xdbff - low surrogate
66
+ // 0xdc00 .. 0xdfff - high surrogate
67
+ __mmask32 is_surrogate = _mm512_cmpeq_epi16_mask(
68
+ _mm512_and_si512(input, _mm512_set1_epi16(uint16_t(0xf800))),
69
+ _mm512_set1_epi16(uint16_t(0xd800)));
70
+
71
+ // c0 - chars that yield 2- or 3-byte UTF-8 codes
72
+ __mmask32 c0 =
73
+ _mm512_test_epi16_mask(input, _mm512_set1_epi16(uint16_t(0xff80)));
74
+
75
+ // c1 - chars that yield 3-byte UTF-8 codes (including surrogates)
76
+ __mmask32 c1 =
77
+ _mm512_test_epi16_mask(input, _mm512_set1_epi16(uint16_t(0xf800)));
78
+ count += count_ones32(c0);
79
+ count += count_ones32(c1);
80
+ count -= count_ones32(is_surrogate);
81
+ pos += N;
82
+ }
83
+ // At this point, we have processed 'pos' char16 values and we have less than
84
+ // N remaining.
85
+ __mmask32 remaining_mask =
86
+ 0xFFFFFFFFULL >>
87
+ (32 - (size - pos)); // mask for the remaining char16 values
88
+ __m512i input = _mm512_maskz_loadu_epi16(remaining_mask, in + pos);
89
+ if simdutf_constexpr (!match_system(big_endian)) {
90
+ input = _mm512_shuffle_epi8(input, byteflip);
91
+ }
92
+ // 0xd800 .. 0xdbff - low surrogate
93
+ // 0xdc00 .. 0xdfff - high surrogate
94
+ __mmask32 is_surrogate = _mm512_cmpeq_epi16_mask(
95
+ _mm512_and_si512(input, _mm512_set1_epi16(uint16_t(0xf800))),
96
+ _mm512_set1_epi16(uint16_t(0xd800)));
97
+
98
+ // c0 - chars that yield 2- or 3-byte UTF-8 codes
99
+ __mmask32 c0 =
100
+ _mm512_test_epi16_mask(input, _mm512_set1_epi16(uint16_t(0xff80)));
101
+
102
+ // c1 - chars that yield 3-byte UTF-8 codes (including surrogates)
103
+ __mmask32 c1 =
104
+ _mm512_test_epi16_mask(input, _mm512_set1_epi16(uint16_t(0xf800)));
105
+ count += count_ones32(c0);
106
+ count += count_ones32(c1);
107
+ count -= count_ones32(is_surrogate);
108
+ pos = size;
109
+
110
+ count += pos;
111
+ return count;
112
+ }
113
+
114
+ template <endianness big_endian>
115
+ simdutf_really_inline result icelake_utf8_length_from_utf16_with_replacement(
116
+ const char16_t *in, size_t size) {
117
+ ///////
118
+ // We repeat 3 times the same algorithm.
119
+ // First, we proceed with an unrolled loop of 2*N char16 values (for speed).
120
+ // Second, we process N char16 values.
121
+ // Finally, we process the remaining char16 values (less than N).
122
+ ///////
123
+ using vector_u16 = simd16<uint16_t>;
124
+ constexpr size_t N = vector_u16::ELEMENTS; // 32 on AVX-512
125
+ if (N + 1 > size) {
126
+ return scalar::utf16::utf8_length_from_utf16_with_replacement<big_endian>(
127
+ in, size);
128
+ } // special case for short inputs
129
+ size_t pos = 0;
130
+
131
+ const __m512i byteflip = _mm512_setr_epi64(
132
+ 0x0607040502030001, 0x0e0f0c0d0a0b0809, 0x0607040502030001,
133
+ 0x0e0f0c0d0a0b0809, 0x0607040502030001, 0x0e0f0c0d0a0b0809,
134
+ 0x0607040502030001, 0x0e0f0c0d0a0b0809);
135
+
136
+ constexpr uint32_t straddle_mask =
137
+ match_system(big_endian) ? 0xfc00fc00 : 0x00fc00fc;
138
+ constexpr uint32_t straddle_pair =
139
+ match_system(big_endian) ? 0xdc00d800 : 0x00dc00d8;
140
+
141
+ size_t count = 0;
142
+ bool any_surrogates = false;
143
+ // We assume all surrogates are mismatched and count here the matched
144
+ // ones.
145
+ size_t matches = 0;
146
+
147
+ for (; pos < (size - 1) / (2 * N) * (2 * N); pos += 2 * N) {
148
+ __m512i current1 =
149
+ _mm512_loadu_si512(reinterpret_cast<const __m512i *>(in + pos));
150
+ if simdutf_constexpr (!match_system(big_endian)) {
151
+ current1 = _mm512_shuffle_epi8(current1, byteflip);
152
+ }
153
+ __m512i current2 =
154
+ _mm512_loadu_si512(reinterpret_cast<const __m512i *>(in + pos + N));
155
+ if simdutf_constexpr (!match_system(big_endian)) {
156
+ current2 = _mm512_shuffle_epi8(current2, byteflip);
157
+ }
158
+
159
+ __mmask32 is_surrogate1 = _mm512_cmpeq_epi16_mask(
160
+ _mm512_and_si512(current1, _mm512_set1_epi16(uint16_t(0xf800))),
161
+ _mm512_set1_epi16(uint16_t(0xd800)));
162
+ __mmask32 is_surrogate2 = _mm512_cmpeq_epi16_mask(
163
+ _mm512_and_si512(current2, _mm512_set1_epi16(uint16_t(0xf800))),
164
+ _mm512_set1_epi16(uint16_t(0xd800)));
165
+ __mmask32 c01 =
166
+ _mm512_test_epi16_mask(current1, _mm512_set1_epi16(uint16_t(0xff80)));
167
+ __mmask32 c11 =
168
+ _mm512_test_epi16_mask(current1, _mm512_set1_epi16(uint16_t(0xf800)));
169
+ __mmask32 c02 =
170
+ _mm512_test_epi16_mask(current2, _mm512_set1_epi16(uint16_t(0xff80)));
171
+ __mmask32 c12 =
172
+ _mm512_test_epi16_mask(current2, _mm512_set1_epi16(uint16_t(0xf800)));
173
+ count += count_ones32(c01);
174
+ count += count_ones32(c11);
175
+ count += count_ones32(c02);
176
+ count += count_ones32(c12);
177
+ if (_kor_mask32(is_surrogate1, is_surrogate2)) {
178
+ any_surrogates = true;
179
+ __m512i lb_masked1 =
180
+ _mm512_and_si512(current1, _mm512_set1_epi16(uint16_t(0xfc00)));
181
+ __mmask32 hi_surrogates1 = _mm512_cmpeq_epi16_mask(
182
+ lb_masked1, _mm512_set1_epi16(uint16_t(0xd800)));
183
+ __mmask32 lo_surrogates1 = _mm512_cmpeq_epi16_mask(
184
+ lb_masked1, _mm512_set1_epi16(uint16_t(0xdc00)));
185
+ __m512i lb_masked2 =
186
+ _mm512_and_si512(current2, _mm512_set1_epi16(uint16_t(0xfc00)));
187
+ __mmask32 hi_surrogates2 = _mm512_cmpeq_epi16_mask(
188
+ lb_masked2, _mm512_set1_epi16(uint16_t(0xd800)));
189
+ __mmask32 lo_surrogates2 = _mm512_cmpeq_epi16_mask(
190
+ lb_masked2, _mm512_set1_epi16(uint16_t(0xdc00)));
191
+ matches += count_ones32(
192
+ _kand_mask32(_kshiftli_mask32(hi_surrogates1, 1), lo_surrogates1));
193
+ matches += count_ones32(
194
+ _kand_mask32(_kshiftli_mask32(hi_surrogates2, 1), lo_surrogates2));
195
+ uint32_t straddle1, straddle2;
196
+ memcpy(&straddle1, in + pos + 1 * N - 1, sizeof(uint32_t));
197
+ memcpy(&straddle2, in + pos + 2 * N - 1, sizeof(uint32_t));
198
+ matches += ((straddle1 & straddle_mask) == straddle_pair) +
199
+ ((straddle2 & straddle_mask) == straddle_pair);
200
+ }
201
+ }
202
+ if (pos + N + 1 <= size) {
203
+ __m512i input =
204
+ _mm512_loadu_si512(reinterpret_cast<const __m512i *>(in + pos));
205
+ if simdutf_constexpr (!match_system(big_endian)) {
206
+ input = _mm512_shuffle_epi8(input, byteflip);
207
+ }
208
+
209
+ __mmask32 is_surrogate = _mm512_cmpeq_epi16_mask(
210
+ _mm512_and_si512(input, _mm512_set1_epi16(uint16_t(0xf800))),
211
+ _mm512_set1_epi16(uint16_t(0xd800)));
212
+ __mmask32 c0 =
213
+ _mm512_test_epi16_mask(input, _mm512_set1_epi16(uint16_t(0xff80)));
214
+ __mmask32 c1 =
215
+ _mm512_test_epi16_mask(input, _mm512_set1_epi16(uint16_t(0xf800)));
216
+ count += count_ones32(c0);
217
+ count += count_ones32(c1);
218
+ if (is_surrogate) {
219
+ any_surrogates = true;
220
+ __m512i lb_masked =
221
+ _mm512_and_si512(input, _mm512_set1_epi16(uint16_t(0xfc00)));
222
+ __mmask32 hi_surrogates = _mm512_cmpeq_epi16_mask(
223
+ lb_masked, _mm512_set1_epi16(uint16_t(0xd800)));
224
+ __mmask32 lo_surrogates = _mm512_cmpeq_epi16_mask(
225
+ lb_masked, _mm512_set1_epi16(uint16_t(0xdc00)));
226
+ matches += count_ones32(
227
+ _kand_mask32(_kshiftli_mask32(hi_surrogates, 1), lo_surrogates));
228
+ uint32_t straddle;
229
+ memcpy(&straddle, in + pos + N - 1, sizeof(uint32_t));
230
+ matches += (straddle & straddle_mask) == straddle_pair;
231
+ }
232
+ pos += N;
233
+ }
234
+
235
+ size_t overshoot = 32 - (size - pos);
236
+ __mmask32 remaining_mask(uint32_t(0xFFFFFFFFULL << overshoot));
237
+ __m512i input =
238
+ _mm512_maskz_loadu_epi16(remaining_mask, in + pos - overshoot);
239
+ if simdutf_constexpr (!match_system(big_endian)) {
240
+ input = _mm512_shuffle_epi8(input, byteflip);
241
+ }
242
+
243
+ __mmask32 is_surrogate = _mm512_cmpeq_epi16_mask(
244
+ _mm512_and_si512(input, _mm512_set1_epi16(uint16_t(0xf800))),
245
+ _mm512_set1_epi16(uint16_t(0xd800)));
246
+ __mmask32 c0 =
247
+ _mm512_test_epi16_mask(input, _mm512_set1_epi16(uint16_t(0xff80)));
248
+ __mmask32 c1 =
249
+ _mm512_test_epi16_mask(input, _mm512_set1_epi16(uint16_t(0xf800)));
250
+
251
+ count += count_ones32(c0);
252
+ count += count_ones32(c1);
253
+ if (is_surrogate) {
254
+ any_surrogates = true;
255
+ __m512i lb_masked =
256
+ _mm512_and_si512(input, _mm512_set1_epi16(uint16_t(0xfc00)));
257
+ __mmask32 hi_surrogates =
258
+ _mm512_cmpeq_epi16_mask(lb_masked, _mm512_set1_epi16(uint16_t(0xd800)));
259
+ __mmask32 lo_surrogates =
260
+ _mm512_cmpeq_epi16_mask(lb_masked, _mm512_set1_epi16(uint16_t(0xdc00)));
261
+ matches += count_ones32(
262
+ _kand_mask32(_kshiftli_mask32(hi_surrogates, 1), lo_surrogates));
263
+ }
264
+ pos = size;
265
+ count += pos;
266
+
267
+ count -= 2 * matches;
268
+ return {any_surrogates ? SURROGATE : SUCCESS, count};
269
+ }
@@ -0,0 +1,116 @@
1
+ // file included directly
2
+
3
+ simdutf_really_inline __m512i check_special_cases(__m512i input,
4
+ const __m512i prev1) {
5
+ __m512i mask1 = _mm512_setr_epi64(0x0202020202020202, 0x4915012180808080,
6
+ 0x0202020202020202, 0x4915012180808080,
7
+ 0x0202020202020202, 0x4915012180808080,
8
+ 0x0202020202020202, 0x4915012180808080);
9
+ const __m512i v_0f = _mm512_set1_epi8(0x0f);
10
+ __m512i index1 = _mm512_and_si512(_mm512_srli_epi16(prev1, 4), v_0f);
11
+
12
+ __m512i byte_1_high = _mm512_shuffle_epi8(mask1, index1);
13
+ __m512i mask2 = _mm512_setr_epi64(0xcbcbcb8b8383a3e7, 0xcbcbdbcbcbcbcbcb,
14
+ 0xcbcbcb8b8383a3e7, 0xcbcbdbcbcbcbcbcb,
15
+ 0xcbcbcb8b8383a3e7, 0xcbcbdbcbcbcbcbcb,
16
+ 0xcbcbcb8b8383a3e7, 0xcbcbdbcbcbcbcbcb);
17
+ __m512i index2 = _mm512_and_si512(prev1, v_0f);
18
+
19
+ __m512i byte_1_low = _mm512_shuffle_epi8(mask2, index2);
20
+ __m512i mask3 =
21
+ _mm512_setr_epi64(0x101010101010101, 0x1010101babaaee6, 0x101010101010101,
22
+ 0x1010101babaaee6, 0x101010101010101, 0x1010101babaaee6,
23
+ 0x101010101010101, 0x1010101babaaee6);
24
+ __m512i index3 = _mm512_and_si512(_mm512_srli_epi16(input, 4), v_0f);
25
+ __m512i byte_2_high = _mm512_shuffle_epi8(mask3, index3);
26
+ return _mm512_ternarylogic_epi64(byte_1_high, byte_1_low, byte_2_high, 128);
27
+ }
28
+
29
+ simdutf_really_inline __m512i check_multibyte_lengths(const __m512i input,
30
+ const __m512i prev_input,
31
+ const __m512i sc) {
32
+ __m512i prev2 = prev<2>(input, prev_input);
33
+ __m512i prev3 = prev<3>(input, prev_input);
34
+ __m512i is_third_byte = _mm512_subs_epu8(
35
+ prev2, _mm512_set1_epi8(0b11100000u - 1)); // Only 111_____ will be > 0
36
+ __m512i is_fourth_byte = _mm512_subs_epu8(
37
+ prev3, _mm512_set1_epi8(0b11110000u - 1)); // Only 1111____ will be > 0
38
+ __m512i is_third_or_fourth_byte =
39
+ _mm512_or_si512(is_third_byte, is_fourth_byte);
40
+ const __m512i v_7f = _mm512_set1_epi8(char(0x7f));
41
+ is_third_or_fourth_byte = _mm512_adds_epu8(v_7f, is_third_or_fourth_byte);
42
+ // We want to compute (is_third_or_fourth_byte AND v80) XOR sc.
43
+ const __m512i v_80 = _mm512_set1_epi8(char(0x80));
44
+ return _mm512_ternarylogic_epi32(is_third_or_fourth_byte, v_80, sc,
45
+ 0b1101010);
46
+ //__m512i is_third_or_fourth_byte_mask =
47
+ //_mm512_and_si512(is_third_or_fourth_byte, v_80); return
48
+ // _mm512_xor_si512(is_third_or_fourth_byte_mask, sc);
49
+ }
50
+ //
51
+ // Return nonzero if there are incomplete multibyte characters at the end of the
52
+ // block: e.g. if there is a 4-byte character, but it is 3 bytes from the end.
53
+ //
54
+ simdutf_really_inline __m512i is_incomplete(const __m512i input) {
55
+ // If the previous input's last 3 bytes match this, they're too short (they
56
+ // ended at EOF):
57
+ // ... 1111____ 111_____ 11______
58
+ __m512i max_value = _mm512_setr_epi64(0xffffffffffffffff, 0xffffffffffffffff,
59
+ 0xffffffffffffffff, 0xffffffffffffffff,
60
+ 0xffffffffffffffff, 0xffffffffffffffff,
61
+ 0xffffffffffffffff, 0xbfdfefffffffffff);
62
+ return _mm512_subs_epu8(input, max_value);
63
+ }
64
+
65
+ struct avx512_utf8_checker {
66
+ // If this is nonzero, there has been a UTF-8 error.
67
+ __m512i error{};
68
+
69
+ // The last input we received
70
+ __m512i prev_input_block{};
71
+ // Whether the last input we received was incomplete (used for ASCII fast
72
+ // path)
73
+ __m512i prev_incomplete{};
74
+
75
+ //
76
+ // Check whether the current bytes are valid UTF-8.
77
+ //
78
+ simdutf_really_inline void check_utf8_bytes(const __m512i input,
79
+ const __m512i prev_input) {
80
+ // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+
81
+ // lead bytes (2, 3, 4-byte leads become large positive numbers instead of
82
+ // small negative numbers)
83
+ __m512i prev1 = prev<1>(input, prev_input);
84
+ __m512i sc = check_special_cases(input, prev1);
85
+ this->error = _mm512_or_si512(
86
+ check_multibyte_lengths(input, prev_input, sc), this->error);
87
+ }
88
+
89
+ // The only problem that can happen at EOF is that a multibyte character is
90
+ // too short or a byte value too large in the last bytes: check_special_cases
91
+ // only checks for bytes too large in the first of two bytes.
92
+ simdutf_really_inline void check_eof() {
93
+ // If the previous block had incomplete UTF-8 characters at the end, an
94
+ // ASCII block can't possibly finish them.
95
+ this->error = _mm512_or_si512(this->error, this->prev_incomplete);
96
+ }
97
+
98
+ // returns true if ASCII.
99
+ simdutf_really_inline bool check_next_input(const __m512i input) {
100
+ const __m512i v_80 = _mm512_set1_epi8(char(0x80));
101
+ const __mmask64 ascii = _mm512_test_epi8_mask(input, v_80);
102
+ if (ascii == 0) {
103
+ this->error = _mm512_or_si512(this->error, this->prev_incomplete);
104
+ return true;
105
+ } else {
106
+ this->check_utf8_bytes(input, this->prev_input_block);
107
+ this->prev_incomplete = is_incomplete(input);
108
+ this->prev_input_block = input;
109
+ return false;
110
+ }
111
+ }
112
+ // do not forget to call check_eof!
113
+ simdutf_really_inline bool errors() const {
114
+ return _mm512_test_epi8_mask(this->error, this->error) != 0;
115
+ }
116
+ }; // struct avx512_utf8_checker