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
package/src/cipher.ts CHANGED
@@ -65,6 +65,100 @@ export function getCipherInfo(
65
65
  return CipherUtils.getCipherInfo(name, options?.keyLength, options?.ivLength);
66
66
  }
67
67
 
68
+ // libsodium ciphers aren't visible to OpenSSL's EVP_CIPHER_fetch, so
69
+ // getCipherInfo() returns undefined for them. Hard-code the (key, iv)
70
+ // byte-lengths the C++ factory will accept.
71
+ const LIBSODIUM_CIPHER_PARAMS: Readonly<
72
+ Record<string, { keyLength: number; ivLength: number }>
73
+ > = {
74
+ xsalsa20: { keyLength: 32, ivLength: 24 },
75
+ 'xsalsa20-poly1305': { keyLength: 32, ivLength: 24 },
76
+ 'xchacha20-poly1305': { keyLength: 32, ivLength: 24 },
77
+ };
78
+
79
+ function validateCipherParams(
80
+ cipherType: string,
81
+ keyByteLength: number,
82
+ ivByteLength: number,
83
+ ): void {
84
+ if (typeof cipherType !== 'string' || cipherType.length === 0) {
85
+ throw new TypeError('cipher algorithm must be a non-empty string');
86
+ }
87
+ // ArrayBuffer.byteLength is always a non-negative integer, so the only
88
+ // out-of-range value we need to guard is 0 — empty key buffers must not
89
+ // reach OpenSSL's EVP_CipherInit_ex.
90
+ if (keyByteLength === 0) {
91
+ throw new RangeError(`Invalid key length 0 for cipher ${cipherType}`);
92
+ }
93
+
94
+ const lower = cipherType.toLowerCase();
95
+ const sodium = LIBSODIUM_CIPHER_PARAMS[lower];
96
+ if (sodium) {
97
+ // libsodium parlance: "nonce" rather than "iv". Phrase the expected
98
+ // size as a natural-language clause so callers asserting on either
99
+ // `key must be N bytes` or `Invalid key length N` both match.
100
+ if (keyByteLength !== sodium.keyLength) {
101
+ throw new RangeError(
102
+ `Invalid key length ${keyByteLength} for cipher ${cipherType} ` +
103
+ `(key must be ${sodium.keyLength} bytes)`,
104
+ );
105
+ }
106
+ if (ivByteLength !== sodium.ivLength) {
107
+ throw new RangeError(
108
+ `Invalid nonce length ${ivByteLength} for cipher ${cipherType} ` +
109
+ `(nonce must be ${sodium.ivLength} bytes)`,
110
+ );
111
+ }
112
+ return;
113
+ }
114
+
115
+ // OpenSSL path. Look up the cipher's defaults once. Most callers pass
116
+ // exactly the cipher's default key/iv lengths (e.g. AES-128-CBC always
117
+ // wants 16/16) — short-circuit those to a single native round-trip.
118
+ // Variable-length ciphers (GCM, CCM, OCB, ChaCha20-Poly1305) fall through
119
+ // to per-parameter validation calls so the error message can name which
120
+ // of {key, iv} is wrong.
121
+ const info = CipherUtils.getCipherInfo(cipherType);
122
+ if (info === undefined) {
123
+ throw new TypeError(`Unsupported or unknown cipher type: ${cipherType}`);
124
+ }
125
+
126
+ const expectedIv = info.ivLength ?? 0;
127
+ if (expectedIv === 0 && ivByteLength > 0) {
128
+ throw new RangeError(
129
+ `Cipher ${cipherType} does not use an iv (got ${ivByteLength} bytes)`,
130
+ );
131
+ }
132
+ if (expectedIv > 0 && ivByteLength === 0) {
133
+ throw new RangeError(
134
+ `Cipher ${cipherType} requires an iv but none was provided`,
135
+ );
136
+ }
137
+
138
+ // Fast path: lengths match the cipher's defaults exactly.
139
+ if (info.keyLength === keyByteLength && expectedIv === ivByteLength) {
140
+ return;
141
+ }
142
+
143
+ // Variable-length: verify against native one parameter at a time.
144
+ if (
145
+ CipherUtils.getCipherInfo(cipherType, keyByteLength, undefined) ===
146
+ undefined
147
+ ) {
148
+ throw new RangeError(
149
+ `Invalid key length ${keyByteLength} for cipher ${cipherType}`,
150
+ );
151
+ }
152
+ if (
153
+ expectedIv > 0 &&
154
+ CipherUtils.getCipherInfo(cipherType, undefined, ivByteLength) === undefined
155
+ ) {
156
+ throw new RangeError(
157
+ `Invalid iv length ${ivByteLength} for cipher ${cipherType}`,
158
+ );
159
+ }
160
+ }
161
+
68
162
  interface CipherArgs {
69
163
  isCipher: boolean;
70
164
  cipherType: string;
@@ -107,18 +201,24 @@ class CipherCommon extends Stream.Transform {
107
201
  }
108
202
  super(streamOptions); // Pass filtered options
109
203
 
110
- const authTagLen: number =
111
- getUIntOption(options ?? {}, 'authTagLength') !== -1
112
- ? getUIntOption(options ?? {}, 'authTagLength')
113
- : 16; // defaults to 16 bytes
204
+ // defaults to 16 bytes for AEAD modes; non-AEAD callers ignore it.
205
+ const authTagLen =
206
+ getUIntOption(
207
+ options as Readonly<Record<string, unknown>> | undefined,
208
+ 'authTagLength',
209
+ ) ?? 16;
210
+
211
+ const cipherKeyAB = binaryLikeToArrayBuffer(cipherKey);
212
+ const ivAB = binaryLikeToArrayBuffer(iv);
213
+ validateCipherParams(cipherType, cipherKeyAB.byteLength, ivAB.byteLength);
114
214
 
115
215
  const factory =
116
216
  NitroModules.createHybridObject<CipherFactory>('CipherFactory');
117
217
  this.native = factory.createCipher({
118
218
  isCipher,
119
219
  cipherType,
120
- cipherKey: binaryLikeToArrayBuffer(cipherKey),
121
- iv: binaryLikeToArrayBuffer(iv),
220
+ cipherKey: cipherKeyAB,
221
+ iv: ivAB,
122
222
  authTagLen,
123
223
  });
124
224
  }
@@ -179,18 +279,31 @@ class CipherCommon extends Stream.Transform {
179
279
  return Buffer.from(ret);
180
280
  }
181
281
 
282
+ // Stream interface — surface synchronous errors (bad encoding,
283
+ // OpenSSL EVP failures, AEAD tag mismatch in `final()`, etc.) via
284
+ // the callback so they emit as stream 'error' events instead of
285
+ // throwing out of the Transform plumbing and crashing the host
286
+ // pipeline.
182
287
  _transform(
183
288
  chunk: BinaryLike,
184
289
  encoding: BufferEncoding,
185
- callback: () => void,
290
+ callback: (err?: Error | null) => void,
186
291
  ) {
187
- this.push(this.update(chunk, normalizeEncoding(encoding)));
188
- callback();
292
+ try {
293
+ this.push(this.update(chunk, normalizeEncoding(encoding)));
294
+ callback();
295
+ } catch (err) {
296
+ callback(err as Error);
297
+ }
189
298
  }
190
299
 
191
- _flush(callback: () => void) {
192
- this.push(this.final());
193
- callback();
300
+ _flush(callback: (err?: Error | null) => void) {
301
+ try {
302
+ this.push(this.final());
303
+ callback();
304
+ } catch (err) {
305
+ callback(err as Error);
306
+ }
194
307
  }
195
308
 
196
309
  public setAutoPadding(autoPadding?: boolean): this {
@@ -211,7 +324,14 @@ class CipherCommon extends Stream.Transform {
211
324
  if (!this.native || typeof this.native.setAAD !== 'function') {
212
325
  throw new Error('Cipher native object or setAAD method not initialized.');
213
326
  }
214
- const res = this.native.setAAD(buffer.buffer, options?.plaintextLength);
327
+ // Use binaryLikeToArrayBuffer (not `buffer.buffer`) so that sliced /
328
+ // offset views send only the AAD bytes the caller intended. Passing the
329
+ // raw backing ArrayBuffer authenticates the wrong data and silently
330
+ // breaks the AEAD integrity guarantee.
331
+ const res = this.native.setAAD(
332
+ binaryLikeToArrayBuffer(buffer),
333
+ options?.plaintextLength,
334
+ );
215
335
  if (!res) {
216
336
  throw new Error('setAAD failed (native call returned false)');
217
337
  }
@@ -360,13 +480,17 @@ export function xsalsa20(
360
480
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
361
481
  counter?: number,
362
482
  ): Uint8Array {
483
+ const cipherKeyAB = binaryLikeToArrayBuffer(key);
484
+ const ivAB = binaryLikeToArrayBuffer(nonce);
485
+ validateCipherParams('xsalsa20', cipherKeyAB.byteLength, ivAB.byteLength);
486
+
363
487
  const factory =
364
488
  NitroModules.createHybridObject<CipherFactory>('CipherFactory');
365
489
  const native = factory.createCipher({
366
490
  isCipher: true,
367
491
  cipherType: 'xsalsa20',
368
- cipherKey: binaryLikeToArrayBuffer(key),
369
- iv: binaryLikeToArrayBuffer(nonce),
492
+ cipherKey: cipherKeyAB,
493
+ iv: ivAB,
370
494
  });
371
495
  const result = native.update(binaryLikeToArrayBuffer(data));
372
496
  return new Uint8Array(result);
package/src/dsa.ts CHANGED
@@ -25,6 +25,12 @@ export class Dsa {
25
25
  }
26
26
  }
27
27
 
28
+ // FIPS 186-4 §4.2: only L = 1024, 2048, 3072 are sanctioned. NIST has
29
+ // deprecated DSA-1024 for new applications, but we retain it for
30
+ // interop with legacy systems and match Node's permissive default. We
31
+ // reject anything below 1024 outright.
32
+ const DSA_MIN_MODULUS_LENGTH = 1024;
33
+
28
34
  function dsa_prepareKeyGenParams(
29
35
  options: GenerateKeyPairOptions | undefined,
30
36
  ): Dsa {
@@ -34,8 +40,11 @@ function dsa_prepareKeyGenParams(
34
40
 
35
41
  const { modulusLength, divisorLength } = options;
36
42
 
37
- if (!modulusLength || modulusLength <= 0) {
38
- throw new Error('Invalid or missing modulusLength for DSA key generation');
43
+ if (!modulusLength || modulusLength < DSA_MIN_MODULUS_LENGTH) {
44
+ throw new RangeError(
45
+ `DSA modulusLength must be at least ${DSA_MIN_MODULUS_LENGTH} bits ` +
46
+ `(got ${modulusLength ?? 0})`,
47
+ );
39
48
  }
40
49
 
41
50
  return new Dsa(modulusLength, divisorLength);
package/src/hash.ts CHANGED
@@ -183,18 +183,28 @@ class Hash extends Stream.Transform {
183
183
  return this.native.getOpenSSLVersion();
184
184
  }
185
185
 
186
- // stream interface
186
+ // Stream interface — surface synchronous errors via the callback so
187
+ // they emit as stream 'error' events instead of throwing out of the
188
+ // Transform plumbing (which would crash the host pipeline).
187
189
  _transform(
188
190
  chunk: BinaryLike,
189
191
  encoding: BufferEncoding,
190
- callback: () => void,
192
+ callback: (err?: Error | null) => void,
191
193
  ) {
192
- this.update(chunk, encoding as Encoding);
193
- callback();
194
+ try {
195
+ this.update(chunk, encoding as Encoding);
196
+ callback();
197
+ } catch (err) {
198
+ callback(err as Error);
199
+ }
194
200
  }
195
- _flush(callback: () => void) {
196
- this.push(this.digest());
197
- callback();
201
+ _flush(callback: (err?: Error | null) => void) {
202
+ try {
203
+ this.push(this.digest());
204
+ callback();
205
+ } catch (err) {
206
+ callback(err as Error);
207
+ }
198
208
  }
199
209
  }
200
210
 
package/src/hkdf.ts CHANGED
@@ -45,6 +45,46 @@ function sanitizeInput(input: BinaryLike, name: string): ArrayBuffer {
45
45
  }
46
46
  }
47
47
 
48
+ // Output byte-length of each fixed-length digest. HKDF requires a fixed-
49
+ // output hash (it builds on HMAC), so XOFs like SHAKE128/256 are not
50
+ // included even though `normalizeHashName` will accept them — passing
51
+ // SHAKE here is a caller bug we surface as `Unsupported HKDF digest`
52
+ // instead of letting the native side return an opaque error.
53
+ const HKDF_HASH_BYTES: Readonly<Record<string, number>> = {
54
+ sha1: 20,
55
+ sha224: 28,
56
+ sha256: 32,
57
+ sha384: 48,
58
+ sha512: 64,
59
+ 'sha3-256': 32,
60
+ 'sha3-384': 48,
61
+ 'sha3-512': 64,
62
+ ripemd160: 20,
63
+ };
64
+
65
+ function validateHkdfKeylen(digest: string, keylen: number): void {
66
+ if (
67
+ typeof keylen !== 'number' ||
68
+ !Number.isFinite(keylen) ||
69
+ !Number.isInteger(keylen) ||
70
+ keylen < 0 ||
71
+ keylen > 0x7fff_ffff
72
+ ) {
73
+ throw new TypeError('Bad key length');
74
+ }
75
+ const hashLen = HKDF_HASH_BYTES[digest.toLowerCase()];
76
+ if (hashLen === undefined) {
77
+ throw new TypeError(`Unsupported HKDF digest: ${digest}`);
78
+ }
79
+ // RFC 5869 §2.3: L ≤ 255 * HashLen.
80
+ if (keylen > 255 * hashLen) {
81
+ throw new RangeError(
82
+ `HKDF keylen ${keylen} exceeds RFC 5869 ceiling ` +
83
+ `255 * HashLen (${255 * hashLen}) for ${digest}`,
84
+ );
85
+ }
86
+ }
87
+
48
88
  export function hkdf(
49
89
  digest: string,
50
90
  key: KeyMaterial,
@@ -61,9 +101,7 @@ export function hkdf(
61
101
  const sanitizedSalt = sanitizeInput(salt, 'Salt');
62
102
  const sanitizedInfo = sanitizeInput(info, 'Info');
63
103
 
64
- if (keylen < 0) {
65
- throw new TypeError('Bad key length');
66
- }
104
+ validateHkdfKeylen(normalizedDigest, keylen);
67
105
 
68
106
  const nativeMod = getNative();
69
107
  nativeMod
@@ -99,9 +137,7 @@ export function hkdfSync(
99
137
  const sanitizedSalt = sanitizeInput(salt, 'Salt');
100
138
  const sanitizedInfo = sanitizeInput(info, 'Info');
101
139
 
102
- if (keylen < 0) {
103
- throw new TypeError('Bad key length');
104
- }
140
+ validateHkdfKeylen(normalizedDigest, keylen);
105
141
 
106
142
  const nativeMod = getNative();
107
143
  const result = nativeMod.deriveKeySync(
@@ -134,6 +170,8 @@ export function hkdfDeriveBits(
134
170
  const hashName = typeof hash === 'string' ? hash : hash.name;
135
171
  const normalizedDigest = normalizeHashName(hashName);
136
172
 
173
+ validateHkdfKeylen(normalizedDigest, keylen);
174
+
137
175
  const nativeMod = getNative();
138
176
  const result = nativeMod.deriveKeySync(
139
177
  normalizedDigest,
package/src/hmac.ts CHANGED
@@ -85,18 +85,28 @@ class Hmac extends Stream.Transform {
85
85
  return Buffer.from(nativeDigest);
86
86
  }
87
87
 
88
- // stream interface
88
+ // Stream interface — surface synchronous errors via the callback so
89
+ // they emit as stream 'error' events instead of throwing out of the
90
+ // Transform plumbing.
89
91
  _transform(
90
92
  chunk: BinaryLike,
91
93
  encoding: BufferEncoding,
92
- callback: () => void,
94
+ callback: (err?: Error | null) => void,
93
95
  ) {
94
- this.update(chunk, encoding as Encoding);
95
- callback();
96
+ try {
97
+ this.update(chunk, encoding as Encoding);
98
+ callback();
99
+ } catch (err) {
100
+ callback(err as Error);
101
+ }
96
102
  }
97
- _flush(callback: () => void) {
98
- this.push(this.digest());
99
- callback();
103
+ _flush(callback: (err?: Error | null) => void) {
104
+ try {
105
+ this.push(this.digest());
106
+ callback();
107
+ } catch (err) {
108
+ callback(err as Error);
109
+ }
100
110
  }
101
111
  }
102
112
 
@@ -144,8 +144,13 @@ export function publicDecrypt(
144
144
  paddingMode,
145
145
  );
146
146
  return Buffer.from(decrypted);
147
- } catch (error) {
148
- throw new Error(`publicDecrypt failed: ${(error as Error).message}`);
147
+ } catch {
148
+ // Bleichenbacher mitigation: surface a single, content-independent error
149
+ // for every decrypt failure so an attacker cannot use error-message
150
+ // differences as a padding oracle. The native side already collapses its
151
+ // OpenSSL error codes to the same opaque message; we drop it here too
152
+ // rather than re-leaking it via string interpolation.
153
+ throw new Error('publicDecrypt failed');
149
154
  }
150
155
  }
151
156
 
@@ -244,7 +249,8 @@ export function privateDecrypt(
244
249
  oaepLabel,
245
250
  );
246
251
  return Buffer.from(decrypted);
247
- } catch (error) {
248
- throw new Error(`privateDecrypt failed: ${(error as Error).message}`);
252
+ } catch {
253
+ // Bleichenbacher mitigation see publicDecrypt above.
254
+ throw new Error('privateDecrypt failed');
249
255
  }
250
256
  }
package/src/random.ts CHANGED
@@ -59,8 +59,17 @@ export function randomFill(buffer: ABV, ...rest: unknown[]): void {
59
59
  }
60
60
 
61
61
  getNative();
62
- random.randomFill(abvToArrayBuffer(buffer), viewOffset + offset, size).then(
62
+ const ab = abvToArrayBuffer(buffer);
63
+ const start = viewOffset + offset;
64
+ random.randomFill(ab, start, size).then(
63
65
  (res: ArrayBuffer) => {
66
+ // The native async path operates on a copy of the underlying buffer to
67
+ // avoid races with JS-owned memory on the worker thread, so the
68
+ // randomized bytes live in `res`, not in the caller's buffer. Copy them
69
+ // back to preserve Node's in-place randomFill semantics.
70
+ if (res !== ab) {
71
+ new Uint8Array(ab, start, size).set(new Uint8Array(res, start, size));
72
+ }
64
73
  callback(null, res);
65
74
  },
66
75
  (e: Error) => {
@@ -224,7 +233,7 @@ export function randomInt(
224
233
  if (x < randLimit) {
225
234
  const n = (x % range) + min;
226
235
  if (isSync) return n;
227
- process.nextTick(callback as RandomIntCallback, undefined, n);
236
+ process.nextTick(callback as RandomIntCallback, null, n);
228
237
  return;
229
238
  }
230
239
  }
package/src/rsa.ts CHANGED
@@ -60,6 +60,13 @@ export class Rsa {
60
60
  }
61
61
  }
62
62
 
63
+ // Modern best practice (NIST SP 800-131A Rev. 2, IETF RFC 8017): RSA keys
64
+ // shorter than 2048 bits are deprecated for both signing and encryption.
65
+ // 1024-bit moduli have been factored in academic settings; 768-bit keys
66
+ // have been factored on commodity hardware. Reject anything below 2048
67
+ // at the JS boundary so callers can't accidentally generate weak keys.
68
+ const RSA_MIN_MODULUS_LENGTH = 2048;
69
+
63
70
  // Node API
64
71
  export async function rsa_generateKeyPair(
65
72
  algorithm: SubtleAlgorithm,
@@ -70,8 +77,12 @@ export async function rsa_generateKeyPair(
70
77
  algorithm as RsaHashedKeyGenParams;
71
78
 
72
79
  // Validate parameters first
73
- if (!modulusLength || modulusLength < 256) {
74
- throw lazyDOMException('Invalid key length', 'OperationError');
80
+ if (!modulusLength || modulusLength < RSA_MIN_MODULUS_LENGTH) {
81
+ throw lazyDOMException(
82
+ `RSA modulusLength must be at least ${RSA_MIN_MODULUS_LENGTH} bits ` +
83
+ `(got ${modulusLength ?? 0})`,
84
+ 'OperationError',
85
+ );
75
86
  }
76
87
 
77
88
  if (!publicExponent || publicExponent.length === 0) {
@@ -198,8 +209,11 @@ function rsa_prepareKeyGenParams(
198
209
  hash?: string;
199
210
  };
200
211
 
201
- if (!modulusLength || modulusLength < 256) {
202
- throw new Error('Invalid modulus length');
212
+ if (!modulusLength || modulusLength < RSA_MIN_MODULUS_LENGTH) {
213
+ throw new RangeError(
214
+ `RSA modulusLength must be at least ${RSA_MIN_MODULUS_LENGTH} bits ` +
215
+ `(got ${modulusLength ?? 0})`,
216
+ );
203
217
  }
204
218
 
205
219
  const pubExp = publicExponent || 65537;
package/src/scrypt.ts CHANGED
@@ -35,12 +35,83 @@ const defaults = {
35
35
  maxmem: 32 * 1024 * 1024,
36
36
  };
37
37
 
38
+ // RFC 7914 § 2: scrypt parameters
39
+ // N — CPU/memory cost; must be a power of 2 > 1.
40
+ // r — block size; positive integer.
41
+ // p — parallelization factor; positive integer.
42
+ // r * p must be < 2^30 (otherwise the spec output is undefined).
43
+ // The work buffer is 128 * r * N bytes, which must fit in maxmem.
44
+ const SCRYPT_MAX_RP = 1 << 30; // 2^30 per RFC 7914
45
+
46
+ function isPositiveInteger(value: unknown): value is number {
47
+ return (
48
+ typeof value === 'number' &&
49
+ Number.isFinite(value) &&
50
+ Number.isInteger(value) &&
51
+ value > 0
52
+ );
53
+ }
54
+
55
+ function validateScryptParams(
56
+ N: number,
57
+ r: number,
58
+ p: number,
59
+ maxmem: number,
60
+ ): void {
61
+ if (!isPositiveInteger(N)) {
62
+ throw new RangeError(`Invalid scrypt cost (N): ${N}`);
63
+ }
64
+ // Power-of-two & > 1 check (RFC 7914 §6 step 1).
65
+ if (N <= 1 || (N & (N - 1)) !== 0) {
66
+ throw new RangeError(
67
+ `Invalid scrypt cost (N): ${N} — must be a power of 2 greater than 1`,
68
+ );
69
+ }
70
+ if (!isPositiveInteger(r)) {
71
+ throw new RangeError(`Invalid scrypt blockSize (r): ${r}`);
72
+ }
73
+ if (!isPositiveInteger(p)) {
74
+ throw new RangeError(`Invalid scrypt parallelization (p): ${p}`);
75
+ }
76
+ if (r * p >= SCRYPT_MAX_RP) {
77
+ throw new RangeError(
78
+ `Invalid scrypt parameters: r * p (${r * p}) must be < 2^30`,
79
+ );
80
+ }
81
+ if (!isPositiveInteger(maxmem)) {
82
+ throw new RangeError(`Invalid scrypt maxmem: ${maxmem}`);
83
+ }
84
+ // 128 * r * N is the minimum working memory. Reject early so we don't
85
+ // hand a doomed parameter set to native and OOM the device.
86
+ const required = 128 * r * N;
87
+ if (required > maxmem) {
88
+ throw new RangeError(
89
+ `Invalid scrypt parameters: working memory ${required} bytes ` +
90
+ `exceeds maxmem ${maxmem}`,
91
+ );
92
+ }
93
+ }
94
+
95
+ function validateScryptKeylen(keylen: number): void {
96
+ if (
97
+ typeof keylen !== 'number' ||
98
+ !Number.isFinite(keylen) ||
99
+ !Number.isInteger(keylen) ||
100
+ keylen < 0 ||
101
+ keylen > 0x7fff_ffff
102
+ ) {
103
+ throw new TypeError('Bad key length');
104
+ }
105
+ }
106
+
38
107
  function getScryptParams(options?: ScryptOptions) {
39
108
  const N = options?.N ?? options?.cost ?? defaults.N;
40
109
  const r = options?.r ?? options?.blockSize ?? defaults.r;
41
110
  const p = options?.p ?? options?.parallelization ?? defaults.p;
42
111
  const maxmem = options?.maxmem ?? defaults.maxmem;
43
112
 
113
+ validateScryptParams(N, r, p, maxmem);
114
+
44
115
  return { N, r, p, maxmem };
45
116
  }
46
117
 
@@ -85,9 +156,7 @@ export function scrypt(
85
156
  const sanitizedPassword = sanitizeInput(password, 'Password');
86
157
  const sanitizedSalt = sanitizeInput(salt, 'Salt');
87
158
 
88
- if (keylen < 0) {
89
- throw new TypeError('Bad key length');
90
- }
159
+ validateScryptKeylen(keylen);
91
160
 
92
161
  const nativeMod = getNative();
93
162
  nativeMod
@@ -115,9 +184,7 @@ export function scryptSync(
115
184
  const sanitizedPassword = sanitizeInput(password, 'Password');
116
185
  const sanitizedSalt = sanitizeInput(salt, 'Salt');
117
186
 
118
- if (keylen < 0) {
119
- throw new TypeError('Bad key length');
120
- }
187
+ validateScryptKeylen(keylen);
121
188
 
122
189
  const nativeMod = getNative();
123
190
  const result = nativeMod.deriveKeySync(
@@ -2,6 +2,4 @@ import { type HybridObject } from 'react-native-nitro-modules';
2
2
 
3
3
  export interface Utils extends HybridObject<{ ios: 'c++'; android: 'c++' }> {
4
4
  timingSafeEqual(a: ArrayBuffer, b: ArrayBuffer): boolean;
5
- bufferToString(buffer: ArrayBuffer, encoding: string): string;
6
- stringToBuffer(str: string, encoding: string): ArrayBuffer;
7
5
  }