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,480 @@
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
+ * AMD XOP specific: http://0x80.pl/notesen/2016-01-12-sse-base64-encoding.html
29
+ * Altivec has capabilities of AMD XOP (or vice versa): shuffle using 2 vectors
30
+ * and variable shifts, thus this implementation shares some code solution
31
+ * (modulo intrinsic function names).
32
+ */
33
+
34
+ constexpr bool with_base64_std = false;
35
+ constexpr bool with_base64_url = true;
36
+ constexpr bool with_ignore_errors = true;
37
+ constexpr bool with_ignore_garbage = true;
38
+ constexpr bool with_strict_checking = false;
39
+
40
+ // --- encoding -----------------------------------------------
41
+
42
+ /*
43
+ Procedure translates vector of bytes having 6-bit values
44
+ into ASCII counterparts.
45
+ */
46
+ template <bool base64_url>
47
+ vector_u8 encoding_translate_6bit_values(const vector_u8 input) {
48
+ // credit: Wojciech Muła
49
+ // reduce 0..51 -> 0
50
+ // 52..61 -> 1 .. 10
51
+ // 62 -> 11
52
+ // 63 -> 12
53
+ auto result = input.saturating_sub(vector_u8::splat(51));
54
+
55
+ // distinguish between ranges 0..25 and 26..51:
56
+ // 0 .. 25 -> remains 13
57
+ // 26 .. 51 -> becomes 0
58
+ const auto lt = input < vector_u8::splat(26);
59
+ result = select(as_vector_u8(lt), vector_u8::splat(13), result);
60
+
61
+ const auto shift_LUT =
62
+ base64_url ? vector_u8('a' - 26, '0' - 52, '0' - 52, '0' - 52, '0' - 52,
63
+ '0' - 52, '0' - 52, '0' - 52, '0' - 52, '0' - 52,
64
+ '0' - 52, '-' - 62, '_' - 63, 'A', 0, 0)
65
+ : vector_u8('a' - 26, '0' - 52, '0' - 52, '0' - 52, '0' - 52,
66
+ '0' - 52, '0' - 52, '0' - 52, '0' - 52, '0' - 52,
67
+ '0' - 52, '+' - 62, '/' - 63, 'A', 0, 0);
68
+ // read shift
69
+ result = result.lookup_16(shift_LUT);
70
+
71
+ return input + result;
72
+ }
73
+
74
+ /*
75
+ Procedure expands 12 bytes (4*3 bytes) into 16 bytes,
76
+ each byte stores 6 bits of data
77
+ */
78
+ template <typename = void>
79
+ simdutf_really_inline vector_u8 encoding_expand_6bit_fields(vector_u8 input) {
80
+ #if SIMDUTF_IS_BIG_ENDIAN
81
+ #define indices4(dx) (dx + 0), (dx + 1), (dx + 1), (dx + 2)
82
+ const auto expand_3_to_4 = vector_u8(indices4(0 * 3), indices4(1 * 3),
83
+ indices4(2 * 3), indices4(3 * 3));
84
+ #undef indices4
85
+
86
+ // input = [........|ccdddddd|bbbbcccc|aaaaaabb] as uint8_t
87
+ // 3 2 1 0
88
+ //
89
+ // in' = [aaaaaabb|bbbbcccc|bbbbcccc|ccdddddd] as uint32_t
90
+ // 0 1 1 2
91
+ const auto in = as_vector_u32(expand_3_to_4.lookup_16(input));
92
+
93
+ // t0 = [00000000|00000000|00000000|00dddddd]
94
+ const auto t0 = in & uint32_t(0x0000003f);
95
+
96
+ // t1 = [00000000|00000000|00cccccc|00dddddd]
97
+ const auto t1 = select(uint32_t(0x00003f00), in.shl<2>(), t0);
98
+
99
+ // t2 = [00000000|00bbbbbb|00cccccc|00dddddd]
100
+ const auto t2 = select(uint32_t(0x003f0000), in.shr<4>(), t1);
101
+
102
+ // t3 = [00aaaaaa|00bbbbbb|00cccccc|00dddddd]
103
+ const auto t3 = select(uint32_t(0x3f000000), in.shr<2>(), t2);
104
+
105
+ return as_vector_u8(t3);
106
+ #else
107
+ #define indices4(dx) (dx + 1), (dx + 0), (dx + 2), (dx + 1)
108
+ const auto expand_3_to_4 = vector_u8(indices4(0 * 3), indices4(1 * 3),
109
+ indices4(2 * 3), indices4(3 * 3));
110
+ #undef indices4
111
+
112
+ // input = [........|ccdddddd|bbbbcccc|aaaaaabb] as uint8_t
113
+ // 3 2 1 0
114
+ //
115
+ // in' = [bbbbcccc|ccdddddd|aaaaaabb|bbbbcccc] as uint32_t
116
+ // 1 2 0 1
117
+ const auto in = as_vector_u32(expand_3_to_4.lookup_16(input));
118
+
119
+ // t0 = [00dddddd|00000000|00000000|00000000]
120
+ const auto t0 = in.shl<8>() & uint32_t(0x3f000000);
121
+
122
+ // t1 = [00dddddd|00cccccc|00000000|00000000]
123
+ const auto t1 = select(uint32_t(0x003f0000), in.shr<6>(), t0);
124
+
125
+ // t2 = [00dddddd|00cccccc|00bbbbbb|00000000]
126
+ const auto t2 = select(uint32_t(0x00003f00), in.shl<4>(), t1);
127
+
128
+ // t3 = [00dddddd|00cccccc|00bbbbbb|00aaaaaa]
129
+ const auto t3 = select(uint32_t(0x0000003f), in.shr<10>(), t2);
130
+
131
+ return as_vector_u8(t3);
132
+ #endif // SIMDUTF_IS_BIG_ENDIAN
133
+ }
134
+
135
+ template <bool isbase64url>
136
+ size_t encode_base64(char *dst, const char *src, size_t srclen,
137
+ base64_options options) {
138
+
139
+ const uint8_t *input = (const uint8_t *)src;
140
+
141
+ uint8_t *out = (uint8_t *)dst;
142
+
143
+ size_t i = 0;
144
+ for (; i + 52 <= srclen; i += 48) {
145
+ const auto in0 = vector_u8::load(input + i + 12 * 0);
146
+ const auto in1 = vector_u8::load(input + i + 12 * 1);
147
+ const auto in2 = vector_u8::load(input + i + 12 * 2);
148
+ const auto in3 = vector_u8::load(input + i + 12 * 3);
149
+
150
+ const auto expanded0 = encoding_expand_6bit_fields(in0);
151
+ const auto expanded1 = encoding_expand_6bit_fields(in1);
152
+ const auto expanded2 = encoding_expand_6bit_fields(in2);
153
+ const auto expanded3 = encoding_expand_6bit_fields(in3);
154
+
155
+ const auto base64_0 =
156
+ encoding_translate_6bit_values<isbase64url>(expanded0);
157
+ const auto base64_1 =
158
+ encoding_translate_6bit_values<isbase64url>(expanded1);
159
+ const auto base64_2 =
160
+ encoding_translate_6bit_values<isbase64url>(expanded2);
161
+ const auto base64_3 =
162
+ encoding_translate_6bit_values<isbase64url>(expanded3);
163
+
164
+ base64_0.store(out);
165
+ out += 16;
166
+
167
+ base64_1.store(out);
168
+ out += 16;
169
+
170
+ base64_2.store(out);
171
+ out += 16;
172
+
173
+ base64_3.store(out);
174
+ out += 16;
175
+ }
176
+ for (; i + 16 <= srclen; i += 12) {
177
+ const auto in = vector_u8::load(input + i);
178
+ const auto expanded = encoding_expand_6bit_fields(in);
179
+ const auto base64 = encoding_translate_6bit_values<isbase64url>(expanded);
180
+
181
+ base64.store(out);
182
+ out += 16;
183
+ }
184
+
185
+ return i / 3 * 4 + scalar::base64::tail_encode_base64((char *)out, src + i,
186
+ srclen - i, options);
187
+ }
188
+
189
+ // --- decoding -----------------------------------------------
190
+
191
+ static simdutf_really_inline void compress(const vector_u8 data, uint16_t mask,
192
+ char *output) {
193
+ if (mask == 0) {
194
+ data.store(output);
195
+ return;
196
+ }
197
+
198
+ // this particular implementation was inspired by work done by @animetosho
199
+ // we do it in two steps, first 8 bytes and then second 8 bytes
200
+ uint8_t mask1 = uint8_t(mask); // least significant 8 bits
201
+ uint8_t mask2 = uint8_t(mask >> 8); // most significant 8 bits
202
+ // next line just loads the 64-bit values thintable_epi8[mask1] and
203
+ // thintable_epi8[mask2] into a 128-bit register, using only
204
+ // two instructions on most compilers.
205
+
206
+ #if SIMDUTF_IS_BIG_ENDIAN
207
+ vec_u64_t tmp = {
208
+ tables::base64::thintable_epi8[mask2],
209
+ tables::base64::thintable_epi8[mask1],
210
+ };
211
+
212
+ auto shufmask = vector_u8(vec_reve(vec_u8_t(tmp)));
213
+
214
+ // we increment by 0x08 the second half of the mask
215
+ shufmask =
216
+ shufmask + vector_u8(0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8);
217
+ #else
218
+ vec_u64_t tmp = {
219
+ tables::base64::thintable_epi8[mask1],
220
+ tables::base64::thintable_epi8[mask2],
221
+ };
222
+
223
+ auto shufmask = vector_u8(vec_u8_t(tmp));
224
+
225
+ // we increment by 0x08 the second half of the mask
226
+ shufmask =
227
+ shufmask + vector_u8(0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8);
228
+ #endif // SIMDUTF_IS_BIG_ENDIAN
229
+
230
+ // this is the version "nearly pruned"
231
+ const auto pruned = shufmask.lookup_16(data);
232
+ // we still need to put the two halves together.
233
+ // we compute the popcount of the first half:
234
+ const int pop1 = tables::base64::BitsSetTable256mul2[mask1];
235
+ // then load the corresponding mask, what it does is to write
236
+ // only the first pop1 bytes from the first 8 bytes, and then
237
+ // it fills in with the bytes from the second 8 bytes + some filling
238
+ // at the end.
239
+ const auto compactmask =
240
+ vector_u8::load(tables::base64::pshufb_combine_table + pop1 * 8);
241
+
242
+ const auto answer = compactmask.lookup_16(pruned);
243
+
244
+ answer.store(output);
245
+ }
246
+
247
+ static simdutf_really_inline vector_u8 decoding_pack(vector_u8 input) {
248
+ #if SIMDUTF_IS_BIG_ENDIAN
249
+ // in = [00aaaaaa|00bbbbbb|00cccccc|00dddddd]
250
+ // want = [00000000|aaaaaabb|bbbbcccc|ccdddddd]
251
+
252
+ auto in = as_vector_u16(input);
253
+ // t0 = [00??aaaa|aabbbbbb|00??cccc|ccdddddd]
254
+ const auto t0 = in.shr<2>();
255
+ const auto t1 = select(uint16_t(0x0fc0), t0, in);
256
+
257
+ // t0 = [00??????|aaaaaabb|bbbbcccc|ccdddddd]
258
+ const auto t2 = as_vector_u32(t1);
259
+ const auto t3 = t2.shr<4>();
260
+ const auto t4 = select(uint32_t(0x00fff000), t3, t2);
261
+
262
+ const auto tmp = as_vector_u8(t4);
263
+
264
+ const auto shuffle =
265
+ vector_u8(1, 2, 3, 5, 6, 7, 9, 10, 11, 13, 14, 15, 0, 0, 0, 0);
266
+
267
+ const auto t = shuffle.lookup_16(tmp);
268
+
269
+ return t;
270
+ #else
271
+ // in = [00dddddd|00cccccc|00bbbbbb|00aaaaaa]
272
+ // want = [00000000|aaaaaabb|bbbbcccc|ccdddddd]
273
+
274
+ auto u = as_vector_u32(input).swap_bytes();
275
+
276
+ auto in = vector_u16((vec_u16_t)u.value);
277
+ // t0 = [00??aaaa|aabbbbbb|00??cccc|ccdddddd]
278
+ const auto t0 = in.shr<2>();
279
+ const auto t1 = select(uint16_t(0x0fc0), t0, in);
280
+
281
+ // t0 = [00??????|aaaaaabb|bbbbcccc|ccdddddd]
282
+ const auto t2 = as_vector_u32(t1);
283
+ const auto t3 = t2.shr<4>();
284
+ const auto t4 = select(uint32_t(0x00fff000), t3, t2);
285
+
286
+ const auto tmp = as_vector_u8(t4);
287
+
288
+ const auto shuffle =
289
+ vector_u8(2, 1, 0, 6, 5, 4, 10, 9, 8, 14, 13, 12, 0, 0, 0, 0);
290
+
291
+ const auto t = shuffle.lookup_16(tmp);
292
+
293
+ return t;
294
+ #endif // SIMDUTF_IS_BIG_ENDIAN
295
+ }
296
+ static simdutf_really_inline void base64_decode(char *out, vector_u8 input) {
297
+ const auto expanded = decoding_pack(input);
298
+ expanded.store(out);
299
+ }
300
+
301
+ static simdutf_really_inline void base64_decode_block(char *out,
302
+ const char *src) {
303
+ base64_decode(out + 12 * 0, vector_u8::load(src + 0 * 16));
304
+ base64_decode(out + 12 * 1, vector_u8::load(src + 1 * 16));
305
+ base64_decode(out + 12 * 2, vector_u8::load(src + 2 * 16));
306
+ base64_decode(out + 12 * 3, vector_u8::load(src + 3 * 16));
307
+ }
308
+
309
+ static simdutf_really_inline void base64_decode_block_safe(char *out,
310
+ const char *src) {
311
+ base64_decode(out + 12 * 0, vector_u8::load(src + 0 * 16));
312
+ base64_decode(out + 12 * 1, vector_u8::load(src + 1 * 16));
313
+ base64_decode(out + 12 * 2, vector_u8::load(src + 2 * 16));
314
+
315
+ char buffer[16];
316
+ base64_decode(buffer, vector_u8::load(src + 3 * 16));
317
+ std::memcpy(out + 36, buffer, 12);
318
+ }
319
+
320
+ // ---base64 decoding::block64 class --------------------------
321
+
322
+ class block64 {
323
+ simd8x64<uint8_t> b;
324
+
325
+ public:
326
+ simdutf_really_inline block64(const char *src) : b(load_block(src)) {}
327
+ simdutf_really_inline block64(const char16_t *src) : b(load_block(src)) {}
328
+
329
+ private:
330
+ // The caller of this function is responsible to ensure that there are 64
331
+ // bytes available from reading at src. The data is read into a block64
332
+ // structure.
333
+ static simdutf_really_inline simd8x64<uint8_t> load_block(const char *src) {
334
+ const auto v0 = vector_u8::load(src + 16 * 0);
335
+ const auto v1 = vector_u8::load(src + 16 * 1);
336
+ const auto v2 = vector_u8::load(src + 16 * 2);
337
+ const auto v3 = vector_u8::load(src + 16 * 3);
338
+
339
+ return simd8x64<uint8_t>(v0, v1, v2, v3);
340
+ }
341
+
342
+ // The caller of this function is responsible to ensure that there are 128
343
+ // bytes available from reading at src. The data is read into a block64
344
+ // structure.
345
+ static simdutf_really_inline simd8x64<uint8_t>
346
+ load_block(const char16_t *src) {
347
+ const auto m1 = vector_u16::load(src + 8 * 0);
348
+ const auto m2 = vector_u16::load(src + 8 * 1);
349
+ const auto m3 = vector_u16::load(src + 8 * 2);
350
+ const auto m4 = vector_u16::load(src + 8 * 3);
351
+ const auto m5 = vector_u16::load(src + 8 * 4);
352
+ const auto m6 = vector_u16::load(src + 8 * 5);
353
+ const auto m7 = vector_u16::load(src + 8 * 6);
354
+ const auto m8 = vector_u16::load(src + 8 * 7);
355
+
356
+ return simd8x64<uint8_t>(vector_u16::pack(m1, m2), vector_u16::pack(m3, m4),
357
+ vector_u16::pack(m5, m6),
358
+ vector_u16::pack(m7, m8));
359
+ }
360
+
361
+ public:
362
+ template <bool base64_url, bool ignore_garbage, bool default_or_url>
363
+ static inline uint16_t to_base64_mask(vector_u8 &src, uint16_t &error) {
364
+ const auto ascii_space_tbl =
365
+ vector_u8(0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xa, 0x0,
366
+ 0xc, 0xd, 0x0, 0x0);
367
+
368
+ // credit: aqrit
369
+ const auto delta_asso =
370
+ default_or_url
371
+ ? vector_u8(0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
372
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x16)
373
+ : vector_u8(0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
374
+ 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x0F);
375
+
376
+ const auto delta_values =
377
+ default_or_url
378
+ ? vector_u8(0xBF, 0xE0, 0xB9, 0x13, 0x04, 0xBF, 0xBF, 0xB9, 0xB9,
379
+ 0x00, 0xFF, 0x11, 0xFF, 0xBF, 0x10, 0xB9)
380
+ : (base64_url
381
+ ? vector_u8(0x0, 0x0, 0x0, 0x13, 0x4, 0xBF, 0xBF, 0xB9, 0xB9,
382
+ 0x0, 0x11, 0xC3, 0xBF, 0xE0, 0xB9, 0xB9)
383
+ : vector_u8(0x00, 0x00, 0x00, 0x13, 0x04, 0xBF, 0xBF, 0xB9,
384
+ 0xB9, 0x00, 0x10, 0xC3, 0xBF, 0xBF, 0xB9, 0xB9));
385
+
386
+ const auto check_asso =
387
+ default_or_url
388
+ ? vector_u8(0x0D, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
389
+ 0x01, 0x03, 0x07, 0x0B, 0x0E, 0x0B, 0x06)
390
+ : (base64_url
391
+ ? vector_u8(0xD, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,
392
+ 0x3, 0x7, 0xB, 0xE, 0xB, 0x6)
393
+ : vector_u8(0x0D, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
394
+ 0x01, 0x01, 0x03, 0x07, 0x0B, 0x0B, 0x0B, 0x0F));
395
+
396
+ const auto check_values =
397
+ default_or_url
398
+ ? vector_u8(0x80, 0x80, 0x80, 0x80, 0xCF, 0xBF, 0xD5, 0xA6, 0xB5,
399
+ 0xA1, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80)
400
+ : (base64_url
401
+ ? vector_u8(0x80, 0x80, 0x80, 0x80, 0xCF, 0xBF, 0xB6, 0xA6,
402
+ 0xB5, 0xA1, 0x0, 0x80, 0x0, 0x80, 0x0, 0x80)
403
+ : vector_u8(0x80, 0x80, 0x80, 0x80, 0xCF, 0xBF, 0xD5, 0xA6,
404
+ 0xB5, 0x86, 0xD1, 0x80, 0xB1, 0x80, 0x91, 0x80));
405
+
406
+ const auto shifted = src.shr<3>();
407
+
408
+ const auto delta_hash = avg(src.lookup_16(delta_asso), shifted);
409
+ const auto check_hash = avg(src.lookup_16(check_asso), shifted);
410
+
411
+ const auto out = as_vector_i8(delta_hash.lookup_16(delta_values))
412
+ .saturating_add(as_vector_i8(src));
413
+ const auto chk = as_vector_i8(check_hash.lookup_16(check_values))
414
+ .saturating_add(as_vector_i8(src));
415
+
416
+ const uint16_t mask = chk.to_bitmask();
417
+ if (!ignore_garbage && mask) {
418
+ const auto ascii = src.lookup_16(ascii_space_tbl);
419
+ const auto ascii_space = (ascii == src);
420
+ error = (mask ^ ascii_space.to_bitmask());
421
+ }
422
+ src = out;
423
+
424
+ return mask;
425
+ }
426
+
427
+ template <bool base64_url, bool ignore_garbage, bool default_or_url>
428
+ simdutf_really_inline uint64_t to_base64_mask(uint64_t *error) {
429
+ uint16_t err0 = 0;
430
+ uint16_t err1 = 0;
431
+ uint16_t err2 = 0;
432
+ uint16_t err3 = 0;
433
+ uint64_t m0 = to_base64_mask<base64_url, ignore_garbage, default_or_url>(
434
+ b.chunks[0], err0);
435
+ uint64_t m1 = to_base64_mask<base64_url, ignore_garbage, default_or_url>(
436
+ b.chunks[1], err1);
437
+ uint64_t m2 = to_base64_mask<base64_url, ignore_garbage, default_or_url>(
438
+ b.chunks[2], err2);
439
+ uint64_t m3 = to_base64_mask<base64_url, ignore_garbage, default_or_url>(
440
+ b.chunks[3], err3);
441
+
442
+ if (!ignore_garbage) {
443
+ *error = (err0) | ((uint64_t)err1 << 16) | ((uint64_t)err2 << 32) |
444
+ ((uint64_t)err3 << 48);
445
+ }
446
+ return m0 | (m1 << 16) | (m2 << 32) | (m3 << 48);
447
+ }
448
+
449
+ simdutf_really_inline void copy_block(char *output) {
450
+ b.store(reinterpret_cast<uint8_t *>(output));
451
+ }
452
+
453
+ simdutf_really_inline uint64_t compress_block(uint64_t mask, char *output) {
454
+ uint64_t nmask = ~mask;
455
+ compress(b.chunks[0], uint16_t(mask), output);
456
+ compress(b.chunks[1], uint16_t(mask >> 16),
457
+ output + count_ones(nmask & 0xFFFF));
458
+ compress(b.chunks[2], uint16_t(mask >> 32),
459
+ output + count_ones(nmask & 0xFFFFFFFF));
460
+ compress(b.chunks[3], uint16_t(mask >> 48),
461
+ output + count_ones(nmask & 0xFFFFFFFFFFFFULL));
462
+ return count_ones(nmask);
463
+ }
464
+
465
+ simdutf_really_inline void base64_decode_block(char *out) {
466
+ base64_decode(out + 12 * 0, b.chunks[0]);
467
+ base64_decode(out + 12 * 1, b.chunks[1]);
468
+ base64_decode(out + 12 * 2, b.chunks[2]);
469
+ base64_decode(out + 12 * 3, b.chunks[3]);
470
+ }
471
+
472
+ simdutf_really_inline void base64_decode_block_safe(char *out) {
473
+ base64_decode(out + 12 * 0, b.chunks[0]);
474
+ base64_decode(out + 12 * 1, b.chunks[1]);
475
+ base64_decode(out + 12 * 2, b.chunks[2]);
476
+ char buffer[16];
477
+ base64_decode(buffer, b.chunks[3]);
478
+ std::memcpy(out + 12 * 3, buffer, 12);
479
+ }
480
+ };