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,253 @@
1
+ use std::env;
2
+
3
+ fn defined(var: &str) -> bool {
4
+ env::var_os(var).is_some()
5
+ }
6
+
7
+ fn target_components() -> Vec<String> {
8
+ let target = env::var("TARGET").unwrap();
9
+ target.split("-").map(|s| s.to_string()).collect()
10
+ }
11
+
12
+ fn is_x86_64() -> bool {
13
+ target_components()[0] == "x86_64"
14
+ }
15
+
16
+ fn is_windows_target() -> bool {
17
+ env::var("CARGO_CFG_TARGET_OS").unwrap() == "windows"
18
+ }
19
+
20
+ fn use_msvc_asm() -> bool {
21
+ const MSVC_NAMES: &[&str] = &["", "cl", "cl.exe"];
22
+ let target_os = env::var("CARGO_CFG_TARGET_OS").unwrap_or_default();
23
+ let target_env = env::var("CARGO_CFG_TARGET_ENV").unwrap_or_default();
24
+ let target_windows_msvc = target_os == "windows" && target_env == "msvc";
25
+ let host_triple = env::var("HOST").unwrap_or_default();
26
+ let target_triple = env::var("TARGET").unwrap_or_default();
27
+ let cross_compiling = host_triple != target_triple;
28
+ let cc = env::var("CC").unwrap_or_default().to_ascii_lowercase();
29
+ if !target_windows_msvc {
30
+ // We are not building for Windows with the MSVC toolchain.
31
+ false
32
+ } else if !cross_compiling && MSVC_NAMES.contains(&&*cc) {
33
+ // We are building on Windows with the MSVC toolchain (and not cross-compiling for another architecture or target).
34
+ true
35
+ } else {
36
+ // We are cross-compiling to Windows with the MSVC toolchain.
37
+ let target_arch = env::var("CARGO_CFG_TARGET_ARCH").unwrap_or_default();
38
+ let target_vendor = env::var("CARGO_CFG_TARGET_VENDOR").unwrap_or_default();
39
+ let cc = env::var(format!("CC_{target_arch}_{target_vendor}_windows_msvc"))
40
+ .unwrap_or_default()
41
+ .to_ascii_lowercase();
42
+ // Check if we are using the MSVC compiler.
43
+ MSVC_NAMES.contains(&&*cc)
44
+ }
45
+ }
46
+
47
+ fn is_x86_32() -> bool {
48
+ let arch = &target_components()[0];
49
+ arch == "i386" || arch == "i586" || arch == "i686"
50
+ }
51
+
52
+ fn is_armv7() -> bool {
53
+ target_components()[0] == "armv7"
54
+ }
55
+
56
+ fn is_aarch64() -> bool {
57
+ target_components()[0] == "aarch64"
58
+ }
59
+
60
+ // Windows targets may be using the MSVC toolchain or the GNU toolchain. The
61
+ // right compiler flags to use depend on the toolchain. (And we don't want to
62
+ // use flag_if_supported, because we don't want features to be silently
63
+ // disabled by old compilers.)
64
+ fn is_windows_msvc() -> bool {
65
+ // Some targets are only two components long, so check in steps.
66
+ target_components()[1] == "pc"
67
+ && target_components()[2] == "windows"
68
+ && target_components()[3] == "msvc"
69
+ }
70
+
71
+ fn new_build() -> cc::Build {
72
+ let mut build = cc::Build::new();
73
+ if !is_windows_msvc() {
74
+ build.flag("-std=c11");
75
+ }
76
+ build
77
+ }
78
+
79
+ fn new_cpp_build() -> cc::Build {
80
+ let mut build = cc::Build::new();
81
+ build.cpp(true);
82
+ if is_windows_msvc() {
83
+ build.flag("/std:c++20");
84
+ build.flag("/EHs-c-");
85
+ build.flag("/GR-");
86
+ } else {
87
+ build.flag("-std=c++20");
88
+ build.flag("-fno-exceptions");
89
+ build.flag("-fno-rtti");
90
+ }
91
+ build
92
+ }
93
+
94
+ fn c_dir_path(filename: &str) -> String {
95
+ // The `cross` tool doesn't support reading files in parent directories. As a hacky workaround
96
+ // in `cross_test.sh`, we move the c/ directory around and set BLAKE3_C_DIR_OVERRIDE. Regular
97
+ // building and testing doesn't require this.
98
+ if let Ok(c_dir_override) = env::var("BLAKE3_C_DIR_OVERRIDE") {
99
+ c_dir_override + "/" + filename
100
+ } else {
101
+ "../".to_string() + filename
102
+ }
103
+ }
104
+
105
+ fn main() -> Result<(), Box<dyn std::error::Error>> {
106
+ let mut base_build = new_build();
107
+ base_build.file(c_dir_path("blake3.c"));
108
+ base_build.file(c_dir_path("blake3_dispatch.c"));
109
+ base_build.file(c_dir_path("blake3_portable.c"));
110
+ if cfg!(feature = "tbb") {
111
+ base_build.define("BLAKE3_USE_TBB", "1");
112
+ }
113
+ base_build.compile("blake3_base");
114
+
115
+ if cfg!(feature = "tbb") {
116
+ let mut tbb_build = new_cpp_build();
117
+ tbb_build.define("BLAKE3_USE_TBB", "1");
118
+ tbb_build.file(c_dir_path("blake3_tbb.cpp"));
119
+ tbb_build.compile("blake3_tbb");
120
+ println!("cargo::rustc-link-lib=tbb");
121
+ }
122
+
123
+ if is_x86_64() && !defined("CARGO_FEATURE_PREFER_INTRINSICS") {
124
+ // On 64-bit, use the assembly implementations, unless the
125
+ // "prefer_intrinsics" feature is enabled.
126
+ if is_windows_target() {
127
+ if use_msvc_asm() {
128
+ let mut build = new_build();
129
+ build.file(c_dir_path("blake3_sse2_x86-64_windows_msvc.asm"));
130
+ build.file(c_dir_path("blake3_sse41_x86-64_windows_msvc.asm"));
131
+ build.file(c_dir_path("blake3_avx2_x86-64_windows_msvc.asm"));
132
+ build.file(c_dir_path("blake3_avx512_x86-64_windows_msvc.asm"));
133
+ build.compile("blake3_asm");
134
+ } else {
135
+ let mut build = new_build();
136
+ build.file(c_dir_path("blake3_sse2_x86-64_windows_gnu.S"));
137
+ build.file(c_dir_path("blake3_sse41_x86-64_windows_gnu.S"));
138
+ build.file(c_dir_path("blake3_avx2_x86-64_windows_gnu.S"));
139
+ build.file(c_dir_path("blake3_avx512_x86-64_windows_gnu.S"));
140
+ build.compile("blake3_asm");
141
+ }
142
+ } else {
143
+ // All non-Windows implementations are assumed to support
144
+ // Linux-style assembly. These files do contain a small
145
+ // explicit workaround for macOS also.
146
+ let mut build = new_build();
147
+ build.file(c_dir_path("blake3_sse2_x86-64_unix.S"));
148
+ build.file(c_dir_path("blake3_sse41_x86-64_unix.S"));
149
+ build.file(c_dir_path("blake3_avx2_x86-64_unix.S"));
150
+ build.file(c_dir_path("blake3_avx512_x86-64_unix.S"));
151
+ build.compile("blake3_asm");
152
+ }
153
+ } else if is_x86_64() || is_x86_32() {
154
+ // Assembly implementations are only for 64-bit. On 32-bit, or if
155
+ // the "prefer_intrinsics" feature is enabled, use the
156
+ // intrinsics-based C implementations. These each need to be
157
+ // compiled separately, with the corresponding instruction set
158
+ // extension explicitly enabled in the compiler.
159
+
160
+ let mut sse2_build = new_build();
161
+ sse2_build.file(c_dir_path("blake3_sse2.c"));
162
+ if is_windows_msvc() {
163
+ // /arch:SSE2 is the default on x86 and undefined on x86_64:
164
+ // https://docs.microsoft.com/en-us/cpp/build/reference/arch-x86
165
+ // It also includes SSE4.1 intrinsics:
166
+ // https://stackoverflow.com/a/32183222/823869
167
+ } else {
168
+ sse2_build.flag("-msse2");
169
+ }
170
+ sse2_build.compile("blake3_sse2");
171
+
172
+ let mut sse41_build = new_build();
173
+ sse41_build.file(c_dir_path("blake3_sse41.c"));
174
+ if is_windows_msvc() {
175
+ // /arch:SSE2 is the default on x86 and undefined on x86_64:
176
+ // https://docs.microsoft.com/en-us/cpp/build/reference/arch-x86
177
+ // It also includes SSE4.1 intrinsics:
178
+ // https://stackoverflow.com/a/32183222/823869
179
+ } else {
180
+ sse41_build.flag("-msse4.1");
181
+ }
182
+ sse41_build.compile("blake3_sse41");
183
+
184
+ let mut avx2_build = new_build();
185
+ avx2_build.file(c_dir_path("blake3_avx2.c"));
186
+ if is_windows_msvc() {
187
+ avx2_build.flag("/arch:AVX2");
188
+ } else {
189
+ avx2_build.flag("-mavx2");
190
+ }
191
+ avx2_build.compile("blake3_avx2");
192
+
193
+ let mut avx512_build = new_build();
194
+ avx512_build.file(c_dir_path("blake3_avx512.c"));
195
+ if is_windows_msvc() {
196
+ // Note that a lot of versions of MSVC don't support /arch:AVX512,
197
+ // and they'll discard it with a warning, hopefully leading to a
198
+ // build error.
199
+ avx512_build.flag("/arch:AVX512");
200
+ } else {
201
+ avx512_build.flag("-mavx512f");
202
+ avx512_build.flag("-mavx512vl");
203
+ }
204
+ avx512_build.compile("blake3_avx512");
205
+ }
206
+
207
+ // We only build NEON code here if
208
+ // 1) it's requested
209
+ // and 2) the root crate is not already building it.
210
+ // The only time this will really happen is if you build this
211
+ // crate by hand with the "neon" feature for some reason.
212
+ //
213
+ // In addition, 3) if the target is aarch64, NEON is on by default.
214
+ if defined("CARGO_FEATURE_NEON") || is_aarch64() {
215
+ let mut neon_build = new_build();
216
+ neon_build.file(c_dir_path("blake3_neon.c"));
217
+ // ARMv7 platforms that support NEON generally need the following
218
+ // flags. AArch64 supports NEON by default and does not support -mpfu.
219
+ if is_armv7() {
220
+ neon_build.flag("-mfpu=neon-vfpv4");
221
+ neon_build.flag("-mfloat-abi=hard");
222
+ }
223
+ neon_build.compile("blake3_neon");
224
+ }
225
+
226
+ // The `cc` crate does not automatically emit rerun-if directives for the
227
+ // environment variables it supports, in particular for $CC. We expect to
228
+ // do a lot of benchmarking across different compilers, so we explicitly
229
+ // add the variables that we're likely to need.
230
+ println!("cargo:rerun-if-env-changed=CC");
231
+ println!("cargo:rerun-if-env-changed=CFLAGS");
232
+
233
+ // Ditto for source files, though these shouldn't change as often. `ignore::Walk` respects
234
+ // .gitignore, so this doesn't traverse target/.
235
+ for result in ignore::Walk::new("..") {
236
+ let result = result?;
237
+ let path = result.path();
238
+ if path.is_file() {
239
+ println!("cargo:rerun-if-changed={}", path.to_str().unwrap());
240
+ }
241
+ }
242
+
243
+ // When compiling with clang-cl for windows, it adds .asm files to the root
244
+ // which we need to delete so cargo doesn't get angry
245
+ if is_windows_target() && !use_msvc_asm() {
246
+ let _ = std::fs::remove_file("blake3_avx2_x86-64_windows_gnu.asm");
247
+ let _ = std::fs::remove_file("blake3_avx512_x86-64_windows_gnu.asm");
248
+ let _ = std::fs::remove_file("blake3_sse2_x86-64_windows_gnu.asm");
249
+ let _ = std::fs::remove_file("blake3_sse41_x86-64_windows_gnu.asm");
250
+ }
251
+
252
+ Ok(())
253
+ }
@@ -0,0 +1,31 @@
1
+ #! /usr/bin/env bash
2
+
3
+ # This hacky script works around the fact that `cross test` does not support
4
+ # path dependencies. (It uses a docker shared folder to let the guest access
5
+ # project files, so parent directories aren't available.) Solve this problem by
6
+ # copying the entire project to a temp dir and rearranging paths to put "c" and
7
+ # "reference_impl" underneath "blake3_c_rust_bindings", so that everything is
8
+ # accessible. Hopefully this will just run on CI forever and no one will ever
9
+ # read this and discover my deep shame.
10
+
11
+ set -e -u -o pipefail
12
+
13
+ project_root="$(realpath "$(dirname "$BASH_SOURCE")/../..")"
14
+ tmpdir="$(mktemp -d)"
15
+ echo "Running cross tests in $tmpdir"
16
+ cd "$tmpdir"
17
+ git clone "$project_root" blake3
18
+ mv blake3/c/blake3_c_rust_bindings .
19
+ mv blake3/reference_impl blake3_c_rust_bindings
20
+ mv blake3/c blake3_c_rust_bindings
21
+ cd blake3_c_rust_bindings
22
+ sed -i 's|reference_impl = { path = "../../reference_impl" }|reference_impl = { path = "reference_impl" }|' Cargo.toml
23
+
24
+ export BLAKE3_C_DIR_OVERRIDE="./c"
25
+ cat > Cross.toml << EOF
26
+ [build.env]
27
+ passthrough = [
28
+ "BLAKE3_C_DIR_OVERRIDE",
29
+ ]
30
+ EOF
31
+ cross test "$@"
@@ -0,0 +1,333 @@
1
+ //! These are Rust bindings for the C implementation of BLAKE3. As there is a
2
+ //! native (and faster) Rust implementation of BLAKE3 provided in this same
3
+ //! repo, these bindings are not expected to be used in production. They're
4
+ //! intended for testing and benchmarking.
5
+
6
+ use std::ffi::{c_void, CString};
7
+ use std::mem::MaybeUninit;
8
+
9
+ #[cfg(test)]
10
+ mod test;
11
+
12
+ pub const BLOCK_LEN: usize = 64;
13
+ pub const CHUNK_LEN: usize = 1024;
14
+ pub const OUT_LEN: usize = 32;
15
+
16
+ // Feature detection functions for tests and benchmarks. Note that the C code
17
+ // does its own feature detection in blake3_dispatch.c.
18
+ #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
19
+ pub fn sse2_detected() -> bool {
20
+ is_x86_feature_detected!("sse2")
21
+ }
22
+
23
+ #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
24
+ pub fn sse41_detected() -> bool {
25
+ is_x86_feature_detected!("sse4.1")
26
+ }
27
+
28
+ #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
29
+ pub fn avx2_detected() -> bool {
30
+ is_x86_feature_detected!("avx2")
31
+ }
32
+
33
+ #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
34
+ pub fn avx512_detected() -> bool {
35
+ is_x86_feature_detected!("avx512f") && is_x86_feature_detected!("avx512vl")
36
+ }
37
+
38
+ #[derive(Clone)]
39
+ pub struct Hasher(ffi::blake3_hasher);
40
+
41
+ impl Hasher {
42
+ pub fn new() -> Self {
43
+ let mut c_state = MaybeUninit::uninit();
44
+ unsafe {
45
+ ffi::blake3_hasher_init(c_state.as_mut_ptr());
46
+ Self(c_state.assume_init())
47
+ }
48
+ }
49
+
50
+ pub fn new_keyed(key: &[u8; 32]) -> Self {
51
+ let mut c_state = MaybeUninit::uninit();
52
+ unsafe {
53
+ ffi::blake3_hasher_init_keyed(c_state.as_mut_ptr(), key.as_ptr());
54
+ Self(c_state.assume_init())
55
+ }
56
+ }
57
+
58
+ pub fn new_derive_key(context: &str) -> Self {
59
+ let mut c_state = MaybeUninit::uninit();
60
+ let context_c_string = CString::new(context).expect("valid C string, no null bytes");
61
+ unsafe {
62
+ ffi::blake3_hasher_init_derive_key(c_state.as_mut_ptr(), context_c_string.as_ptr());
63
+ Self(c_state.assume_init())
64
+ }
65
+ }
66
+
67
+ pub fn new_derive_key_raw(context: &[u8]) -> Self {
68
+ let mut c_state = MaybeUninit::uninit();
69
+ unsafe {
70
+ ffi::blake3_hasher_init_derive_key_raw(
71
+ c_state.as_mut_ptr(),
72
+ context.as_ptr() as *const _,
73
+ context.len(),
74
+ );
75
+ Self(c_state.assume_init())
76
+ }
77
+ }
78
+
79
+ pub fn update(&mut self, input: &[u8]) {
80
+ unsafe {
81
+ ffi::blake3_hasher_update(&mut self.0, input.as_ptr() as *const c_void, input.len());
82
+ }
83
+ }
84
+
85
+ #[cfg(feature = "tbb")]
86
+ pub fn update_tbb(&mut self, input: &[u8]) {
87
+ unsafe {
88
+ ffi::blake3_hasher_update_tbb(
89
+ &mut self.0,
90
+ input.as_ptr() as *const c_void,
91
+ input.len(),
92
+ );
93
+ }
94
+ }
95
+
96
+ pub fn finalize(&self, output: &mut [u8]) {
97
+ unsafe {
98
+ ffi::blake3_hasher_finalize(&self.0, output.as_mut_ptr(), output.len());
99
+ }
100
+ }
101
+
102
+ pub fn finalize_seek(&self, seek: u64, output: &mut [u8]) {
103
+ unsafe {
104
+ ffi::blake3_hasher_finalize_seek(&self.0, seek, output.as_mut_ptr(), output.len());
105
+ }
106
+ }
107
+
108
+ pub fn reset(&mut self) {
109
+ unsafe {
110
+ ffi::blake3_hasher_reset(&mut self.0);
111
+ }
112
+ }
113
+ }
114
+
115
+ pub mod ffi {
116
+ #[repr(C)]
117
+ #[derive(Copy, Clone)]
118
+ pub struct blake3_chunk_state {
119
+ pub cv: [u32; 8usize],
120
+ pub chunk_counter: u64,
121
+ pub buf: [u8; 64usize],
122
+ pub buf_len: u8,
123
+ pub blocks_compressed: u8,
124
+ pub flags: u8,
125
+ }
126
+
127
+ #[repr(C)]
128
+ #[derive(Copy, Clone)]
129
+ pub struct blake3_hasher {
130
+ pub key: [u32; 8usize],
131
+ pub chunk: blake3_chunk_state,
132
+ pub cv_stack_len: u8,
133
+ pub cv_stack: [u8; 1728usize],
134
+ }
135
+
136
+ extern "C" {
137
+ // public interface
138
+ pub fn blake3_hasher_init(self_: *mut blake3_hasher);
139
+ pub fn blake3_hasher_init_keyed(self_: *mut blake3_hasher, key: *const u8);
140
+ pub fn blake3_hasher_init_derive_key(
141
+ self_: *mut blake3_hasher,
142
+ context: *const ::std::os::raw::c_char,
143
+ );
144
+ pub fn blake3_hasher_init_derive_key_raw(
145
+ self_: *mut blake3_hasher,
146
+ context: *const ::std::os::raw::c_void,
147
+ context_len: usize,
148
+ );
149
+ pub fn blake3_hasher_update(
150
+ self_: *mut blake3_hasher,
151
+ input: *const ::std::os::raw::c_void,
152
+ input_len: usize,
153
+ );
154
+ #[cfg(feature = "tbb")]
155
+ pub fn blake3_hasher_update_tbb(
156
+ self_: *mut blake3_hasher,
157
+ input: *const ::std::os::raw::c_void,
158
+ input_len: usize,
159
+ );
160
+ pub fn blake3_hasher_finalize(self_: *const blake3_hasher, out: *mut u8, out_len: usize);
161
+ pub fn blake3_hasher_finalize_seek(
162
+ self_: *const blake3_hasher,
163
+ seek: u64,
164
+ out: *mut u8,
165
+ out_len: usize,
166
+ );
167
+ pub fn blake3_hasher_reset(self_: *mut blake3_hasher);
168
+
169
+ // portable low-level functions
170
+ pub fn blake3_compress_in_place_portable(
171
+ cv: *mut u32,
172
+ block: *const u8,
173
+ block_len: u8,
174
+ counter: u64,
175
+ flags: u8,
176
+ );
177
+ pub fn blake3_compress_xof_portable(
178
+ cv: *const u32,
179
+ block: *const u8,
180
+ block_len: u8,
181
+ counter: u64,
182
+ flags: u8,
183
+ out: *mut u8,
184
+ );
185
+ pub fn blake3_hash_many_portable(
186
+ inputs: *const *const u8,
187
+ num_inputs: usize,
188
+ blocks: usize,
189
+ key: *const u32,
190
+ counter: u64,
191
+ increment_counter: bool,
192
+ flags: u8,
193
+ flags_start: u8,
194
+ flags_end: u8,
195
+ out: *mut u8,
196
+ );
197
+ }
198
+
199
+ #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
200
+ pub mod x86 {
201
+ extern "C" {
202
+ // SSE2 low level functions
203
+ pub fn blake3_compress_in_place_sse2(
204
+ cv: *mut u32,
205
+ block: *const u8,
206
+ block_len: u8,
207
+ counter: u64,
208
+ flags: u8,
209
+ );
210
+ pub fn blake3_compress_xof_sse2(
211
+ cv: *const u32,
212
+ block: *const u8,
213
+ block_len: u8,
214
+ counter: u64,
215
+ flags: u8,
216
+ out: *mut u8,
217
+ );
218
+ pub fn blake3_hash_many_sse2(
219
+ inputs: *const *const u8,
220
+ num_inputs: usize,
221
+ blocks: usize,
222
+ key: *const u32,
223
+ counter: u64,
224
+ increment_counter: bool,
225
+ flags: u8,
226
+ flags_start: u8,
227
+ flags_end: u8,
228
+ out: *mut u8,
229
+ );
230
+
231
+ // SSE4.1 low level functions
232
+ pub fn blake3_compress_in_place_sse41(
233
+ cv: *mut u32,
234
+ block: *const u8,
235
+ block_len: u8,
236
+ counter: u64,
237
+ flags: u8,
238
+ );
239
+ pub fn blake3_compress_xof_sse41(
240
+ cv: *const u32,
241
+ block: *const u8,
242
+ block_len: u8,
243
+ counter: u64,
244
+ flags: u8,
245
+ out: *mut u8,
246
+ );
247
+ pub fn blake3_hash_many_sse41(
248
+ inputs: *const *const u8,
249
+ num_inputs: usize,
250
+ blocks: usize,
251
+ key: *const u32,
252
+ counter: u64,
253
+ increment_counter: bool,
254
+ flags: u8,
255
+ flags_start: u8,
256
+ flags_end: u8,
257
+ out: *mut u8,
258
+ );
259
+
260
+ // AVX2 low level functions
261
+ pub fn blake3_hash_many_avx2(
262
+ inputs: *const *const u8,
263
+ num_inputs: usize,
264
+ blocks: usize,
265
+ key: *const u32,
266
+ counter: u64,
267
+ increment_counter: bool,
268
+ flags: u8,
269
+ flags_start: u8,
270
+ flags_end: u8,
271
+ out: *mut u8,
272
+ );
273
+
274
+ // AVX-512 low level functions
275
+ pub fn blake3_compress_xof_avx512(
276
+ cv: *const u32,
277
+ block: *const u8,
278
+ block_len: u8,
279
+ counter: u64,
280
+ flags: u8,
281
+ out: *mut u8,
282
+ );
283
+ pub fn blake3_compress_in_place_avx512(
284
+ cv: *mut u32,
285
+ block: *const u8,
286
+ block_len: u8,
287
+ counter: u64,
288
+ flags: u8,
289
+ );
290
+ pub fn blake3_hash_many_avx512(
291
+ inputs: *const *const u8,
292
+ num_inputs: usize,
293
+ blocks: usize,
294
+ key: *const u32,
295
+ counter: u64,
296
+ increment_counter: bool,
297
+ flags: u8,
298
+ flags_start: u8,
299
+ flags_end: u8,
300
+ out: *mut u8,
301
+ );
302
+ #[cfg(unix)]
303
+ pub fn blake3_xof_many_avx512(
304
+ cv: *const u32,
305
+ block: *const u8,
306
+ block_len: u8,
307
+ counter: u64,
308
+ flags: u8,
309
+ out: *mut u8,
310
+ outblocks: usize,
311
+ );
312
+ }
313
+ }
314
+
315
+ #[cfg(feature = "neon")]
316
+ pub mod neon {
317
+ extern "C" {
318
+ // NEON low level functions
319
+ pub fn blake3_hash_many_neon(
320
+ inputs: *const *const u8,
321
+ num_inputs: usize,
322
+ blocks: usize,
323
+ key: *const u32,
324
+ counter: u64,
325
+ increment_counter: bool,
326
+ flags: u8,
327
+ flags_start: u8,
328
+ flags_end: u8,
329
+ out: *mut u8,
330
+ );
331
+ }
332
+ }
333
+ }