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