react-native-quick-crypto 1.0.0-beta.8 → 1.0.0

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 (480) hide show
  1. package/QuickCrypto.podspec +145 -6
  2. package/README.md +14 -27
  3. package/android/CMakeLists.txt +62 -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 +322 -0
  18. package/cpp/cipher/HybridCipher.hpp +68 -0
  19. package/cpp/cipher/HybridCipherFactory.hpp +105 -0
  20. package/cpp/cipher/HybridRsaCipher.cpp +348 -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 +749 -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/pbkdf2/HybridPbkdf2.cpp +34 -55
  40. package/cpp/pbkdf2/HybridPbkdf2.hpp +5 -16
  41. package/cpp/random/HybridRandom.cpp +6 -17
  42. package/cpp/random/HybridRandom.hpp +5 -6
  43. package/cpp/rsa/HybridRsaKeyPair.cpp +154 -0
  44. package/cpp/rsa/HybridRsaKeyPair.hpp +43 -0
  45. package/cpp/sign/HybridSignHandle.cpp +191 -0
  46. package/cpp/sign/HybridSignHandle.hpp +36 -0
  47. package/cpp/sign/HybridVerifyHandle.cpp +158 -0
  48. package/cpp/sign/HybridVerifyHandle.hpp +36 -0
  49. package/cpp/sign/SignUtils.hpp +108 -0
  50. package/cpp/utils/Macros.hpp +68 -0
  51. package/cpp/utils/Utils.hpp +43 -2
  52. package/cpp/utils/base64.h +309 -0
  53. package/deps/blake3/.cargo/config.toml +2 -0
  54. package/deps/blake3/.git-blame-ignore-revs +2 -0
  55. package/deps/blake3/.github/workflows/build_b3sum.py +38 -0
  56. package/deps/blake3/.github/workflows/ci.yml +491 -0
  57. package/deps/blake3/.github/workflows/tag.yml +43 -0
  58. package/deps/blake3/.github/workflows/upload_github_release_asset.py +73 -0
  59. package/deps/blake3/CONTRIBUTING.md +31 -0
  60. package/deps/blake3/Cargo.toml +135 -0
  61. package/deps/blake3/LICENSE_A2 +202 -0
  62. package/deps/blake3/LICENSE_A2LLVM +219 -0
  63. package/deps/blake3/LICENSE_CC0 +121 -0
  64. package/deps/blake3/README.md +229 -0
  65. package/deps/blake3/b3sum/Cargo.lock +513 -0
  66. package/deps/blake3/b3sum/Cargo.toml +26 -0
  67. package/deps/blake3/b3sum/README.md +72 -0
  68. package/deps/blake3/b3sum/src/main.rs +564 -0
  69. package/deps/blake3/b3sum/src/unit_tests.rs +235 -0
  70. package/deps/blake3/b3sum/tests/cli_tests.rs +680 -0
  71. package/deps/blake3/b3sum/what_does_check_do.md +176 -0
  72. package/deps/blake3/benches/bench.rs +623 -0
  73. package/deps/blake3/build.rs +389 -0
  74. package/deps/blake3/c/CMakeLists.txt +383 -0
  75. package/deps/blake3/c/CMakePresets.json +73 -0
  76. package/deps/blake3/c/Makefile.testing +82 -0
  77. package/deps/blake3/c/README.md +403 -0
  78. package/deps/blake3/c/blake3-config.cmake.in +14 -0
  79. package/deps/blake3/c/blake3.c +650 -0
  80. package/deps/blake3/c/blake3.h +86 -0
  81. package/deps/blake3/c/blake3_avx2.c +326 -0
  82. package/deps/blake3/c/blake3_avx2_x86-64_unix.S +1815 -0
  83. package/deps/blake3/c/blake3_avx2_x86-64_windows_gnu.S +1817 -0
  84. package/deps/blake3/c/blake3_avx2_x86-64_windows_msvc.asm +1828 -0
  85. package/deps/blake3/c/blake3_avx512.c +1388 -0
  86. package/deps/blake3/c/blake3_avx512_x86-64_unix.S +4824 -0
  87. package/deps/blake3/c/blake3_avx512_x86-64_windows_gnu.S +2615 -0
  88. package/deps/blake3/c/blake3_avx512_x86-64_windows_msvc.asm +2634 -0
  89. package/deps/blake3/c/blake3_c_rust_bindings/Cargo.toml +32 -0
  90. package/deps/blake3/c/blake3_c_rust_bindings/README.md +4 -0
  91. package/deps/blake3/c/blake3_c_rust_bindings/benches/bench.rs +477 -0
  92. package/deps/blake3/c/blake3_c_rust_bindings/build.rs +253 -0
  93. package/deps/blake3/c/blake3_c_rust_bindings/cross_test.sh +31 -0
  94. package/deps/blake3/c/blake3_c_rust_bindings/src/lib.rs +333 -0
  95. package/deps/blake3/c/blake3_c_rust_bindings/src/test.rs +696 -0
  96. package/deps/blake3/c/blake3_dispatch.c +332 -0
  97. package/deps/blake3/c/blake3_impl.h +333 -0
  98. package/deps/blake3/c/blake3_neon.c +366 -0
  99. package/deps/blake3/c/blake3_portable.c +160 -0
  100. package/deps/blake3/c/blake3_sse2.c +566 -0
  101. package/deps/blake3/c/blake3_sse2_x86-64_unix.S +2291 -0
  102. package/deps/blake3/c/blake3_sse2_x86-64_windows_gnu.S +2332 -0
  103. package/deps/blake3/c/blake3_sse2_x86-64_windows_msvc.asm +2350 -0
  104. package/deps/blake3/c/blake3_sse41.c +560 -0
  105. package/deps/blake3/c/blake3_sse41_x86-64_unix.S +2028 -0
  106. package/deps/blake3/c/blake3_sse41_x86-64_windows_gnu.S +2069 -0
  107. package/deps/blake3/c/blake3_sse41_x86-64_windows_msvc.asm +2089 -0
  108. package/deps/blake3/c/blake3_tbb.cpp +37 -0
  109. package/deps/blake3/c/dependencies/CMakeLists.txt +3 -0
  110. package/deps/blake3/c/dependencies/tbb/CMakeLists.txt +28 -0
  111. package/deps/blake3/c/example.c +36 -0
  112. package/deps/blake3/c/example_tbb.c +57 -0
  113. package/deps/blake3/c/libblake3.pc.in +12 -0
  114. package/deps/blake3/c/main.c +166 -0
  115. package/deps/blake3/c/test.py +97 -0
  116. package/deps/blake3/media/B3.svg +70 -0
  117. package/deps/blake3/media/BLAKE3.svg +85 -0
  118. package/deps/blake3/media/speed.svg +1474 -0
  119. package/deps/blake3/reference_impl/Cargo.toml +8 -0
  120. package/deps/blake3/reference_impl/README.md +14 -0
  121. package/deps/blake3/reference_impl/reference_impl.rs +374 -0
  122. package/deps/blake3/src/ffi_avx2.rs +65 -0
  123. package/deps/blake3/src/ffi_avx512.rs +169 -0
  124. package/deps/blake3/src/ffi_neon.rs +82 -0
  125. package/deps/blake3/src/ffi_sse2.rs +126 -0
  126. package/deps/blake3/src/ffi_sse41.rs +126 -0
  127. package/deps/blake3/src/guts.rs +60 -0
  128. package/deps/blake3/src/hazmat.rs +704 -0
  129. package/deps/blake3/src/io.rs +64 -0
  130. package/deps/blake3/src/join.rs +92 -0
  131. package/deps/blake3/src/lib.rs +1835 -0
  132. package/deps/blake3/src/platform.rs +587 -0
  133. package/deps/blake3/src/portable.rs +198 -0
  134. package/deps/blake3/src/rust_avx2.rs +474 -0
  135. package/deps/blake3/src/rust_sse2.rs +775 -0
  136. package/deps/blake3/src/rust_sse41.rs +766 -0
  137. package/deps/blake3/src/test.rs +1049 -0
  138. package/deps/blake3/src/traits.rs +227 -0
  139. package/deps/blake3/src/wasm32_simd.rs +794 -0
  140. package/deps/blake3/test_vectors/Cargo.toml +19 -0
  141. package/deps/blake3/test_vectors/cross_test.sh +25 -0
  142. package/deps/blake3/test_vectors/src/bin/generate.rs +4 -0
  143. package/deps/blake3/test_vectors/src/lib.rs +350 -0
  144. package/deps/blake3/test_vectors/test_vectors.json +217 -0
  145. package/deps/blake3/tools/compiler_version/Cargo.toml +7 -0
  146. package/deps/blake3/tools/compiler_version/build.rs +6 -0
  147. package/deps/blake3/tools/compiler_version/src/main.rs +27 -0
  148. package/deps/blake3/tools/instruction_set_support/Cargo.toml +6 -0
  149. package/deps/blake3/tools/instruction_set_support/src/main.rs +10 -0
  150. package/deps/blake3/tools/release.md +16 -0
  151. package/deps/fastpbkdf2/fastpbkdf2.c +5 -1
  152. package/deps/ncrypto/ncrypto.cc +4679 -0
  153. package/deps/ncrypto/ncrypto.h +1625 -0
  154. package/lib/commonjs/blake3.js +98 -0
  155. package/lib/commonjs/blake3.js.map +1 -0
  156. package/lib/commonjs/cipher.js +180 -0
  157. package/lib/commonjs/cipher.js.map +1 -0
  158. package/lib/commonjs/constants.js +32 -0
  159. package/lib/commonjs/constants.js.map +1 -0
  160. package/lib/commonjs/ec.js +480 -0
  161. package/lib/commonjs/ec.js.map +1 -0
  162. package/lib/commonjs/ed.js +214 -2
  163. package/lib/commonjs/ed.js.map +1 -1
  164. package/lib/commonjs/expo-plugin/@types.js +2 -0
  165. package/lib/commonjs/expo-plugin/@types.js.map +1 -0
  166. package/lib/commonjs/expo-plugin/withRNQC.js +25 -0
  167. package/lib/commonjs/expo-plugin/withRNQC.js.map +1 -0
  168. package/lib/commonjs/expo-plugin/withSodiumAndroid.js +25 -0
  169. package/lib/commonjs/expo-plugin/withSodiumAndroid.js.map +1 -0
  170. package/lib/commonjs/expo-plugin/withSodiumIos.js +26 -0
  171. package/lib/commonjs/expo-plugin/withSodiumIos.js.map +1 -0
  172. package/lib/commonjs/expo-plugin/withXCode.js +51 -0
  173. package/lib/commonjs/expo-plugin/withXCode.js.map +1 -0
  174. package/lib/commonjs/hash.js +215 -0
  175. package/lib/commonjs/hash.js.map +1 -0
  176. package/lib/commonjs/hmac.js +109 -0
  177. package/lib/commonjs/hmac.js.map +1 -0
  178. package/lib/commonjs/index.js +102 -24
  179. package/lib/commonjs/index.js.map +1 -1
  180. package/lib/commonjs/keys/classes.js +109 -52
  181. package/lib/commonjs/keys/classes.js.map +1 -1
  182. package/lib/commonjs/keys/generateKeyPair.js +141 -144
  183. package/lib/commonjs/keys/generateKeyPair.js.map +1 -1
  184. package/lib/commonjs/keys/index.js +229 -0
  185. package/lib/commonjs/keys/index.js.map +1 -1
  186. package/lib/commonjs/keys/publicCipher.js +152 -0
  187. package/lib/commonjs/keys/publicCipher.js.map +1 -0
  188. package/lib/commonjs/keys/signVerify.js +178 -39
  189. package/lib/commonjs/keys/signVerify.js.map +1 -1
  190. package/lib/commonjs/keys/utils.js +18 -13
  191. package/lib/commonjs/keys/utils.js.map +1 -1
  192. package/lib/commonjs/pbkdf2.js.map +1 -1
  193. package/lib/commonjs/random.js +6 -0
  194. package/lib/commonjs/random.js.map +1 -1
  195. package/lib/commonjs/rsa.js +202 -0
  196. package/lib/commonjs/rsa.js.map +1 -0
  197. package/lib/commonjs/specs/blake3.nitro.js +6 -0
  198. package/lib/commonjs/specs/blake3.nitro.js.map +1 -0
  199. package/lib/commonjs/specs/cipher.nitro.js +6 -0
  200. package/lib/commonjs/specs/cipher.nitro.js.map +1 -0
  201. package/lib/commonjs/specs/ecKeyPair.nitro.js +6 -0
  202. package/lib/commonjs/specs/ecKeyPair.nitro.js.map +1 -0
  203. package/lib/commonjs/specs/hash.nitro.js +6 -0
  204. package/lib/commonjs/specs/hash.nitro.js.map +1 -0
  205. package/lib/commonjs/specs/hmac.nitro.js +6 -0
  206. package/lib/commonjs/specs/hmac.nitro.js.map +1 -0
  207. package/lib/commonjs/specs/rsaCipher.nitro.js +6 -0
  208. package/lib/commonjs/specs/rsaCipher.nitro.js.map +1 -0
  209. package/lib/commonjs/specs/rsaKeyPair.nitro.js +6 -0
  210. package/lib/commonjs/specs/rsaKeyPair.nitro.js.map +1 -0
  211. package/lib/commonjs/specs/sign.nitro.js +6 -0
  212. package/lib/commonjs/specs/sign.nitro.js.map +1 -0
  213. package/lib/commonjs/subtle.js +987 -0
  214. package/lib/commonjs/subtle.js.map +1 -0
  215. package/lib/commonjs/utils/cipher.js +64 -0
  216. package/lib/commonjs/utils/cipher.js.map +1 -0
  217. package/lib/commonjs/utils/conversion.js +44 -5
  218. package/lib/commonjs/utils/conversion.js.map +1 -1
  219. package/lib/commonjs/utils/hashnames.js +2 -1
  220. package/lib/commonjs/utils/hashnames.js.map +1 -1
  221. package/lib/commonjs/utils/index.js +11 -0
  222. package/lib/commonjs/utils/index.js.map +1 -1
  223. package/lib/commonjs/utils/noble.js +82 -0
  224. package/lib/commonjs/utils/noble.js.map +1 -0
  225. package/lib/commonjs/utils/types.js +32 -17
  226. package/lib/commonjs/utils/types.js.map +1 -1
  227. package/lib/commonjs/utils/validation.js +74 -1
  228. package/lib/commonjs/utils/validation.js.map +1 -1
  229. package/lib/module/blake3.js +90 -0
  230. package/lib/module/blake3.js.map +1 -0
  231. package/lib/module/cipher.js +173 -0
  232. package/lib/module/cipher.js.map +1 -0
  233. package/lib/module/constants.js +28 -0
  234. package/lib/module/constants.js.map +1 -0
  235. package/lib/module/ec.js +470 -0
  236. package/lib/module/ec.js.map +1 -0
  237. package/lib/module/ed.js +212 -3
  238. package/lib/module/ed.js.map +1 -1
  239. package/lib/module/expo-plugin/@types.js +2 -0
  240. package/lib/module/expo-plugin/@types.js.map +1 -0
  241. package/lib/module/expo-plugin/withRNQC.js +21 -0
  242. package/lib/module/expo-plugin/withRNQC.js.map +1 -0
  243. package/lib/module/expo-plugin/withSodiumAndroid.js +20 -0
  244. package/lib/module/expo-plugin/withSodiumAndroid.js.map +1 -0
  245. package/lib/module/expo-plugin/withSodiumIos.js +20 -0
  246. package/lib/module/expo-plugin/withSodiumIos.js.map +1 -0
  247. package/lib/module/expo-plugin/withXCode.js +46 -0
  248. package/lib/module/expo-plugin/withXCode.js.map +1 -0
  249. package/lib/module/hash.js +207 -0
  250. package/lib/module/hash.js.map +1 -0
  251. package/lib/module/hmac.js +104 -0
  252. package/lib/module/hmac.js.map +1 -0
  253. package/lib/module/index.js +21 -21
  254. package/lib/module/index.js.map +1 -1
  255. package/lib/module/keys/classes.js +106 -49
  256. package/lib/module/keys/classes.js.map +1 -1
  257. package/lib/module/keys/generateKeyPair.js +134 -143
  258. package/lib/module/keys/generateKeyPair.js.map +1 -1
  259. package/lib/module/keys/index.js +161 -22
  260. package/lib/module/keys/index.js.map +1 -1
  261. package/lib/module/keys/publicCipher.js +145 -0
  262. package/lib/module/keys/publicCipher.js.map +1 -0
  263. package/lib/module/keys/signVerify.js +170 -39
  264. package/lib/module/keys/signVerify.js.map +1 -1
  265. package/lib/module/keys/utils.js +16 -12
  266. package/lib/module/keys/utils.js.map +1 -1
  267. package/lib/module/pbkdf2.js.map +1 -1
  268. package/lib/module/random.js +6 -0
  269. package/lib/module/random.js.map +1 -1
  270. package/lib/module/rsa.js +194 -0
  271. package/lib/module/rsa.js.map +1 -0
  272. package/lib/module/specs/blake3.nitro.js +4 -0
  273. package/lib/module/specs/blake3.nitro.js.map +1 -0
  274. package/lib/module/specs/cipher.nitro.js +4 -0
  275. package/lib/module/specs/cipher.nitro.js.map +1 -0
  276. package/lib/module/specs/ecKeyPair.nitro.js +4 -0
  277. package/lib/module/specs/ecKeyPair.nitro.js.map +1 -0
  278. package/lib/module/specs/hash.nitro.js +4 -0
  279. package/lib/module/specs/hash.nitro.js.map +1 -0
  280. package/lib/module/specs/hmac.nitro.js +4 -0
  281. package/lib/module/specs/hmac.nitro.js.map +1 -0
  282. package/lib/module/specs/rsaCipher.nitro.js +4 -0
  283. package/lib/module/specs/rsaCipher.nitro.js.map +1 -0
  284. package/lib/module/specs/rsaKeyPair.nitro.js +4 -0
  285. package/lib/module/specs/rsaKeyPair.nitro.js.map +1 -0
  286. package/lib/module/specs/sign.nitro.js +4 -0
  287. package/lib/module/specs/sign.nitro.js.map +1 -0
  288. package/lib/module/subtle.js +982 -0
  289. package/lib/module/subtle.js.map +1 -0
  290. package/lib/module/utils/cipher.js +56 -0
  291. package/lib/module/utils/cipher.js.map +1 -0
  292. package/lib/module/utils/conversion.js +26 -5
  293. package/lib/module/utils/conversion.js.map +1 -1
  294. package/lib/module/utils/hashnames.js +2 -1
  295. package/lib/module/utils/hashnames.js.map +1 -1
  296. package/lib/module/utils/index.js +1 -0
  297. package/lib/module/utils/index.js.map +1 -1
  298. package/lib/module/utils/noble.js +76 -0
  299. package/lib/module/utils/noble.js.map +1 -0
  300. package/lib/module/utils/types.js +32 -17
  301. package/lib/module/utils/types.js.map +1 -1
  302. package/lib/module/utils/validation.js +69 -1
  303. package/lib/module/utils/validation.js.map +1 -1
  304. package/lib/tsconfig.tsbuildinfo +1 -1
  305. package/lib/typescript/blake3.d.ts +33 -0
  306. package/lib/typescript/blake3.d.ts.map +1 -0
  307. package/lib/typescript/cipher.d.ts +60 -0
  308. package/lib/typescript/cipher.d.ts.map +1 -0
  309. package/lib/typescript/constants.d.ts +21 -0
  310. package/lib/typescript/constants.d.ts.map +1 -0
  311. package/lib/typescript/ec.d.ts +22 -0
  312. package/lib/typescript/ec.d.ts.map +1 -0
  313. package/lib/typescript/ed.d.ts +28 -1
  314. package/lib/typescript/ed.d.ts.map +1 -1
  315. package/lib/typescript/expo-plugin/@types.d.ts +8 -0
  316. package/lib/typescript/expo-plugin/@types.d.ts.map +1 -0
  317. package/lib/typescript/expo-plugin/withRNQC.d.ts +4 -0
  318. package/lib/typescript/expo-plugin/withRNQC.d.ts.map +1 -0
  319. package/lib/typescript/expo-plugin/withSodiumAndroid.d.ts +4 -0
  320. package/lib/typescript/expo-plugin/withSodiumAndroid.d.ts.map +1 -0
  321. package/lib/typescript/expo-plugin/withSodiumIos.d.ts +4 -0
  322. package/lib/typescript/expo-plugin/withSodiumIos.d.ts.map +1 -0
  323. package/lib/typescript/expo-plugin/withXCode.d.ts +9 -0
  324. package/lib/typescript/expo-plugin/withXCode.d.ts.map +1 -0
  325. package/lib/typescript/hash.d.ts +122 -0
  326. package/lib/typescript/hash.d.ts.map +1 -0
  327. package/lib/typescript/hmac.d.ts +66 -0
  328. package/lib/typescript/hmac.d.ts.map +1 -0
  329. package/lib/typescript/index.d.ts +102 -10
  330. package/lib/typescript/index.d.ts.map +1 -1
  331. package/lib/typescript/keys/classes.d.ts +50 -8
  332. package/lib/typescript/keys/classes.d.ts.map +1 -1
  333. package/lib/typescript/keys/generateKeyPair.d.ts +5 -0
  334. package/lib/typescript/keys/generateKeyPair.d.ts.map +1 -1
  335. package/lib/typescript/keys/index.d.ts +22 -2
  336. package/lib/typescript/keys/index.d.ts.map +1 -1
  337. package/lib/typescript/keys/publicCipher.d.ts +20 -0
  338. package/lib/typescript/keys/publicCipher.d.ts.map +1 -0
  339. package/lib/typescript/keys/signVerify.d.ts +28 -0
  340. package/lib/typescript/keys/signVerify.d.ts.map +1 -1
  341. package/lib/typescript/keys/utils.d.ts +3 -1
  342. package/lib/typescript/keys/utils.d.ts.map +1 -1
  343. package/lib/typescript/pbkdf2.d.ts +1 -1
  344. package/lib/typescript/pbkdf2.d.ts.map +1 -1
  345. package/lib/typescript/random.d.ts +6 -0
  346. package/lib/typescript/random.d.ts.map +1 -1
  347. package/lib/typescript/rsa.d.ts +19 -0
  348. package/lib/typescript/rsa.d.ts.map +1 -0
  349. package/lib/typescript/specs/blake3.nitro.d.ts +15 -0
  350. package/lib/typescript/specs/blake3.nitro.d.ts.map +1 -0
  351. package/lib/typescript/specs/cipher.nitro.d.ts +29 -0
  352. package/lib/typescript/specs/cipher.nitro.d.ts.map +1 -0
  353. package/lib/typescript/specs/ecKeyPair.nitro.d.ts +20 -0
  354. package/lib/typescript/specs/ecKeyPair.nitro.d.ts.map +1 -0
  355. package/lib/typescript/specs/edKeyPair.nitro.d.ts +1 -0
  356. package/lib/typescript/specs/edKeyPair.nitro.d.ts.map +1 -1
  357. package/lib/typescript/specs/hash.nitro.d.ts +13 -0
  358. package/lib/typescript/specs/hash.nitro.d.ts.map +1 -0
  359. package/lib/typescript/specs/hmac.nitro.d.ts +10 -0
  360. package/lib/typescript/specs/hmac.nitro.d.ts.map +1 -0
  361. package/lib/typescript/specs/keyObjectHandle.nitro.d.ts +1 -1
  362. package/lib/typescript/specs/keyObjectHandle.nitro.d.ts.map +1 -1
  363. package/lib/typescript/specs/rsaCipher.nitro.d.ts +44 -0
  364. package/lib/typescript/specs/rsaCipher.nitro.d.ts.map +1 -0
  365. package/lib/typescript/specs/rsaKeyPair.nitro.d.ts +20 -0
  366. package/lib/typescript/specs/rsaKeyPair.nitro.d.ts.map +1 -0
  367. package/lib/typescript/specs/sign.nitro.d.ts +19 -0
  368. package/lib/typescript/specs/sign.nitro.d.ts.map +1 -0
  369. package/lib/typescript/subtle.d.ts +17 -0
  370. package/lib/typescript/subtle.d.ts.map +1 -0
  371. package/lib/typescript/utils/cipher.d.ts +7 -0
  372. package/lib/typescript/utils/cipher.d.ts.map +1 -0
  373. package/lib/typescript/utils/conversion.d.ts +1 -0
  374. package/lib/typescript/utils/conversion.d.ts.map +1 -1
  375. package/lib/typescript/utils/hashnames.d.ts +3 -1
  376. package/lib/typescript/utils/hashnames.d.ts.map +1 -1
  377. package/lib/typescript/utils/index.d.ts +1 -0
  378. package/lib/typescript/utils/index.d.ts.map +1 -1
  379. package/lib/typescript/utils/noble.d.ts +19 -0
  380. package/lib/typescript/utils/noble.d.ts.map +1 -0
  381. package/lib/typescript/utils/types.d.ts +125 -23
  382. package/lib/typescript/utils/types.d.ts.map +1 -1
  383. package/lib/typescript/utils/validation.d.ts +5 -0
  384. package/lib/typescript/utils/validation.d.ts.map +1 -1
  385. package/nitrogen/generated/.gitattributes +1 -0
  386. package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +30 -1
  387. package/nitrogen/generated/android/QuickCrypto+autolinking.gradle +1 -1
  388. package/nitrogen/generated/android/QuickCryptoOnLoad.cpp +115 -1
  389. package/nitrogen/generated/android/QuickCryptoOnLoad.hpp +1 -1
  390. package/nitrogen/generated/android/kotlin/com/margelo/nitro/crypto/QuickCryptoOnLoad.kt +35 -0
  391. package/nitrogen/generated/ios/QuickCrypto+autolinking.rb +3 -1
  392. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.cpp +1 -1
  393. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.hpp +1 -1
  394. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Umbrella.hpp +3 -3
  395. package/nitrogen/generated/ios/QuickCryptoAutolinking.mm +111 -1
  396. package/nitrogen/generated/ios/QuickCryptoAutolinking.swift +1 -1
  397. package/nitrogen/generated/shared/c++/AsymmetricKeyType.hpp +104 -0
  398. package/nitrogen/generated/shared/c++/CipherArgs.hpp +86 -0
  399. package/nitrogen/generated/shared/c++/HybridBlake3Spec.cpp +28 -0
  400. package/nitrogen/generated/shared/c++/HybridBlake3Spec.hpp +76 -0
  401. package/nitrogen/generated/shared/c++/HybridCipherFactorySpec.cpp +21 -0
  402. package/nitrogen/generated/shared/c++/HybridCipherFactorySpec.hpp +67 -0
  403. package/nitrogen/generated/shared/c++/HybridCipherSpec.cpp +28 -0
  404. package/nitrogen/generated/shared/c++/HybridCipherSpec.hpp +76 -0
  405. package/nitrogen/generated/shared/c++/HybridEcKeyPairSpec.cpp +29 -0
  406. package/nitrogen/generated/shared/c++/HybridEcKeyPairSpec.hpp +77 -0
  407. package/nitrogen/generated/shared/c++/HybridEdKeyPairSpec.cpp +2 -1
  408. package/nitrogen/generated/shared/c++/HybridEdKeyPairSpec.hpp +5 -4
  409. package/nitrogen/generated/shared/c++/HybridHashSpec.cpp +26 -0
  410. package/nitrogen/generated/shared/c++/HybridHashSpec.hpp +75 -0
  411. package/nitrogen/generated/shared/c++/HybridHmacSpec.cpp +23 -0
  412. package/nitrogen/generated/shared/c++/HybridHmacSpec.hpp +66 -0
  413. package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.cpp +1 -1
  414. package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.hpp +8 -8
  415. package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.cpp +1 -1
  416. package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.hpp +3 -3
  417. package/nitrogen/generated/shared/c++/HybridRandomSpec.cpp +1 -1
  418. package/nitrogen/generated/shared/c++/HybridRandomSpec.hpp +3 -3
  419. package/nitrogen/generated/shared/c++/HybridRsaCipherSpec.cpp +24 -0
  420. package/nitrogen/generated/shared/c++/HybridRsaCipherSpec.hpp +72 -0
  421. package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.cpp +29 -0
  422. package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.hpp +77 -0
  423. package/nitrogen/generated/shared/c++/HybridSignHandleSpec.cpp +23 -0
  424. package/nitrogen/generated/shared/c++/HybridSignHandleSpec.hpp +71 -0
  425. package/nitrogen/generated/shared/c++/HybridVerifyHandleSpec.cpp +23 -0
  426. package/nitrogen/generated/shared/c++/HybridVerifyHandleSpec.hpp +71 -0
  427. package/nitrogen/generated/shared/c++/JWK.hpp +17 -18
  428. package/nitrogen/generated/shared/c++/JWKkty.hpp +12 -14
  429. package/nitrogen/generated/shared/c++/JWKuse.hpp +8 -10
  430. package/nitrogen/generated/shared/c++/KFormatType.hpp +14 -16
  431. package/nitrogen/generated/shared/c++/KeyDetail.hpp +6 -7
  432. package/nitrogen/generated/shared/c++/KeyEncoding.hpp +15 -17
  433. package/nitrogen/generated/shared/c++/KeyObject.hpp +67 -0
  434. package/nitrogen/generated/shared/c++/KeyType.hpp +11 -13
  435. package/nitrogen/generated/shared/c++/KeyUsage.hpp +38 -24
  436. package/nitrogen/generated/shared/c++/NamedCurve.hpp +10 -12
  437. package/package.json +28 -23
  438. package/src/blake3.ts +123 -0
  439. package/src/cipher.ts +335 -0
  440. package/src/constants.ts +32 -0
  441. package/src/ec.ts +657 -0
  442. package/src/ed.ts +297 -13
  443. package/src/expo-plugin/@types.ts +7 -0
  444. package/src/expo-plugin/withRNQC.ts +23 -0
  445. package/src/expo-plugin/withSodiumAndroid.ts +24 -0
  446. package/src/expo-plugin/withSodiumIos.ts +30 -0
  447. package/src/expo-plugin/withXCode.ts +55 -0
  448. package/src/hash.ts +274 -0
  449. package/src/hmac.ts +135 -0
  450. package/src/index.ts +20 -20
  451. package/src/keys/classes.ts +148 -55
  452. package/src/keys/generateKeyPair.ts +177 -134
  453. package/src/keys/index.ts +226 -14
  454. package/src/keys/publicCipher.ts +229 -0
  455. package/src/keys/signVerify.ts +239 -39
  456. package/src/keys/utils.ts +24 -18
  457. package/src/pbkdf2.ts +1 -1
  458. package/src/random.ts +7 -0
  459. package/src/rsa.ts +310 -0
  460. package/src/specs/blake3.nitro.ts +12 -0
  461. package/src/specs/cipher.nitro.ts +25 -0
  462. package/src/specs/ecKeyPair.nitro.ts +38 -0
  463. package/src/specs/edKeyPair.nitro.ts +2 -0
  464. package/src/specs/hash.nitro.ts +10 -0
  465. package/src/specs/hmac.nitro.ts +7 -0
  466. package/src/specs/keyObjectHandle.nitro.ts +1 -1
  467. package/src/specs/rsaCipher.nitro.ts +65 -0
  468. package/src/specs/rsaKeyPair.nitro.ts +33 -0
  469. package/src/specs/sign.nitro.ts +31 -0
  470. package/src/subtle.ts +1436 -0
  471. package/src/utils/cipher.ts +60 -0
  472. package/src/utils/conversion.ts +33 -4
  473. package/src/utils/hashnames.ts +4 -2
  474. package/src/utils/index.ts +1 -0
  475. package/src/utils/noble.ts +85 -0
  476. package/src/utils/types.ts +209 -29
  477. package/src/utils/validation.ts +96 -1
  478. package/lib/module/package.json +0 -1
  479. package/nitrogen/generated/android/QuickCryptoOnLoad.kt +0 -1
  480. package/nitrogen/generated/shared/c++/CFRGKeyPairType.hpp +0 -86
package/src/ed.ts CHANGED
@@ -1,7 +1,34 @@
1
1
  import { NitroModules } from 'react-native-nitro-modules';
2
- import { binaryLikeToArrayBuffer as toAB } from './utils';
2
+ import { Buffer } from '@craftzdog/react-native-buffer';
3
+ import type { AsymmetricKeyObject, PrivateKeyObject } from './keys';
4
+ import {
5
+ CryptoKey,
6
+ KeyObject,
7
+ PublicKeyObject,
8
+ PrivateKeyObject as PrivateKeyObjectClass,
9
+ } from './keys';
3
10
  import type { EdKeyPair } from './specs/edKeyPair.nitro';
4
- import type { BinaryLike, CFRGKeyPairType, KeyPairGenConfig } from './utils';
11
+ import type {
12
+ BinaryLike,
13
+ CFRGKeyPairType,
14
+ CryptoKeyPair,
15
+ DiffieHellmanCallback,
16
+ DiffieHellmanOptions,
17
+ GenerateKeyPairCallback,
18
+ GenerateKeyPairReturn,
19
+ Hex,
20
+ KeyPairGenConfig,
21
+ KeyUsage,
22
+ SubtleAlgorithm,
23
+ } from './utils';
24
+ import {
25
+ binaryLikeToArrayBuffer as toAB,
26
+ hasAnyNotIn,
27
+ lazyDOMException,
28
+ getUsagesUnion,
29
+ KFormatType,
30
+ KeyEncoding,
31
+ } from './utils';
5
32
 
6
33
  export class Ed {
7
34
  type: CFRGKeyPairType;
@@ -15,24 +42,76 @@ export class Ed {
15
42
  this.native.setCurve(type);
16
43
  }
17
44
 
45
+ /**
46
+ * Computes the Diffie-Hellman secret based on a privateKey and a publicKey.
47
+ * Both keys must have the same asymmetricKeyType, which must be one of 'dh'
48
+ * (for Diffie-Hellman), 'ec', 'x448', or 'x25519' (for ECDH).
49
+ *
50
+ * @api nodejs/node
51
+ *
52
+ * @param options `{ privateKey, publicKey }`, both of which are `KeyObject`s
53
+ * @param callback optional `(err, secret) => void`
54
+ * @returns `Buffer` if no callback, or `void` if callback is provided
55
+ */
56
+ diffieHellman(
57
+ options: DiffieHellmanOptions,
58
+ callback?: DiffieHellmanCallback,
59
+ ): Buffer | void {
60
+ checkDiffieHellmanOptions(options);
61
+
62
+ // key types must be of certain type
63
+ const keyType = (options.privateKey as AsymmetricKeyObject)
64
+ .asymmetricKeyType;
65
+ switch (keyType) {
66
+ case 'x25519':
67
+ case 'x448':
68
+ break;
69
+ default:
70
+ throw new Error(`Unsupported or unimplemented curve type: ${keyType}`);
71
+ }
72
+
73
+ // extract the private and public keys as ArrayBuffers
74
+ const privateKey = toAB(options.privateKey);
75
+ const publicKey = toAB(options.publicKey);
76
+
77
+ try {
78
+ const ret = this.native.diffieHellman(privateKey, publicKey);
79
+ if (!ret) {
80
+ throw new Error('No secret');
81
+ }
82
+ if (callback) {
83
+ callback(null, Buffer.from(ret));
84
+ } else {
85
+ return Buffer.from(ret);
86
+ }
87
+ } catch (e: unknown) {
88
+ const err = e as Error;
89
+ if (callback) {
90
+ callback(err, undefined);
91
+ } else {
92
+ throw err;
93
+ }
94
+ }
95
+ }
96
+
18
97
  async generateKeyPair(): Promise<void> {
19
- this.native.generateKeyPair(
20
- this.config.publicFormat || (-1 as number),
21
- this.config.publicType || (-1 as number),
22
- this.config.privateFormat || (-1 as number),
23
- this.config.privateType || (-1 as number),
24
- this.config.cipher as string,
98
+ await this.native.generateKeyPair(
99
+ this.config.publicFormat ?? -1,
100
+ this.config.publicType ?? -1,
101
+ this.config.privateFormat ?? -1,
102
+ this.config.privateType ?? -1,
103
+ this.config.cipher,
25
104
  this.config.passphrase as ArrayBuffer,
26
105
  );
27
106
  }
28
107
 
29
108
  generateKeyPairSync(): void {
30
109
  this.native.generateKeyPairSync(
31
- this.config.publicFormat || (-1 as number),
32
- this.config.publicType || (-1 as number),
33
- this.config.privateFormat || (-1 as number),
34
- this.config.privateType || (-1 as number),
35
- this.config.cipher as string,
110
+ this.config.publicFormat ?? -1,
111
+ this.config.publicType ?? -1,
112
+ this.config.privateFormat ?? -1,
113
+ this.config.privateType ?? -1,
114
+ this.config.cipher,
36
115
  this.config.passphrase as ArrayBuffer,
37
116
  );
38
117
  }
@@ -45,6 +124,20 @@ export class Ed {
45
124
  return this.native.getPrivateKey();
46
125
  }
47
126
 
127
+ /**
128
+ * Computes the Diffie-Hellman shared secret based on a privateKey and a
129
+ * publicKey for key exchange
130
+ *
131
+ * @api \@paulmillr/noble-curves/ed25519
132
+ *
133
+ * @param privateKey
134
+ * @param publicKey
135
+ * @returns shared secret key
136
+ */
137
+ getSharedSecret(privateKey: Hex, publicKey: Hex): ArrayBuffer {
138
+ return this.native.diffieHellman(toAB(privateKey), toAB(publicKey));
139
+ }
140
+
48
141
  async sign(message: BinaryLike, key?: BinaryLike): Promise<ArrayBuffer> {
49
142
  return key
50
143
  ? this.native.sign(toAB(message), toAB(key))
@@ -77,3 +170,194 @@ export class Ed {
77
170
  : this.native.verifySync(toAB(signature), toAB(message));
78
171
  }
79
172
  }
173
+
174
+ // Node API
175
+ export function diffieHellman(
176
+ options: DiffieHellmanOptions,
177
+ callback?: DiffieHellmanCallback,
178
+ ): Buffer | void {
179
+ const privateKey = options.privateKey as PrivateKeyObject;
180
+ const type = privateKey.asymmetricKeyType as CFRGKeyPairType;
181
+ const ed = new Ed(type, {});
182
+ return ed.diffieHellman(options, callback);
183
+ }
184
+
185
+ // Node API
186
+ export function ed_generateKeyPair(
187
+ isAsync: boolean,
188
+ type: CFRGKeyPairType,
189
+ encoding: KeyPairGenConfig,
190
+ callback: GenerateKeyPairCallback | undefined,
191
+ ): GenerateKeyPairReturn | void {
192
+ const ed = new Ed(type, encoding);
193
+
194
+ // Helper to convert keys to proper output format
195
+ const formatKeys = (): {
196
+ publicKey: string | ArrayBuffer;
197
+ privateKey: string | ArrayBuffer;
198
+ } => {
199
+ const publicKeyRaw = ed.getPublicKey();
200
+ const privateKeyRaw = ed.getPrivateKey();
201
+
202
+ // Check if PEM format was requested (KFormatType.PEM = 1)
203
+ const isPemPublic = encoding.publicFormat === KFormatType.PEM;
204
+ const isPemPrivate = encoding.privateFormat === KFormatType.PEM;
205
+
206
+ // Convert ArrayBuffer to string for PEM format
207
+ const arrayBufferToString = (ab: ArrayBuffer): string => {
208
+ return Buffer.from(new Uint8Array(ab)).toString('utf-8');
209
+ };
210
+
211
+ const publicKey = isPemPublic
212
+ ? arrayBufferToString(publicKeyRaw)
213
+ : publicKeyRaw;
214
+ const privateKey = isPemPrivate
215
+ ? arrayBufferToString(privateKeyRaw)
216
+ : privateKeyRaw;
217
+
218
+ return { publicKey, privateKey };
219
+ };
220
+
221
+ // Async path
222
+ if (isAsync) {
223
+ if (!callback) {
224
+ // This should not happen if called from public API
225
+ throw new Error('A callback is required for async key generation.');
226
+ }
227
+ ed.generateKeyPair()
228
+ .then(() => {
229
+ const { publicKey, privateKey } = formatKeys();
230
+ callback(undefined, publicKey, privateKey);
231
+ })
232
+ .catch(err => {
233
+ callback(err, undefined, undefined);
234
+ });
235
+ return;
236
+ }
237
+
238
+ // Sync path
239
+ let err: Error | undefined;
240
+ try {
241
+ ed.generateKeyPairSync();
242
+ } catch (e) {
243
+ err = e instanceof Error ? e : new Error(String(e));
244
+ }
245
+
246
+ const { publicKey, privateKey } = err
247
+ ? { publicKey: undefined, privateKey: undefined }
248
+ : formatKeys();
249
+
250
+ if (callback) {
251
+ callback(err, publicKey, privateKey);
252
+ return;
253
+ }
254
+ return [err, publicKey, privateKey];
255
+ }
256
+
257
+ function checkDiffieHellmanOptions(options: DiffieHellmanOptions): void {
258
+ const { privateKey, publicKey } = options;
259
+
260
+ // Check if keys are KeyObject instances
261
+ if (
262
+ !privateKey ||
263
+ typeof privateKey !== 'object' ||
264
+ !('type' in privateKey)
265
+ ) {
266
+ throw new Error('privateKey must be a KeyObject');
267
+ }
268
+ if (!publicKey || typeof publicKey !== 'object' || !('type' in publicKey)) {
269
+ throw new Error('publicKey must be a KeyObject');
270
+ }
271
+
272
+ // type checks
273
+ if (privateKey.type !== 'private') {
274
+ throw new Error('privateKey must be a private KeyObject');
275
+ }
276
+ if (publicKey.type !== 'public') {
277
+ throw new Error('publicKey must be a public KeyObject');
278
+ }
279
+
280
+ // For asymmetric keys, check if they have the asymmetricKeyType property
281
+ const privateKeyAsym = privateKey as AsymmetricKeyObject;
282
+ const publicKeyAsym = publicKey as AsymmetricKeyObject;
283
+
284
+ // key types must match
285
+ if (
286
+ privateKeyAsym.asymmetricKeyType &&
287
+ publicKeyAsym.asymmetricKeyType &&
288
+ privateKeyAsym.asymmetricKeyType !== publicKeyAsym.asymmetricKeyType
289
+ ) {
290
+ throw new Error('Keys must be asymmetric and their types must match');
291
+ }
292
+
293
+ switch (privateKeyAsym.asymmetricKeyType) {
294
+ // case 'dh': // TODO: uncomment when implemented
295
+ case 'x25519':
296
+ case 'x448':
297
+ break;
298
+ default:
299
+ throw new Error(
300
+ `Unknown curve type: ${privateKeyAsym.asymmetricKeyType}`,
301
+ );
302
+ }
303
+ }
304
+
305
+ export async function ed_generateKeyPairWebCrypto(
306
+ type: 'ed25519' | 'ed448',
307
+ extractable: boolean,
308
+ keyUsages: KeyUsage[],
309
+ ): Promise<CryptoKeyPair> {
310
+ if (hasAnyNotIn(keyUsages, ['sign', 'verify'])) {
311
+ throw lazyDOMException(`Unsupported key usage for ${type}`, 'SyntaxError');
312
+ }
313
+
314
+ const publicUsages = getUsagesUnion(keyUsages, 'verify');
315
+ const privateUsages = getUsagesUnion(keyUsages, 'sign');
316
+
317
+ if (privateUsages.length === 0) {
318
+ throw lazyDOMException('Usages cannot be empty', 'SyntaxError');
319
+ }
320
+
321
+ // Request DER-encoded SPKI for public key, PKCS8 for private key
322
+ const config = {
323
+ publicFormat: KFormatType.DER,
324
+ publicType: KeyEncoding.SPKI,
325
+ privateFormat: KFormatType.DER,
326
+ privateType: KeyEncoding.PKCS8,
327
+ };
328
+ const ed = new Ed(type, config);
329
+ await ed.generateKeyPair();
330
+
331
+ const algorithmName = type === 'ed25519' ? 'Ed25519' : 'Ed448';
332
+
333
+ const publicKeyData = ed.getPublicKey();
334
+ const privateKeyData = ed.getPrivateKey();
335
+
336
+ const pub = KeyObject.createKeyObject(
337
+ 'public',
338
+ publicKeyData,
339
+ KFormatType.DER,
340
+ KeyEncoding.SPKI,
341
+ ) as PublicKeyObject;
342
+ const publicKey = new CryptoKey(
343
+ pub,
344
+ { name: algorithmName } as SubtleAlgorithm,
345
+ publicUsages,
346
+ true,
347
+ );
348
+
349
+ const priv = KeyObject.createKeyObject(
350
+ 'private',
351
+ privateKeyData,
352
+ KFormatType.DER,
353
+ KeyEncoding.PKCS8,
354
+ ) as PrivateKeyObjectClass;
355
+ const privateKey = new CryptoKey(
356
+ priv,
357
+ { name: algorithmName } as SubtleAlgorithm,
358
+ privateUsages,
359
+ extractable,
360
+ );
361
+
362
+ return { publicKey, privateKey };
363
+ }
@@ -0,0 +1,7 @@
1
+ export type ConfigProps = {
2
+ /**
3
+ * Enable libsodium support
4
+ * @default false
5
+ */
6
+ sodiumEnabled?: boolean;
7
+ };
@@ -0,0 +1,23 @@
1
+ import { createRunOncePlugin } from 'expo/config-plugins';
2
+ import type { ConfigPlugin } from 'expo/config-plugins';
3
+ import type { ConfigProps } from './@types';
4
+ import { withSodiumIos } from './withSodiumIos';
5
+ import { withSodiumAndroid } from './withSodiumAndroid';
6
+ import { withXCode } from './withXCode';
7
+
8
+ const withRNQCInternal: ConfigPlugin<ConfigProps> = (config, props = {}) => {
9
+ // add XCode workarounds for some 16.x releases that are not RN-friendly
10
+ config = withXCode(config, props);
11
+
12
+ // enable libsodium algorithms
13
+ if (props.sodiumEnabled) {
14
+ config = withSodiumIos(config, props);
15
+ config = withSodiumAndroid(config, props);
16
+ }
17
+
18
+ return config;
19
+ };
20
+
21
+ export function createRNQCPlugin(name: string, version: string) {
22
+ return createRunOncePlugin(withRNQCInternal, name, version);
23
+ }
@@ -0,0 +1,24 @@
1
+ import type { ConfigPlugin } from 'expo/config-plugins';
2
+ import { withGradleProperties } from 'expo/config-plugins';
3
+ import type { ConfigProps } from './@types';
4
+
5
+ export const withSodiumAndroid: ConfigPlugin<ConfigProps> = config => {
6
+ return withGradleProperties(config, config => {
7
+ config.modResults = config.modResults || [];
8
+
9
+ // Check if the property already exists
10
+ const existingProperty = config.modResults.find(
11
+ item => item.type === 'property' && item.key === 'sodiumEnabled',
12
+ );
13
+
14
+ if (!existingProperty) {
15
+ config.modResults.push({
16
+ type: 'property',
17
+ key: 'sodiumEnabled',
18
+ value: 'true',
19
+ });
20
+ }
21
+
22
+ return config;
23
+ });
24
+ };
@@ -0,0 +1,30 @@
1
+ import type { ConfigPlugin } from 'expo/config-plugins';
2
+ import { withDangerousMod } from 'expo/config-plugins';
3
+ import fs from 'fs';
4
+ import path from 'path';
5
+ import type { ConfigProps } from './@types';
6
+
7
+ export const withSodiumIos: ConfigPlugin<ConfigProps> = config => {
8
+ return withDangerousMod(config, [
9
+ 'ios',
10
+ config => {
11
+ const podfilePath = path.join(
12
+ config.modRequest.platformProjectRoot,
13
+ 'Podfile',
14
+ );
15
+ let contents = fs.readFileSync(podfilePath, 'utf-8');
16
+
17
+ // Check if SODIUM_ENABLED is already set
18
+ if (!contents.includes("ENV['SODIUM_ENABLED']")) {
19
+ // Add it right after the RCT_NEW_ARCH_ENABLED ENV variable
20
+ contents = contents.replace(
21
+ /^(ENV\['RCT_NEW_ARCH_ENABLED'\].*$)/m,
22
+ `$1\nENV['SODIUM_ENABLED'] = '1'`,
23
+ );
24
+ fs.writeFileSync(podfilePath, contents);
25
+ }
26
+
27
+ return config;
28
+ },
29
+ ]);
30
+ };
@@ -0,0 +1,55 @@
1
+ import type { ConfigPlugin } from 'expo/config-plugins';
2
+ import type { ConfigProps } from './@types';
3
+ import { withBuildProperties } from 'expo-build-properties';
4
+ import { withDangerousMod } from 'expo/config-plugins';
5
+ import fs from 'fs';
6
+ import path from 'path';
7
+
8
+ /**
9
+ * Workaround for some jank XCode releases that break React Native native modules
10
+ *
11
+ * see: https://github.com/mrousavy/nitro/issues/422#issuecomment-2545988256
12
+ */
13
+ export const withXCode: ConfigPlugin<ConfigProps> = config => {
14
+ // Use expo-build-properties to bump iOS deployment target
15
+ config = withBuildProperties(config, { ios: { deploymentTarget: '16.1' } });
16
+ // Patch the generated Podfile fallback to ensure platform is always 16.1
17
+ config = withDangerousMod(config, [
18
+ 'ios',
19
+ modConfig => {
20
+ const podfilePath = path.join(
21
+ modConfig.modRequest.platformProjectRoot,
22
+ 'Podfile',
23
+ );
24
+ let contents = fs.readFileSync(podfilePath, 'utf-8');
25
+
26
+ // Check if the IPHONEOS_DEPLOYMENT_TARGET setting is already present
27
+ // We search for the key being assigned, e.g., config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] =
28
+ const deploymentTargetSettingExists =
29
+ /\.build_settings\s*\[\s*['"]IPHONEOS_DEPLOYMENT_TARGET['"]\s*\]\s*=/.test(
30
+ contents,
31
+ );
32
+
33
+ if (!deploymentTargetSettingExists) {
34
+ // IPHONEOS_DEPLOYMENT_TARGET setting not found, proceed to add it.
35
+ contents = contents.replace(
36
+ /(post_install\s+do\s+\|installer\|[\s\S]*?)(\r?\n\s\send\s*)$/m,
37
+ `$1
38
+
39
+ # Expo Build Properties: force deployment target
40
+ # https://github.com/mrousavy/nitro/issues/422#issuecomment-2545988256
41
+ installer.pods_project.targets.each do |target|
42
+ target.build_configurations.each do |config|
43
+ config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '16.1'
44
+ end
45
+ end
46
+ $2`,
47
+ );
48
+ }
49
+
50
+ fs.writeFileSync(podfilePath, contents);
51
+ return modConfig;
52
+ },
53
+ ]);
54
+ return config;
55
+ };