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,383 @@
1
+ cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
2
+
3
+ # respect C_EXTENSIONS OFF without explicitly setting C_STANDARD
4
+ if (POLICY CMP0128)
5
+ cmake_policy(SET CMP0128 NEW)
6
+ endif()
7
+ # mark_as_advanced does not implicitly create UNINITIALIZED cache entries
8
+ if (POLICY CMP0102)
9
+ cmake_policy(SET CMP0102 NEW)
10
+ endif()
11
+
12
+ project(libblake3
13
+ VERSION 1.8.2
14
+ DESCRIPTION "BLAKE3 C implementation"
15
+ LANGUAGES C CXX ASM
16
+ )
17
+
18
+ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
19
+
20
+ option(BLAKE3_USE_TBB "Enable oneTBB parallelism" OFF)
21
+ option(BLAKE3_FETCH_TBB "Allow fetching oneTBB from GitHub if not found on system" OFF)
22
+
23
+ include(CTest)
24
+ include(FeatureSummary)
25
+ include(GNUInstallDirs)
26
+
27
+ add_subdirectory(dependencies)
28
+
29
+ # architecture lists for which to enable assembly / SIMD sources
30
+ set(BLAKE3_AMD64_NAMES amd64 AMD64 x86_64)
31
+ set(BLAKE3_X86_NAMES i686 x86 X86)
32
+ set(BLAKE3_ARMv8_NAMES aarch64 AArch64 arm64 ARM64 armv8 armv8a)
33
+ # default SIMD compiler flag configuration (can be overriden by toolchains or CLI)
34
+ if(MSVC)
35
+ set(BLAKE3_CFLAGS_SSE2 "/arch:SSE2" CACHE STRING "the compiler flags to enable SSE2")
36
+ # MSVC has no dedicated sse4.1 flag (see https://learn.microsoft.com/en-us/cpp/build/reference/arch-x86?view=msvc-170)
37
+ set(BLAKE3_CFLAGS_SSE4.1 "/arch:AVX" CACHE STRING "the compiler flags to enable SSE4.1")
38
+ set(BLAKE3_CFLAGS_AVX2 "/arch:AVX2" CACHE STRING "the compiler flags to enable AVX2")
39
+ set(BLAKE3_CFLAGS_AVX512 "/arch:AVX512" CACHE STRING "the compiler flags to enable AVX512")
40
+
41
+ set(BLAKE3_AMD64_ASM_SOURCES
42
+ blake3_avx2_x86-64_windows_msvc.asm
43
+ blake3_avx512_x86-64_windows_msvc.asm
44
+ blake3_sse2_x86-64_windows_msvc.asm
45
+ blake3_sse41_x86-64_windows_msvc.asm
46
+ )
47
+
48
+ elseif(CMAKE_C_COMPILER_ID STREQUAL "GNU"
49
+ OR CMAKE_C_COMPILER_ID STREQUAL "Clang"
50
+ OR CMAKE_C_COMPILER_ID STREQUAL "AppleClang")
51
+ set(BLAKE3_CFLAGS_SSE2 "-msse2" CACHE STRING "the compiler flags to enable SSE2")
52
+ set(BLAKE3_CFLAGS_SSE4.1 "-msse4.1" CACHE STRING "the compiler flags to enable SSE4.1")
53
+ set(BLAKE3_CFLAGS_AVX2 "-mavx2" CACHE STRING "the compiler flags to enable AVX2")
54
+ set(BLAKE3_CFLAGS_AVX512 "-mavx512f -mavx512vl" CACHE STRING "the compiler flags to enable AVX512")
55
+
56
+ if (WIN32 OR CYGWIN)
57
+ set(BLAKE3_AMD64_ASM_SOURCES
58
+ blake3_avx2_x86-64_windows_gnu.S
59
+ blake3_avx512_x86-64_windows_gnu.S
60
+ blake3_sse2_x86-64_windows_gnu.S
61
+ blake3_sse41_x86-64_windows_gnu.S
62
+ )
63
+
64
+ elseif(UNIX)
65
+ set(BLAKE3_AMD64_ASM_SOURCES
66
+ blake3_avx2_x86-64_unix.S
67
+ blake3_avx512_x86-64_unix.S
68
+ blake3_sse2_x86-64_unix.S
69
+ blake3_sse41_x86-64_unix.S
70
+ )
71
+ endif()
72
+
73
+ if (CMAKE_SYSTEM_PROCESSOR IN_LIST BLAKE3_ARMv8_NAMES
74
+ AND NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
75
+ # 32-bit ARMv8 needs NEON to be enabled explicitly
76
+ set(BLAKE3_CFLAGS_NEON "-mfpu=neon" CACHE STRING "the compiler flags to enable NEON")
77
+ endif()
78
+ endif()
79
+
80
+ mark_as_advanced(BLAKE3_CFLAGS_SSE2 BLAKE3_CFLAGS_SSE4.1 BLAKE3_CFLAGS_AVX2 BLAKE3_CFLAGS_AVX512 BLAKE3_CFLAGS_NEON)
81
+ mark_as_advanced(BLAKE3_AMD64_ASM_SOURCES)
82
+
83
+ message(STATUS "BLAKE3 SIMD configuration: ${CMAKE_C_COMPILER_ARCHITECTURE_ID}")
84
+ if(MSVC AND DEFINED CMAKE_C_COMPILER_ARCHITECTURE_ID)
85
+ if(CMAKE_C_COMPILER_ARCHITECTURE_ID MATCHES "[Xx]86")
86
+ set(BLAKE3_SIMD_TYPE "x86-intrinsics" CACHE STRING "the SIMD acceleration type to use")
87
+
88
+ elseif(CMAKE_C_COMPILER_ARCHITECTURE_ID MATCHES "[Xx]64")
89
+ set(BLAKE3_SIMD_TYPE "amd64-asm" CACHE STRING "the SIMD acceleration type to use")
90
+
91
+ elseif(CMAKE_C_COMPILER_ARCHITECTURE_ID MATCHES "[Aa][Rr][Mm]64")
92
+ set(BLAKE3_SIMD_TYPE "neon-intrinsics" CACHE STRING "the SIMD acceleration type to use")
93
+
94
+ else()
95
+ set(BLAKE3_SIMD_TYPE "none" CACHE STRING "the SIMD acceleration type to use")
96
+ endif()
97
+
98
+ elseif(CMAKE_SYSTEM_PROCESSOR IN_LIST BLAKE3_AMD64_NAMES)
99
+ set(BLAKE3_SIMD_TYPE "amd64-asm" CACHE STRING "the SIMD acceleration type to use")
100
+
101
+ elseif(CMAKE_SYSTEM_PROCESSOR IN_LIST BLAKE3_X86_NAMES
102
+ AND DEFINED BLAKE3_CFLAGS_SSE2
103
+ AND DEFINED BLAKE3_CFLAGS_SSE4.1
104
+ AND DEFINED BLAKE3_CFLAGS_AVX2
105
+ AND DEFINED BLAKE3_CFLAGS_AVX512)
106
+ set(BLAKE3_SIMD_TYPE "x86-intrinsics" CACHE STRING "the SIMD acceleration type to use")
107
+
108
+ elseif((CMAKE_SYSTEM_PROCESSOR IN_LIST BLAKE3_ARMv8_NAMES
109
+ OR ANDROID_ABI STREQUAL "armeabi-v7a"
110
+ OR BLAKE3_USE_NEON_INTRINSICS)
111
+ AND (DEFINED BLAKE3_CFLAGS_NEON
112
+ OR CMAKE_SIZEOF_VOID_P EQUAL 8))
113
+ set(BLAKE3_SIMD_TYPE "neon-intrinsics" CACHE STRING "the SIMD acceleration type to use")
114
+
115
+ else()
116
+ set(BLAKE3_SIMD_TYPE "none" CACHE STRING "the SIMD acceleration type to use")
117
+ endif()
118
+
119
+ mark_as_advanced(BLAKE3_SIMD_TYPE)
120
+
121
+ # library target
122
+ add_library(blake3
123
+ blake3.c
124
+ blake3_dispatch.c
125
+ blake3_portable.c
126
+ )
127
+ add_library(BLAKE3::blake3 ALIAS blake3)
128
+
129
+ # library configuration
130
+ set(PKG_CONFIG_CFLAGS)
131
+ if (BUILD_SHARED_LIBS)
132
+ target_compile_definitions(blake3
133
+ PUBLIC BLAKE3_DLL
134
+ PRIVATE BLAKE3_DLL_EXPORTS
135
+ )
136
+ list(APPEND PKG_CONFIG_CFLAGS -DBLAKE3_DLL)
137
+ endif()
138
+ target_include_directories(blake3 PUBLIC
139
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
140
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
141
+ )
142
+ set_target_properties(blake3 PROPERTIES
143
+ VERSION ${PROJECT_VERSION}
144
+ SOVERSION 0
145
+ C_VISIBILITY_PRESET hidden
146
+ C_EXTENSIONS OFF
147
+ )
148
+ target_compile_features(blake3 PUBLIC c_std_99)
149
+ if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.12)
150
+ target_compile_features(blake3 PUBLIC cxx_std_20)
151
+ # else: add it further below through `BLAKE3_CMAKE_CXXFLAGS_*`
152
+ endif()
153
+
154
+ # ensure C_EXTENSIONS OFF is respected without overriding CMAKE_C_STANDARD
155
+ # which may be set by the user or toolchain file
156
+ if (NOT POLICY CMP0128 AND NOT DEFINED CMAKE_C_STANDARD)
157
+ set_target_properties(blake3 PROPERTIES C_STANDARD 99)
158
+ endif()
159
+
160
+ # optional SIMD sources
161
+ if(BLAKE3_SIMD_TYPE STREQUAL "amd64-asm")
162
+ if (NOT DEFINED BLAKE3_AMD64_ASM_SOURCES)
163
+ message(FATAL_ERROR "BLAKE3_SIMD_TYPE is set to 'amd64-asm' but no assembly sources are available for the target architecture.")
164
+ endif()
165
+ set(BLAKE3_SIMD_AMD64_ASM ON)
166
+
167
+ if(MSVC)
168
+ enable_language(ASM_MASM)
169
+ endif()
170
+
171
+ target_sources(blake3 PRIVATE ${BLAKE3_AMD64_ASM_SOURCES})
172
+
173
+ elseif(BLAKE3_SIMD_TYPE STREQUAL "x86-intrinsics")
174
+ if (NOT DEFINED BLAKE3_CFLAGS_SSE2
175
+ OR NOT DEFINED BLAKE3_CFLAGS_SSE4.1
176
+ OR NOT DEFINED BLAKE3_CFLAGS_AVX2
177
+ OR NOT DEFINED BLAKE3_CFLAGS_AVX512)
178
+ message(FATAL_ERROR "BLAKE3_SIMD_TYPE is set to 'x86-intrinsics' but no compiler flags are available for the target architecture.")
179
+ endif()
180
+ set(BLAKE3_SIMD_X86_INTRINSICS ON)
181
+
182
+ target_sources(blake3 PRIVATE
183
+ blake3_avx2.c
184
+ blake3_avx512.c
185
+ blake3_sse2.c
186
+ blake3_sse41.c
187
+ )
188
+ set_source_files_properties(blake3_avx2.c PROPERTIES COMPILE_FLAGS "${BLAKE3_CFLAGS_AVX2}")
189
+ set_source_files_properties(blake3_avx512.c PROPERTIES COMPILE_FLAGS "${BLAKE3_CFLAGS_AVX512}")
190
+ set_source_files_properties(blake3_sse2.c PROPERTIES COMPILE_FLAGS "${BLAKE3_CFLAGS_SSE2}")
191
+ set_source_files_properties(blake3_sse41.c PROPERTIES COMPILE_FLAGS "${BLAKE3_CFLAGS_SSE4.1}")
192
+
193
+ elseif(BLAKE3_SIMD_TYPE STREQUAL "neon-intrinsics")
194
+ set(BLAKE3_SIMD_NEON_INTRINSICS ON)
195
+
196
+ target_sources(blake3 PRIVATE
197
+ blake3_neon.c
198
+ )
199
+ target_compile_definitions(blake3 PRIVATE
200
+ BLAKE3_USE_NEON=1
201
+ )
202
+
203
+ if (DEFINED BLAKE3_CFLAGS_NEON)
204
+ set_source_files_properties(blake3_neon.c PROPERTIES COMPILE_FLAGS "${BLAKE3_CFLAGS_NEON}")
205
+ endif()
206
+
207
+ elseif(BLAKE3_SIMD_TYPE STREQUAL "none")
208
+ target_compile_definitions(blake3 PRIVATE
209
+ BLAKE3_USE_NEON=0
210
+ BLAKE3_NO_SSE2
211
+ BLAKE3_NO_SSE41
212
+ BLAKE3_NO_AVX2
213
+ BLAKE3_NO_AVX512
214
+ )
215
+
216
+ else()
217
+ message(FATAL_ERROR "BLAKE3_SIMD_TYPE is set to an unknown value: '${BLAKE3_SIMD_TYPE}'")
218
+ endif()
219
+
220
+ if(BLAKE3_USE_TBB)
221
+ find_package(TBB 2021.11.0 QUIET)
222
+ if(NOT TBB_FOUND AND NOT TARGET TBB::tbb)
223
+ message(WARNING
224
+ "oneTBB not found; disabling BLAKE3_USE_TBB\n"
225
+ "Enable BLAKE3_FETCH_TBB to automatically fetch and build oneTBB"
226
+ )
227
+ set(BLAKE3_USE_TBB OFF)
228
+ else()
229
+ target_sources(blake3
230
+ PRIVATE
231
+ blake3_tbb.cpp)
232
+ target_link_libraries(blake3
233
+ PUBLIC
234
+ # Make shared TBB a transitive dependency. The consuming program is technically not required
235
+ # to link TBB in order for libblake3 to function but we do this in order to prevent the
236
+ # possibility of multiple separate TBB runtimes being linked into a final program in case
237
+ # the consuming program also happens to already use TBB.
238
+ TBB::tbb)
239
+ target_compile_definitions(blake3
240
+ PUBLIC
241
+ BLAKE3_USE_TBB)
242
+ endif()
243
+ list(APPEND PKG_CONFIG_REQUIRES "tbb >= ${TBB_VERSION}")
244
+ list(APPEND PKG_CONFIG_CFLAGS -DBLAKE3_USE_TBB)
245
+ include(CheckCXXSymbolExists)
246
+ check_cxx_symbol_exists(_LIBCPP_VERSION "version" BLAKE3_HAVE_LIBCPP)
247
+ check_cxx_symbol_exists(__GLIBCXX__ "version" BLAKE3_HAVE_GLIBCXX)
248
+ if(BLAKE3_HAVE_GLIBCXX)
249
+ list(APPEND PKG_CONFIG_LIBS -lstdc++)
250
+ elseif(BLAKE3_HAVE_LIBCPP)
251
+ list(APPEND PKG_CONFIG_LIBS -lc++)
252
+ endif()
253
+ endif()
254
+
255
+ if(BLAKE3_USE_TBB)
256
+ # Define some scratch variables for building appropriate flags per compiler
257
+ if(CMAKE_VERSION VERSION_LESS 3.12)
258
+ set(APPEND BLAKE3_CXX_STANDARD_FLAGS_GNU -std=c++20)
259
+ set(APPEND BLAKE3_CXX_STANDARD_FLAGS_MSVC /std:c++20)
260
+ endif()
261
+ set(BLAKE3_CXXFLAGS_GNU "-fno-exceptions;-fno-rtti;${BLAKE3_CXX_STANDARD_FLAGS_GNU}" CACHE STRING "C++ flags used for compiling private BLAKE3 library components with GNU-like compiler frontends.")
262
+ set(BLAKE3_CXXFLAGS_MSVC "/EHs-c-;/GR-;${BLAKE3_CXX_STANDARD_FLAGS_MSVC}" CACHE STRING "C++ flags used for compiling private BLAKE3 library components with MSVC-like compiler frontends.")
263
+ # Get the C++ compiler name without extension
264
+ get_filename_component(BLAKE3_CMAKE_CXX_COMPILER_NAME "${CMAKE_CXX_COMPILER}" NAME_WE)
265
+ # Strip any trailing versioning from the C++ compiler name
266
+ string(REGEX MATCH "^(clang\\+\\+|clang-cl)" BLAKE3_CMAKE_CXX_COMPILER_NAME "${BLAKE3_CMAKE_CXX_COMPILER_NAME}")
267
+
268
+ # TODO: Simplify with CMAKE_CXX_COMPILER_FRONTEND_VARIANT once min CMake version is 3.14.
269
+ if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
270
+ target_compile_options(blake3 PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${BLAKE3_CXXFLAGS_GNU}>)
271
+ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
272
+ if(BLAKE3_CMAKE_CXX_COMPILER_NAME STREQUAL "clang++")
273
+ target_compile_options(blake3 PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${BLAKE3_CXXFLAGS_GNU}>)
274
+ elseif(BLAKE3_CMAKE_CXX_COMPILER_NAME STREQUAL "clang-cl")
275
+ target_compile_options(blake3 PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${BLAKE3_CXXFLAGS_MSVC}>)
276
+ endif()
277
+ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
278
+ target_compile_options(blake3 PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${BLAKE3_CXXFLAGS_GNU}>)
279
+ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
280
+ target_compile_options(blake3 PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${BLAKE3_CXXFLAGS_MSVC}>)
281
+ endif()
282
+
283
+ # Undefine scratch variables
284
+ unset(BLAKE3_CXX_STANDARD_FLAGS_GNU)
285
+ unset(BLAKE3_CXX_STANDARD_FLAGS_MSVC)
286
+ unset(BLAKE3_CMAKE_CXX_COMPILER_NAME)
287
+ unset(BLAKE3_CXXFLAGS_GNU)
288
+ unset(BLAKE3_CXXFLAGS_MSVC)
289
+ endif()
290
+
291
+ # cmake install support
292
+ install(FILES blake3.h DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
293
+ install(TARGETS blake3 EXPORT blake3-targets
294
+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
295
+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
296
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
297
+ )
298
+ install(EXPORT blake3-targets
299
+ NAMESPACE BLAKE3::
300
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/blake3"
301
+ )
302
+
303
+ include(CMakePackageConfigHelpers)
304
+ configure_package_config_file(blake3-config.cmake.in
305
+ "${CMAKE_CURRENT_BINARY_DIR}/blake3-config.cmake"
306
+
307
+ INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/blake3"
308
+ )
309
+ write_basic_package_version_file(
310
+ "${CMAKE_CURRENT_BINARY_DIR}/blake3-config-version.cmake"
311
+ VERSION ${libblake3_VERSION}
312
+ COMPATIBILITY SameMajorVersion
313
+ )
314
+ install(FILES
315
+ "${CMAKE_CURRENT_BINARY_DIR}/blake3-config.cmake"
316
+ "${CMAKE_CURRENT_BINARY_DIR}/blake3-config-version.cmake"
317
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/blake3"
318
+ )
319
+
320
+ # Function for joining paths known from most languages
321
+ #
322
+ # SPDX-License-Identifier: (MIT OR CC0-1.0)
323
+ # Copyright 2020 Jan Tojnar
324
+ # https://github.com/jtojnar/cmake-snips
325
+ #
326
+ # Modelled after Python’s os.path.join
327
+ # https://docs.python.org/3.7/library/os.path.html#os.path.join
328
+ # Windows not supported
329
+ function(join_paths joined_path first_path_segment)
330
+ set(temp_path "${first_path_segment}")
331
+ foreach(current_segment IN LISTS ARGN)
332
+ if(NOT ("${current_segment}" STREQUAL ""))
333
+ if(IS_ABSOLUTE "${current_segment}")
334
+ set(temp_path "${current_segment}")
335
+ else()
336
+ set(temp_path "${temp_path}/${current_segment}")
337
+ endif()
338
+ endif()
339
+ endforeach()
340
+ set(${joined_path} "${temp_path}" PARENT_SCOPE)
341
+ endfunction()
342
+
343
+ # In-place rewrite a string and and join by `sep`.
344
+ #
345
+ # TODO: Replace function with list(JOIN) when updating to CMake 3.12
346
+ function(join_pkg_config_field sep requires)
347
+ set(_requires "${${requires}}") # avoid shadowing issues, e.g. "${requires}"=len
348
+ list(LENGTH "${requires}" len)
349
+ set(idx 1)
350
+ foreach(req IN LISTS _requires)
351
+ string(APPEND acc "${req}")
352
+ if(idx LESS len)
353
+ string(APPEND acc "${sep}")
354
+ endif()
355
+ math(EXPR idx "${idx} + 1")
356
+ endforeach()
357
+ set("${requires}" "${acc}" PARENT_SCOPE)
358
+ endfunction()
359
+
360
+ # pkg-config support
361
+ join_pkg_config_field(", " PKG_CONFIG_REQUIRES)
362
+ join_pkg_config_field(" " PKG_CONFIG_LIBS)
363
+ join_pkg_config_field(" " PKG_CONFIG_CFLAGS)
364
+ join_paths(PKG_CONFIG_INSTALL_LIBDIR "\${prefix}" "${CMAKE_INSTALL_LIBDIR}")
365
+ join_paths(PKG_CONFIG_INSTALL_INCLUDEDIR "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")
366
+ configure_file(libblake3.pc.in libblake3.pc @ONLY)
367
+ install(FILES "${CMAKE_BINARY_DIR}/libblake3.pc"
368
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
369
+
370
+ # print feature summary
371
+ # add_feature_info cannot directly use the BLAKE3_SIMD_TYPE :(
372
+ add_feature_info("AMD64 assembly" BLAKE3_SIMD_AMD64_ASM "The library uses hand written amd64 SIMD assembly.")
373
+ add_feature_info("x86 SIMD intrinsics" BLAKE3_SIMD_X86_INTRINSICS "The library uses x86 SIMD intrinsics.")
374
+ add_feature_info("NEON SIMD intrinsics" BLAKE3_SIMD_NEON_INTRINSICS "The library uses NEON SIMD intrinsics.")
375
+ add_feature_info("oneTBB parallelism" BLAKE3_USE_TBB "The library uses oneTBB parallelism.")
376
+ feature_summary(WHAT ENABLED_FEATURES)
377
+
378
+ if(BLAKE3_EXAMPLES)
379
+ include(BLAKE3/Examples)
380
+ endif()
381
+ if(BLAKE3_TESTING)
382
+ include(BLAKE3/Testing)
383
+ endif()
@@ -0,0 +1,73 @@
1
+ {
2
+ "version": 3,
3
+ "cmakeMinimumRequired": {
4
+ "major": 3,
5
+ "minor": 22,
6
+ "patch": 0
7
+ },
8
+ "configurePresets": [
9
+ {
10
+ "name": "base",
11
+ "hidden": true,
12
+ "binaryDir": "${sourceDir}/build/${presetName}"
13
+ },
14
+ {
15
+ "name": "msvc",
16
+ "hidden": true,
17
+ "generator": "Visual Studio 17 2022",
18
+ "vendor": {
19
+ "microsoft.com/VisualStudioSettings/CMake/1.0": {
20
+ "hostOS": [
21
+ "Windows"
22
+ ]
23
+ }
24
+ }
25
+ },
26
+ {
27
+ "name": "x64-windows-msvc",
28
+ "inherits": [
29
+ "msvc",
30
+ "base"
31
+ ],
32
+ "architecture": "x64"
33
+ },
34
+ {
35
+ "name": "x86-windows-msvc",
36
+ "inherits": [
37
+ "msvc",
38
+ "base"
39
+ ],
40
+ "architecture": "Win32"
41
+ },
42
+ {
43
+ "name": "arm64-windows-msvc",
44
+ "inherits": [
45
+ "msvc",
46
+ "base"
47
+ ],
48
+ "architecture": "ARM64"
49
+ }
50
+ ],
51
+ "buildPresets": [
52
+ {
53
+ "name": "x64-windows-msvc-debug",
54
+ "configurePreset": "x64-windows-msvc",
55
+ "configuration": "Debug"
56
+ },
57
+ {
58
+ "name": "x64-windows-msvc-release",
59
+ "configurePreset": "x64-windows-msvc",
60
+ "configuration": "RelWithDebInfo"
61
+ },
62
+ {
63
+ "name": "x86-windows-msvc-debug",
64
+ "configurePreset": "x86-windows-msvc",
65
+ "configuration": "Debug"
66
+ },
67
+ {
68
+ "name": "x86-windows-msvc-release",
69
+ "configurePreset": "x86-windows-msvc",
70
+ "configuration": "RelWithDebInfo"
71
+ }
72
+ ]
73
+ }
@@ -0,0 +1,82 @@
1
+ # This Makefile is only for testing. C callers should follow the instructions
2
+ # in ./README.md to incorporate these C files into their existing build.
3
+
4
+ NAME=blake3
5
+ CC=gcc
6
+ CFLAGS=-O3 -Wall -Wextra -std=c11 -pedantic -fstack-protector-strong -D_FORTIFY_SOURCE=2 -fPIE -fvisibility=hidden
7
+ LDFLAGS=-pie -Wl,-z,relro,-z,now
8
+ TARGETS=
9
+ ASM_TARGETS=
10
+ EXTRAFLAGS=-Wa,--noexecstack
11
+
12
+ ifdef BLAKE3_NO_SSE2
13
+ EXTRAFLAGS += -DBLAKE3_NO_SSE2
14
+ else
15
+ TARGETS += blake3_sse2.o
16
+ ASM_TARGETS += blake3_sse2_x86-64_unix.S
17
+ endif
18
+
19
+ ifdef BLAKE3_NO_SSE41
20
+ EXTRAFLAGS += -DBLAKE3_NO_SSE41
21
+ else
22
+ TARGETS += blake3_sse41.o
23
+ ASM_TARGETS += blake3_sse41_x86-64_unix.S
24
+ endif
25
+
26
+ ifdef BLAKE3_NO_AVX2
27
+ EXTRAFLAGS += -DBLAKE3_NO_AVX2
28
+ else
29
+ TARGETS += blake3_avx2.o
30
+ ASM_TARGETS += blake3_avx2_x86-64_unix.S
31
+ endif
32
+
33
+ ifdef BLAKE3_NO_AVX512
34
+ EXTRAFLAGS += -DBLAKE3_NO_AVX512
35
+ else
36
+ TARGETS += blake3_avx512.o
37
+ ASM_TARGETS += blake3_avx512_x86-64_unix.S
38
+ endif
39
+
40
+ ifdef BLAKE3_USE_NEON
41
+ EXTRAFLAGS += -DBLAKE3_USE_NEON=1
42
+ TARGETS += blake3_neon.o
43
+ endif
44
+
45
+ ifdef BLAKE3_NO_NEON
46
+ EXTRAFLAGS += -DBLAKE3_USE_NEON=0
47
+ endif
48
+
49
+ all: blake3.c blake3_dispatch.c blake3_portable.c main.c $(TARGETS)
50
+ $(CC) $(CFLAGS) $(EXTRAFLAGS) $^ -o $(NAME) $(LDFLAGS)
51
+
52
+ blake3_sse2.o: blake3_sse2.c
53
+ $(CC) $(CFLAGS) $(EXTRAFLAGS) -c $^ -o $@ -msse2
54
+
55
+ blake3_sse41.o: blake3_sse41.c
56
+ $(CC) $(CFLAGS) $(EXTRAFLAGS) -c $^ -o $@ -msse4.1
57
+
58
+ blake3_avx2.o: blake3_avx2.c
59
+ $(CC) $(CFLAGS) $(EXTRAFLAGS) -c $^ -o $@ -mavx2
60
+
61
+ blake3_avx512.o: blake3_avx512.c
62
+ $(CC) $(CFLAGS) $(EXTRAFLAGS) -c $^ -o $@ -mavx512f -mavx512vl
63
+
64
+ blake3_neon.o: blake3_neon.c
65
+ $(CC) $(CFLAGS) $(EXTRAFLAGS) -c $^ -o $@
66
+
67
+ test: CFLAGS += -DBLAKE3_TESTING -fsanitize=address,undefined
68
+ test: all
69
+ ./test.py
70
+
71
+ asm: blake3.c blake3_dispatch.c blake3_portable.c main.c $(ASM_TARGETS)
72
+ $(CC) $(CFLAGS) $(EXTRAFLAGS) $^ -o $(NAME) $(LDFLAGS)
73
+
74
+ test_asm: CFLAGS += -DBLAKE3_TESTING -fsanitize=address,undefined
75
+ test_asm: asm
76
+ ./test.py
77
+
78
+ example: example.c blake3.c blake3_dispatch.c blake3_portable.c $(ASM_TARGETS)
79
+ $(CC) $(CFLAGS) $(EXTRAFLAGS) $^ -o $@ $(LDFLAGS)
80
+
81
+ clean:
82
+ rm -f $(NAME) *.o