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,403 @@
1
+ The official C implementation of BLAKE3.
2
+
3
+ # Example
4
+
5
+ An example program that hashes bytes from standard input and prints the
6
+ result:
7
+
8
+ ```c
9
+ #include "blake3.h"
10
+ #include <errno.h>
11
+ #include <stdio.h>
12
+ #include <string.h>
13
+ #include <unistd.h>
14
+
15
+ int main(void) {
16
+ // Initialize the hasher.
17
+ blake3_hasher hasher;
18
+ blake3_hasher_init(&hasher);
19
+
20
+ // Read input bytes from stdin.
21
+ unsigned char buf[65536];
22
+ while (1) {
23
+ ssize_t n = read(STDIN_FILENO, buf, sizeof(buf));
24
+ if (n > 0) {
25
+ blake3_hasher_update(&hasher, buf, n);
26
+ } else if (n == 0) {
27
+ break; // end of file
28
+ } else {
29
+ fprintf(stderr, "read failed: %s\n", strerror(errno));
30
+ return 1;
31
+ }
32
+ }
33
+
34
+ // Finalize the hash. BLAKE3_OUT_LEN is the default output length, 32 bytes.
35
+ uint8_t output[BLAKE3_OUT_LEN];
36
+ blake3_hasher_finalize(&hasher, output, BLAKE3_OUT_LEN);
37
+
38
+ // Print the hash as hexadecimal.
39
+ for (size_t i = 0; i < BLAKE3_OUT_LEN; i++) {
40
+ printf("%02x", output[i]);
41
+ }
42
+ printf("\n");
43
+ return 0;
44
+ }
45
+ ```
46
+
47
+ The code above is included in this directory as `example.c`. If you're
48
+ on x86\_64 with a Unix-like OS, you can compile a working binary like
49
+ this:
50
+
51
+ ```bash
52
+ gcc -O3 -o example example.c blake3.c blake3_dispatch.c blake3_portable.c \
53
+ blake3_sse2_x86-64_unix.S blake3_sse41_x86-64_unix.S blake3_avx2_x86-64_unix.S \
54
+ blake3_avx512_x86-64_unix.S
55
+ ```
56
+
57
+ # API
58
+
59
+ ## The Struct
60
+
61
+ ```c
62
+ typedef struct {
63
+ // private fields
64
+ } blake3_hasher;
65
+ ```
66
+
67
+ An incremental BLAKE3 hashing state, which can accept any number of
68
+ updates. This implementation doesn't allocate any heap memory, but
69
+ `sizeof(blake3_hasher)` itself is relatively large, currently 1912 bytes
70
+ on x86-64. This size can be reduced by restricting the maximum input
71
+ length, as described in Section 5.4 of [the BLAKE3
72
+ spec](https://github.com/BLAKE3-team/BLAKE3-specs/blob/master/blake3.pdf),
73
+ but this implementation doesn't currently support that strategy.
74
+
75
+ ## Common API Functions
76
+
77
+ ```c
78
+ void blake3_hasher_init(
79
+ blake3_hasher *self);
80
+ ```
81
+
82
+ Initialize a `blake3_hasher` in the default hashing mode.
83
+
84
+ ---
85
+
86
+ ```c
87
+ void blake3_hasher_update(
88
+ blake3_hasher *self,
89
+ const void *input,
90
+ size_t input_len);
91
+ ```
92
+
93
+ Add input to the hasher. This can be called any number of times. This function
94
+ is always single-threaded; for multithreading see `blake3_hasher_update_tbb`
95
+ below.
96
+
97
+
98
+ ---
99
+
100
+ ```c
101
+ void blake3_hasher_finalize(
102
+ const blake3_hasher *self,
103
+ uint8_t *out,
104
+ size_t out_len);
105
+ ```
106
+
107
+ Finalize the hasher and return an output of any length, given in bytes.
108
+ This doesn't modify the hasher itself, and it's possible to finalize
109
+ again after adding more input. The constant `BLAKE3_OUT_LEN` provides
110
+ the default output length, 32 bytes, which is recommended for most
111
+ callers. See the [Security Notes](#security-notes) below.
112
+
113
+ ## Less Common API Functions
114
+
115
+ ```c
116
+ void blake3_hasher_init_keyed(
117
+ blake3_hasher *self,
118
+ const uint8_t key[BLAKE3_KEY_LEN]);
119
+ ```
120
+
121
+ Initialize a `blake3_hasher` in the keyed hashing mode. The key must be
122
+ exactly 32 bytes.
123
+
124
+ ---
125
+
126
+ ```c
127
+ void blake3_hasher_init_derive_key(
128
+ blake3_hasher *self,
129
+ const char *context);
130
+ ```
131
+
132
+ Initialize a `blake3_hasher` in the key derivation mode. The context
133
+ string is given as an initialization parameter, and afterwards input key
134
+ material should be given with `blake3_hasher_update`. The context string
135
+ is a null-terminated C string which should be **hardcoded, globally
136
+ unique, and application-specific**. The context string should not
137
+ include any dynamic input like salts, nonces, or identifiers read from a
138
+ database at runtime. A good default format for the context string is
139
+ `"[application] [commit timestamp] [purpose]"`, e.g., `"example.com
140
+ 2019-12-25 16:18:03 session tokens v1"`.
141
+
142
+ This function is intended for application code written in C. For
143
+ language bindings, see `blake3_hasher_init_derive_key_raw` below.
144
+
145
+ ---
146
+
147
+ ```c
148
+ void blake3_hasher_init_derive_key_raw(
149
+ blake3_hasher *self,
150
+ const void *context,
151
+ size_t context_len);
152
+ ```
153
+
154
+ As `blake3_hasher_init_derive_key` above, except that the context string
155
+ is given as a pointer to an array of arbitrary bytes with a provided
156
+ length. This is intended for writing language bindings, where C string
157
+ conversion would add unnecessary overhead and new error cases. Unicode
158
+ strings should be encoded as UTF-8.
159
+
160
+ Application code in C should prefer `blake3_hasher_init_derive_key`,
161
+ which takes the context as a C string. If you need to use arbitrary
162
+ bytes as a context string in application code, consider whether you're
163
+ violating the requirement that context strings should be hardcoded.
164
+
165
+ ---
166
+
167
+ ```c
168
+ void blake3_hasher_update_tbb(
169
+ blake3_hasher *self,
170
+ const void *input,
171
+ size_t input_len);
172
+ ```
173
+
174
+ Add input to the hasher, using [oneTBB] to process large inputs using multiple
175
+ threads. This can be called any number of times. This gives the same result as
176
+ `blake3_hasher_update` above.
177
+
178
+ [oneTBB]: https://uxlfoundation.github.io/oneTBB/
179
+
180
+ NOTE: This function is only enabled when the library is compiled with CMake option `BLAKE3_USE_TBB`
181
+ and when the oneTBB library is detected on the host system. See the building instructions for
182
+ further details.
183
+
184
+ To get any performance benefit from multithreading, the input buffer needs to
185
+ be large. As a rule of thumb on x86_64, `blake3_hasher_update_tbb` is _slower_
186
+ than `blake3_hasher_update` for inputs under 128 KiB. That threshold varies
187
+ quite a lot across different processors, and it's important to benchmark your
188
+ specific use case.
189
+
190
+ Hashing large files with this function usually requires
191
+ [memory-mapping](https://en.wikipedia.org/wiki/Memory-mapped_file), since
192
+ reading a file into memory in a single-threaded loop takes longer than hashing
193
+ the resulting buffer. Note that hashing a memory-mapped file with this function
194
+ produces a "random" pattern of disk reads, which can be slow on spinning disks.
195
+ Again it's important to benchmark your specific use case.
196
+
197
+ This implementation doesn't require configuration of thread resources and will
198
+ use as many cores as possible by default. More fine-grained control of
199
+ resources is possible using the [oneTBB] API.
200
+
201
+ ---
202
+
203
+ ```c
204
+ void blake3_hasher_finalize_seek(
205
+ const blake3_hasher *self,
206
+ uint64_t seek,
207
+ uint8_t *out,
208
+ size_t out_len);
209
+ ```
210
+
211
+ The same as `blake3_hasher_finalize`, but with an additional `seek`
212
+ parameter for the starting byte position in the output stream. To
213
+ efficiently stream a large output without allocating memory, call this
214
+ function in a loop, incrementing `seek` by the output length each time.
215
+
216
+ ---
217
+
218
+ ```c
219
+ void blake3_hasher_reset(
220
+ blake3_hasher *self);
221
+ ```
222
+
223
+ Reset the hasher to its initial state, prior to any calls to
224
+ `blake3_hasher_update`. Currently this is no different from calling
225
+ `blake3_hasher_init` or similar again.
226
+
227
+ # Security Notes
228
+
229
+ Outputs shorter than the default length of 32 bytes (256 bits) provide less security. An N-bit
230
+ BLAKE3 output is intended to provide N bits of first and second preimage resistance and N/2
231
+ bits of collision resistance, for any N up to 256. Longer outputs don't provide any additional
232
+ security.
233
+
234
+ Avoid relying on the secrecy of the output offset, that is, the `seek` argument of
235
+ `blake3_hasher_finalize_seek`. [_Block-Cipher-Based Tree Hashing_ by Aldo
236
+ Gunsing](https://eprint.iacr.org/2022/283) shows that an attacker who knows both the message
237
+ and the key (if any) can easily determine the offset of an extended output. For comparison,
238
+ AES-CTR has a similar property: if you know the key, you can decrypt a block from an unknown
239
+ position in the output stream to recover its block index. Callers with strong secret keys
240
+ aren't affected in practice, but secret offsets are a [design
241
+ smell](https://en.wikipedia.org/wiki/Design_smell) in any case.
242
+
243
+ # Building
244
+
245
+ The easiest and most complete method of compiling this library is with CMake.
246
+ This is the method described in the next section. Toward the end of the
247
+ building section there are more in depth notes about compiling manually and
248
+ things that are useful to understand if you need to integrate this library with
249
+ another build system.
250
+
251
+ ## CMake
252
+
253
+ The minimum version of CMake is 3.9. The following invocations will compile and
254
+ install `libblake3`. With recent CMake:
255
+
256
+ ```bash
257
+ cmake -S c -B c/build "-DCMAKE_INSTALL_PREFIX=/usr/local"
258
+ cmake --build c/build --target install
259
+ ```
260
+
261
+ With an older CMake:
262
+
263
+ ```bash
264
+ cd c
265
+ mkdir build
266
+ cd build
267
+ cmake .. "-DCMAKE_INSTALL_PREFIX=/usr/local"
268
+ cmake --build . --target install
269
+ ```
270
+
271
+ The following options are available when compiling with CMake:
272
+
273
+ - `BLAKE3_USE_TBB`: Enable oneTBB parallelism (Requires a C++20 capable compiler)
274
+ - `BLAKE3_FETCH_TBB`: Allow fetching oneTBB from GitHub (only if not found on system)
275
+ - `BLAKE3_EXAMPLES`: Compile and install example programs
276
+
277
+ Options can be enabled like this:
278
+
279
+ ```bash
280
+ cmake -S c -B c/build "-DCMAKE_INSTALL_PREFIX=/usr/local" -DBLAKE3_USE_TBB=1 -DBLAKE3_FETCH_TBB=1
281
+ ```
282
+
283
+ ## Building manually
284
+
285
+ We try to keep the build simple enough that you can compile this library "by
286
+ hand", and it's expected that many callers will integrate it with their
287
+ pre-existing build systems. See the `gcc` one-liner in the "Example" section
288
+ above.
289
+
290
+ ### x86
291
+
292
+ Dynamic dispatch is enabled by default on x86. The implementation will
293
+ query the CPU at runtime to detect SIMD support, and it will use the
294
+ widest instruction set available. By default, `blake3_dispatch.c`
295
+ expects to be linked with code for five different instruction sets:
296
+ portable C, SSE2, SSE4.1, AVX2, and AVX-512.
297
+
298
+ For each of the x86 SIMD instruction sets, four versions are available:
299
+ three flavors of assembly (Unix, Windows MSVC, and Windows GNU) and one
300
+ version using C intrinsics. The assembly versions are generally
301
+ preferred. They perform better, they perform more consistently across
302
+ different compilers, and they build more quickly. On the other hand, the
303
+ assembly versions are x86\_64-only, and you need to select the right
304
+ flavor for your target platform.
305
+
306
+ Here's an example of building a shared library on x86\_64 Linux using
307
+ the assembly implementations:
308
+
309
+ ```bash
310
+ gcc -shared -O3 -o libblake3.so blake3.c blake3_dispatch.c blake3_portable.c \
311
+ blake3_sse2_x86-64_unix.S blake3_sse41_x86-64_unix.S blake3_avx2_x86-64_unix.S \
312
+ blake3_avx512_x86-64_unix.S
313
+ ```
314
+
315
+ When building the intrinsics-based implementations, you need to build
316
+ each implementation separately, with the corresponding instruction set
317
+ explicitly enabled in the compiler. Here's the same shared library using
318
+ the intrinsics-based implementations:
319
+
320
+ ```bash
321
+ gcc -c -fPIC -O3 -msse2 blake3_sse2.c -o blake3_sse2.o
322
+ gcc -c -fPIC -O3 -msse4.1 blake3_sse41.c -o blake3_sse41.o
323
+ gcc -c -fPIC -O3 -mavx2 blake3_avx2.c -o blake3_avx2.o
324
+ gcc -c -fPIC -O3 -mavx512f -mavx512vl blake3_avx512.c -o blake3_avx512.o
325
+ gcc -shared -O3 -o libblake3.so blake3.c blake3_dispatch.c blake3_portable.c \
326
+ blake3_avx2.o blake3_avx512.o blake3_sse41.o blake3_sse2.o
327
+ ```
328
+
329
+ Note above that building `blake3_avx512.c` requires both `-mavx512f` and
330
+ `-mavx512vl` under GCC and Clang. Under MSVC, the single `/arch:AVX512`
331
+ flag is sufficient. The MSVC equivalent of `-mavx2` is `/arch:AVX2`.
332
+ MSVC enables SSE2 and SSE4.1 by default, and it doesn't have a
333
+ corresponding flag.
334
+
335
+ If you want to omit SIMD code entirely, you need to explicitly disable
336
+ each instruction set. Here's an example of building a shared library on
337
+ x86 with only portable code:
338
+
339
+ ```bash
340
+ gcc -shared -O3 -o libblake3.so -DBLAKE3_NO_SSE2 -DBLAKE3_NO_SSE41 -DBLAKE3_NO_AVX2 \
341
+ -DBLAKE3_NO_AVX512 blake3.c blake3_dispatch.c blake3_portable.c
342
+ ```
343
+
344
+ ### ARM NEON
345
+
346
+ The NEON implementation is enabled by default on AArch64, but not on
347
+ other ARM targets, since not all of them support it. To enable it, set
348
+ `BLAKE3_USE_NEON=1`. Here's an example of building a shared library on
349
+ ARM Linux with NEON support:
350
+
351
+ ```bash
352
+ gcc -shared -O3 -o libblake3.so -DBLAKE3_USE_NEON=1 blake3.c blake3_dispatch.c \
353
+ blake3_portable.c blake3_neon.c
354
+ ```
355
+
356
+ To explicitiy disable using NEON instructions on AArch64, set
357
+ `BLAKE3_USE_NEON=0`.
358
+
359
+ ```bash
360
+ gcc -shared -O3 -o libblake3.so -DBLAKE3_USE_NEON=0 blake3.c blake3_dispatch.c \
361
+ blake3_portable.c
362
+ ```
363
+
364
+ Note that on some targets (ARMv7 in particular), extra flags may be
365
+ required to activate NEON support in the compiler. If you see an error
366
+ like...
367
+
368
+ ```
369
+ /usr/lib/gcc/armv7l-unknown-linux-gnueabihf/9.2.0/include/arm_neon.h:635:1: error: inlining failed
370
+ in call to always_inline ‘vaddq_u32’: target specific option mismatch
371
+ ```
372
+
373
+ ...then you may need to add something like `-mfpu=neon-vfpv4
374
+ -mfloat-abi=hard`.
375
+
376
+ ### Other Platforms
377
+
378
+ The portable implementation should work on most other architectures. For
379
+ example:
380
+
381
+ ```bash
382
+ gcc -shared -O3 -o libblake3.so blake3.c blake3_dispatch.c blake3_portable.c
383
+ ```
384
+
385
+ ### Multithreading
386
+
387
+ Multithreading is available using [oneTBB], by compiling the optional C++
388
+ support file [`blake3_tbb.cpp`](./blake3_tbb.cpp). For an example of using
389
+ `mmap` (non-Windows) and `blake3_hasher_update_tbb` to get large-file
390
+ performance on par with [`b3sum`](../b3sum), see
391
+ [`example_tbb.c`](./example_tbb.c). You can build it like this:
392
+
393
+ ```bash
394
+ g++ -c -O3 -fno-exceptions -fno-rtti -DBLAKE3_USE_TBB -o blake3_tbb.o blake3_tbb.cpp
395
+ gcc -O3 -o example_tbb -lstdc++ -ltbb -DBLAKE3_USE_TBB blake3_tbb.o example_tbb.c blake3.c \
396
+ blake3_dispatch.c blake3_portable.c blake3_sse2_x86-64_unix.S blake3_sse41_x86-64_unix.S \
397
+ blake3_avx2_x86-64_unix.S blake3_avx512_x86-64_unix.S
398
+ ```
399
+
400
+ NOTE: `-fno-exceptions` or equivalent is required to compile `blake3_tbb.cpp`,
401
+ and public API methods with external C linkage are marked `noexcept`. Compiling
402
+ that file with exceptions enabled will fail. Compiling with RTTI disabled isn't
403
+ required but is recommended for code size.
@@ -0,0 +1,14 @@
1
+ @PACKAGE_INIT@
2
+
3
+ include(CMakeFindDependencyMacro)
4
+
5
+ # Remember TBB option state
6
+ set(BLAKE3_USE_TBB @BLAKE3_USE_TBB@)
7
+
8
+ if(BLAKE3_USE_TBB)
9
+ find_dependency(TBB @TBB_VERSION@)
10
+ endif()
11
+
12
+ include("${CMAKE_CURRENT_LIST_DIR}/blake3-targets.cmake")
13
+
14
+ check_required_components(blake3)