react-native-quick-crypto 1.0.0-beta.2 → 1.0.0-beta.21

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 (462) hide show
  1. package/QuickCrypto.podspec +143 -7
  2. package/README.md +12 -6
  3. package/android/CMakeLists.txt +82 -21
  4. package/android/build.gradle +47 -4
  5. package/android/src/main/cpp/cpp-adapter.cpp +3 -10
  6. package/android/src/main/java/com/margelo/nitro/quickcrypto/QuickCryptoPackage.java +13 -10
  7. package/app.plugin.js +3 -0
  8. package/cpp/blake3/HybridBlake3.cpp +118 -0
  9. package/cpp/blake3/HybridBlake3.hpp +35 -0
  10. package/cpp/cipher/CCMCipher.cpp +199 -0
  11. package/cpp/cipher/CCMCipher.hpp +26 -0
  12. package/cpp/cipher/ChaCha20Cipher.cpp +97 -0
  13. package/cpp/cipher/ChaCha20Cipher.hpp +25 -0
  14. package/cpp/cipher/ChaCha20Poly1305Cipher.cpp +170 -0
  15. package/cpp/cipher/ChaCha20Poly1305Cipher.hpp +30 -0
  16. package/cpp/cipher/HybridCipher.cpp +322 -0
  17. package/cpp/cipher/HybridCipher.hpp +68 -0
  18. package/cpp/cipher/HybridCipherFactory.hpp +97 -0
  19. package/cpp/cipher/OCBCipher.cpp +55 -0
  20. package/cpp/cipher/OCBCipher.hpp +19 -0
  21. package/cpp/cipher/XSalsa20Cipher.cpp +61 -0
  22. package/cpp/cipher/XSalsa20Cipher.hpp +33 -0
  23. package/cpp/ec/HybridEcKeyPair.cpp +428 -0
  24. package/cpp/ec/HybridEcKeyPair.hpp +48 -0
  25. package/cpp/ed25519/HybridEdKeyPair.cpp +300 -0
  26. package/cpp/ed25519/HybridEdKeyPair.hpp +63 -0
  27. package/cpp/hash/HybridHash.cpp +185 -0
  28. package/cpp/hash/HybridHash.hpp +43 -0
  29. package/cpp/hmac/HybridHmac.cpp +95 -0
  30. package/cpp/hmac/HybridHmac.hpp +31 -0
  31. package/cpp/keys/HybridKeyObjectHandle.cpp +243 -0
  32. package/cpp/keys/HybridKeyObjectHandle.hpp +42 -0
  33. package/cpp/keys/KeyObjectData.cpp +226 -0
  34. package/cpp/keys/KeyObjectData.hpp +71 -0
  35. package/cpp/keys/node.h +5 -0
  36. package/cpp/pbkdf2/HybridPbkdf2.cpp +51 -0
  37. package/cpp/pbkdf2/HybridPbkdf2.hpp +24 -0
  38. package/cpp/random/HybridRandom.cpp +32 -18
  39. package/cpp/random/HybridRandom.hpp +18 -30
  40. package/cpp/rsa/HybridRsaKeyPair.cpp +154 -0
  41. package/cpp/rsa/HybridRsaKeyPair.hpp +43 -0
  42. package/cpp/utils/Macros.hpp +68 -0
  43. package/cpp/utils/Utils.hpp +53 -1
  44. package/deps/blake3/.cargo/config.toml +2 -0
  45. package/deps/blake3/.git-blame-ignore-revs +2 -0
  46. package/deps/blake3/.github/workflows/build_b3sum.py +38 -0
  47. package/deps/blake3/.github/workflows/ci.yml +491 -0
  48. package/deps/blake3/.github/workflows/tag.yml +43 -0
  49. package/deps/blake3/.github/workflows/upload_github_release_asset.py +73 -0
  50. package/deps/blake3/CONTRIBUTING.md +31 -0
  51. package/deps/blake3/Cargo.toml +135 -0
  52. package/deps/blake3/LICENSE_A2 +202 -0
  53. package/deps/blake3/LICENSE_A2LLVM +219 -0
  54. package/deps/blake3/LICENSE_CC0 +121 -0
  55. package/deps/blake3/README.md +229 -0
  56. package/deps/blake3/b3sum/Cargo.lock +513 -0
  57. package/deps/blake3/b3sum/Cargo.toml +26 -0
  58. package/deps/blake3/b3sum/README.md +72 -0
  59. package/deps/blake3/b3sum/src/main.rs +564 -0
  60. package/deps/blake3/b3sum/src/unit_tests.rs +235 -0
  61. package/deps/blake3/b3sum/tests/cli_tests.rs +680 -0
  62. package/deps/blake3/b3sum/what_does_check_do.md +176 -0
  63. package/deps/blake3/benches/bench.rs +623 -0
  64. package/deps/blake3/build.rs +389 -0
  65. package/deps/blake3/c/CMakeLists.txt +383 -0
  66. package/deps/blake3/c/CMakePresets.json +73 -0
  67. package/deps/blake3/c/Makefile.testing +82 -0
  68. package/deps/blake3/c/README.md +403 -0
  69. package/deps/blake3/c/blake3-config.cmake.in +14 -0
  70. package/deps/blake3/c/blake3.c +650 -0
  71. package/deps/blake3/c/blake3.h +86 -0
  72. package/deps/blake3/c/blake3_avx2.c +326 -0
  73. package/deps/blake3/c/blake3_avx2_x86-64_unix.S +1815 -0
  74. package/deps/blake3/c/blake3_avx2_x86-64_windows_gnu.S +1817 -0
  75. package/deps/blake3/c/blake3_avx2_x86-64_windows_msvc.asm +1828 -0
  76. package/deps/blake3/c/blake3_avx512.c +1388 -0
  77. package/deps/blake3/c/blake3_avx512_x86-64_unix.S +4824 -0
  78. package/deps/blake3/c/blake3_avx512_x86-64_windows_gnu.S +2615 -0
  79. package/deps/blake3/c/blake3_avx512_x86-64_windows_msvc.asm +2634 -0
  80. package/deps/blake3/c/blake3_c_rust_bindings/Cargo.toml +32 -0
  81. package/deps/blake3/c/blake3_c_rust_bindings/README.md +4 -0
  82. package/deps/blake3/c/blake3_c_rust_bindings/benches/bench.rs +477 -0
  83. package/deps/blake3/c/blake3_c_rust_bindings/build.rs +253 -0
  84. package/deps/blake3/c/blake3_c_rust_bindings/cross_test.sh +31 -0
  85. package/deps/blake3/c/blake3_c_rust_bindings/src/lib.rs +333 -0
  86. package/deps/blake3/c/blake3_c_rust_bindings/src/test.rs +696 -0
  87. package/deps/blake3/c/blake3_dispatch.c +332 -0
  88. package/deps/blake3/c/blake3_impl.h +333 -0
  89. package/deps/blake3/c/blake3_neon.c +366 -0
  90. package/deps/blake3/c/blake3_portable.c +160 -0
  91. package/deps/blake3/c/blake3_sse2.c +566 -0
  92. package/deps/blake3/c/blake3_sse2_x86-64_unix.S +2291 -0
  93. package/deps/blake3/c/blake3_sse2_x86-64_windows_gnu.S +2332 -0
  94. package/deps/blake3/c/blake3_sse2_x86-64_windows_msvc.asm +2350 -0
  95. package/deps/blake3/c/blake3_sse41.c +560 -0
  96. package/deps/blake3/c/blake3_sse41_x86-64_unix.S +2028 -0
  97. package/deps/blake3/c/blake3_sse41_x86-64_windows_gnu.S +2069 -0
  98. package/deps/blake3/c/blake3_sse41_x86-64_windows_msvc.asm +2089 -0
  99. package/deps/blake3/c/blake3_tbb.cpp +37 -0
  100. package/deps/blake3/c/dependencies/CMakeLists.txt +3 -0
  101. package/deps/blake3/c/dependencies/tbb/CMakeLists.txt +28 -0
  102. package/deps/blake3/c/example.c +36 -0
  103. package/deps/blake3/c/example_tbb.c +57 -0
  104. package/deps/blake3/c/libblake3.pc.in +12 -0
  105. package/deps/blake3/c/main.c +166 -0
  106. package/deps/blake3/c/test.py +97 -0
  107. package/deps/blake3/media/B3.svg +70 -0
  108. package/deps/blake3/media/BLAKE3.svg +85 -0
  109. package/deps/blake3/media/speed.svg +1474 -0
  110. package/deps/blake3/reference_impl/Cargo.toml +8 -0
  111. package/deps/blake3/reference_impl/README.md +14 -0
  112. package/deps/blake3/reference_impl/reference_impl.rs +374 -0
  113. package/deps/blake3/src/ffi_avx2.rs +65 -0
  114. package/deps/blake3/src/ffi_avx512.rs +169 -0
  115. package/deps/blake3/src/ffi_neon.rs +82 -0
  116. package/deps/blake3/src/ffi_sse2.rs +126 -0
  117. package/deps/blake3/src/ffi_sse41.rs +126 -0
  118. package/deps/blake3/src/guts.rs +60 -0
  119. package/deps/blake3/src/hazmat.rs +704 -0
  120. package/deps/blake3/src/io.rs +64 -0
  121. package/deps/blake3/src/join.rs +92 -0
  122. package/deps/blake3/src/lib.rs +1835 -0
  123. package/deps/blake3/src/platform.rs +587 -0
  124. package/deps/blake3/src/portable.rs +198 -0
  125. package/deps/blake3/src/rust_avx2.rs +474 -0
  126. package/deps/blake3/src/rust_sse2.rs +775 -0
  127. package/deps/blake3/src/rust_sse41.rs +766 -0
  128. package/deps/blake3/src/test.rs +1049 -0
  129. package/deps/blake3/src/traits.rs +227 -0
  130. package/deps/blake3/src/wasm32_simd.rs +794 -0
  131. package/deps/blake3/test_vectors/Cargo.toml +19 -0
  132. package/deps/blake3/test_vectors/cross_test.sh +25 -0
  133. package/deps/blake3/test_vectors/src/bin/generate.rs +4 -0
  134. package/deps/blake3/test_vectors/src/lib.rs +350 -0
  135. package/deps/blake3/test_vectors/test_vectors.json +217 -0
  136. package/deps/blake3/tools/compiler_version/Cargo.toml +7 -0
  137. package/deps/blake3/tools/compiler_version/build.rs +6 -0
  138. package/deps/blake3/tools/compiler_version/src/main.rs +27 -0
  139. package/deps/blake3/tools/instruction_set_support/Cargo.toml +6 -0
  140. package/deps/blake3/tools/instruction_set_support/src/main.rs +10 -0
  141. package/deps/blake3/tools/release.md +16 -0
  142. package/deps/fastpbkdf2/fastpbkdf2.c +356 -0
  143. package/deps/fastpbkdf2/fastpbkdf2.h +68 -0
  144. package/deps/ncrypto/ncrypto.cc +4679 -0
  145. package/deps/ncrypto/ncrypto.h +1625 -0
  146. package/lib/commonjs/blake3.js +98 -0
  147. package/lib/commonjs/blake3.js.map +1 -0
  148. package/lib/commonjs/cipher.js +180 -0
  149. package/lib/commonjs/cipher.js.map +1 -0
  150. package/lib/commonjs/ec.js +344 -0
  151. package/lib/commonjs/ec.js.map +1 -0
  152. package/lib/commonjs/ed.js +185 -0
  153. package/lib/commonjs/ed.js.map +1 -0
  154. package/lib/commonjs/expo-plugin/@types.js +2 -0
  155. package/lib/commonjs/expo-plugin/@types.js.map +1 -0
  156. package/lib/commonjs/expo-plugin/withRNQC.js +25 -0
  157. package/lib/commonjs/expo-plugin/withRNQC.js.map +1 -0
  158. package/lib/commonjs/expo-plugin/withSodiumAndroid.js +25 -0
  159. package/lib/commonjs/expo-plugin/withSodiumAndroid.js.map +1 -0
  160. package/lib/commonjs/expo-plugin/withSodiumIos.js +26 -0
  161. package/lib/commonjs/expo-plugin/withSodiumIos.js.map +1 -0
  162. package/lib/commonjs/expo-plugin/withXCode.js +51 -0
  163. package/lib/commonjs/expo-plugin/withXCode.js.map +1 -0
  164. package/lib/commonjs/hash.js +215 -0
  165. package/lib/commonjs/hash.js.map +1 -0
  166. package/lib/commonjs/hmac.js +109 -0
  167. package/lib/commonjs/hmac.js.map +1 -0
  168. package/lib/commonjs/index.js +152 -32
  169. package/lib/commonjs/index.js.map +1 -1
  170. package/lib/commonjs/keys/classes.js +250 -0
  171. package/lib/commonjs/keys/classes.js.map +1 -0
  172. package/lib/commonjs/keys/generateKeyPair.js +102 -0
  173. package/lib/commonjs/keys/generateKeyPair.js.map +1 -0
  174. package/lib/commonjs/keys/index.js +89 -0
  175. package/lib/commonjs/keys/index.js.map +1 -0
  176. package/lib/commonjs/keys/signVerify.js +41 -0
  177. package/lib/commonjs/keys/signVerify.js.map +1 -0
  178. package/lib/commonjs/keys/utils.js +123 -0
  179. package/lib/commonjs/keys/utils.js.map +1 -0
  180. package/lib/commonjs/pbkdf2.js +89 -0
  181. package/lib/commonjs/pbkdf2.js.map +1 -0
  182. package/lib/commonjs/random.js +9 -3
  183. package/lib/commonjs/random.js.map +1 -1
  184. package/lib/commonjs/rsa.js +129 -0
  185. package/lib/commonjs/rsa.js.map +1 -0
  186. package/lib/commonjs/specs/blake3.nitro.js +6 -0
  187. package/lib/commonjs/specs/blake3.nitro.js.map +1 -0
  188. package/lib/commonjs/specs/cipher.nitro.js +6 -0
  189. package/lib/commonjs/specs/cipher.nitro.js.map +1 -0
  190. package/lib/commonjs/specs/ecKeyPair.nitro.js +6 -0
  191. package/lib/commonjs/specs/ecKeyPair.nitro.js.map +1 -0
  192. package/lib/commonjs/specs/edKeyPair.nitro.js +6 -0
  193. package/lib/commonjs/specs/edKeyPair.nitro.js.map +1 -0
  194. package/lib/commonjs/specs/hash.nitro.js +6 -0
  195. package/lib/commonjs/specs/hash.nitro.js.map +1 -0
  196. package/lib/commonjs/specs/hmac.nitro.js +6 -0
  197. package/lib/commonjs/specs/hmac.nitro.js.map +1 -0
  198. package/lib/commonjs/specs/keyObjectHandle.nitro.js +6 -0
  199. package/lib/commonjs/specs/keyObjectHandle.nitro.js.map +1 -0
  200. package/lib/commonjs/specs/pbkdf2.nitro.js +6 -0
  201. package/lib/commonjs/specs/pbkdf2.nitro.js.map +1 -0
  202. package/lib/commonjs/specs/rsaKeyPair.nitro.js +6 -0
  203. package/lib/commonjs/specs/rsaKeyPair.nitro.js.map +1 -0
  204. package/lib/commonjs/subtle.js +365 -0
  205. package/lib/commonjs/subtle.js.map +1 -0
  206. package/lib/commonjs/utils/cipher.js +64 -0
  207. package/lib/commonjs/utils/cipher.js.map +1 -0
  208. package/lib/commonjs/utils/conversion.js +140 -6
  209. package/lib/commonjs/utils/conversion.js.map +1 -1
  210. package/lib/commonjs/utils/errors.js +14 -0
  211. package/lib/commonjs/utils/errors.js.map +1 -0
  212. package/lib/commonjs/utils/hashnames.js +91 -0
  213. package/lib/commonjs/utils/hashnames.js.map +1 -0
  214. package/lib/commonjs/utils/index.js +65 -5
  215. package/lib/commonjs/utils/index.js.map +1 -1
  216. package/lib/commonjs/utils/noble.js +82 -0
  217. package/lib/commonjs/utils/noble.js.map +1 -0
  218. package/lib/commonjs/utils/types.js +52 -0
  219. package/lib/commonjs/utils/types.js.map +1 -1
  220. package/lib/commonjs/utils/validation.js +98 -0
  221. package/lib/commonjs/utils/validation.js.map +1 -0
  222. package/lib/module/blake3.js +90 -0
  223. package/lib/module/blake3.js.map +1 -0
  224. package/lib/module/cipher.js +173 -0
  225. package/lib/module/cipher.js.map +1 -0
  226. package/lib/module/ec.js +336 -0
  227. package/lib/module/ec.js.map +1 -0
  228. package/lib/module/ed.js +178 -0
  229. package/lib/module/ed.js.map +1 -0
  230. package/lib/module/expo-plugin/@types.js +2 -0
  231. package/lib/module/expo-plugin/@types.js.map +1 -0
  232. package/lib/module/expo-plugin/withRNQC.js +21 -0
  233. package/lib/module/expo-plugin/withRNQC.js.map +1 -0
  234. package/lib/module/expo-plugin/withSodiumAndroid.js +20 -0
  235. package/lib/module/expo-plugin/withSodiumAndroid.js.map +1 -0
  236. package/lib/module/expo-plugin/withSodiumIos.js +20 -0
  237. package/lib/module/expo-plugin/withSodiumIos.js.map +1 -0
  238. package/lib/module/expo-plugin/withXCode.js +46 -0
  239. package/lib/module/expo-plugin/withXCode.js.map +1 -0
  240. package/lib/module/hash.js +207 -0
  241. package/lib/module/hash.js.map +1 -0
  242. package/lib/module/hmac.js +104 -0
  243. package/lib/module/hmac.js.map +1 -0
  244. package/lib/module/index.js +33 -29
  245. package/lib/module/index.js.map +1 -1
  246. package/lib/module/keys/classes.js +241 -0
  247. package/lib/module/keys/classes.js.map +1 -0
  248. package/lib/module/keys/generateKeyPair.js +96 -0
  249. package/lib/module/keys/generateKeyPair.js.map +1 -0
  250. package/lib/module/keys/index.js +32 -0
  251. package/lib/module/keys/index.js.map +1 -0
  252. package/lib/module/keys/signVerify.js +41 -0
  253. package/lib/module/keys/signVerify.js.map +1 -0
  254. package/lib/module/keys/utils.js +114 -0
  255. package/lib/module/keys/utils.js.map +1 -0
  256. package/lib/module/pbkdf2.js +83 -0
  257. package/lib/module/pbkdf2.js.map +1 -0
  258. package/lib/module/random.js +7 -1
  259. package/lib/module/random.js.map +1 -1
  260. package/lib/module/rsa.js +123 -0
  261. package/lib/module/rsa.js.map +1 -0
  262. package/lib/module/specs/blake3.nitro.js +4 -0
  263. package/lib/module/specs/blake3.nitro.js.map +1 -0
  264. package/lib/module/specs/cipher.nitro.js +4 -0
  265. package/lib/module/specs/cipher.nitro.js.map +1 -0
  266. package/lib/module/specs/ecKeyPair.nitro.js +4 -0
  267. package/lib/module/specs/ecKeyPair.nitro.js.map +1 -0
  268. package/lib/module/specs/edKeyPair.nitro.js +4 -0
  269. package/lib/module/specs/edKeyPair.nitro.js.map +1 -0
  270. package/lib/module/specs/hash.nitro.js +4 -0
  271. package/lib/module/specs/hash.nitro.js.map +1 -0
  272. package/lib/module/specs/hmac.nitro.js +4 -0
  273. package/lib/module/specs/hmac.nitro.js.map +1 -0
  274. package/lib/module/specs/keyObjectHandle.nitro.js +4 -0
  275. package/lib/module/specs/keyObjectHandle.nitro.js.map +1 -0
  276. package/lib/module/specs/pbkdf2.nitro.js +4 -0
  277. package/lib/module/specs/pbkdf2.nitro.js.map +1 -0
  278. package/lib/module/specs/rsaKeyPair.nitro.js +4 -0
  279. package/lib/module/specs/rsaKeyPair.nitro.js.map +1 -0
  280. package/lib/module/subtle.js +360 -0
  281. package/lib/module/subtle.js.map +1 -0
  282. package/lib/module/utils/cipher.js +56 -0
  283. package/lib/module/utils/cipher.js.map +1 -0
  284. package/lib/module/utils/conversion.js +120 -8
  285. package/lib/module/utils/conversion.js.map +1 -1
  286. package/lib/module/utils/errors.js +10 -0
  287. package/lib/module/utils/errors.js.map +1 -0
  288. package/lib/module/utils/hashnames.js +89 -0
  289. package/lib/module/utils/hashnames.js.map +1 -0
  290. package/lib/module/utils/index.js +6 -5
  291. package/lib/module/utils/index.js.map +1 -1
  292. package/lib/module/utils/noble.js +76 -0
  293. package/lib/module/utils/noble.js.map +1 -0
  294. package/lib/module/utils/types.js +53 -0
  295. package/lib/module/utils/types.js.map +1 -1
  296. package/lib/module/utils/validation.js +87 -0
  297. package/lib/module/utils/validation.js.map +1 -0
  298. package/lib/tsconfig.tsbuildinfo +1 -1
  299. package/lib/typescript/blake3.d.ts +33 -0
  300. package/lib/typescript/blake3.d.ts.map +1 -0
  301. package/lib/typescript/cipher.d.ts +60 -0
  302. package/lib/typescript/cipher.d.ts.map +1 -0
  303. package/lib/typescript/ec.d.ts +13 -0
  304. package/lib/typescript/ec.d.ts.map +1 -0
  305. package/lib/typescript/ed.d.ts +43 -0
  306. package/lib/typescript/ed.d.ts.map +1 -0
  307. package/lib/typescript/expo-plugin/@types.d.ts +8 -0
  308. package/lib/typescript/expo-plugin/@types.d.ts.map +1 -0
  309. package/lib/typescript/expo-plugin/withRNQC.d.ts +4 -0
  310. package/lib/typescript/expo-plugin/withRNQC.d.ts.map +1 -0
  311. package/lib/typescript/expo-plugin/withSodiumAndroid.d.ts +4 -0
  312. package/lib/typescript/expo-plugin/withSodiumAndroid.d.ts.map +1 -0
  313. package/lib/typescript/expo-plugin/withSodiumIos.d.ts +4 -0
  314. package/lib/typescript/expo-plugin/withSodiumIos.d.ts.map +1 -0
  315. package/lib/typescript/expo-plugin/withXCode.d.ts +9 -0
  316. package/lib/typescript/expo-plugin/withXCode.d.ts.map +1 -0
  317. package/lib/typescript/hash.d.ts +122 -0
  318. package/lib/typescript/hash.d.ts.map +1 -0
  319. package/lib/typescript/hmac.d.ts +66 -0
  320. package/lib/typescript/hmac.d.ts.map +1 -0
  321. package/lib/typescript/index.d.ts +110 -9
  322. package/lib/typescript/index.d.ts.map +1 -1
  323. package/lib/typescript/keys/classes.d.ts +79 -0
  324. package/lib/typescript/keys/classes.d.ts.map +1 -0
  325. package/lib/typescript/keys/generateKeyPair.d.ts +6 -0
  326. package/lib/typescript/keys/generateKeyPair.d.ts.map +1 -0
  327. package/lib/typescript/keys/index.d.ts +7 -0
  328. package/lib/typescript/keys/index.d.ts.map +1 -0
  329. package/lib/typescript/keys/signVerify.d.ts +1 -0
  330. package/lib/typescript/keys/signVerify.d.ts.map +1 -0
  331. package/lib/typescript/keys/utils.d.ts +34 -0
  332. package/lib/typescript/keys/utils.d.ts.map +1 -0
  333. package/lib/typescript/pbkdf2.d.ts +12 -0
  334. package/lib/typescript/pbkdf2.d.ts.map +1 -0
  335. package/lib/typescript/random.d.ts +11 -5
  336. package/lib/typescript/random.d.ts.map +1 -1
  337. package/lib/typescript/rsa.d.ts +10 -0
  338. package/lib/typescript/rsa.d.ts.map +1 -0
  339. package/lib/typescript/specs/blake3.nitro.d.ts +15 -0
  340. package/lib/typescript/specs/blake3.nitro.d.ts.map +1 -0
  341. package/lib/typescript/specs/cipher.nitro.d.ts +29 -0
  342. package/lib/typescript/specs/cipher.nitro.d.ts.map +1 -0
  343. package/lib/typescript/specs/ecKeyPair.nitro.d.ts +20 -0
  344. package/lib/typescript/specs/ecKeyPair.nitro.d.ts.map +1 -0
  345. package/lib/typescript/specs/edKeyPair.nitro.d.ts +17 -0
  346. package/lib/typescript/specs/edKeyPair.nitro.d.ts.map +1 -0
  347. package/lib/typescript/specs/hash.nitro.d.ts +13 -0
  348. package/lib/typescript/specs/hash.nitro.d.ts.map +1 -0
  349. package/lib/typescript/specs/hmac.nitro.d.ts +10 -0
  350. package/lib/typescript/specs/hmac.nitro.d.ts.map +1 -0
  351. package/lib/typescript/specs/keyObjectHandle.nitro.d.ts +14 -0
  352. package/lib/typescript/specs/keyObjectHandle.nitro.d.ts.map +1 -0
  353. package/lib/typescript/specs/pbkdf2.nitro.d.ts +9 -0
  354. package/lib/typescript/specs/pbkdf2.nitro.d.ts.map +1 -0
  355. package/lib/typescript/specs/rsaKeyPair.nitro.d.ts +20 -0
  356. package/lib/typescript/specs/rsaKeyPair.nitro.d.ts.map +1 -0
  357. package/lib/typescript/subtle.d.ts +17 -0
  358. package/lib/typescript/subtle.d.ts.map +1 -0
  359. package/lib/typescript/utils/cipher.d.ts +7 -0
  360. package/lib/typescript/utils/cipher.d.ts.map +1 -0
  361. package/lib/typescript/utils/conversion.d.ts +24 -2
  362. package/lib/typescript/utils/conversion.d.ts.map +1 -1
  363. package/lib/typescript/utils/errors.d.ts +7 -0
  364. package/lib/typescript/utils/errors.d.ts.map +1 -0
  365. package/lib/typescript/utils/hashnames.d.ts +13 -0
  366. package/lib/typescript/utils/hashnames.d.ts.map +1 -0
  367. package/lib/typescript/utils/index.d.ts +6 -5
  368. package/lib/typescript/utils/index.d.ts.map +1 -1
  369. package/lib/typescript/utils/noble.d.ts +19 -0
  370. package/lib/typescript/utils/noble.d.ts.map +1 -0
  371. package/lib/typescript/utils/types.d.ts +252 -2
  372. package/lib/typescript/utils/types.d.ts.map +1 -1
  373. package/lib/typescript/utils/validation.d.ts +13 -0
  374. package/lib/typescript/utils/validation.d.ts.map +1 -0
  375. package/nitrogen/generated/.gitattributes +1 -0
  376. package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +47 -4
  377. package/nitrogen/generated/android/QuickCrypto+autolinking.gradle +4 -3
  378. package/nitrogen/generated/android/QuickCryptoOnLoad.cpp +144 -0
  379. package/nitrogen/generated/android/QuickCryptoOnLoad.hpp +25 -0
  380. package/nitrogen/generated/android/kotlin/com/margelo/nitro/crypto/QuickCryptoOnLoad.kt +35 -0
  381. package/nitrogen/generated/ios/QuickCrypto+autolinking.rb +11 -8
  382. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.cpp +11 -3
  383. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.hpp +5 -3
  384. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Umbrella.hpp +16 -7
  385. package/nitrogen/generated/ios/QuickCryptoAutolinking.mm +135 -0
  386. package/nitrogen/generated/ios/QuickCryptoAutolinking.swift +12 -0
  387. package/nitrogen/generated/shared/c++/CFRGKeyPairType.hpp +84 -0
  388. package/nitrogen/generated/shared/c++/CipherArgs.hpp +86 -0
  389. package/nitrogen/generated/shared/c++/HybridBlake3Spec.cpp +28 -0
  390. package/nitrogen/generated/shared/c++/HybridBlake3Spec.hpp +76 -0
  391. package/nitrogen/generated/shared/c++/HybridCipherFactorySpec.cpp +21 -0
  392. package/nitrogen/generated/shared/c++/HybridCipherFactorySpec.hpp +67 -0
  393. package/nitrogen/generated/shared/c++/HybridCipherSpec.cpp +28 -0
  394. package/nitrogen/generated/shared/c++/HybridCipherSpec.hpp +76 -0
  395. package/nitrogen/generated/shared/c++/HybridEcKeyPairSpec.cpp +29 -0
  396. package/nitrogen/generated/shared/c++/HybridEcKeyPairSpec.hpp +77 -0
  397. package/nitrogen/generated/shared/c++/HybridEdKeyPairSpec.cpp +30 -0
  398. package/nitrogen/generated/shared/c++/HybridEdKeyPairSpec.hpp +75 -0
  399. package/nitrogen/generated/shared/c++/HybridHashSpec.cpp +26 -0
  400. package/nitrogen/generated/shared/c++/HybridHashSpec.hpp +75 -0
  401. package/nitrogen/generated/shared/c++/HybridHmacSpec.cpp +23 -0
  402. package/nitrogen/generated/shared/c++/HybridHmacSpec.hpp +66 -0
  403. package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.cpp +26 -0
  404. package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.hpp +92 -0
  405. package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.cpp +22 -0
  406. package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.hpp +66 -0
  407. package/nitrogen/generated/shared/c++/HybridRandomSpec.cpp +2 -3
  408. package/nitrogen/generated/shared/c++/HybridRandomSpec.hpp +9 -6
  409. package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.cpp +29 -0
  410. package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.hpp +77 -0
  411. package/nitrogen/generated/shared/c++/JWK.hpp +161 -0
  412. package/nitrogen/generated/shared/c++/JWKkty.hpp +84 -0
  413. package/nitrogen/generated/shared/c++/JWKuse.hpp +76 -0
  414. package/nitrogen/generated/shared/c++/KFormatType.hpp +63 -0
  415. package/nitrogen/generated/shared/c++/KeyDetail.hpp +92 -0
  416. package/nitrogen/generated/shared/c++/KeyEncoding.hpp +64 -0
  417. package/nitrogen/generated/shared/c++/KeyObject.hpp +67 -0
  418. package/nitrogen/generated/shared/c++/KeyType.hpp +63 -0
  419. package/nitrogen/generated/shared/c++/KeyUsage.hpp +116 -0
  420. package/nitrogen/generated/shared/c++/NamedCurve.hpp +80 -0
  421. package/package.json +66 -39
  422. package/src/blake3.ts +123 -0
  423. package/src/cipher.ts +335 -0
  424. package/src/ec.ts +432 -0
  425. package/src/ed.ts +256 -0
  426. package/src/expo-plugin/@types.ts +7 -0
  427. package/src/expo-plugin/withRNQC.ts +23 -0
  428. package/src/expo-plugin/withSodiumAndroid.ts +24 -0
  429. package/src/expo-plugin/withSodiumIos.ts +30 -0
  430. package/src/expo-plugin/withXCode.ts +55 -0
  431. package/src/hash.ts +274 -0
  432. package/src/hmac.ts +135 -0
  433. package/src/index.ts +32 -29
  434. package/src/keys/classes.ts +317 -0
  435. package/src/keys/generateKeyPair.ts +145 -0
  436. package/src/keys/index.ts +52 -0
  437. package/src/keys/signVerify.ts +39 -0
  438. package/src/keys/utils.ts +190 -0
  439. package/src/pbkdf2.ts +154 -0
  440. package/src/random.ts +26 -23
  441. package/src/rsa.ts +176 -0
  442. package/src/specs/blake3.nitro.ts +12 -0
  443. package/src/specs/cipher.nitro.ts +25 -0
  444. package/src/specs/ecKeyPair.nitro.ts +38 -0
  445. package/src/specs/edKeyPair.nitro.ts +43 -0
  446. package/src/specs/hash.nitro.ts +10 -0
  447. package/src/specs/hmac.nitro.ts +7 -0
  448. package/src/specs/keyObjectHandle.nitro.ts +31 -0
  449. package/src/specs/pbkdf2.nitro.ts +18 -0
  450. package/src/specs/random.nitro.ts +2 -2
  451. package/src/specs/rsaKeyPair.nitro.ts +33 -0
  452. package/src/subtle.ts +614 -0
  453. package/src/utils/cipher.ts +60 -0
  454. package/src/utils/conversion.ts +143 -9
  455. package/src/utils/errors.ts +15 -0
  456. package/src/utils/hashnames.ts +98 -0
  457. package/src/utils/index.ts +6 -6
  458. package/src/utils/noble.ts +85 -0
  459. package/src/utils/types.ts +423 -3
  460. package/src/utils/validation.ts +130 -0
  461. package/ios/QuickCryptoOnLoad.mm +0 -19
  462. package/lib/module/package.json +0 -1
@@ -0,0 +1,86 @@
1
+ #ifndef BLAKE3_H
2
+ #define BLAKE3_H
3
+
4
+ #include <stddef.h>
5
+ #include <stdint.h>
6
+
7
+ #if !defined(BLAKE3_API)
8
+ # if defined(_WIN32) || defined(__CYGWIN__)
9
+ # if defined(BLAKE3_DLL)
10
+ # if defined(BLAKE3_DLL_EXPORTS)
11
+ # define BLAKE3_API __declspec(dllexport)
12
+ # else
13
+ # define BLAKE3_API __declspec(dllimport)
14
+ # endif
15
+ # define BLAKE3_PRIVATE
16
+ # else
17
+ # define BLAKE3_API
18
+ # define BLAKE3_PRIVATE
19
+ # endif
20
+ # elif __GNUC__ >= 4
21
+ # define BLAKE3_API __attribute__((visibility("default")))
22
+ # define BLAKE3_PRIVATE __attribute__((visibility("hidden")))
23
+ # else
24
+ # define BLAKE3_API
25
+ # define BLAKE3_PRIVATE
26
+ # endif
27
+ #endif
28
+
29
+ #ifdef __cplusplus
30
+ extern "C" {
31
+ #endif
32
+
33
+ #define BLAKE3_VERSION_STRING "1.8.2"
34
+ #define BLAKE3_KEY_LEN 32
35
+ #define BLAKE3_OUT_LEN 32
36
+ #define BLAKE3_BLOCK_LEN 64
37
+ #define BLAKE3_CHUNK_LEN 1024
38
+ #define BLAKE3_MAX_DEPTH 54
39
+
40
+ // This struct is a private implementation detail. It has to be here because
41
+ // it's part of blake3_hasher below.
42
+ typedef struct {
43
+ uint32_t cv[8];
44
+ uint64_t chunk_counter;
45
+ uint8_t buf[BLAKE3_BLOCK_LEN];
46
+ uint8_t buf_len;
47
+ uint8_t blocks_compressed;
48
+ uint8_t flags;
49
+ } blake3_chunk_state;
50
+
51
+ typedef struct {
52
+ uint32_t key[8];
53
+ blake3_chunk_state chunk;
54
+ uint8_t cv_stack_len;
55
+ // The stack size is MAX_DEPTH + 1 because we do lazy merging. For example,
56
+ // with 7 chunks, we have 3 entries in the stack. Adding an 8th chunk
57
+ // requires a 4th entry, rather than merging everything down to 1, because we
58
+ // don't know whether more input is coming. This is different from how the
59
+ // reference implementation does things.
60
+ uint8_t cv_stack[(BLAKE3_MAX_DEPTH + 1) * BLAKE3_OUT_LEN];
61
+ } blake3_hasher;
62
+
63
+ BLAKE3_API const char *blake3_version(void);
64
+ BLAKE3_API void blake3_hasher_init(blake3_hasher *self);
65
+ BLAKE3_API void blake3_hasher_init_keyed(blake3_hasher *self,
66
+ const uint8_t key[BLAKE3_KEY_LEN]);
67
+ BLAKE3_API void blake3_hasher_init_derive_key(blake3_hasher *self, const char *context);
68
+ BLAKE3_API void blake3_hasher_init_derive_key_raw(blake3_hasher *self, const void *context,
69
+ size_t context_len);
70
+ BLAKE3_API void blake3_hasher_update(blake3_hasher *self, const void *input,
71
+ size_t input_len);
72
+ #if defined(BLAKE3_USE_TBB)
73
+ BLAKE3_API void blake3_hasher_update_tbb(blake3_hasher *self, const void *input,
74
+ size_t input_len);
75
+ #endif // BLAKE3_USE_TBB
76
+ BLAKE3_API void blake3_hasher_finalize(const blake3_hasher *self, uint8_t *out,
77
+ size_t out_len);
78
+ BLAKE3_API void blake3_hasher_finalize_seek(const blake3_hasher *self, uint64_t seek,
79
+ uint8_t *out, size_t out_len);
80
+ BLAKE3_API void blake3_hasher_reset(blake3_hasher *self);
81
+
82
+ #ifdef __cplusplus
83
+ }
84
+ #endif
85
+
86
+ #endif /* BLAKE3_H */
@@ -0,0 +1,326 @@
1
+ #include "blake3_impl.h"
2
+
3
+ #include <immintrin.h>
4
+
5
+ #define DEGREE 8
6
+
7
+ INLINE __m256i loadu(const uint8_t src[32]) {
8
+ return _mm256_loadu_si256((const __m256i *)src);
9
+ }
10
+
11
+ INLINE void storeu(__m256i src, uint8_t dest[16]) {
12
+ _mm256_storeu_si256((__m256i *)dest, src);
13
+ }
14
+
15
+ INLINE __m256i addv(__m256i a, __m256i b) { return _mm256_add_epi32(a, b); }
16
+
17
+ // Note that clang-format doesn't like the name "xor" for some reason.
18
+ INLINE __m256i xorv(__m256i a, __m256i b) { return _mm256_xor_si256(a, b); }
19
+
20
+ INLINE __m256i set1(uint32_t x) { return _mm256_set1_epi32((int32_t)x); }
21
+
22
+ INLINE __m256i rot16(__m256i x) {
23
+ return _mm256_shuffle_epi8(
24
+ x, _mm256_set_epi8(13, 12, 15, 14, 9, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 2,
25
+ 13, 12, 15, 14, 9, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 2));
26
+ }
27
+
28
+ INLINE __m256i rot12(__m256i x) {
29
+ return _mm256_or_si256(_mm256_srli_epi32(x, 12), _mm256_slli_epi32(x, 32 - 12));
30
+ }
31
+
32
+ INLINE __m256i rot8(__m256i x) {
33
+ return _mm256_shuffle_epi8(
34
+ x, _mm256_set_epi8(12, 15, 14, 13, 8, 11, 10, 9, 4, 7, 6, 5, 0, 3, 2, 1,
35
+ 12, 15, 14, 13, 8, 11, 10, 9, 4, 7, 6, 5, 0, 3, 2, 1));
36
+ }
37
+
38
+ INLINE __m256i rot7(__m256i x) {
39
+ return _mm256_or_si256(_mm256_srli_epi32(x, 7), _mm256_slli_epi32(x, 32 - 7));
40
+ }
41
+
42
+ INLINE void round_fn(__m256i v[16], __m256i m[16], size_t r) {
43
+ v[0] = addv(v[0], m[(size_t)MSG_SCHEDULE[r][0]]);
44
+ v[1] = addv(v[1], m[(size_t)MSG_SCHEDULE[r][2]]);
45
+ v[2] = addv(v[2], m[(size_t)MSG_SCHEDULE[r][4]]);
46
+ v[3] = addv(v[3], m[(size_t)MSG_SCHEDULE[r][6]]);
47
+ v[0] = addv(v[0], v[4]);
48
+ v[1] = addv(v[1], v[5]);
49
+ v[2] = addv(v[2], v[6]);
50
+ v[3] = addv(v[3], v[7]);
51
+ v[12] = xorv(v[12], v[0]);
52
+ v[13] = xorv(v[13], v[1]);
53
+ v[14] = xorv(v[14], v[2]);
54
+ v[15] = xorv(v[15], v[3]);
55
+ v[12] = rot16(v[12]);
56
+ v[13] = rot16(v[13]);
57
+ v[14] = rot16(v[14]);
58
+ v[15] = rot16(v[15]);
59
+ v[8] = addv(v[8], v[12]);
60
+ v[9] = addv(v[9], v[13]);
61
+ v[10] = addv(v[10], v[14]);
62
+ v[11] = addv(v[11], v[15]);
63
+ v[4] = xorv(v[4], v[8]);
64
+ v[5] = xorv(v[5], v[9]);
65
+ v[6] = xorv(v[6], v[10]);
66
+ v[7] = xorv(v[7], v[11]);
67
+ v[4] = rot12(v[4]);
68
+ v[5] = rot12(v[5]);
69
+ v[6] = rot12(v[6]);
70
+ v[7] = rot12(v[7]);
71
+ v[0] = addv(v[0], m[(size_t)MSG_SCHEDULE[r][1]]);
72
+ v[1] = addv(v[1], m[(size_t)MSG_SCHEDULE[r][3]]);
73
+ v[2] = addv(v[2], m[(size_t)MSG_SCHEDULE[r][5]]);
74
+ v[3] = addv(v[3], m[(size_t)MSG_SCHEDULE[r][7]]);
75
+ v[0] = addv(v[0], v[4]);
76
+ v[1] = addv(v[1], v[5]);
77
+ v[2] = addv(v[2], v[6]);
78
+ v[3] = addv(v[3], v[7]);
79
+ v[12] = xorv(v[12], v[0]);
80
+ v[13] = xorv(v[13], v[1]);
81
+ v[14] = xorv(v[14], v[2]);
82
+ v[15] = xorv(v[15], v[3]);
83
+ v[12] = rot8(v[12]);
84
+ v[13] = rot8(v[13]);
85
+ v[14] = rot8(v[14]);
86
+ v[15] = rot8(v[15]);
87
+ v[8] = addv(v[8], v[12]);
88
+ v[9] = addv(v[9], v[13]);
89
+ v[10] = addv(v[10], v[14]);
90
+ v[11] = addv(v[11], v[15]);
91
+ v[4] = xorv(v[4], v[8]);
92
+ v[5] = xorv(v[5], v[9]);
93
+ v[6] = xorv(v[6], v[10]);
94
+ v[7] = xorv(v[7], v[11]);
95
+ v[4] = rot7(v[4]);
96
+ v[5] = rot7(v[5]);
97
+ v[6] = rot7(v[6]);
98
+ v[7] = rot7(v[7]);
99
+
100
+ v[0] = addv(v[0], m[(size_t)MSG_SCHEDULE[r][8]]);
101
+ v[1] = addv(v[1], m[(size_t)MSG_SCHEDULE[r][10]]);
102
+ v[2] = addv(v[2], m[(size_t)MSG_SCHEDULE[r][12]]);
103
+ v[3] = addv(v[3], m[(size_t)MSG_SCHEDULE[r][14]]);
104
+ v[0] = addv(v[0], v[5]);
105
+ v[1] = addv(v[1], v[6]);
106
+ v[2] = addv(v[2], v[7]);
107
+ v[3] = addv(v[3], v[4]);
108
+ v[15] = xorv(v[15], v[0]);
109
+ v[12] = xorv(v[12], v[1]);
110
+ v[13] = xorv(v[13], v[2]);
111
+ v[14] = xorv(v[14], v[3]);
112
+ v[15] = rot16(v[15]);
113
+ v[12] = rot16(v[12]);
114
+ v[13] = rot16(v[13]);
115
+ v[14] = rot16(v[14]);
116
+ v[10] = addv(v[10], v[15]);
117
+ v[11] = addv(v[11], v[12]);
118
+ v[8] = addv(v[8], v[13]);
119
+ v[9] = addv(v[9], v[14]);
120
+ v[5] = xorv(v[5], v[10]);
121
+ v[6] = xorv(v[6], v[11]);
122
+ v[7] = xorv(v[7], v[8]);
123
+ v[4] = xorv(v[4], v[9]);
124
+ v[5] = rot12(v[5]);
125
+ v[6] = rot12(v[6]);
126
+ v[7] = rot12(v[7]);
127
+ v[4] = rot12(v[4]);
128
+ v[0] = addv(v[0], m[(size_t)MSG_SCHEDULE[r][9]]);
129
+ v[1] = addv(v[1], m[(size_t)MSG_SCHEDULE[r][11]]);
130
+ v[2] = addv(v[2], m[(size_t)MSG_SCHEDULE[r][13]]);
131
+ v[3] = addv(v[3], m[(size_t)MSG_SCHEDULE[r][15]]);
132
+ v[0] = addv(v[0], v[5]);
133
+ v[1] = addv(v[1], v[6]);
134
+ v[2] = addv(v[2], v[7]);
135
+ v[3] = addv(v[3], v[4]);
136
+ v[15] = xorv(v[15], v[0]);
137
+ v[12] = xorv(v[12], v[1]);
138
+ v[13] = xorv(v[13], v[2]);
139
+ v[14] = xorv(v[14], v[3]);
140
+ v[15] = rot8(v[15]);
141
+ v[12] = rot8(v[12]);
142
+ v[13] = rot8(v[13]);
143
+ v[14] = rot8(v[14]);
144
+ v[10] = addv(v[10], v[15]);
145
+ v[11] = addv(v[11], v[12]);
146
+ v[8] = addv(v[8], v[13]);
147
+ v[9] = addv(v[9], v[14]);
148
+ v[5] = xorv(v[5], v[10]);
149
+ v[6] = xorv(v[6], v[11]);
150
+ v[7] = xorv(v[7], v[8]);
151
+ v[4] = xorv(v[4], v[9]);
152
+ v[5] = rot7(v[5]);
153
+ v[6] = rot7(v[6]);
154
+ v[7] = rot7(v[7]);
155
+ v[4] = rot7(v[4]);
156
+ }
157
+
158
+ INLINE void transpose_vecs(__m256i vecs[DEGREE]) {
159
+ // Interleave 32-bit lanes. The low unpack is lanes 00/11/44/55, and the high
160
+ // is 22/33/66/77.
161
+ __m256i ab_0145 = _mm256_unpacklo_epi32(vecs[0], vecs[1]);
162
+ __m256i ab_2367 = _mm256_unpackhi_epi32(vecs[0], vecs[1]);
163
+ __m256i cd_0145 = _mm256_unpacklo_epi32(vecs[2], vecs[3]);
164
+ __m256i cd_2367 = _mm256_unpackhi_epi32(vecs[2], vecs[3]);
165
+ __m256i ef_0145 = _mm256_unpacklo_epi32(vecs[4], vecs[5]);
166
+ __m256i ef_2367 = _mm256_unpackhi_epi32(vecs[4], vecs[5]);
167
+ __m256i gh_0145 = _mm256_unpacklo_epi32(vecs[6], vecs[7]);
168
+ __m256i gh_2367 = _mm256_unpackhi_epi32(vecs[6], vecs[7]);
169
+
170
+ // Interleave 64-bit lanes. The low unpack is lanes 00/22 and the high is
171
+ // 11/33.
172
+ __m256i abcd_04 = _mm256_unpacklo_epi64(ab_0145, cd_0145);
173
+ __m256i abcd_15 = _mm256_unpackhi_epi64(ab_0145, cd_0145);
174
+ __m256i abcd_26 = _mm256_unpacklo_epi64(ab_2367, cd_2367);
175
+ __m256i abcd_37 = _mm256_unpackhi_epi64(ab_2367, cd_2367);
176
+ __m256i efgh_04 = _mm256_unpacklo_epi64(ef_0145, gh_0145);
177
+ __m256i efgh_15 = _mm256_unpackhi_epi64(ef_0145, gh_0145);
178
+ __m256i efgh_26 = _mm256_unpacklo_epi64(ef_2367, gh_2367);
179
+ __m256i efgh_37 = _mm256_unpackhi_epi64(ef_2367, gh_2367);
180
+
181
+ // Interleave 128-bit lanes.
182
+ vecs[0] = _mm256_permute2x128_si256(abcd_04, efgh_04, 0x20);
183
+ vecs[1] = _mm256_permute2x128_si256(abcd_15, efgh_15, 0x20);
184
+ vecs[2] = _mm256_permute2x128_si256(abcd_26, efgh_26, 0x20);
185
+ vecs[3] = _mm256_permute2x128_si256(abcd_37, efgh_37, 0x20);
186
+ vecs[4] = _mm256_permute2x128_si256(abcd_04, efgh_04, 0x31);
187
+ vecs[5] = _mm256_permute2x128_si256(abcd_15, efgh_15, 0x31);
188
+ vecs[6] = _mm256_permute2x128_si256(abcd_26, efgh_26, 0x31);
189
+ vecs[7] = _mm256_permute2x128_si256(abcd_37, efgh_37, 0x31);
190
+ }
191
+
192
+ INLINE void transpose_msg_vecs(const uint8_t *const *inputs,
193
+ size_t block_offset, __m256i out[16]) {
194
+ out[0] = loadu(&inputs[0][block_offset + 0 * sizeof(__m256i)]);
195
+ out[1] = loadu(&inputs[1][block_offset + 0 * sizeof(__m256i)]);
196
+ out[2] = loadu(&inputs[2][block_offset + 0 * sizeof(__m256i)]);
197
+ out[3] = loadu(&inputs[3][block_offset + 0 * sizeof(__m256i)]);
198
+ out[4] = loadu(&inputs[4][block_offset + 0 * sizeof(__m256i)]);
199
+ out[5] = loadu(&inputs[5][block_offset + 0 * sizeof(__m256i)]);
200
+ out[6] = loadu(&inputs[6][block_offset + 0 * sizeof(__m256i)]);
201
+ out[7] = loadu(&inputs[7][block_offset + 0 * sizeof(__m256i)]);
202
+ out[8] = loadu(&inputs[0][block_offset + 1 * sizeof(__m256i)]);
203
+ out[9] = loadu(&inputs[1][block_offset + 1 * sizeof(__m256i)]);
204
+ out[10] = loadu(&inputs[2][block_offset + 1 * sizeof(__m256i)]);
205
+ out[11] = loadu(&inputs[3][block_offset + 1 * sizeof(__m256i)]);
206
+ out[12] = loadu(&inputs[4][block_offset + 1 * sizeof(__m256i)]);
207
+ out[13] = loadu(&inputs[5][block_offset + 1 * sizeof(__m256i)]);
208
+ out[14] = loadu(&inputs[6][block_offset + 1 * sizeof(__m256i)]);
209
+ out[15] = loadu(&inputs[7][block_offset + 1 * sizeof(__m256i)]);
210
+ for (size_t i = 0; i < 8; ++i) {
211
+ _mm_prefetch((const void *)&inputs[i][block_offset + 256], _MM_HINT_T0);
212
+ }
213
+ transpose_vecs(&out[0]);
214
+ transpose_vecs(&out[8]);
215
+ }
216
+
217
+ INLINE void load_counters(uint64_t counter, bool increment_counter,
218
+ __m256i *out_lo, __m256i *out_hi) {
219
+ const __m256i mask = _mm256_set1_epi32(-(int32_t)increment_counter);
220
+ const __m256i add0 = _mm256_set_epi32(7, 6, 5, 4, 3, 2, 1, 0);
221
+ const __m256i add1 = _mm256_and_si256(mask, add0);
222
+ __m256i l = _mm256_add_epi32(_mm256_set1_epi32((int32_t)counter), add1);
223
+ __m256i carry = _mm256_cmpgt_epi32(_mm256_xor_si256(add1, _mm256_set1_epi32(0x80000000)),
224
+ _mm256_xor_si256( l, _mm256_set1_epi32(0x80000000)));
225
+ __m256i h = _mm256_sub_epi32(_mm256_set1_epi32((int32_t)(counter >> 32)), carry);
226
+ *out_lo = l;
227
+ *out_hi = h;
228
+ }
229
+
230
+ static
231
+ void blake3_hash8_avx2(const uint8_t *const *inputs, size_t blocks,
232
+ const uint32_t key[8], uint64_t counter,
233
+ bool increment_counter, uint8_t flags,
234
+ uint8_t flags_start, uint8_t flags_end, uint8_t *out) {
235
+ __m256i h_vecs[8] = {
236
+ set1(key[0]), set1(key[1]), set1(key[2]), set1(key[3]),
237
+ set1(key[4]), set1(key[5]), set1(key[6]), set1(key[7]),
238
+ };
239
+ __m256i counter_low_vec, counter_high_vec;
240
+ load_counters(counter, increment_counter, &counter_low_vec,
241
+ &counter_high_vec);
242
+ uint8_t block_flags = flags | flags_start;
243
+
244
+ for (size_t block = 0; block < blocks; block++) {
245
+ if (block + 1 == blocks) {
246
+ block_flags |= flags_end;
247
+ }
248
+ __m256i block_len_vec = set1(BLAKE3_BLOCK_LEN);
249
+ __m256i block_flags_vec = set1(block_flags);
250
+ __m256i msg_vecs[16];
251
+ transpose_msg_vecs(inputs, block * BLAKE3_BLOCK_LEN, msg_vecs);
252
+
253
+ __m256i v[16] = {
254
+ h_vecs[0], h_vecs[1], h_vecs[2], h_vecs[3],
255
+ h_vecs[4], h_vecs[5], h_vecs[6], h_vecs[7],
256
+ set1(IV[0]), set1(IV[1]), set1(IV[2]), set1(IV[3]),
257
+ counter_low_vec, counter_high_vec, block_len_vec, block_flags_vec,
258
+ };
259
+ round_fn(v, msg_vecs, 0);
260
+ round_fn(v, msg_vecs, 1);
261
+ round_fn(v, msg_vecs, 2);
262
+ round_fn(v, msg_vecs, 3);
263
+ round_fn(v, msg_vecs, 4);
264
+ round_fn(v, msg_vecs, 5);
265
+ round_fn(v, msg_vecs, 6);
266
+ h_vecs[0] = xorv(v[0], v[8]);
267
+ h_vecs[1] = xorv(v[1], v[9]);
268
+ h_vecs[2] = xorv(v[2], v[10]);
269
+ h_vecs[3] = xorv(v[3], v[11]);
270
+ h_vecs[4] = xorv(v[4], v[12]);
271
+ h_vecs[5] = xorv(v[5], v[13]);
272
+ h_vecs[6] = xorv(v[6], v[14]);
273
+ h_vecs[7] = xorv(v[7], v[15]);
274
+
275
+ block_flags = flags;
276
+ }
277
+
278
+ transpose_vecs(h_vecs);
279
+ storeu(h_vecs[0], &out[0 * sizeof(__m256i)]);
280
+ storeu(h_vecs[1], &out[1 * sizeof(__m256i)]);
281
+ storeu(h_vecs[2], &out[2 * sizeof(__m256i)]);
282
+ storeu(h_vecs[3], &out[3 * sizeof(__m256i)]);
283
+ storeu(h_vecs[4], &out[4 * sizeof(__m256i)]);
284
+ storeu(h_vecs[5], &out[5 * sizeof(__m256i)]);
285
+ storeu(h_vecs[6], &out[6 * sizeof(__m256i)]);
286
+ storeu(h_vecs[7], &out[7 * sizeof(__m256i)]);
287
+ }
288
+
289
+ #if !defined(BLAKE3_NO_SSE41)
290
+ void blake3_hash_many_sse41(const uint8_t *const *inputs, size_t num_inputs,
291
+ size_t blocks, const uint32_t key[8],
292
+ uint64_t counter, bool increment_counter,
293
+ uint8_t flags, uint8_t flags_start,
294
+ uint8_t flags_end, uint8_t *out);
295
+ #else
296
+ void blake3_hash_many_portable(const uint8_t *const *inputs, size_t num_inputs,
297
+ size_t blocks, const uint32_t key[8],
298
+ uint64_t counter, bool increment_counter,
299
+ uint8_t flags, uint8_t flags_start,
300
+ uint8_t flags_end, uint8_t *out);
301
+ #endif
302
+
303
+ void blake3_hash_many_avx2(const uint8_t *const *inputs, size_t num_inputs,
304
+ size_t blocks, const uint32_t key[8],
305
+ uint64_t counter, bool increment_counter,
306
+ uint8_t flags, uint8_t flags_start,
307
+ uint8_t flags_end, uint8_t *out) {
308
+ while (num_inputs >= DEGREE) {
309
+ blake3_hash8_avx2(inputs, blocks, key, counter, increment_counter, flags,
310
+ flags_start, flags_end, out);
311
+ if (increment_counter) {
312
+ counter += DEGREE;
313
+ }
314
+ inputs += DEGREE;
315
+ num_inputs -= DEGREE;
316
+ out = &out[DEGREE * BLAKE3_OUT_LEN];
317
+ }
318
+ #if !defined(BLAKE3_NO_SSE41)
319
+ blake3_hash_many_sse41(inputs, num_inputs, blocks, key, counter,
320
+ increment_counter, flags, flags_start, flags_end, out);
321
+ #else
322
+ blake3_hash_many_portable(inputs, num_inputs, blocks, key, counter,
323
+ increment_counter, flags, flags_start, flags_end,
324
+ out);
325
+ #endif
326
+ }