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
@@ -2,7 +2,7 @@ require "json"
2
2
 
3
3
  package = JSON.parse(File.read(File.join(__dir__, "package.json")))
4
4
 
5
- Pod::UI.puts "[QuickCrypto] crypto just got quicker 💨"
5
+ Pod::UI.puts "[QuickCrypto] 💨 crypto just got quicker"
6
6
 
7
7
  Pod::Spec.new do |s|
8
8
  s.name = "QuickCrypto"
@@ -12,23 +12,159 @@ Pod::Spec.new do |s|
12
12
  s.license = package["license"]
13
13
  s.authors = package["authors"]
14
14
 
15
- s.platforms = { :ios => min_ios_version_supported }
16
- s.source = { :git => "https://github.com/margelo/react-native-quick-crypto.git", :tag => "#{s.version}" }
15
+ s.ios.deployment_target = min_ios_version_supported
16
+ s.visionos.deployment_target = 1.0
17
+ s.macos.deployment_target = 10.13
18
+ s.tvos.deployment_target = 13.4
17
19
 
18
- s.source_files = [
20
+ s.source = { :git => "https://github.com/margelo/react-native-quick-crypto.git", :tag => "#{s.version}" }
21
+
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 = [
19
89
  # implementation (Swift)
20
90
  "ios/**/*.{swift}",
21
91
  # ios (Objective-C++)
22
92
  "ios/**/*.{h,m,mm}",
23
93
  # implementation (C++)
24
94
  "cpp/**/*.{hpp,cpp}",
95
+ # dependencies (C++)
96
+ "deps/**/*.{h,cc}",
97
+ # dependencies (C) - exclude BLAKE3 x86 SIMD files (only use portable + NEON for ARM)
98
+ "deps/**/*.{h,c}",
25
99
  ]
26
100
 
101
+ # Exclude BLAKE3 x86-specific SIMD implementations (SSE2, SSE4.1, AVX2, AVX-512)
102
+ # These use Intel intrinsics that don't compile on ARM
103
+ # Also exclude example files, TBB files, test files, and non-C directories
104
+ s.exclude_files = [
105
+ "deps/blake3/c/blake3_sse2.c",
106
+ "deps/blake3/c/blake3_sse41.c",
107
+ "deps/blake3/c/blake3_avx2.c",
108
+ "deps/blake3/c/blake3_avx512.c",
109
+ "deps/blake3/c/blake3_sse2_x86-64_unix.S",
110
+ "deps/blake3/c/blake3_sse41_x86-64_unix.S",
111
+ "deps/blake3/c/blake3_avx2_x86-64_unix.S",
112
+ "deps/blake3/c/blake3_avx512_x86-64_unix.S",
113
+ "deps/blake3/c/blake3_sse2_x86-64_windows_gnu.S",
114
+ "deps/blake3/c/blake3_sse41_x86-64_windows_gnu.S",
115
+ "deps/blake3/c/blake3_avx2_x86-64_windows_gnu.S",
116
+ "deps/blake3/c/blake3_avx512_x86-64_windows_gnu.S",
117
+ "deps/blake3/c/blake3_sse2_x86-64_windows_msvc.asm",
118
+ "deps/blake3/c/blake3_sse41_x86-64_windows_msvc.asm",
119
+ "deps/blake3/c/blake3_avx2_x86-64_windows_msvc.asm",
120
+ "deps/blake3/c/blake3_avx512_x86-64_windows_msvc.asm",
121
+ "deps/blake3/c/main.c",
122
+ "deps/blake3/c/example.c",
123
+ "deps/blake3/c/example_tbb.c",
124
+ "deps/blake3/c/blake3_tbb.cpp",
125
+ # Exclude non-C parts of BLAKE3 repo (Rust, benchmarks, tools, etc.)
126
+ "deps/blake3/src/**/*",
127
+ "deps/blake3/b3sum/**/*",
128
+ "deps/blake3/benches/**/*",
129
+ "deps/blake3/reference_impl/**/*",
130
+ "deps/blake3/tools/**/*",
131
+ "deps/blake3/test_vectors/**/*",
132
+ ]
133
+
134
+ if sodium_enabled
135
+ base_source_files += ["ios/libsodium-stable/src/libsodium/**/*.{h,c}"]
136
+ end
137
+
138
+ s.source_files = base_source_files
139
+
140
+ xcconfig = {
141
+ # C++ compiler flags, mainly for folly.
142
+ "GCC_PREPROCESSOR_DEFINITIONS" => "$(inherited) FOLLY_NO_CONFIG FOLLY_CFG_NO_COROUTINES",
143
+ # Set C++ standard to C++20
144
+ "CLANG_CXX_LANGUAGE_STANDARD" => "c++20",
145
+ "CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES" => "YES"
146
+ }
147
+
148
+ if sodium_enabled
149
+ sodium_headers = [
150
+ "\"$(PODS_TARGET_SRCROOT)/ios/libsodium-stable/src/libsodium/include\"",
151
+ "\"$(PODS_TARGET_SRCROOT)/ios/libsodium-stable/src/libsodium/include/sodium\"",
152
+ "\"$(PODS_TARGET_SRCROOT)/ios/libsodium-stable\"",
153
+ "\"$(PODS_ROOT)/../../packages/react-native-quick-crypto/ios/libsodium-stable/src/libsodium/include\"",
154
+ "\"$(PODS_ROOT)/../../packages/react-native-quick-crypto/ios/libsodium-stable/src/libsodium/include/sodium\""
155
+ ]
156
+ xcconfig["HEADER_SEARCH_PATHS"] = sodium_headers.join(' ')
157
+ xcconfig["GCC_PREPROCESSOR_DEFINITIONS"] = "$(inherited) BLSALLOC_SODIUM=1"
158
+ end
159
+
160
+ s.pod_target_xcconfig = xcconfig
161
+
27
162
  # Add all files generated by Nitrogen
28
- load 'nitrogen/generated/ios/QuickCrypto+autolinking.rb'
163
+ load "nitrogen/generated/ios/QuickCrypto+autolinking.rb"
29
164
  add_nitrogen_files(s)
30
165
 
166
+ s.dependency "React-jsi"
167
+ s.dependency "React-callinvoker"
168
+ s.dependency "OpenSSL-Universal", "3.3.3001"
31
169
  install_modules_dependencies(s)
32
- s.dependency "OpenSSL-Universal"
33
-
34
170
  end
package/README.md CHANGED
@@ -1,12 +1,18 @@
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](../blob/main/docs/implementation-coverage.md).
13
+ > 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).
14
+
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.
10
16
 
11
17
  ## Features
12
18
 
@@ -24,8 +30,8 @@ QuickCrypto can be used as a drop-in replacement for your Web3/Crypto apps to sp
24
30
 
25
31
  | Version | RN Architecture | Modules |
26
32
  | ------- | ------ | ------- |
27
- | `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) |
28
- | `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 |
29
35
 
30
36
  ## Benchmarks
31
37
 
@@ -59,7 +65,7 @@ Creating a Wallet took 289 ms
59
65
  </h3>
60
66
 
61
67
  ```sh
62
- yarn add react-native-quick-crypto
68
+ bun add react-native-quick-crypto react-native-nitro-modules
63
69
  cd ios && pod install
64
70
  ```
65
71
 
@@ -1,44 +1,105 @@
1
- cmake_minimum_required(VERSION 3.9.0)
2
-
1
+ cmake_minimum_required(VERSION 3.10.0)
3
2
  project(QuickCrypto)
4
- set(PACKAGE_NAME QuickCrypto)
5
3
 
4
+ set(PACKAGE_NAME QuickCrypto)
6
5
  set(CMAKE_VERBOSE_MAKEFILE ON)
7
6
  set(CMAKE_CXX_STANDARD 20)
8
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
+
9
24
  # Define C++ library and add all sources
10
25
  add_library(
11
26
  ${PACKAGE_NAME} SHARED
12
27
  src/main/cpp/cpp-adapter.cpp
28
+ ../cpp/blake3/HybridBlake3.cpp
29
+ ../cpp/cipher/CCMCipher.cpp
30
+ ../cpp/cipher/HybridCipher.cpp
31
+ ../cpp/cipher/OCBCipher.cpp
32
+ ../cpp/cipher/XSalsa20Cipher.cpp
33
+ ../cpp/cipher/ChaCha20Cipher.cpp
34
+ ../cpp/cipher/ChaCha20Poly1305Cipher.cpp
35
+ ../cpp/ec/HybridEcKeyPair.cpp
36
+ ../cpp/ed25519/HybridEdKeyPair.cpp
37
+ ../cpp/hash/HybridHash.cpp
38
+ ../cpp/hmac/HybridHmac.cpp
39
+ ../cpp/keys/HybridKeyObjectHandle.cpp
40
+ ../cpp/keys/KeyObjectData.cpp
41
+ ../cpp/pbkdf2/HybridPbkdf2.cpp
13
42
  ../cpp/random/HybridRandom.cpp
43
+ ../cpp/rsa/HybridRsaKeyPair.cpp
44
+ ${BLAKE3_SOURCES}
45
+ ../deps/fastpbkdf2/fastpbkdf2.c
46
+ ../deps/ncrypto/ncrypto.cc
14
47
  )
15
48
 
16
- include_directories(../cpp)
49
+ # add Nitrogen specs
17
50
  include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/QuickCrypto+autolinking.cmake)
18
51
 
52
+ # local includes
53
+ include_directories(
54
+ "src/main/cpp"
55
+ "../cpp/blake3"
56
+ "../cpp/cipher"
57
+ "../cpp/ec"
58
+ "../cpp/ed25519"
59
+ "../cpp/hash"
60
+ "../cpp/hmac"
61
+ "../cpp/keys"
62
+ "../cpp/pbkdf2"
63
+ "../cpp/random"
64
+ "../cpp/rsa"
65
+ "../cpp/utils"
66
+ "../deps/blake3/c"
67
+ "../deps/fastpbkdf2"
68
+ "../deps/ncrypto"
69
+ )
70
+
19
71
  # Third party libraries (Prefabs)
20
72
  find_library(LOG_LIB log)
21
73
 
22
- find_package(ReactAndroid REQUIRED CONFIG)
23
- find_package(fbjni REQUIRED CONFIG)
24
74
  find_package(openssl REQUIRED CONFIG)
25
75
 
26
76
  # Link all libraries together
27
77
  target_link_libraries(
28
78
  ${PACKAGE_NAME}
29
- ${LOG_LIB} # <-- Logcat logger
30
- android # <-- Android core
31
- fbjni::fbjni # <-- Facebook C++ JNI helpers
32
- openssl::crypto # <-- OpenSSL (Crypto)
33
- ReactAndroid::jsi
34
- ReactAndroid::turbomodulejsijni
35
- ReactAndroid::react_nativemodule_core
36
- ReactAndroid::react_render_core
37
- ReactAndroid::runtimeexecutor
38
- ReactAndroid::fabricjni
39
- ReactAndroid::react_debug
40
- ReactAndroid::react_render_core
41
- ReactAndroid::react_render_componentregistry
42
- ReactAndroid::rrc_view
43
- ReactAndroid::folly_runtime
79
+ ${LOG_LIB} # <-- Logcat logger
80
+ android # <-- Android core
81
+ openssl::crypto # <-- OpenSSL (Crypto)
82
+ openssl::ssl # <-- OpenSSL (SSL)
83
+ )
84
+
85
+ if(SODIUM_ENABLED)
86
+ add_definitions(-DBLSALLOC_SODIUM)
87
+ find_package(sodium REQUIRED CONFIG)
88
+ target_link_libraries(
89
+ ${PACKAGE_NAME}
90
+ sodium::sodium
91
+ )
92
+ endif()
93
+
94
+ if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
95
+ target_link_libraries(
96
+ ${PACKAGE_NAME}
97
+ ReactAndroid::reactnative # <-- RN: Native Modules umbrella prefab
98
+ )
99
+ else()
100
+ target_link_libraries(
101
+ ${PACKAGE_NAME}
102
+ ReactAndroid::react_nativemodule_core # <-- RN: TurboModules Core
103
+ ReactAndroid::turbomodulejsijni # <-- RN: TurboModules utils (e.g. CallInvokerHolder)
44
104
  )
105
+ endif()
@@ -7,7 +7,7 @@ buildscript {
7
7
  }
8
8
 
9
9
  dependencies {
10
- classpath "com.android.tools.build:gradle:8.2.2"
10
+ classpath "com.android.tools.build:gradle:8.7.3"
11
11
  classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}"
12
12
  }
13
13
  }
@@ -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")
@@ -49,9 +52,20 @@ android {
49
52
 
50
53
  externalNativeBuild {
51
54
  cmake {
52
- cppFlags "-O2 -frtti -fexceptions -Wall -fstack-protector-all"
53
- arguments "-DANDROID_STL=c++_shared"
55
+ cppFlags "-frtti -fexceptions -Wall -fstack-protector-all"
56
+ arguments "-DANDROID_STL=c++_shared",
57
+ "-DSODIUM_ENABLED=${sodiumEnabled}",
58
+ "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON"
54
59
  abiFilters (*reactNativeArchitectures())
60
+
61
+ buildTypes {
62
+ debug {
63
+ cppFlags "-O1 -g"
64
+ }
65
+ release {
66
+ cppFlags "-O2"
67
+ }
68
+ }
55
69
  }
56
70
  }
57
71
  }
@@ -67,6 +81,27 @@ android {
67
81
  prefab true
68
82
  }
69
83
 
84
+ packagingOptions {
85
+ excludes = [
86
+ "META-INF",
87
+ "META-INF/**",
88
+ "**/libc++_shared.so",
89
+ "**/libfbjni.so",
90
+ "**/libjsi.so",
91
+ "**/libfolly_json.so",
92
+ "**/libfolly_runtime.so",
93
+ "**/libglog.so",
94
+ "**/libhermes.so",
95
+ "**/libhermes-executor-debug.so",
96
+ "**/libhermes_executor.so",
97
+ "**/libreactnative.so",
98
+ "**/libreactnativejni.so",
99
+ "**/libturbomodulejsijni.so",
100
+ "**/libreact_nativemodule_core.so",
101
+ "**/libjscexecutor.so"
102
+ ]
103
+ }
104
+
70
105
  buildTypes {
71
106
  release {
72
107
  minifyEnabled false
@@ -104,8 +139,16 @@ dependencies {
104
139
  //noinspection GradleDynamicVersion
105
140
  implementation "com.facebook.react:react-native:+"
106
141
 
142
+ // Add a dependency on NitroModules
107
143
  implementation project(":react-native-nitro-modules")
108
- implementation "com.android.ndk.thirdparty:openssl:1.1.1q-beta-1"
144
+
145
+ // Add a dependency on OpenSSL
146
+ implementation 'io.github.ronickg:openssl:3.3.2-1'
147
+
148
+ if (sodiumEnabled) {
149
+ // Add a dependency on libsodium
150
+ implementation 'io.github.ronickg:sodium:1.0.20-1'
151
+ }
109
152
  }
110
153
 
111
154
  if (isNewArchitectureEnabled()) {
@@ -1,15 +1,8 @@
1
+ #include <fbjni/fbjni.h>
1
2
  #include <jni.h>
2
3
 
3
- #include "random/HybridRandom.hpp"
4
- #include <NitroModules/HybridObjectRegistry.hpp>
5
-
6
- using namespace margelo::nitro::crypto;
7
- using namespace margelo::crypto;
4
+ #include "QuickCryptoOnLoad.hpp"
8
5
 
9
6
  JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) {
10
- HybridObjectRegistry::registerHybridObjectConstructor(
11
- "Random", []() -> std::shared_ptr<HybridObject> { return std::make_shared<HybridRandom>();
12
- });
13
-
14
- return JNI_VERSION_1_2;
7
+ return facebook::jni::initialize(vm, [=] { margelo::nitro::crypto::initialize(vm); });
15
8
  }
@@ -1,6 +1,7 @@
1
1
  package com.margelo.nitro.quickcrypto;
2
2
 
3
3
  import android.util.Log;
4
+
4
5
  import androidx.annotation.Nullable;
5
6
 
6
7
  import com.facebook.react.bridge.NativeModule;
@@ -9,19 +10,10 @@ import com.facebook.react.module.model.ReactModuleInfoProvider;
9
10
  import com.facebook.react.TurboReactPackage;
10
11
 
11
12
  import java.util.HashMap;
13
+ import java.util.function.Supplier;
12
14
 
13
15
  public class QuickCryptoPackage extends TurboReactPackage {
14
16
  private static final String TAG = "QuickCrypto";
15
- static {
16
- try {
17
- Log.i(TAG, "Loading C++ library...");
18
- System.loadLibrary(TAG);
19
- Log.i(TAG, "Successfully loaded C++ library!");
20
- } catch (Throwable e) {
21
- Log.e(TAG, "Failed to load C++ library! Is it properly installed and linked?", e);
22
- throw e;
23
- }
24
- }
25
17
 
26
18
  @Nullable
27
19
  @Override
@@ -35,4 +27,15 @@ public class QuickCryptoPackage extends TurboReactPackage {
35
27
  return new HashMap<>();
36
28
  };
37
29
  }
30
+
31
+ static {
32
+ try {
33
+ Log.i(TAG, "Loading C++ library...");
34
+ System.loadLibrary(TAG);
35
+ Log.i(TAG, "Successfully loaded C++ library!");
36
+ } catch (Throwable e) {
37
+ Log.e(TAG, "Failed to load C++ library! Is it properly installed and linked?", e);
38
+ throw e;
39
+ }
40
+ }
38
41
  }
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