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,389 @@
1
+ use std::env;
2
+
3
+ fn defined(var: &str) -> bool {
4
+ println!("cargo:rerun-if-env-changed={}", var);
5
+ env::var_os(var).is_some()
6
+ }
7
+
8
+ fn is_pure() -> bool {
9
+ defined("CARGO_FEATURE_PURE")
10
+ }
11
+
12
+ fn should_prefer_intrinsics() -> bool {
13
+ defined("CARGO_FEATURE_PREFER_INTRINSICS")
14
+ }
15
+
16
+ fn is_neon() -> bool {
17
+ defined("CARGO_FEATURE_NEON")
18
+ }
19
+
20
+ fn is_no_neon() -> bool {
21
+ defined("CARGO_FEATURE_NO_NEON")
22
+ }
23
+
24
+ fn is_wasm32_simd() -> bool {
25
+ defined("CARGO_FEATURE_WASM32_SIMD")
26
+ }
27
+
28
+ fn is_ci() -> bool {
29
+ defined("BLAKE3_CI")
30
+ }
31
+
32
+ fn warn(warning: &str) {
33
+ assert!(!warning.contains("\n"));
34
+ println!("cargo:warning={}", warning);
35
+ if is_ci() {
36
+ println!("cargo:warning=Warnings in CI are treated as errors. Build failed.");
37
+ std::process::exit(1);
38
+ }
39
+ }
40
+
41
+ fn target_components() -> Vec<String> {
42
+ let target = env::var("TARGET").unwrap();
43
+ target.split("-").map(|s| s.to_string()).collect()
44
+ }
45
+
46
+ fn is_x86_64() -> bool {
47
+ target_components()[0] == "x86_64"
48
+ }
49
+
50
+ fn is_windows_target() -> bool {
51
+ env::var("CARGO_CFG_TARGET_OS").unwrap() == "windows"
52
+ }
53
+
54
+ fn use_msvc_asm() -> bool {
55
+ const MSVC_NAMES: &[&str] = &["", "cl", "cl.exe"];
56
+ let target_os = env::var("CARGO_CFG_TARGET_OS").unwrap_or_default();
57
+ let target_env = env::var("CARGO_CFG_TARGET_ENV").unwrap_or_default();
58
+ let target_windows_msvc = target_os == "windows" && target_env == "msvc";
59
+ let host_triple = env::var("HOST").unwrap_or_default();
60
+ let target_triple = env::var("TARGET").unwrap_or_default();
61
+ let cross_compiling = host_triple != target_triple;
62
+ let cc = env::var("CC").unwrap_or_default().to_ascii_lowercase();
63
+ if !target_windows_msvc {
64
+ // We are not building for Windows with the MSVC toolchain.
65
+ false
66
+ } else if !cross_compiling && MSVC_NAMES.contains(&&*cc) {
67
+ // We are building on Windows with the MSVC toolchain (and not cross-compiling for another architecture or target).
68
+ true
69
+ } else {
70
+ // We are cross-compiling to Windows with the MSVC toolchain.
71
+ let target_arch = env::var("CARGO_CFG_TARGET_ARCH").unwrap_or_default();
72
+ let target_vendor = env::var("CARGO_CFG_TARGET_VENDOR").unwrap_or_default();
73
+ let cc = env::var(format!("CC_{target_arch}_{target_vendor}_windows_msvc"))
74
+ .unwrap_or_default()
75
+ .to_ascii_lowercase();
76
+ // Check if we are using the MSVC compiler.
77
+ MSVC_NAMES.contains(&&*cc)
78
+ }
79
+ }
80
+
81
+ fn is_x86_32() -> bool {
82
+ let arch = &target_components()[0];
83
+ arch == "i386" || arch == "i586" || arch == "i686"
84
+ }
85
+
86
+ fn is_arm() -> bool {
87
+ is_armv7() || is_aarch64() || target_components()[0] == "arm"
88
+ }
89
+
90
+ fn is_aarch64() -> bool {
91
+ target_components()[0] == "aarch64"
92
+ }
93
+
94
+ fn is_armv7() -> bool {
95
+ target_components()[0] == "armv7"
96
+ }
97
+
98
+ fn is_wasm32() -> bool {
99
+ target_components()[0] == "wasm32"
100
+ }
101
+
102
+ fn endianness() -> String {
103
+ let endianness = env::var("CARGO_CFG_TARGET_ENDIAN").unwrap();
104
+ assert!(endianness == "little" || endianness == "big");
105
+ endianness
106
+ }
107
+
108
+ fn is_little_endian() -> bool {
109
+ endianness() == "little"
110
+ }
111
+
112
+ fn is_big_endian() -> bool {
113
+ endianness() == "big"
114
+ }
115
+
116
+ // Windows targets may be using the MSVC toolchain or the MinGW toolchain. The
117
+ // right compiler flags to use depend on the toolchain. (And we don't want to
118
+ // use flag_if_supported, because we don't want features to be silently
119
+ // disabled by old compilers.)
120
+ fn is_windows_msvc() -> bool {
121
+ // Some targets are only two components long, so check in steps.
122
+ let second_component = &target_components()[1];
123
+ (second_component == "pc" || second_component == "win7")
124
+ && target_components()[2] == "windows"
125
+ && target_components()[3] == "msvc"
126
+ }
127
+
128
+ // MinGW toolchain uses 2 different targets depending on the main compiler.
129
+ // Target for a general MinGW toolchain ends with `-gnu` (GCC is used as C
130
+ // compiler). Target for a LLVM-MinGW toolchain (Clang is used as C compiler)
131
+ // ends with `-gnullvm`.
132
+ fn is_windows_gnu() -> bool {
133
+ // Some targets are only two components long, so check in steps.
134
+ let second_component = &target_components()[1];
135
+ (second_component == "pc" || second_component == "win7")
136
+ && target_components()[2] == "windows"
137
+ && target_components()[3] != "msvc"
138
+ }
139
+
140
+ fn new_build() -> cc::Build {
141
+ let mut build = cc::Build::new();
142
+ if !is_windows_msvc() {
143
+ build.flag("-std=c11");
144
+ }
145
+ // Do NOT trigger a rebuild any time the env changes (e.g. $PATH).
146
+ // This prevents all downstream crates from being rebuilt when `cargo check`
147
+ // or `cargo build` are run in different environments, like Rust Analyzer
148
+ // vs. in the terminal vs. in a Git pre-commit hook.
149
+ build.emit_rerun_if_env_changed(false);
150
+ build
151
+ }
152
+
153
+ #[derive(PartialEq)]
154
+ enum CCompilerSupport {
155
+ NoCompiler,
156
+ NoAVX512,
157
+ YesAVX512,
158
+ }
159
+ use CCompilerSupport::*;
160
+
161
+ fn c_compiler_support() -> CCompilerSupport {
162
+ let build = new_build();
163
+ let flags_checked;
164
+ let support_result: Result<bool, _> = if is_windows_msvc() {
165
+ flags_checked = "/arch:AVX512";
166
+ build.is_flag_supported("/arch:AVX512")
167
+ } else {
168
+ // Check for both of the flags we use. If -mavx512f works, then -mavx512vl
169
+ // will probably always work too, but we might as well be thorough.
170
+ flags_checked = "-mavx512f and -mavx512vl";
171
+ match build.is_flag_supported("-mavx512f") {
172
+ Ok(true) => build.is_flag_supported("-mavx512vl"),
173
+ false_or_error => false_or_error,
174
+ }
175
+ };
176
+ match support_result {
177
+ Ok(true) => YesAVX512,
178
+ Ok(false) => {
179
+ warn(&format!(
180
+ "The C compiler {:?} does not support {}.",
181
+ build.get_compiler().path(),
182
+ flags_checked,
183
+ ));
184
+ NoAVX512
185
+ }
186
+ Err(e) => {
187
+ println!("{:?}", e);
188
+ warn(&format!(
189
+ "No C compiler {:?} detected.",
190
+ build.get_compiler().path()
191
+ ));
192
+ NoCompiler
193
+ }
194
+ }
195
+ }
196
+
197
+ fn build_sse2_sse41_avx2_rust_intrinsics() {
198
+ // No C code to compile here. Set the cfg flags that enable the Rust SSE2,
199
+ // SSE4.1, and AVX2 intrinsics modules. The regular Cargo build will compile
200
+ // them.
201
+ println!("cargo:rustc-cfg=blake3_sse2_rust");
202
+ println!("cargo:rustc-cfg=blake3_sse41_rust");
203
+ println!("cargo:rustc-cfg=blake3_avx2_rust");
204
+ }
205
+
206
+ fn build_sse2_sse41_avx2_assembly() {
207
+ // Build the assembly implementations for SSE4.1 and AVX2. This is
208
+ // preferred, but it only supports x86_64.
209
+ assert!(is_x86_64());
210
+ println!("cargo:rustc-cfg=blake3_sse2_ffi");
211
+ println!("cargo:rustc-cfg=blake3_sse41_ffi");
212
+ println!("cargo:rustc-cfg=blake3_avx2_ffi");
213
+ let mut build = new_build();
214
+ if is_windows_target() {
215
+ if use_msvc_asm() {
216
+ build.file("c/blake3_sse2_x86-64_windows_msvc.asm");
217
+ build.file("c/blake3_sse41_x86-64_windows_msvc.asm");
218
+ build.file("c/blake3_avx2_x86-64_windows_msvc.asm");
219
+ } else {
220
+ build.file("c/blake3_sse2_x86-64_windows_gnu.S");
221
+ build.file("c/blake3_sse41_x86-64_windows_gnu.S");
222
+ build.file("c/blake3_avx2_x86-64_windows_gnu.S");
223
+ }
224
+ } else {
225
+ // All non-Windows implementations are assumed to support
226
+ // Linux-style assembly. These files do contain a small
227
+ // explicit workaround for macOS also.
228
+ build.file("c/blake3_sse2_x86-64_unix.S");
229
+ build.file("c/blake3_sse41_x86-64_unix.S");
230
+ build.file("c/blake3_avx2_x86-64_unix.S");
231
+ }
232
+ build.compile("blake3_sse2_sse41_avx2_assembly");
233
+ }
234
+
235
+ fn build_avx512_c_intrinsics() {
236
+ // This is required on 32-bit x86 targets, since the assembly
237
+ // implementation doesn't support those.
238
+ println!("cargo:rustc-cfg=blake3_avx512_ffi");
239
+ let mut build = new_build();
240
+ build.file("c/blake3_avx512.c");
241
+ if is_windows_msvc() {
242
+ build.flag("/arch:AVX512");
243
+ } else {
244
+ build.flag("-mavx512f");
245
+ build.flag("-mavx512vl");
246
+ }
247
+ if is_windows_gnu() {
248
+ // Workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65782.
249
+ build.flag("-fno-asynchronous-unwind-tables");
250
+ }
251
+ build.compile("blake3_avx512_intrinsics");
252
+ }
253
+
254
+ fn build_avx512_assembly() {
255
+ // Build the assembly implementation for AVX-512. This is preferred, but it
256
+ // only supports x86_64.
257
+ assert!(is_x86_64());
258
+ println!("cargo:rustc-cfg=blake3_avx512_ffi");
259
+ let mut build = new_build();
260
+ let mut is_msvc = false;
261
+ if is_windows_target() {
262
+ if use_msvc_asm() {
263
+ build.file("c/blake3_avx512_x86-64_windows_msvc.asm");
264
+ is_msvc = true;
265
+ } else {
266
+ build.file("c/blake3_avx512_x86-64_windows_gnu.S");
267
+ }
268
+ } else {
269
+ build.file("c/blake3_avx512_x86-64_unix.S");
270
+ }
271
+
272
+ // Older versions of Clang require these flags, even for assembly. See
273
+ // https://github.com/BLAKE3-team/BLAKE3/issues/79.
274
+ if !is_msvc {
275
+ build.flag("-mavx512f");
276
+ build.flag("-mavx512vl");
277
+ }
278
+ build.compile("blake3_avx512_assembly");
279
+ }
280
+
281
+ fn build_neon_c_intrinsics() {
282
+ let mut build = new_build();
283
+ // Note that blake3_neon.c normally depends on the blake3_portable.c
284
+ // for the single-instance compression function, but we expose
285
+ // portable.rs over FFI instead. See ffi_neon.rs.
286
+ build.file("c/blake3_neon.c");
287
+ // ARMv7 platforms that support NEON generally need the following
288
+ // flags. AArch64 supports NEON by default and does not support -mpfu.
289
+ if is_armv7() {
290
+ build.flag("-mfpu=neon-vfpv4");
291
+ build.flag("-mfloat-abi=hard");
292
+ }
293
+ build.compile("blake3_neon");
294
+ }
295
+
296
+ fn build_wasm32_simd() {
297
+ assert!(is_wasm32());
298
+ // No C code to compile here. Set the cfg flags that enable the Wasm SIMD.
299
+ // The regular Cargo build will compile it.
300
+ println!("cargo:rustc-cfg=blake3_wasm32_simd");
301
+ }
302
+
303
+ fn main() -> Result<(), Box<dyn std::error::Error>> {
304
+ // As of Rust 1.80, unrecognized config names are warnings. Give Cargo all of our config names.
305
+ let all_cfgs = [
306
+ "blake3_sse2_ffi",
307
+ "blake3_sse2_rust",
308
+ "blake3_sse41_ffi",
309
+ "blake3_sse41_rust",
310
+ "blake3_avx2_ffi",
311
+ "blake3_avx2_rust",
312
+ "blake3_avx512_ffi",
313
+ "blake3_neon",
314
+ "blake3_wasm32_simd",
315
+ ];
316
+ for cfg_name in all_cfgs {
317
+ // TODO: Switch this whole file to the new :: syntax when our MSRV reaches 1.77.
318
+ // https://doc.rust-lang.org/cargo/reference/build-scripts.html#outputs-of-the-build-script
319
+ println!("cargo:rustc-check-cfg=cfg({cfg_name}, values(none()))");
320
+ }
321
+
322
+ if is_pure() && is_neon() {
323
+ panic!("It doesn't make sense to enable both \"pure\" and \"neon\".");
324
+ }
325
+
326
+ if is_no_neon() && is_neon() {
327
+ panic!("It doesn't make sense to enable both \"no_neon\" and \"neon\".");
328
+ }
329
+
330
+ if is_x86_64() || is_x86_32() {
331
+ let support = c_compiler_support();
332
+ if is_x86_32() || should_prefer_intrinsics() || is_pure() || support == NoCompiler {
333
+ build_sse2_sse41_avx2_rust_intrinsics();
334
+ } else {
335
+ // We assume that all C compilers can assemble SSE4.1 and AVX2. We
336
+ // don't explicitly check for support.
337
+ build_sse2_sse41_avx2_assembly();
338
+ }
339
+
340
+ if is_pure() || support == NoCompiler || support == NoAVX512 {
341
+ // The binary will not include any AVX-512 code.
342
+ } else if is_x86_32() || should_prefer_intrinsics() {
343
+ build_avx512_c_intrinsics();
344
+ } else {
345
+ build_avx512_assembly();
346
+ }
347
+ }
348
+
349
+ if is_neon() && is_big_endian() {
350
+ panic!("The NEON implementation doesn't support big-endian ARM.")
351
+ }
352
+
353
+ if (is_arm() && is_neon())
354
+ || (!is_no_neon() && !is_pure() && is_aarch64() && is_little_endian())
355
+ {
356
+ println!("cargo:rustc-cfg=blake3_neon");
357
+ build_neon_c_intrinsics();
358
+ }
359
+
360
+ if is_wasm32() && is_wasm32_simd() {
361
+ build_wasm32_simd();
362
+ }
363
+
364
+ // The `cc` crate doesn't automatically emit rerun-if directives for the
365
+ // environment variables it supports, in particular for $CC. We expect to
366
+ // do a lot of benchmarking across different compilers, so we explicitly
367
+ // add the variables that we're likely to need.
368
+ println!("cargo:rerun-if-env-changed=CC");
369
+ println!("cargo:rerun-if-env-changed=CFLAGS");
370
+
371
+ // Ditto for source files, though these shouldn't change as often.
372
+ for file in std::fs::read_dir("c")? {
373
+ println!(
374
+ "cargo:rerun-if-changed={}",
375
+ file?.path().to_str().expect("utf-8")
376
+ );
377
+ }
378
+
379
+ // When compiling with clang-cl for windows, it adds .asm files to the root
380
+ // which we need to delete so cargo doesn't get angry
381
+ if is_windows_target() && !use_msvc_asm() {
382
+ let _ = std::fs::remove_file("blake3_avx2_x86-64_windows_gnu.asm");
383
+ let _ = std::fs::remove_file("blake3_avx512_x86-64_windows_gnu.asm");
384
+ let _ = std::fs::remove_file("blake3_sse2_x86-64_windows_gnu.asm");
385
+ let _ = std::fs::remove_file("blake3_sse41_x86-64_windows_gnu.asm");
386
+ }
387
+
388
+ Ok(())
389
+ }