react-native-quick-crypto 1.0.0-beta.9 → 1.0.1

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 (526) hide show
  1. package/QuickCrypto.podspec +156 -8
  2. package/README.md +14 -27
  3. package/android/CMakeLists.txt +64 -7
  4. package/android/build.gradle +12 -2
  5. package/android/src/main/java/com/margelo/nitro/quickcrypto/QuickCryptoPackage.java +0 -2
  6. package/app.plugin.js +3 -0
  7. package/cpp/blake3/HybridBlake3.cpp +118 -0
  8. package/cpp/blake3/HybridBlake3.hpp +35 -0
  9. package/cpp/cipher/CCMCipher.cpp +199 -0
  10. package/cpp/cipher/CCMCipher.hpp +26 -0
  11. package/cpp/cipher/ChaCha20Cipher.cpp +97 -0
  12. package/cpp/cipher/ChaCha20Cipher.hpp +25 -0
  13. package/cpp/cipher/ChaCha20Poly1305Cipher.cpp +170 -0
  14. package/cpp/cipher/ChaCha20Poly1305Cipher.hpp +30 -0
  15. package/cpp/cipher/GCMCipher.cpp +68 -0
  16. package/cpp/cipher/GCMCipher.hpp +14 -0
  17. package/cpp/cipher/HybridCipher.cpp +323 -0
  18. package/cpp/cipher/HybridCipher.hpp +68 -0
  19. package/cpp/cipher/HybridCipherFactory.hpp +105 -0
  20. package/cpp/cipher/HybridRsaCipher.cpp +367 -0
  21. package/cpp/cipher/HybridRsaCipher.hpp +29 -0
  22. package/cpp/cipher/OCBCipher.cpp +55 -0
  23. package/cpp/cipher/OCBCipher.hpp +19 -0
  24. package/cpp/cipher/XSalsa20Cipher.cpp +61 -0
  25. package/cpp/cipher/XSalsa20Cipher.hpp +33 -0
  26. package/cpp/ec/HybridEcKeyPair.cpp +428 -0
  27. package/cpp/ec/HybridEcKeyPair.hpp +48 -0
  28. package/cpp/ed25519/HybridEdKeyPair.cpp +228 -98
  29. package/cpp/ed25519/HybridEdKeyPair.hpp +42 -56
  30. package/cpp/hash/HybridHash.cpp +185 -0
  31. package/cpp/hash/HybridHash.hpp +43 -0
  32. package/cpp/hmac/HybridHmac.cpp +95 -0
  33. package/cpp/hmac/HybridHmac.hpp +31 -0
  34. package/cpp/keys/HybridKeyObjectHandle.cpp +757 -0
  35. package/cpp/keys/HybridKeyObjectHandle.hpp +51 -0
  36. package/cpp/keys/KeyObjectData.cpp +268 -0
  37. package/cpp/keys/KeyObjectData.hpp +71 -0
  38. package/cpp/keys/node.h +5 -0
  39. package/cpp/mldsa/HybridMlDsaKeyPair.cpp +264 -0
  40. package/cpp/mldsa/HybridMlDsaKeyPair.hpp +47 -0
  41. package/cpp/pbkdf2/HybridPbkdf2.cpp +34 -55
  42. package/cpp/pbkdf2/HybridPbkdf2.hpp +5 -16
  43. package/cpp/random/HybridRandom.cpp +6 -17
  44. package/cpp/random/HybridRandom.hpp +5 -6
  45. package/cpp/rsa/HybridRsaKeyPair.cpp +154 -0
  46. package/cpp/rsa/HybridRsaKeyPair.hpp +43 -0
  47. package/cpp/sign/HybridSignHandle.cpp +266 -0
  48. package/cpp/sign/HybridSignHandle.hpp +36 -0
  49. package/cpp/sign/HybridVerifyHandle.cpp +227 -0
  50. package/cpp/sign/HybridVerifyHandle.hpp +36 -0
  51. package/cpp/sign/SignUtils.hpp +108 -0
  52. package/cpp/utils/Macros.hpp +68 -0
  53. package/cpp/utils/Utils.hpp +43 -2
  54. package/cpp/utils/base64.h +309 -0
  55. package/deps/blake3/.cargo/config.toml +2 -0
  56. package/deps/blake3/.git-blame-ignore-revs +2 -0
  57. package/deps/blake3/.github/workflows/build_b3sum.py +38 -0
  58. package/deps/blake3/.github/workflows/ci.yml +491 -0
  59. package/deps/blake3/.github/workflows/tag.yml +43 -0
  60. package/deps/blake3/.github/workflows/upload_github_release_asset.py +73 -0
  61. package/deps/blake3/CONTRIBUTING.md +31 -0
  62. package/deps/blake3/Cargo.toml +135 -0
  63. package/deps/blake3/LICENSE_A2 +202 -0
  64. package/deps/blake3/LICENSE_A2LLVM +219 -0
  65. package/deps/blake3/LICENSE_CC0 +121 -0
  66. package/deps/blake3/README.md +229 -0
  67. package/deps/blake3/b3sum/Cargo.lock +513 -0
  68. package/deps/blake3/b3sum/Cargo.toml +26 -0
  69. package/deps/blake3/b3sum/README.md +72 -0
  70. package/deps/blake3/b3sum/src/main.rs +564 -0
  71. package/deps/blake3/b3sum/src/unit_tests.rs +235 -0
  72. package/deps/blake3/b3sum/tests/cli_tests.rs +680 -0
  73. package/deps/blake3/b3sum/what_does_check_do.md +176 -0
  74. package/deps/blake3/benches/bench.rs +623 -0
  75. package/deps/blake3/build.rs +389 -0
  76. package/deps/blake3/c/CMakeLists.txt +383 -0
  77. package/deps/blake3/c/CMakePresets.json +73 -0
  78. package/deps/blake3/c/Makefile.testing +82 -0
  79. package/deps/blake3/c/README.md +403 -0
  80. package/deps/blake3/c/blake3-config.cmake.in +14 -0
  81. package/deps/blake3/c/blake3.c +650 -0
  82. package/deps/blake3/c/blake3.h +86 -0
  83. package/deps/blake3/c/blake3_avx2.c +326 -0
  84. package/deps/blake3/c/blake3_avx2_x86-64_unix.S +1815 -0
  85. package/deps/blake3/c/blake3_avx2_x86-64_windows_gnu.S +1817 -0
  86. package/deps/blake3/c/blake3_avx2_x86-64_windows_msvc.asm +1828 -0
  87. package/deps/blake3/c/blake3_avx512.c +1388 -0
  88. package/deps/blake3/c/blake3_avx512_x86-64_unix.S +4824 -0
  89. package/deps/blake3/c/blake3_avx512_x86-64_windows_gnu.S +2615 -0
  90. package/deps/blake3/c/blake3_avx512_x86-64_windows_msvc.asm +2634 -0
  91. package/deps/blake3/c/blake3_c_rust_bindings/Cargo.toml +32 -0
  92. package/deps/blake3/c/blake3_c_rust_bindings/README.md +4 -0
  93. package/deps/blake3/c/blake3_c_rust_bindings/benches/bench.rs +477 -0
  94. package/deps/blake3/c/blake3_c_rust_bindings/build.rs +253 -0
  95. package/deps/blake3/c/blake3_c_rust_bindings/cross_test.sh +31 -0
  96. package/deps/blake3/c/blake3_c_rust_bindings/src/lib.rs +333 -0
  97. package/deps/blake3/c/blake3_c_rust_bindings/src/test.rs +696 -0
  98. package/deps/blake3/c/blake3_dispatch.c +332 -0
  99. package/deps/blake3/c/blake3_impl.h +333 -0
  100. package/deps/blake3/c/blake3_neon.c +366 -0
  101. package/deps/blake3/c/blake3_portable.c +160 -0
  102. package/deps/blake3/c/blake3_sse2.c +566 -0
  103. package/deps/blake3/c/blake3_sse2_x86-64_unix.S +2291 -0
  104. package/deps/blake3/c/blake3_sse2_x86-64_windows_gnu.S +2332 -0
  105. package/deps/blake3/c/blake3_sse2_x86-64_windows_msvc.asm +2350 -0
  106. package/deps/blake3/c/blake3_sse41.c +560 -0
  107. package/deps/blake3/c/blake3_sse41_x86-64_unix.S +2028 -0
  108. package/deps/blake3/c/blake3_sse41_x86-64_windows_gnu.S +2069 -0
  109. package/deps/blake3/c/blake3_sse41_x86-64_windows_msvc.asm +2089 -0
  110. package/deps/blake3/c/blake3_tbb.cpp +37 -0
  111. package/deps/blake3/c/dependencies/CMakeLists.txt +3 -0
  112. package/deps/blake3/c/dependencies/tbb/CMakeLists.txt +28 -0
  113. package/deps/blake3/c/example.c +36 -0
  114. package/deps/blake3/c/example_tbb.c +57 -0
  115. package/deps/blake3/c/libblake3.pc.in +12 -0
  116. package/deps/blake3/c/main.c +166 -0
  117. package/deps/blake3/c/test.py +97 -0
  118. package/deps/blake3/media/B3.svg +70 -0
  119. package/deps/blake3/media/BLAKE3.svg +85 -0
  120. package/deps/blake3/media/speed.svg +1474 -0
  121. package/deps/blake3/reference_impl/Cargo.toml +8 -0
  122. package/deps/blake3/reference_impl/README.md +14 -0
  123. package/deps/blake3/reference_impl/reference_impl.rs +374 -0
  124. package/deps/blake3/src/ffi_avx2.rs +65 -0
  125. package/deps/blake3/src/ffi_avx512.rs +169 -0
  126. package/deps/blake3/src/ffi_neon.rs +82 -0
  127. package/deps/blake3/src/ffi_sse2.rs +126 -0
  128. package/deps/blake3/src/ffi_sse41.rs +126 -0
  129. package/deps/blake3/src/guts.rs +60 -0
  130. package/deps/blake3/src/hazmat.rs +704 -0
  131. package/deps/blake3/src/io.rs +64 -0
  132. package/deps/blake3/src/join.rs +92 -0
  133. package/deps/blake3/src/lib.rs +1835 -0
  134. package/deps/blake3/src/platform.rs +587 -0
  135. package/deps/blake3/src/portable.rs +198 -0
  136. package/deps/blake3/src/rust_avx2.rs +474 -0
  137. package/deps/blake3/src/rust_sse2.rs +775 -0
  138. package/deps/blake3/src/rust_sse41.rs +766 -0
  139. package/deps/blake3/src/test.rs +1049 -0
  140. package/deps/blake3/src/traits.rs +227 -0
  141. package/deps/blake3/src/wasm32_simd.rs +794 -0
  142. package/deps/blake3/test_vectors/Cargo.toml +19 -0
  143. package/deps/blake3/test_vectors/cross_test.sh +25 -0
  144. package/deps/blake3/test_vectors/src/bin/generate.rs +4 -0
  145. package/deps/blake3/test_vectors/src/lib.rs +350 -0
  146. package/deps/blake3/test_vectors/test_vectors.json +217 -0
  147. package/deps/blake3/tools/compiler_version/Cargo.toml +7 -0
  148. package/deps/blake3/tools/compiler_version/build.rs +6 -0
  149. package/deps/blake3/tools/compiler_version/src/main.rs +27 -0
  150. package/deps/blake3/tools/instruction_set_support/Cargo.toml +6 -0
  151. package/deps/blake3/tools/instruction_set_support/src/main.rs +10 -0
  152. package/deps/blake3/tools/release.md +16 -0
  153. package/deps/fastpbkdf2/fastpbkdf2.c +5 -1
  154. package/deps/ncrypto/.bazelignore +4 -0
  155. package/deps/ncrypto/.bazelrc +2 -0
  156. package/deps/ncrypto/.bazelversion +1 -0
  157. package/deps/ncrypto/.clang-format +111 -0
  158. package/deps/ncrypto/.github/workflows/bazel.yml +58 -0
  159. package/deps/ncrypto/.github/workflows/linter.yml +38 -0
  160. package/deps/ncrypto/.github/workflows/macos.yml +43 -0
  161. package/deps/ncrypto/.github/workflows/ubuntu.yml +46 -0
  162. package/deps/ncrypto/.github/workflows/visual-studio.yml +49 -0
  163. package/deps/ncrypto/.python-version +1 -0
  164. package/deps/ncrypto/BUILD.bazel +36 -0
  165. package/deps/ncrypto/CMakeLists.txt +55 -0
  166. package/deps/ncrypto/LICENSE +21 -0
  167. package/deps/ncrypto/MODULE.bazel +1 -0
  168. package/deps/ncrypto/MODULE.bazel.lock +280 -0
  169. package/deps/ncrypto/README.md +18 -0
  170. package/deps/ncrypto/WORKSPACE +15 -0
  171. package/deps/ncrypto/cmake/CPM.cmake +1225 -0
  172. package/deps/ncrypto/cmake/ncrypto-flags.cmake +16 -0
  173. package/deps/ncrypto/include/dh-primes.h +67 -0
  174. package/deps/ncrypto/include/ncrypto.h +1897 -0
  175. package/deps/ncrypto/patches/0001-Expose-libdecrepit-so-NodeJS-can-use-it-for-ncrypto.patch +28 -0
  176. package/deps/ncrypto/pyproject.toml +38 -0
  177. package/deps/ncrypto/src/CMakeLists.txt +15 -0
  178. package/deps/ncrypto/src/engine.cpp +93 -0
  179. package/deps/ncrypto/src/ncrypto.cpp +5613 -0
  180. package/deps/ncrypto/tests/BUILD.bazel +9 -0
  181. package/deps/ncrypto/tests/CMakeLists.txt +7 -0
  182. package/deps/ncrypto/tests/basic.cpp +86 -0
  183. package/deps/ncrypto/tools/run-clang-format.sh +42 -0
  184. package/lib/commonjs/blake3.js +98 -0
  185. package/lib/commonjs/blake3.js.map +1 -0
  186. package/lib/commonjs/cipher.js +180 -0
  187. package/lib/commonjs/cipher.js.map +1 -0
  188. package/lib/commonjs/constants.js +32 -0
  189. package/lib/commonjs/constants.js.map +1 -0
  190. package/lib/commonjs/ec.js +480 -0
  191. package/lib/commonjs/ec.js.map +1 -0
  192. package/lib/commonjs/ed.js +214 -2
  193. package/lib/commonjs/ed.js.map +1 -1
  194. package/lib/commonjs/expo-plugin/@types.js +2 -0
  195. package/lib/commonjs/expo-plugin/@types.js.map +1 -0
  196. package/lib/commonjs/expo-plugin/withRNQC.js +25 -0
  197. package/lib/commonjs/expo-plugin/withRNQC.js.map +1 -0
  198. package/lib/commonjs/expo-plugin/withSodiumAndroid.js +25 -0
  199. package/lib/commonjs/expo-plugin/withSodiumAndroid.js.map +1 -0
  200. package/lib/commonjs/expo-plugin/withSodiumIos.js +26 -0
  201. package/lib/commonjs/expo-plugin/withSodiumIos.js.map +1 -0
  202. package/lib/commonjs/expo-plugin/withXCode.js +51 -0
  203. package/lib/commonjs/expo-plugin/withXCode.js.map +1 -0
  204. package/lib/commonjs/hash.js +215 -0
  205. package/lib/commonjs/hash.js.map +1 -0
  206. package/lib/commonjs/hmac.js +109 -0
  207. package/lib/commonjs/hmac.js.map +1 -0
  208. package/lib/commonjs/index.js +102 -24
  209. package/lib/commonjs/index.js.map +1 -1
  210. package/lib/commonjs/keys/classes.js +115 -52
  211. package/lib/commonjs/keys/classes.js.map +1 -1
  212. package/lib/commonjs/keys/generateKeyPair.js +141 -144
  213. package/lib/commonjs/keys/generateKeyPair.js.map +1 -1
  214. package/lib/commonjs/keys/index.js +229 -0
  215. package/lib/commonjs/keys/index.js.map +1 -1
  216. package/lib/commonjs/keys/publicCipher.js +152 -0
  217. package/lib/commonjs/keys/publicCipher.js.map +1 -0
  218. package/lib/commonjs/keys/signVerify.js +178 -39
  219. package/lib/commonjs/keys/signVerify.js.map +1 -1
  220. package/lib/commonjs/keys/utils.js +18 -13
  221. package/lib/commonjs/keys/utils.js.map +1 -1
  222. package/lib/commonjs/mldsa.js +69 -0
  223. package/lib/commonjs/mldsa.js.map +1 -0
  224. package/lib/commonjs/pbkdf2.js.map +1 -1
  225. package/lib/commonjs/random.js +6 -0
  226. package/lib/commonjs/random.js.map +1 -1
  227. package/lib/commonjs/rsa.js +202 -0
  228. package/lib/commonjs/rsa.js.map +1 -0
  229. package/lib/commonjs/specs/blake3.nitro.js +6 -0
  230. package/lib/commonjs/specs/blake3.nitro.js.map +1 -0
  231. package/lib/commonjs/specs/cipher.nitro.js +6 -0
  232. package/lib/commonjs/specs/cipher.nitro.js.map +1 -0
  233. package/lib/commonjs/specs/ecKeyPair.nitro.js +6 -0
  234. package/lib/commonjs/specs/ecKeyPair.nitro.js.map +1 -0
  235. package/lib/commonjs/specs/hash.nitro.js +6 -0
  236. package/lib/commonjs/specs/hash.nitro.js.map +1 -0
  237. package/lib/commonjs/specs/hmac.nitro.js +6 -0
  238. package/lib/commonjs/specs/hmac.nitro.js.map +1 -0
  239. package/lib/commonjs/specs/mlDsaKeyPair.nitro.js +6 -0
  240. package/lib/commonjs/specs/mlDsaKeyPair.nitro.js.map +1 -0
  241. package/lib/commonjs/specs/rsaCipher.nitro.js +6 -0
  242. package/lib/commonjs/specs/rsaCipher.nitro.js.map +1 -0
  243. package/lib/commonjs/specs/rsaKeyPair.nitro.js +6 -0
  244. package/lib/commonjs/specs/rsaKeyPair.nitro.js.map +1 -0
  245. package/lib/commonjs/specs/sign.nitro.js +6 -0
  246. package/lib/commonjs/specs/sign.nitro.js.map +1 -0
  247. package/lib/commonjs/subtle.js +1092 -0
  248. package/lib/commonjs/subtle.js.map +1 -0
  249. package/lib/commonjs/utils/cipher.js +64 -0
  250. package/lib/commonjs/utils/cipher.js.map +1 -0
  251. package/lib/commonjs/utils/conversion.js +44 -5
  252. package/lib/commonjs/utils/conversion.js.map +1 -1
  253. package/lib/commonjs/utils/hashnames.js +2 -1
  254. package/lib/commonjs/utils/hashnames.js.map +1 -1
  255. package/lib/commonjs/utils/index.js +11 -0
  256. package/lib/commonjs/utils/index.js.map +1 -1
  257. package/lib/commonjs/utils/noble.js +82 -0
  258. package/lib/commonjs/utils/noble.js.map +1 -0
  259. package/lib/commonjs/utils/types.js +32 -17
  260. package/lib/commonjs/utils/types.js.map +1 -1
  261. package/lib/commonjs/utils/validation.js +74 -1
  262. package/lib/commonjs/utils/validation.js.map +1 -1
  263. package/lib/module/blake3.js +90 -0
  264. package/lib/module/blake3.js.map +1 -0
  265. package/lib/module/cipher.js +173 -0
  266. package/lib/module/cipher.js.map +1 -0
  267. package/lib/module/constants.js +28 -0
  268. package/lib/module/constants.js.map +1 -0
  269. package/lib/module/ec.js +470 -0
  270. package/lib/module/ec.js.map +1 -0
  271. package/lib/module/ed.js +212 -3
  272. package/lib/module/ed.js.map +1 -1
  273. package/lib/module/expo-plugin/@types.js +2 -0
  274. package/lib/module/expo-plugin/@types.js.map +1 -0
  275. package/lib/module/expo-plugin/withRNQC.js +21 -0
  276. package/lib/module/expo-plugin/withRNQC.js.map +1 -0
  277. package/lib/module/expo-plugin/withSodiumAndroid.js +20 -0
  278. package/lib/module/expo-plugin/withSodiumAndroid.js.map +1 -0
  279. package/lib/module/expo-plugin/withSodiumIos.js +20 -0
  280. package/lib/module/expo-plugin/withSodiumIos.js.map +1 -0
  281. package/lib/module/expo-plugin/withXCode.js +46 -0
  282. package/lib/module/expo-plugin/withXCode.js.map +1 -0
  283. package/lib/module/hash.js +207 -0
  284. package/lib/module/hash.js.map +1 -0
  285. package/lib/module/hmac.js +104 -0
  286. package/lib/module/hmac.js.map +1 -0
  287. package/lib/module/index.js +21 -21
  288. package/lib/module/index.js.map +1 -1
  289. package/lib/module/keys/classes.js +112 -49
  290. package/lib/module/keys/classes.js.map +1 -1
  291. package/lib/module/keys/generateKeyPair.js +134 -143
  292. package/lib/module/keys/generateKeyPair.js.map +1 -1
  293. package/lib/module/keys/index.js +161 -22
  294. package/lib/module/keys/index.js.map +1 -1
  295. package/lib/module/keys/publicCipher.js +145 -0
  296. package/lib/module/keys/publicCipher.js.map +1 -0
  297. package/lib/module/keys/signVerify.js +170 -39
  298. package/lib/module/keys/signVerify.js.map +1 -1
  299. package/lib/module/keys/utils.js +16 -12
  300. package/lib/module/keys/utils.js.map +1 -1
  301. package/lib/module/mldsa.js +63 -0
  302. package/lib/module/mldsa.js.map +1 -0
  303. package/lib/module/pbkdf2.js.map +1 -1
  304. package/lib/module/random.js +6 -0
  305. package/lib/module/random.js.map +1 -1
  306. package/lib/module/rsa.js +194 -0
  307. package/lib/module/rsa.js.map +1 -0
  308. package/lib/module/specs/blake3.nitro.js +4 -0
  309. package/lib/module/specs/blake3.nitro.js.map +1 -0
  310. package/lib/module/specs/cipher.nitro.js +4 -0
  311. package/lib/module/specs/cipher.nitro.js.map +1 -0
  312. package/lib/module/specs/ecKeyPair.nitro.js +4 -0
  313. package/lib/module/specs/ecKeyPair.nitro.js.map +1 -0
  314. package/lib/module/specs/hash.nitro.js +4 -0
  315. package/lib/module/specs/hash.nitro.js.map +1 -0
  316. package/lib/module/specs/hmac.nitro.js +4 -0
  317. package/lib/module/specs/hmac.nitro.js.map +1 -0
  318. package/lib/module/specs/mlDsaKeyPair.nitro.js +4 -0
  319. package/lib/module/specs/mlDsaKeyPair.nitro.js.map +1 -0
  320. package/lib/module/specs/rsaCipher.nitro.js +4 -0
  321. package/lib/module/specs/rsaCipher.nitro.js.map +1 -0
  322. package/lib/module/specs/rsaKeyPair.nitro.js +4 -0
  323. package/lib/module/specs/rsaKeyPair.nitro.js.map +1 -0
  324. package/lib/module/specs/sign.nitro.js +4 -0
  325. package/lib/module/specs/sign.nitro.js.map +1 -0
  326. package/lib/module/subtle.js +1087 -0
  327. package/lib/module/subtle.js.map +1 -0
  328. package/lib/module/utils/cipher.js +56 -0
  329. package/lib/module/utils/cipher.js.map +1 -0
  330. package/lib/module/utils/conversion.js +26 -5
  331. package/lib/module/utils/conversion.js.map +1 -1
  332. package/lib/module/utils/hashnames.js +2 -1
  333. package/lib/module/utils/hashnames.js.map +1 -1
  334. package/lib/module/utils/index.js +1 -0
  335. package/lib/module/utils/index.js.map +1 -1
  336. package/lib/module/utils/noble.js +76 -0
  337. package/lib/module/utils/noble.js.map +1 -0
  338. package/lib/module/utils/types.js +32 -17
  339. package/lib/module/utils/types.js.map +1 -1
  340. package/lib/module/utils/validation.js +69 -1
  341. package/lib/module/utils/validation.js.map +1 -1
  342. package/lib/tsconfig.tsbuildinfo +1 -1
  343. package/lib/typescript/blake3.d.ts +33 -0
  344. package/lib/typescript/blake3.d.ts.map +1 -0
  345. package/lib/typescript/cipher.d.ts +60 -0
  346. package/lib/typescript/cipher.d.ts.map +1 -0
  347. package/lib/typescript/constants.d.ts +21 -0
  348. package/lib/typescript/constants.d.ts.map +1 -0
  349. package/lib/typescript/ec.d.ts +22 -0
  350. package/lib/typescript/ec.d.ts.map +1 -0
  351. package/lib/typescript/ed.d.ts +28 -1
  352. package/lib/typescript/ed.d.ts.map +1 -1
  353. package/lib/typescript/expo-plugin/@types.d.ts +8 -0
  354. package/lib/typescript/expo-plugin/@types.d.ts.map +1 -0
  355. package/lib/typescript/expo-plugin/withRNQC.d.ts +4 -0
  356. package/lib/typescript/expo-plugin/withRNQC.d.ts.map +1 -0
  357. package/lib/typescript/expo-plugin/withSodiumAndroid.d.ts +4 -0
  358. package/lib/typescript/expo-plugin/withSodiumAndroid.d.ts.map +1 -0
  359. package/lib/typescript/expo-plugin/withSodiumIos.d.ts +4 -0
  360. package/lib/typescript/expo-plugin/withSodiumIos.d.ts.map +1 -0
  361. package/lib/typescript/expo-plugin/withXCode.d.ts +9 -0
  362. package/lib/typescript/expo-plugin/withXCode.d.ts.map +1 -0
  363. package/lib/typescript/hash.d.ts +122 -0
  364. package/lib/typescript/hash.d.ts.map +1 -0
  365. package/lib/typescript/hmac.d.ts +66 -0
  366. package/lib/typescript/hmac.d.ts.map +1 -0
  367. package/lib/typescript/index.d.ts +102 -10
  368. package/lib/typescript/index.d.ts.map +1 -1
  369. package/lib/typescript/keys/classes.d.ts +52 -8
  370. package/lib/typescript/keys/classes.d.ts.map +1 -1
  371. package/lib/typescript/keys/generateKeyPair.d.ts +5 -0
  372. package/lib/typescript/keys/generateKeyPair.d.ts.map +1 -1
  373. package/lib/typescript/keys/index.d.ts +22 -2
  374. package/lib/typescript/keys/index.d.ts.map +1 -1
  375. package/lib/typescript/keys/publicCipher.d.ts +20 -0
  376. package/lib/typescript/keys/publicCipher.d.ts.map +1 -0
  377. package/lib/typescript/keys/signVerify.d.ts +28 -0
  378. package/lib/typescript/keys/signVerify.d.ts.map +1 -1
  379. package/lib/typescript/keys/utils.d.ts +3 -1
  380. package/lib/typescript/keys/utils.d.ts.map +1 -1
  381. package/lib/typescript/mldsa.d.ts +18 -0
  382. package/lib/typescript/mldsa.d.ts.map +1 -0
  383. package/lib/typescript/pbkdf2.d.ts +1 -1
  384. package/lib/typescript/pbkdf2.d.ts.map +1 -1
  385. package/lib/typescript/random.d.ts +6 -0
  386. package/lib/typescript/random.d.ts.map +1 -1
  387. package/lib/typescript/rsa.d.ts +19 -0
  388. package/lib/typescript/rsa.d.ts.map +1 -0
  389. package/lib/typescript/specs/blake3.nitro.d.ts +15 -0
  390. package/lib/typescript/specs/blake3.nitro.d.ts.map +1 -0
  391. package/lib/typescript/specs/cipher.nitro.d.ts +29 -0
  392. package/lib/typescript/specs/cipher.nitro.d.ts.map +1 -0
  393. package/lib/typescript/specs/ecKeyPair.nitro.d.ts +20 -0
  394. package/lib/typescript/specs/ecKeyPair.nitro.d.ts.map +1 -0
  395. package/lib/typescript/specs/edKeyPair.nitro.d.ts +1 -0
  396. package/lib/typescript/specs/edKeyPair.nitro.d.ts.map +1 -1
  397. package/lib/typescript/specs/hash.nitro.d.ts +13 -0
  398. package/lib/typescript/specs/hash.nitro.d.ts.map +1 -0
  399. package/lib/typescript/specs/hmac.nitro.d.ts +10 -0
  400. package/lib/typescript/specs/hmac.nitro.d.ts.map +1 -0
  401. package/lib/typescript/specs/keyObjectHandle.nitro.d.ts +1 -1
  402. package/lib/typescript/specs/keyObjectHandle.nitro.d.ts.map +1 -1
  403. package/lib/typescript/specs/mlDsaKeyPair.nitro.d.ts +16 -0
  404. package/lib/typescript/specs/mlDsaKeyPair.nitro.d.ts.map +1 -0
  405. package/lib/typescript/specs/rsaCipher.nitro.d.ts +44 -0
  406. package/lib/typescript/specs/rsaCipher.nitro.d.ts.map +1 -0
  407. package/lib/typescript/specs/rsaKeyPair.nitro.d.ts +20 -0
  408. package/lib/typescript/specs/rsaKeyPair.nitro.d.ts.map +1 -0
  409. package/lib/typescript/specs/sign.nitro.d.ts +19 -0
  410. package/lib/typescript/specs/sign.nitro.d.ts.map +1 -0
  411. package/lib/typescript/subtle.d.ts +17 -0
  412. package/lib/typescript/subtle.d.ts.map +1 -0
  413. package/lib/typescript/utils/cipher.d.ts +7 -0
  414. package/lib/typescript/utils/cipher.d.ts.map +1 -0
  415. package/lib/typescript/utils/conversion.d.ts +1 -0
  416. package/lib/typescript/utils/conversion.d.ts.map +1 -1
  417. package/lib/typescript/utils/hashnames.d.ts +3 -1
  418. package/lib/typescript/utils/hashnames.d.ts.map +1 -1
  419. package/lib/typescript/utils/index.d.ts +1 -0
  420. package/lib/typescript/utils/index.d.ts.map +1 -1
  421. package/lib/typescript/utils/noble.d.ts +19 -0
  422. package/lib/typescript/utils/noble.d.ts.map +1 -0
  423. package/lib/typescript/utils/types.d.ts +129 -25
  424. package/lib/typescript/utils/types.d.ts.map +1 -1
  425. package/lib/typescript/utils/validation.d.ts +5 -0
  426. package/lib/typescript/utils/validation.d.ts.map +1 -1
  427. package/nitrogen/generated/.gitattributes +1 -0
  428. package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +31 -1
  429. package/nitrogen/generated/android/QuickCrypto+autolinking.gradle +1 -1
  430. package/nitrogen/generated/android/QuickCryptoOnLoad.cpp +125 -1
  431. package/nitrogen/generated/android/QuickCryptoOnLoad.hpp +1 -1
  432. package/nitrogen/generated/android/kotlin/com/margelo/nitro/crypto/QuickCryptoOnLoad.kt +35 -0
  433. package/nitrogen/generated/ios/QuickCrypto+autolinking.rb +3 -1
  434. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.cpp +1 -1
  435. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.hpp +1 -1
  436. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Umbrella.hpp +3 -3
  437. package/nitrogen/generated/ios/QuickCryptoAutolinking.mm +121 -1
  438. package/nitrogen/generated/ios/QuickCryptoAutolinking.swift +1 -1
  439. package/nitrogen/generated/shared/c++/AsymmetricKeyType.hpp +116 -0
  440. package/nitrogen/generated/shared/c++/CipherArgs.hpp +86 -0
  441. package/nitrogen/generated/shared/c++/HybridBlake3Spec.cpp +28 -0
  442. package/nitrogen/generated/shared/c++/HybridBlake3Spec.hpp +76 -0
  443. package/nitrogen/generated/shared/c++/HybridCipherFactorySpec.cpp +21 -0
  444. package/nitrogen/generated/shared/c++/HybridCipherFactorySpec.hpp +67 -0
  445. package/nitrogen/generated/shared/c++/HybridCipherSpec.cpp +28 -0
  446. package/nitrogen/generated/shared/c++/HybridCipherSpec.hpp +76 -0
  447. package/nitrogen/generated/shared/c++/HybridEcKeyPairSpec.cpp +29 -0
  448. package/nitrogen/generated/shared/c++/HybridEcKeyPairSpec.hpp +77 -0
  449. package/nitrogen/generated/shared/c++/HybridEdKeyPairSpec.cpp +2 -1
  450. package/nitrogen/generated/shared/c++/HybridEdKeyPairSpec.hpp +5 -4
  451. package/nitrogen/generated/shared/c++/HybridHashSpec.cpp +26 -0
  452. package/nitrogen/generated/shared/c++/HybridHashSpec.hpp +75 -0
  453. package/nitrogen/generated/shared/c++/HybridHmacSpec.cpp +23 -0
  454. package/nitrogen/generated/shared/c++/HybridHmacSpec.hpp +66 -0
  455. package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.cpp +1 -1
  456. package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.hpp +8 -8
  457. package/nitrogen/generated/shared/c++/HybridMlDsaKeyPairSpec.cpp +29 -0
  458. package/nitrogen/generated/shared/c++/HybridMlDsaKeyPairSpec.hpp +73 -0
  459. package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.cpp +1 -1
  460. package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.hpp +3 -3
  461. package/nitrogen/generated/shared/c++/HybridRandomSpec.cpp +1 -1
  462. package/nitrogen/generated/shared/c++/HybridRandomSpec.hpp +3 -3
  463. package/nitrogen/generated/shared/c++/HybridRsaCipherSpec.cpp +24 -0
  464. package/nitrogen/generated/shared/c++/HybridRsaCipherSpec.hpp +72 -0
  465. package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.cpp +29 -0
  466. package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.hpp +77 -0
  467. package/nitrogen/generated/shared/c++/HybridSignHandleSpec.cpp +23 -0
  468. package/nitrogen/generated/shared/c++/HybridSignHandleSpec.hpp +71 -0
  469. package/nitrogen/generated/shared/c++/HybridVerifyHandleSpec.cpp +23 -0
  470. package/nitrogen/generated/shared/c++/HybridVerifyHandleSpec.hpp +71 -0
  471. package/nitrogen/generated/shared/c++/JWK.hpp +17 -18
  472. package/nitrogen/generated/shared/c++/JWKkty.hpp +12 -14
  473. package/nitrogen/generated/shared/c++/JWKuse.hpp +8 -10
  474. package/nitrogen/generated/shared/c++/KFormatType.hpp +14 -16
  475. package/nitrogen/generated/shared/c++/KeyDetail.hpp +6 -7
  476. package/nitrogen/generated/shared/c++/KeyEncoding.hpp +15 -17
  477. package/nitrogen/generated/shared/c++/KeyObject.hpp +67 -0
  478. package/nitrogen/generated/shared/c++/KeyType.hpp +11 -13
  479. package/nitrogen/generated/shared/c++/KeyUsage.hpp +38 -24
  480. package/nitrogen/generated/shared/c++/NamedCurve.hpp +10 -12
  481. package/package.json +31 -23
  482. package/src/blake3.ts +123 -0
  483. package/src/cipher.ts +335 -0
  484. package/src/constants.ts +32 -0
  485. package/src/ec.ts +657 -0
  486. package/src/ed.ts +297 -13
  487. package/src/expo-plugin/@types.ts +7 -0
  488. package/src/expo-plugin/withRNQC.ts +23 -0
  489. package/src/expo-plugin/withSodiumAndroid.ts +24 -0
  490. package/src/expo-plugin/withSodiumIos.ts +30 -0
  491. package/src/expo-plugin/withXCode.ts +55 -0
  492. package/src/hash.ts +274 -0
  493. package/src/hmac.ts +135 -0
  494. package/src/index.ts +20 -20
  495. package/src/keys/classes.ts +157 -55
  496. package/src/keys/generateKeyPair.ts +177 -134
  497. package/src/keys/index.ts +226 -14
  498. package/src/keys/publicCipher.ts +229 -0
  499. package/src/keys/signVerify.ts +239 -39
  500. package/src/keys/utils.ts +24 -18
  501. package/src/mldsa.ts +125 -0
  502. package/src/pbkdf2.ts +1 -1
  503. package/src/random.ts +7 -0
  504. package/src/rsa.ts +310 -0
  505. package/src/specs/blake3.nitro.ts +12 -0
  506. package/src/specs/cipher.nitro.ts +25 -0
  507. package/src/specs/ecKeyPair.nitro.ts +38 -0
  508. package/src/specs/edKeyPair.nitro.ts +2 -0
  509. package/src/specs/hash.nitro.ts +10 -0
  510. package/src/specs/hmac.nitro.ts +7 -0
  511. package/src/specs/keyObjectHandle.nitro.ts +1 -1
  512. package/src/specs/mlDsaKeyPair.nitro.ts +29 -0
  513. package/src/specs/rsaCipher.nitro.ts +65 -0
  514. package/src/specs/rsaKeyPair.nitro.ts +33 -0
  515. package/src/specs/sign.nitro.ts +31 -0
  516. package/src/subtle.ts +1576 -0
  517. package/src/utils/cipher.ts +60 -0
  518. package/src/utils/conversion.ts +33 -4
  519. package/src/utils/hashnames.ts +4 -2
  520. package/src/utils/index.ts +1 -0
  521. package/src/utils/noble.ts +85 -0
  522. package/src/utils/types.ts +219 -31
  523. package/src/utils/validation.ts +96 -1
  524. package/lib/module/package.json +0 -1
  525. package/nitrogen/generated/android/QuickCryptoOnLoad.kt +0 -1
  526. package/nitrogen/generated/shared/c++/CFRGKeyPairType.hpp +0 -86
@@ -17,25 +17,173 @@ Pod::Spec.new do |s|
17
17
  s.macos.deployment_target = 10.13
18
18
  s.tvos.deployment_target = 13.4
19
19
 
20
- s.source = { :git => "https://github.com/margelo/react-native-quick-crypto.git", :tag => "#{s.version}" }
20
+ s.source = { :git => "https://github.com/margelo/react-native-quick-crypto.git", :tag => "#{s.version}" }
21
21
 
22
- s.source_files = [
22
+ sodium_enabled = ENV['SODIUM_ENABLED'] == '1'
23
+ Pod::UI.puts("[QuickCrypto] 🧂 has libsodium #{sodium_enabled ? "enabled" : "disabled"}!")
24
+
25
+ if sodium_enabled
26
+ # cocoapod for Sodium has not been updated for a while, so we need to build it ourselves
27
+ # https://github.com/jedisct1/swift-sodium/issues/264#issuecomment-2864963850
28
+ s.prepare_command = <<-CMD
29
+ set -e # Exit on any error
30
+ set -x # Print commands as they execute
31
+
32
+ # Create ios directory if it doesn't exist
33
+ mkdir -p ios
34
+
35
+ # Download libsodium with verbose output
36
+ echo "Downloading libsodium..."
37
+ curl -L -v -o ios/libsodium.tar.gz https://download.libsodium.org/libsodium/releases/libsodium-1.0.20-stable.tar.gz
38
+
39
+ # Verify download
40
+ if [ ! -f ios/libsodium.tar.gz ]; then
41
+ echo "ERROR: Failed to download libsodium.tar.gz"
42
+ exit 1
43
+ fi
44
+
45
+ echo "Download size: $(wc -c < ios/libsodium.tar.gz) bytes"
46
+
47
+ # Clean previous extraction
48
+ rm -rf ios/libsodium-stable
49
+
50
+ # Extract the full tarball
51
+ echo "Extracting libsodium..."
52
+ tar -xzf ios/libsodium.tar.gz -C ios
53
+
54
+ # Verify extraction
55
+ if [ ! -d ios/libsodium-stable ]; then
56
+ echo "ERROR: Failed to extract libsodium"
57
+ exit 1
58
+ fi
59
+
60
+ # Run configure and make to generate all headers including private ones
61
+ echo "Configuring libsodium..."
62
+ cd ios/libsodium-stable
63
+ ./configure --disable-shared --enable-static
64
+
65
+ echo "Building libsodium..."
66
+ make -j$(sysctl -n hw.ncpu)
67
+
68
+ # Verify build success
69
+ if [ ! -f src/libsodium/.libs/libsodium.a ]; then
70
+ echo "ERROR: libsodium build failed - static library not found"
71
+ exit 1
72
+ fi
73
+
74
+ echo "libsodium build completed successfully"
75
+
76
+ # Cleanup
77
+ cd ../../
78
+ rm -f ios/libsodium.tar.gz
79
+ CMD
80
+ else
81
+ s.prepare_command = <<-CMD
82
+ # Clean up libsodium files if they exist
83
+ rm -rf ios/libsodium-stable
84
+ rm -f ios/libsodium.tar.gz
85
+ CMD
86
+ end
87
+
88
+ base_source_files = [
23
89
  # implementation (Swift)
24
90
  "ios/**/*.{swift}",
25
91
  # ios (Objective-C++)
26
92
  "ios/**/*.{h,m,mm}",
27
93
  # implementation (C++)
28
94
  "cpp/**/*.{hpp,cpp}",
29
- # dependencies (C++)
30
- "deps/**/*.{hpp,cpp}",
31
- # dependencies (C)
32
- "deps/**/*.{h,c}",
95
+ # dependencies (C++) - ncrypto
96
+ "deps/ncrypto/include/*.{h}",
97
+ "deps/ncrypto/src/*.{cpp}",
98
+ # dependencies (C) - exclude BLAKE3 x86 SIMD files (only use portable + NEON for ARM)
99
+ "deps/blake3/c/*.{h,c}",
100
+ "deps/fastpbkdf2/*.{h,c}",
101
+ ]
102
+
103
+ # Exclude BLAKE3 x86-specific SIMD implementations (SSE2, SSE4.1, AVX2, AVX-512)
104
+ # These use Intel intrinsics that don't compile on ARM
105
+ # Also exclude example files, TBB files, test files, and non-C directories
106
+ s.exclude_files = [
107
+ "deps/blake3/c/blake3_sse2.c",
108
+ "deps/blake3/c/blake3_sse41.c",
109
+ "deps/blake3/c/blake3_avx2.c",
110
+ "deps/blake3/c/blake3_avx512.c",
111
+ "deps/blake3/c/blake3_sse2_x86-64_unix.S",
112
+ "deps/blake3/c/blake3_sse41_x86-64_unix.S",
113
+ "deps/blake3/c/blake3_avx2_x86-64_unix.S",
114
+ "deps/blake3/c/blake3_avx512_x86-64_unix.S",
115
+ "deps/blake3/c/blake3_sse2_x86-64_windows_gnu.S",
116
+ "deps/blake3/c/blake3_sse41_x86-64_windows_gnu.S",
117
+ "deps/blake3/c/blake3_avx2_x86-64_windows_gnu.S",
118
+ "deps/blake3/c/blake3_avx512_x86-64_windows_gnu.S",
119
+ "deps/blake3/c/blake3_sse2_x86-64_windows_msvc.asm",
120
+ "deps/blake3/c/blake3_sse41_x86-64_windows_msvc.asm",
121
+ "deps/blake3/c/blake3_avx2_x86-64_windows_msvc.asm",
122
+ "deps/blake3/c/blake3_avx512_x86-64_windows_msvc.asm",
123
+ "deps/blake3/c/main.c",
124
+ "deps/blake3/c/example.c",
125
+ "deps/blake3/c/example_tbb.c",
126
+ "deps/blake3/c/blake3_tbb.cpp",
127
+ # Exclude non-C parts of BLAKE3 repo (Rust, benchmarks, tools, etc.)
128
+ "deps/blake3/src/**/*",
129
+ "deps/blake3/b3sum/**/*",
130
+ "deps/blake3/benches/**/*",
131
+ "deps/blake3/reference_impl/**/*",
132
+ "deps/blake3/tools/**/*",
133
+ "deps/blake3/test_vectors/**/*",
134
+ ]
135
+
136
+ if sodium_enabled
137
+ base_source_files += ["ios/libsodium-stable/src/libsodium/**/*.{h,c}"]
138
+ end
139
+
140
+ s.source_files = base_source_files
141
+
142
+ xcconfig = {
143
+ # C++ compiler flags, mainly for folly.
144
+ "GCC_PREPROCESSOR_DEFINITIONS" => "$(inherited) FOLLY_NO_CONFIG FOLLY_CFG_NO_COROUTINES",
145
+ # Set C++ standard to C++20
146
+ "CLANG_CXX_LANGUAGE_STANDARD" => "c++20",
147
+ "CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES" => "YES"
148
+ }
149
+
150
+ # Add cpp subdirectories to header search paths
151
+ cpp_headers = [
152
+ "\"$(PODS_TARGET_SRCROOT)/cpp/utils\"",
153
+ "\"$(PODS_TARGET_SRCROOT)/deps/ncrypto/include\"",
154
+ "\"$(PODS_TARGET_SRCROOT)/deps/blake3/c\"",
155
+ "\"$(PODS_TARGET_SRCROOT)/deps/fastpbkdf2\""
33
156
  ]
34
157
 
158
+ if sodium_enabled
159
+ sodium_headers = [
160
+ "\"$(PODS_TARGET_SRCROOT)/ios/libsodium-stable/src/libsodium/include\"",
161
+ "\"$(PODS_TARGET_SRCROOT)/ios/libsodium-stable/src/libsodium/include/sodium\"",
162
+ "\"$(PODS_TARGET_SRCROOT)/ios/libsodium-stable\"",
163
+ "\"$(PODS_ROOT)/../../packages/react-native-quick-crypto/ios/libsodium-stable/src/libsodium/include\"",
164
+ "\"$(PODS_ROOT)/../../packages/react-native-quick-crypto/ios/libsodium-stable/src/libsodium/include/sodium\""
165
+ ]
166
+ xcconfig["HEADER_SEARCH_PATHS"] = (cpp_headers + sodium_headers).join(' ')
167
+ xcconfig["GCC_PREPROCESSOR_DEFINITIONS"] = "$(inherited) BLSALLOC_SODIUM=1"
168
+ else
169
+ xcconfig["HEADER_SEARCH_PATHS"] = cpp_headers.join(' ')
170
+ end
171
+
172
+ s.pod_target_xcconfig = xcconfig
173
+
35
174
  # Add all files generated by Nitrogen
36
- load 'nitrogen/generated/ios/QuickCrypto+autolinking.rb'
175
+ load "nitrogen/generated/ios/QuickCrypto+autolinking.rb"
37
176
  add_nitrogen_files(s)
38
177
 
39
- s.dependency "OpenSSL-Universal"
178
+ s.dependency "React-jsi"
179
+ s.dependency "React-callinvoker"
180
+
181
+ # OpenSSL 3.6+ via SPM for ML-DSA (post-quantum cryptography) support
182
+ spm_dependency(s,
183
+ url: 'https://github.com/krzyzanowskim/OpenSSL.git',
184
+ requirement: {kind: 'upToNextMajorVersion', minimumVersion: '3.6.0'},
185
+ products: ['OpenSSL']
186
+ )
187
+
40
188
  install_modules_dependencies(s)
41
189
  end
package/README.md CHANGED
@@ -1,12 +1,16 @@
1
- <a href="https://margelo.io">
2
- <img src="./docs/img/banner.svg" width="100%" />
1
+ <a href="https://margelo.com">
2
+ <picture>
3
+ <source media="(prefers-color-scheme: dark)" srcset="./docs/img/banner-dark.png" />
4
+ <source media="(prefers-color-scheme: light)" srcset="./docs/img/banner-light.png" />
5
+ <img alt="react-native-quick-crypto" src="./docs/img/banner-light.png" />
6
+ </picture>
3
7
  </a>
4
8
 
5
9
  # ⚡️ react-native-quick-crypto
6
10
 
7
11
  A fast implementation of Node's `crypto` module.
8
12
 
9
- > Note: This version `1.x` is undergoing a major refactor, porting to New Architecture, Bridgeless, and [`Nitro Modules`](https://github.com/mrousavy/react-native-nitro) and is incomplete compared to the `0.x` version. Status, as always, will be represented in [implementation-coverage.md](../main/docs/implementation-coverage.md).
13
+ > Note: This version `1.x` completed a major refactor, porting to OpenSSL 3.3+, New Architecture, Bridgeless, and [`Nitro Modules`](https://github.com/mrousavy/react-native-nitro). It should be at or above feature-parity compared to the `0.x` version. Status, as always, will be represented in [implementation-coverage.md](../main/docs/implementation-coverage.md).
10
14
 
11
15
  > Note: Minimum supported version of React Native is `0.75`. If you need to use earlier versions, please use `0.x` versions of this library.
12
16
 
@@ -26,31 +30,16 @@ QuickCrypto can be used as a drop-in replacement for your Web3/Crypto apps to sp
26
30
 
27
31
  | Version | RN Architecture | Modules |
28
32
  | ------- | ------ | ------- |
29
- | `1.x` | new [->](https://github.com/reactwg/react-native-new-architecture/blob/main/docs/enable-apps.md) | Nitro Modules [->](https://github.com/margelo/react-native-nitro) |
30
- | `0.x` | old | Bridge & JSI |
33
+ | `1.x` | new [->](https://github.com/reactwg/react-native-new-architecture/blob/main/docs/enable-apps.md) | Nitro Modules [->](https://github.com/mrousavy/nitro) |
34
+ | `0.x` | old, new 🤞 | Bridge & JSI |
31
35
 
32
- ## Benchmarks
33
-
34
- For example, creating a Wallet using ethers.js uses complex algorithms to generate a private-key/mnemonic-phrase pair:
35
-
36
- ```ts
37
- const start = performance.now();
38
- const wallet = ethers.Wallet.createRandom();
39
- const end = performance.now();
40
- console.log(`Creating a Wallet took ${end - start} ms.`);
41
- ```
42
-
43
- **Without** react-native-quick-crypto 🐢:
36
+ ## Migration
44
37
 
45
- ```
46
- Creating a Wallet took 16862 ms
47
- ```
38
+ Our goal in refactoring to v1.0 was to maintain API compatibility. If you are upgrading to v1.0 from v0.x, and find any discrepancies, please open an issue in this repo.
48
39
 
49
- **With** react-native-quick-crypto ⚡️:
40
+ ## Benchmarks
50
41
 
51
- ```
52
- Creating a Wallet took 289 ms
53
- ```
42
+ There is a benchmark suite in the Example app in this repo that has benchmarks of algorithms against their pure JS counterparts. This is not meant to disparage the other libraries. On the contrary, they perform amazingly well when used in a server-side Node environment. This library exists because React Native does not have that environment nor the Node Crypto API implementation at hand. So the benchmark suite is there to show you the speedup vs. the alternative of using a pure JS library on React Native.
54
43
 
55
44
  ---
56
45
 
@@ -150,8 +139,6 @@ const hashed = QuickCrypto.createHash('sha256')
150
139
 
151
140
  ## Limitations
152
141
 
153
- As the library uses JSI for synchronous native methods access, remote debugging (e.g. with Chrome) is no longer possible. Instead, you should use [Flipper](https://fbflipper.com).
154
-
155
142
  Not all cryptographic algorithms are supported yet. See the [implementation coverage](./docs/implementation-coverage.md) document for more details. If you need a specific algorithm, please open a `feature request` issue and we'll see what we can do.
156
143
 
157
144
  ## Community Discord
@@ -160,7 +147,7 @@ Not all cryptographic algorithms are supported yet. See the [implementation cove
160
147
 
161
148
  ## Adopting at scale
162
149
 
163
- react-native-quick-crypto was built at Margelo, an elite app development agency. For enterprise support or other business inquiries, contact us at <a href="mailto:hello@margelo.io?subject=Adopting react-native-quick-crypto at scale">hello@margelo.io</a>!
150
+ `react-native-quick-crypto` was built at Margelo, an elite app development agency. For enterprise support or other business inquiries, contact us at <a href="mailto:hello@margelo.io?subject=Adopting react-native-quick-crypto at scale">hello@margelo.io</a>!
164
151
 
165
152
  ## Contributing
166
153
 
@@ -1,18 +1,54 @@
1
+ cmake_minimum_required(VERSION 3.10.0)
1
2
  project(QuickCrypto)
2
- cmake_minimum_required(VERSION 3.9.0)
3
3
 
4
4
  set(PACKAGE_NAME QuickCrypto)
5
5
  set(CMAKE_VERBOSE_MAKEFILE ON)
6
6
  set(CMAKE_CXX_STANDARD 20)
7
7
 
8
+ # BLAKE3 sources - architecture-specific SIMD support
9
+ set(BLAKE3_SOURCES
10
+ ../deps/blake3/c/blake3.c
11
+ ../deps/blake3/c/blake3_dispatch.c
12
+ ../deps/blake3/c/blake3_portable.c
13
+ )
14
+
15
+ if(CMAKE_ANDROID_ARCH_ABI STREQUAL "arm64-v8a")
16
+ # ARM64 uses NEON intrinsics (auto-detected via IS_AARCH64 in blake3_impl.h)
17
+ list(APPEND BLAKE3_SOURCES ../deps/blake3/c/blake3_neon.c)
18
+ elseif(CMAKE_ANDROID_ARCH_ABI STREQUAL "x86" OR CMAKE_ANDROID_ARCH_ABI STREQUAL "x86_64")
19
+ # Disable x86 SIMD - would require assembly files we don't compile
20
+ # Falls back to portable C implementation
21
+ add_definitions(-DBLAKE3_NO_SSE2 -DBLAKE3_NO_SSE41 -DBLAKE3_NO_AVX2 -DBLAKE3_NO_AVX512)
22
+ endif()
23
+
8
24
  # Define C++ library and add all sources
9
25
  add_library(
10
26
  ${PACKAGE_NAME} SHARED
11
27
  src/main/cpp/cpp-adapter.cpp
28
+ ../cpp/blake3/HybridBlake3.cpp
29
+ ../cpp/cipher/CCMCipher.cpp
30
+ ../cpp/cipher/GCMCipher.cpp
31
+ ../cpp/cipher/HybridCipher.cpp
32
+ ../cpp/cipher/HybridRsaCipher.cpp
33
+ ../cpp/cipher/OCBCipher.cpp
34
+ ../cpp/cipher/XSalsa20Cipher.cpp
35
+ ../cpp/cipher/ChaCha20Cipher.cpp
36
+ ../cpp/cipher/ChaCha20Poly1305Cipher.cpp
37
+ ../cpp/ec/HybridEcKeyPair.cpp
12
38
  ../cpp/ed25519/HybridEdKeyPair.cpp
39
+ ../cpp/hash/HybridHash.cpp
40
+ ../cpp/hmac/HybridHmac.cpp
41
+ ../cpp/keys/HybridKeyObjectHandle.cpp
42
+ ../cpp/keys/KeyObjectData.cpp
43
+ ../cpp/mldsa/HybridMlDsaKeyPair.cpp
13
44
  ../cpp/pbkdf2/HybridPbkdf2.cpp
14
45
  ../cpp/random/HybridRandom.cpp
46
+ ../cpp/rsa/HybridRsaKeyPair.cpp
47
+ ../cpp/sign/HybridSignHandle.cpp
48
+ ../cpp/sign/HybridVerifyHandle.cpp
49
+ ${BLAKE3_SOURCES}
15
50
  ../deps/fastpbkdf2/fastpbkdf2.c
51
+ ../deps/ncrypto/src/ncrypto.cpp
16
52
  )
17
53
 
18
54
  # add Nitrogen specs
@@ -21,11 +57,22 @@ include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/QuickCrypto+autolinkin
21
57
  # local includes
22
58
  include_directories(
23
59
  "src/main/cpp"
60
+ "../cpp/blake3"
61
+ "../cpp/cipher"
62
+ "../cpp/ec"
24
63
  "../cpp/ed25519"
64
+ "../cpp/hash"
65
+ "../cpp/hmac"
66
+ "../cpp/keys"
67
+ "../cpp/mldsa"
25
68
  "../cpp/pbkdf2"
26
69
  "../cpp/random"
70
+ "../cpp/rsa"
71
+ "../cpp/sign"
27
72
  "../cpp/utils"
73
+ "../deps/blake3/c"
28
74
  "../deps/fastpbkdf2"
75
+ "../deps/ncrypto/include"
29
76
  )
30
77
 
31
78
  # Third party libraries (Prefabs)
@@ -36,20 +83,30 @@ find_package(openssl REQUIRED CONFIG)
36
83
  # Link all libraries together
37
84
  target_link_libraries(
38
85
  ${PACKAGE_NAME}
39
- ${LOG_LIB} # <-- Logcat logger
40
- android # <-- Android core
41
- openssl::crypto # <-- OpenSSL (Crypto)
86
+ ${LOG_LIB} # <-- Logcat logger
87
+ android # <-- Android core
88
+ openssl::crypto # <-- OpenSSL (Crypto)
89
+ openssl::ssl # <-- OpenSSL (SSL)
90
+ )
91
+
92
+ if(SODIUM_ENABLED)
93
+ add_definitions(-DBLSALLOC_SODIUM)
94
+ find_package(sodium REQUIRED CONFIG)
95
+ target_link_libraries(
96
+ ${PACKAGE_NAME}
97
+ sodium::sodium
42
98
  )
99
+ endif()
43
100
 
44
101
  if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
45
102
  target_link_libraries(
46
103
  ${PACKAGE_NAME}
47
- ReactAndroid::reactnative # <-- RN: Native Modules umbrella prefab
104
+ ReactAndroid::reactnative # <-- RN: Native Modules umbrella prefab
48
105
  )
49
106
  else()
50
107
  target_link_libraries(
51
108
  ${PACKAGE_NAME}
52
- ReactAndroid::turbomodulejsijni
53
- ReactAndroid::react_nativemodule_core # <-- RN: React Native native module core
109
+ ReactAndroid::react_nativemodule_core # <-- RN: TurboModules Core
110
+ ReactAndroid::turbomodulejsijni # <-- RN: TurboModules utils (e.g. CallInvokerHolder)
54
111
  )
55
112
  endif()
@@ -37,6 +37,9 @@ def getExtOrIntegerDefault(name) {
37
37
  return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["QuickCrypto_" + name]).toInteger()
38
38
  }
39
39
 
40
+ def sodiumEnabled = hasProperty('sodiumEnabled') ? project.property('sodiumEnabled').toBoolean() : false // Default to false
41
+ logger.warn("[QuickCrypto] Has libsodium ${sodiumEnabled ? "enabled" : "disabled"}!")
42
+
40
43
  android {
41
44
  namespace "com.margelo.nitro.quickcrypto"
42
45
  ndkVersion getExtOrDefault("ndkVersion")
@@ -50,7 +53,9 @@ android {
50
53
  externalNativeBuild {
51
54
  cmake {
52
55
  cppFlags "-frtti -fexceptions -Wall -fstack-protector-all"
53
- arguments "-DANDROID_STL=c++_shared"
56
+ arguments "-DANDROID_STL=c++_shared",
57
+ "-DSODIUM_ENABLED=${sodiumEnabled}",
58
+ "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON"
54
59
  abiFilters (*reactNativeArchitectures())
55
60
 
56
61
  buildTypes {
@@ -138,7 +143,12 @@ dependencies {
138
143
  implementation project(":react-native-nitro-modules")
139
144
 
140
145
  // Add a dependency on OpenSSL
141
- implementation 'io.github.ronickg:openssl:3.3.2'
146
+ implementation 'io.github.ronickg:openssl:3.6.0-1'
147
+
148
+ if (sodiumEnabled) {
149
+ // Add a dependency on libsodium
150
+ implementation 'io.github.ronickg:sodium:1.0.20-1'
151
+ }
142
152
  }
143
153
 
144
154
  if (isNewArchitectureEnabled()) {
@@ -8,8 +8,6 @@ import com.facebook.react.bridge.NativeModule;
8
8
  import com.facebook.react.bridge.ReactApplicationContext;
9
9
  import com.facebook.react.module.model.ReactModuleInfoProvider;
10
10
  import com.facebook.react.TurboReactPackage;
11
- import com.margelo.nitro.core.HybridObject;
12
- import com.margelo.nitro.core.HybridObjectRegistry;
13
11
 
14
12
  import java.util.HashMap;
15
13
  import java.util.function.Supplier;
package/app.plugin.js ADDED
@@ -0,0 +1,3 @@
1
+ const { createRNQCPlugin } = require('./lib/commonjs/expo-plugin/withRNQC');
2
+ const pkg = require('./package.json');
3
+ module.exports = createRNQCPlugin(pkg.name, pkg.version);
@@ -0,0 +1,118 @@
1
+ #include "HybridBlake3.hpp"
2
+
3
+ #include <NitroModules/ArrayBuffer.hpp>
4
+ #include <cstring>
5
+ #include <stdexcept>
6
+
7
+ #include "Utils.hpp"
8
+
9
+ namespace margelo::nitro::crypto {
10
+
11
+ void HybridBlake3::initHash() {
12
+ blake3_hasher_init(&hasher);
13
+ mode = Mode::Hash;
14
+ key = std::nullopt;
15
+ context = std::nullopt;
16
+ initialized = true;
17
+ }
18
+
19
+ void HybridBlake3::initKeyed(const std::shared_ptr<ArrayBuffer>& keyBuffer) {
20
+ if (!keyBuffer || keyBuffer->size() != BLAKE3_KEY_LEN) {
21
+ throw std::runtime_error("BLAKE3 key must be exactly 32 bytes");
22
+ }
23
+
24
+ std::array<uint8_t, BLAKE3_KEY_LEN> keyArray;
25
+ std::memcpy(keyArray.data(), keyBuffer->data(), BLAKE3_KEY_LEN);
26
+
27
+ blake3_hasher_init_keyed(&hasher, keyArray.data());
28
+ mode = Mode::Keyed;
29
+ key = keyArray;
30
+ context = std::nullopt;
31
+ initialized = true;
32
+ }
33
+
34
+ void HybridBlake3::initDeriveKey(const std::string& ctx) {
35
+ if (ctx.empty()) {
36
+ throw std::runtime_error("BLAKE3 context must be a non-empty string");
37
+ }
38
+
39
+ blake3_hasher_init_derive_key(&hasher, ctx.c_str());
40
+ mode = Mode::DeriveKey;
41
+ key = std::nullopt;
42
+ context = ctx;
43
+ initialized = true;
44
+ }
45
+
46
+ void HybridBlake3::update(const std::shared_ptr<ArrayBuffer>& data) {
47
+ if (!initialized) {
48
+ throw std::runtime_error("BLAKE3 hasher not initialized");
49
+ }
50
+ if (!data) {
51
+ return;
52
+ }
53
+ blake3_hasher_update(&hasher, data->data(), data->size());
54
+ }
55
+
56
+ std::shared_ptr<ArrayBuffer> HybridBlake3::digest(std::optional<double> length) {
57
+ if (!initialized) {
58
+ throw std::runtime_error("BLAKE3 hasher not initialized");
59
+ }
60
+
61
+ size_t outLen = BLAKE3_OUT_LEN;
62
+ if (length.has_value()) {
63
+ double len = length.value();
64
+ if (len <= 0 || len > 65535) {
65
+ throw std::runtime_error("BLAKE3 output length must be between 1 and 65535");
66
+ }
67
+ outLen = static_cast<size_t>(len);
68
+ }
69
+
70
+ auto output = new uint8_t[outLen];
71
+ blake3_hasher_finalize(&hasher, output, outLen);
72
+
73
+ return std::make_shared<margelo::nitro::NativeArrayBuffer>(output, outLen, [=]() { delete[] output; });
74
+ }
75
+
76
+ void HybridBlake3::reset() {
77
+ if (!initialized) {
78
+ throw std::runtime_error("BLAKE3 hasher not initialized");
79
+ }
80
+
81
+ switch (mode) {
82
+ case Mode::Hash:
83
+ blake3_hasher_init(&hasher);
84
+ break;
85
+ case Mode::Keyed:
86
+ if (key.has_value()) {
87
+ blake3_hasher_init_keyed(&hasher, key->data());
88
+ }
89
+ break;
90
+ case Mode::DeriveKey:
91
+ if (context.has_value()) {
92
+ blake3_hasher_init_derive_key(&hasher, context->c_str());
93
+ }
94
+ break;
95
+ }
96
+ }
97
+
98
+ std::shared_ptr<HybridBlake3Spec> HybridBlake3::copy() {
99
+ if (!initialized) {
100
+ throw std::runtime_error("BLAKE3 hasher not initialized");
101
+ }
102
+
103
+ auto copied = std::make_shared<HybridBlake3>();
104
+
105
+ std::memcpy(&copied->hasher, &hasher, sizeof(blake3_hasher));
106
+ copied->initialized = true;
107
+ copied->mode = mode;
108
+ copied->key = key;
109
+ copied->context = context;
110
+
111
+ return copied;
112
+ }
113
+
114
+ std::string HybridBlake3::getVersion() {
115
+ return std::string(blake3_version());
116
+ }
117
+
118
+ } // namespace margelo::nitro::crypto
@@ -0,0 +1,35 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+ #include <optional>
5
+ #include <string>
6
+
7
+ #include "HybridBlake3Spec.hpp"
8
+ #include "blake3.h"
9
+
10
+ namespace margelo::nitro::crypto {
11
+
12
+ class HybridBlake3 : public HybridBlake3Spec {
13
+ public:
14
+ HybridBlake3() : HybridObject(TAG) {}
15
+ ~HybridBlake3() = default;
16
+
17
+ public:
18
+ void initHash() override;
19
+ void initKeyed(const std::shared_ptr<ArrayBuffer>& key) override;
20
+ void initDeriveKey(const std::string& context) override;
21
+ void update(const std::shared_ptr<ArrayBuffer>& data) override;
22
+ std::shared_ptr<ArrayBuffer> digest(std::optional<double> length) override;
23
+ void reset() override;
24
+ std::shared_ptr<HybridBlake3Spec> copy() override;
25
+ std::string getVersion() override;
26
+
27
+ private:
28
+ blake3_hasher hasher;
29
+ bool initialized = false;
30
+ enum class Mode { Hash, Keyed, DeriveKey } mode = Mode::Hash;
31
+ std::optional<std::array<uint8_t, BLAKE3_KEY_LEN>> key;
32
+ std::optional<std::string> context;
33
+ };
34
+
35
+ } // namespace margelo::nitro::crypto