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/keys/index.ts CHANGED
@@ -1,42 +1,254 @@
1
1
  import {
2
+ AsymmetricKeyObject,
2
3
  CryptoKey,
3
4
  KeyObject,
4
5
  SecretKeyObject,
5
6
  PublicKeyObject,
6
7
  PrivateKeyObject,
7
8
  } from './classes';
8
- // import { generateKeyPair } from './generateKeyPair';
9
- // import { sign, verify } from './signVerify';
9
+ import { generateKeyPair, generateKeyPairSync } from './generateKeyPair';
10
+ import { createSign, createVerify, Sign, Verify } from './signVerify';
11
+ import {
12
+ publicEncrypt,
13
+ publicDecrypt,
14
+ privateEncrypt,
15
+ privateDecrypt,
16
+ } from './publicCipher';
10
17
  import {
11
18
  isCryptoKey,
12
19
  parseKeyEncoding,
13
20
  parsePrivateKeyEncoding,
14
21
  parsePublicKeyEncoding,
15
22
  } from './utils';
23
+ import type { BinaryLike } from '../utils';
24
+ import {
25
+ binaryLikeToArrayBuffer as toAB,
26
+ isStringOrBuffer,
27
+ KFormatType,
28
+ KeyEncoding,
29
+ } from '../utils';
30
+ import { randomBytes } from '../random';
31
+
32
+ interface KeyInputObject {
33
+ key: BinaryLike | KeyObject | CryptoKey;
34
+ format?: 'pem' | 'der' | 'jwk';
35
+ type?: 'pkcs1' | 'pkcs8' | 'spki' | 'sec1';
36
+ passphrase?: BinaryLike;
37
+ encoding?: BufferEncoding;
38
+ }
39
+
40
+ type KeyInput = BinaryLike | KeyInputObject | KeyObject | CryptoKey;
41
+
42
+ function createSecretKey(key: BinaryLike): SecretKeyObject {
43
+ const keyBuffer = toAB(key);
44
+ return KeyObject.createKeyObject('secret', keyBuffer) as SecretKeyObject;
45
+ }
46
+
47
+ function prepareAsymmetricKey(
48
+ key: KeyInput,
49
+ isPublic: boolean,
50
+ ): {
51
+ data: ArrayBuffer;
52
+ format?: 'pem' | 'der';
53
+ type?: 'pkcs1' | 'pkcs8' | 'spki' | 'sec1';
54
+ } {
55
+ if (key instanceof KeyObject) {
56
+ if (isPublic) {
57
+ // createPublicKey can accept either a public key or extract public from private
58
+ if (key.type === 'secret') {
59
+ throw new Error('Cannot create public key from secret key');
60
+ }
61
+ // Export as SPKI (public key format) - works for both public and private keys
62
+ const exported = key.handle.exportKey(KFormatType.DER, KeyEncoding.SPKI);
63
+ return { data: exported, format: 'der', type: 'spki' };
64
+ } else {
65
+ // createPrivateKey requires a private key
66
+ if (key.type !== 'private') {
67
+ throw new Error('Key must be a private key');
68
+ }
69
+ const exported = key.handle.exportKey(KFormatType.DER, KeyEncoding.PKCS8);
70
+ return { data: exported, format: 'der', type: 'pkcs8' };
71
+ }
72
+ }
73
+
74
+ if (isCryptoKey(key)) {
75
+ const cryptoKey = key as CryptoKey;
76
+ return prepareAsymmetricKey(cryptoKey.keyObject, isPublic);
77
+ }
78
+
79
+ if (isStringOrBuffer(key)) {
80
+ // Detect PEM format from string content
81
+ const isPem = typeof key === 'string' && key.includes('-----BEGIN');
82
+ return { data: toAB(key), format: isPem ? 'pem' : undefined };
83
+ }
84
+
85
+ if (typeof key === 'object' && 'key' in key) {
86
+ const keyObj = key as KeyInputObject;
87
+ const { key: data, format, type } = keyObj;
88
+
89
+ if (data instanceof KeyObject) {
90
+ return prepareAsymmetricKey(data, isPublic);
91
+ }
92
+
93
+ if (isCryptoKey(data)) {
94
+ return prepareAsymmetricKey((data as CryptoKey).keyObject, isPublic);
95
+ }
96
+
97
+ if (!isStringOrBuffer(data)) {
98
+ throw new Error('Invalid key data type');
99
+ }
100
+
101
+ // For PEM format with string data, convert to ArrayBuffer
102
+ if (
103
+ (format === 'pem' ||
104
+ (typeof data === 'string' && data.includes('-----BEGIN'))) &&
105
+ typeof data === 'string'
106
+ ) {
107
+ return { data: toAB(data), format: 'pem', type };
108
+ }
109
+
110
+ // Filter out 'jwk' format - only 'pem' and 'der' are supported here
111
+ const filteredFormat = format === 'jwk' ? undefined : format;
112
+ return { data: toAB(data), format: filteredFormat, type };
113
+ }
114
+
115
+ throw new Error('Invalid key input');
116
+ }
117
+
118
+ function createPublicKey(key: KeyInput): PublicKeyObject {
119
+ const { data, format, type } = prepareAsymmetricKey(key, true);
120
+
121
+ // Map format string to KFormatType enum
122
+ let kFormat: KFormatType | undefined;
123
+ if (format === 'pem') kFormat = KFormatType.PEM;
124
+ else if (format === 'der') kFormat = KFormatType.DER;
125
+
126
+ // Map type string to KeyEncoding enum
127
+ let kType: KeyEncoding | undefined;
128
+ if (type === 'spki') kType = KeyEncoding.SPKI;
129
+ else if (type === 'pkcs1') kType = KeyEncoding.PKCS1;
130
+
131
+ return KeyObject.createKeyObject(
132
+ 'public',
133
+ data,
134
+ kFormat,
135
+ kType,
136
+ ) as PublicKeyObject;
137
+ }
138
+
139
+ function createPrivateKey(key: KeyInput): PrivateKeyObject {
140
+ const { data, format, type } = prepareAsymmetricKey(key, false);
141
+
142
+ // Map format string to KFormatType enum
143
+ let kFormat: KFormatType | undefined;
144
+ if (format === 'pem') kFormat = KFormatType.PEM;
145
+ else if (format === 'der') kFormat = KFormatType.DER;
146
+
147
+ // Map type string to KeyEncoding enum
148
+ let kType: KeyEncoding | undefined;
149
+ if (type === 'pkcs8') kType = KeyEncoding.PKCS8;
150
+ else if (type === 'pkcs1') kType = KeyEncoding.PKCS1;
151
+ else if (type === 'sec1') kType = KeyEncoding.SEC1;
152
+
153
+ return KeyObject.createKeyObject(
154
+ 'private',
155
+ data,
156
+ kFormat,
157
+ kType,
158
+ ) as PrivateKeyObject;
159
+ }
160
+
161
+ export interface GenerateKeyOptions {
162
+ length: number;
163
+ }
164
+
165
+ function generateKeySync(
166
+ type: 'aes' | 'hmac',
167
+ options: GenerateKeyOptions,
168
+ ): SecretKeyObject {
169
+ if (typeof type !== 'string') {
170
+ throw new TypeError('The "type" argument must be a string');
171
+ }
172
+ if (typeof options !== 'object' || options === null) {
173
+ throw new TypeError('The "options" argument must be an object');
174
+ }
175
+
176
+ const { length } = options;
177
+
178
+ if (typeof length !== 'number' || !Number.isInteger(length)) {
179
+ throw new TypeError('The "options.length" property must be an integer');
180
+ }
181
+
182
+ switch (type) {
183
+ case 'hmac':
184
+ if (length < 8 || length > 2 ** 31 - 1) {
185
+ throw new RangeError(
186
+ 'The "options.length" property must be >= 8 and <= 2147483647',
187
+ );
188
+ }
189
+ break;
190
+ case 'aes':
191
+ if (length !== 128 && length !== 192 && length !== 256) {
192
+ throw new RangeError(
193
+ 'The "options.length" property must be 128, 192, or 256',
194
+ );
195
+ }
196
+ break;
197
+ default:
198
+ throw new TypeError(
199
+ `The "type" argument must be 'aes' or 'hmac'. Received '${type}'`,
200
+ );
201
+ }
202
+
203
+ const keyBytes = length / 8;
204
+ const keyMaterial = randomBytes(keyBytes);
205
+ return createSecretKey(keyMaterial);
206
+ }
207
+
208
+ function generateKey(
209
+ type: 'aes' | 'hmac',
210
+ options: GenerateKeyOptions,
211
+ callback: (err: Error | null, key?: SecretKeyObject) => void,
212
+ ): void {
213
+ if (typeof callback !== 'function') {
214
+ throw new TypeError('The "callback" argument must be a function');
215
+ }
216
+
217
+ try {
218
+ const key = generateKeySync(type, options);
219
+ process.nextTick(callback, null, key);
220
+ } catch (err) {
221
+ process.nextTick(callback, err as Error);
222
+ }
223
+ }
16
224
 
17
225
  export {
18
226
  // Node Public API
19
- // createSecretKey,
20
- // createPublicKey,
21
- // createPrivateKey,
227
+ createSecretKey,
228
+ createPublicKey,
229
+ createPrivateKey,
22
230
  CryptoKey,
23
- // generateKeyPair,
231
+ generateKey,
232
+ generateKeySync,
233
+ generateKeyPair,
234
+ generateKeyPairSync,
235
+ AsymmetricKeyObject,
24
236
  KeyObject,
25
- // InternalCryptoKey,
26
- // sign,
27
- // verify,
237
+ createSign,
238
+ createVerify,
239
+ Sign,
240
+ Verify,
241
+ publicEncrypt,
242
+ publicDecrypt,
243
+ privateEncrypt,
244
+ privateDecrypt,
28
245
 
29
246
  // Node Internal API
30
247
  parsePublicKeyEncoding,
31
248
  parsePrivateKeyEncoding,
32
249
  parseKeyEncoding,
33
- // preparePrivateKey,
34
- // preparePublicOrPrivateKey,
35
- // prepareSecretKey,
36
250
  SecretKeyObject,
37
251
  PublicKeyObject,
38
252
  PrivateKeyObject,
39
- // isKeyObject,
40
253
  isCryptoKey,
41
- // importGenericSecretKey,
42
254
  };
@@ -0,0 +1,229 @@
1
+ import { NitroModules } from 'react-native-nitro-modules';
2
+ import type { RsaCipher } from '../specs/rsaCipher.nitro';
3
+ import type { BinaryLike } from '../utils';
4
+ import {
5
+ binaryLikeToArrayBuffer as toAB,
6
+ isStringOrBuffer,
7
+ KFormatType,
8
+ KeyEncoding,
9
+ } from '../utils';
10
+ import { isCryptoKey } from './utils';
11
+ import { KeyObject, CryptoKey } from './classes';
12
+ import { constants } from '../constants';
13
+
14
+ interface PublicCipherOptions {
15
+ key: BinaryLike | KeyObject | CryptoKey;
16
+ padding?: number;
17
+ oaepHash?: string;
18
+ oaepLabel?: BinaryLike;
19
+ }
20
+
21
+ type PublicCipherInput =
22
+ | BinaryLike
23
+ | KeyObject
24
+ | CryptoKey
25
+ | PublicCipherOptions;
26
+
27
+ interface PrivateCipherOptions {
28
+ key: BinaryLike | KeyObject | CryptoKey;
29
+ padding?: number;
30
+ }
31
+
32
+ type PrivateCipherInput =
33
+ | BinaryLike
34
+ | KeyObject
35
+ | CryptoKey
36
+ | PrivateCipherOptions;
37
+
38
+ function preparePublicCipherKey(
39
+ key: PublicCipherInput,
40
+ isEncrypt: boolean,
41
+ ): {
42
+ keyHandle: KeyObject;
43
+ padding?: number;
44
+ oaepHash?: string;
45
+ oaepLabel?: ArrayBuffer;
46
+ } {
47
+ let keyObj: KeyObject;
48
+ let padding: number | undefined;
49
+ let oaepHash: string | undefined;
50
+ let oaepLabel: ArrayBuffer | undefined;
51
+
52
+ if (key instanceof KeyObject) {
53
+ if (isEncrypt && key.type !== 'public') {
54
+ throw new Error('publicEncrypt requires a public key');
55
+ }
56
+ if (!isEncrypt && key.type !== 'private') {
57
+ throw new Error('publicDecrypt requires a private key');
58
+ }
59
+ keyObj = key;
60
+ } else if (isCryptoKey(key)) {
61
+ const cryptoKey = key as CryptoKey;
62
+ keyObj = cryptoKey.keyObject;
63
+ } else if (isStringOrBuffer(key)) {
64
+ const data = toAB(key);
65
+ // Detect if it's PEM format (contains PEM headers) or DER binary
66
+ const isPem = typeof key === 'string' && key.includes('-----BEGIN');
67
+ keyObj = KeyObject.createKeyObject(
68
+ isEncrypt ? 'public' : 'private',
69
+ data,
70
+ isPem ? KFormatType.PEM : KFormatType.DER,
71
+ isEncrypt ? KeyEncoding.SPKI : KeyEncoding.PKCS8,
72
+ );
73
+ } else if (typeof key === 'object' && 'key' in key) {
74
+ const options = key as PublicCipherOptions;
75
+ const result = preparePublicCipherKey(options.key, isEncrypt);
76
+ keyObj = result.keyHandle;
77
+ padding = options.padding;
78
+ oaepHash = options.oaepHash;
79
+ if (options.oaepLabel) {
80
+ oaepLabel = toAB(options.oaepLabel);
81
+ }
82
+ } else {
83
+ throw new Error('Invalid key input');
84
+ }
85
+
86
+ return { keyHandle: keyObj, padding, oaepHash, oaepLabel };
87
+ }
88
+
89
+ export function publicEncrypt(
90
+ key: PublicCipherInput,
91
+ buffer: BinaryLike,
92
+ ): Buffer {
93
+ const { keyHandle, padding, oaepHash, oaepLabel } = preparePublicCipherKey(
94
+ key,
95
+ true,
96
+ );
97
+
98
+ const rsaCipher: RsaCipher = NitroModules.createHybridObject('RsaCipher');
99
+ const data = toAB(buffer);
100
+ const paddingMode = padding ?? constants.RSA_PKCS1_OAEP_PADDING;
101
+ const hashAlgorithm = oaepHash || 'SHA-256';
102
+
103
+ try {
104
+ const encrypted = rsaCipher.encrypt(
105
+ keyHandle.handle,
106
+ data,
107
+ paddingMode,
108
+ hashAlgorithm,
109
+ oaepLabel,
110
+ );
111
+ return Buffer.from(encrypted);
112
+ } catch (error) {
113
+ throw new Error(`publicEncrypt failed: ${(error as Error).message}`);
114
+ }
115
+ }
116
+
117
+ export function publicDecrypt(
118
+ key: PublicCipherInput,
119
+ buffer: BinaryLike,
120
+ ): Buffer {
121
+ const { keyHandle, padding, oaepHash, oaepLabel } = preparePublicCipherKey(
122
+ key,
123
+ false,
124
+ );
125
+
126
+ const rsaCipher: RsaCipher = NitroModules.createHybridObject('RsaCipher');
127
+ const data = toAB(buffer);
128
+ const paddingMode = padding ?? constants.RSA_PKCS1_OAEP_PADDING;
129
+ const hashAlgorithm = oaepHash || 'SHA-256';
130
+
131
+ try {
132
+ const decrypted = rsaCipher.decrypt(
133
+ keyHandle.handle,
134
+ data,
135
+ paddingMode,
136
+ hashAlgorithm,
137
+ oaepLabel,
138
+ );
139
+ return Buffer.from(decrypted);
140
+ } catch (error) {
141
+ throw new Error(`publicDecrypt failed: ${(error as Error).message}`);
142
+ }
143
+ }
144
+
145
+ function preparePrivateCipherKey(
146
+ key: PrivateCipherInput,
147
+ isEncrypt: boolean,
148
+ ): {
149
+ keyHandle: KeyObject;
150
+ padding?: number;
151
+ } {
152
+ let keyObj: KeyObject;
153
+ let padding: number | undefined;
154
+
155
+ if (key instanceof KeyObject) {
156
+ if (isEncrypt && key.type !== 'private') {
157
+ throw new Error('privateEncrypt requires a private key');
158
+ }
159
+ if (!isEncrypt && key.type !== 'public') {
160
+ throw new Error('privateDecrypt requires a public key');
161
+ }
162
+ keyObj = key;
163
+ } else if (isCryptoKey(key)) {
164
+ const cryptoKey = key as CryptoKey;
165
+ keyObj = cryptoKey.keyObject;
166
+ } else if (isStringOrBuffer(key)) {
167
+ const data = toAB(key);
168
+ const isPem = typeof key === 'string' && key.includes('-----BEGIN');
169
+ keyObj = KeyObject.createKeyObject(
170
+ isEncrypt ? 'private' : 'public',
171
+ data,
172
+ isPem ? KFormatType.PEM : KFormatType.DER,
173
+ isEncrypt ? KeyEncoding.PKCS8 : KeyEncoding.SPKI,
174
+ );
175
+ } else if (typeof key === 'object' && 'key' in key) {
176
+ const options = key as PrivateCipherOptions;
177
+ const result = preparePrivateCipherKey(options.key, isEncrypt);
178
+ keyObj = result.keyHandle;
179
+ padding = options.padding;
180
+ } else {
181
+ throw new Error('Invalid key input');
182
+ }
183
+
184
+ return { keyHandle: keyObj, padding };
185
+ }
186
+
187
+ export function privateEncrypt(
188
+ key: PrivateCipherInput,
189
+ buffer: BinaryLike,
190
+ ): Buffer {
191
+ const { keyHandle, padding } = preparePrivateCipherKey(key, true);
192
+
193
+ const rsaCipher: RsaCipher = NitroModules.createHybridObject('RsaCipher');
194
+ const data = toAB(buffer);
195
+ const paddingMode = padding ?? constants.RSA_PKCS1_PADDING;
196
+
197
+ try {
198
+ const encrypted = rsaCipher.privateEncrypt(
199
+ keyHandle.handle,
200
+ data,
201
+ paddingMode,
202
+ );
203
+ return Buffer.from(encrypted);
204
+ } catch (error) {
205
+ throw new Error(`privateEncrypt failed: ${(error as Error).message}`);
206
+ }
207
+ }
208
+
209
+ export function privateDecrypt(
210
+ key: PrivateCipherInput,
211
+ buffer: BinaryLike,
212
+ ): Buffer {
213
+ const { keyHandle, padding } = preparePrivateCipherKey(key, false);
214
+
215
+ const rsaCipher: RsaCipher = NitroModules.createHybridObject('RsaCipher');
216
+ const data = toAB(buffer);
217
+ const paddingMode = padding ?? constants.RSA_PKCS1_PADDING;
218
+
219
+ try {
220
+ const decrypted = rsaCipher.privateDecrypt(
221
+ keyHandle.handle,
222
+ data,
223
+ paddingMode,
224
+ );
225
+ return Buffer.from(decrypted);
226
+ } catch (error) {
227
+ throw new Error(`privateDecrypt failed: ${(error as Error).message}`);
228
+ }
229
+ }