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
@@ -1,10 +1,14 @@
1
- import type { KeyObjectHandle } from '../specs/keyObjectHandle.nitro';
1
+ import { Buffer } from 'buffer';
2
+ import { NitroModules } from 'react-native-nitro-modules';
2
3
  import type {
3
4
  AsymmetricKeyType,
4
5
  EncodingOptions,
6
+ KeyDetail,
7
+ KeyObjectHandle,
5
8
  KeyUsage,
6
9
  SubtleAlgorithm,
7
10
  } from '../utils';
11
+ import { KeyType, KFormatType, KeyEncoding } from '../utils';
8
12
  import { parsePrivateKeyEncoding, parsePublicKeyEncoding } from './utils';
9
13
 
10
14
  export class CryptoKey {
@@ -65,22 +69,46 @@ export class CryptoKey {
65
69
 
66
70
  export class KeyObject {
67
71
  handle: KeyObjectHandle;
68
- type: 'public' | 'secret' | 'private' | 'unknown' = 'unknown';
72
+ type: 'public' | 'secret' | 'private';
73
+ export(options: { format: 'pem' } & EncodingOptions): string | Buffer;
74
+ export(options?: { format: 'der' } & EncodingOptions): Buffer;
75
+ export(options?: { format: 'jwk' } & EncodingOptions): never;
76
+ export(options?: EncodingOptions): string | Buffer;
69
77
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
70
- export(_options?: EncodingOptions): ArrayBuffer {
71
- return new ArrayBuffer(0);
78
+ export(_options?: EncodingOptions): string | Buffer {
79
+ // This is a placeholder and should be overridden by subclasses.
80
+ throw new Error('export() must be implemented by subclasses');
72
81
  }
73
82
 
74
- constructor(type: string, handle: KeyObjectHandle) {
83
+ constructor(type: string, handle: KeyObjectHandle);
84
+ constructor(type: string, key: ArrayBuffer);
85
+ constructor(type: string, handleOrKey: KeyObjectHandle | ArrayBuffer) {
75
86
  if (type !== 'secret' && type !== 'public' && type !== 'private')
76
87
  throw new Error(`invalid KeyObject type: ${type}`);
77
- this.handle = handle;
78
- this.type = type;
79
- }
80
88
 
81
- // get type(): string {
82
- // return this.type;
83
- // }
89
+ if (handleOrKey instanceof ArrayBuffer) {
90
+ this.handle = NitroModules.createHybridObject('KeyObjectHandle');
91
+ let keyType: KeyType;
92
+ switch (type) {
93
+ case 'public':
94
+ keyType = KeyType.PUBLIC;
95
+ break;
96
+ case 'private':
97
+ keyType = KeyType.PRIVATE;
98
+ break;
99
+ case 'secret':
100
+ keyType = KeyType.SECRET;
101
+ break;
102
+ default:
103
+ // Should not happen
104
+ throw new Error('invalid key type');
105
+ }
106
+ this.handle.init(keyType, handleOrKey);
107
+ } else {
108
+ this.handle = handleOrKey;
109
+ }
110
+ this.type = type as 'public' | 'secret' | 'private';
111
+ }
84
112
 
85
113
  // static from(key) {
86
114
  // if (!isCryptoKey(key))
@@ -88,20 +116,71 @@ export class KeyObject {
88
116
  // return key[kKeyObject];
89
117
  // }
90
118
 
91
- // equals(otherKeyObject) {
92
- // if (!isKeyObject(otherKeyObject)) {
93
- // throw new ERR_INVALID_ARG_TYPE(
94
- // 'otherKeyObject',
95
- // 'KeyObject',
96
- // otherKeyObject
97
- // );
98
- // }
99
-
100
- // return (
101
- // otherKeyObject.type === this.type &&
102
- // this[kHandle].equals(otherKeyObject[kHandle])
103
- // );
104
- // }
119
+ static createKeyObject(
120
+ type: string,
121
+ key: ArrayBuffer,
122
+ format?: KFormatType,
123
+ encoding?: KeyEncoding,
124
+ ): KeyObject {
125
+ if (type !== 'secret' && type !== 'public' && type !== 'private')
126
+ throw new Error(`invalid KeyObject type: ${type}`);
127
+
128
+ const handle = NitroModules.createHybridObject(
129
+ 'KeyObjectHandle',
130
+ ) as KeyObjectHandle;
131
+ let keyType: KeyType;
132
+ switch (type) {
133
+ case 'public':
134
+ keyType = KeyType.PUBLIC;
135
+ break;
136
+ case 'private':
137
+ keyType = KeyType.PRIVATE;
138
+ break;
139
+ case 'secret':
140
+ keyType = KeyType.SECRET;
141
+ break;
142
+ default:
143
+ throw new Error('invalid key type');
144
+ }
145
+
146
+ // If format is provided, use it (encoding is optional)
147
+ if (format !== undefined) {
148
+ handle.init(keyType, key, format, encoding);
149
+ } else {
150
+ handle.init(keyType, key);
151
+ }
152
+
153
+ // For asymmetric keys, return the appropriate subclass
154
+ if (type === 'public' || type === 'private') {
155
+ try {
156
+ handle.getAsymmetricKeyType();
157
+ // If we get here, it's an asymmetric key - return the appropriate subclass
158
+ if (type === 'public') {
159
+ return new PublicKeyObject(handle);
160
+ } else {
161
+ return new PrivateKeyObject(handle);
162
+ }
163
+ } catch {
164
+ // Not an asymmetric key, fall through to regular KeyObject
165
+ }
166
+ }
167
+
168
+ // For secret keys, return SecretKeyObject
169
+ if (type === 'secret') {
170
+ return new SecretKeyObject(handle);
171
+ }
172
+
173
+ // Return regular KeyObject for symmetric keys or if asymmetric detection failed
174
+ return new KeyObject(type, handle);
175
+ }
176
+
177
+ getAsymmetricKeyType(): undefined {
178
+ return undefined;
179
+ }
180
+
181
+ getAsymmetricKeyDetails(): undefined {
182
+ return undefined;
183
+ }
105
184
  }
106
185
 
107
186
  export class SecretKeyObject extends KeyObject {
@@ -110,17 +189,21 @@ export class SecretKeyObject extends KeyObject {
110
189
  }
111
190
 
112
191
  // get symmetricKeySize() {
113
- // return this[kHandle].getSymmetricKeySize();
192
+ // return this.handle.getSymmetricKeySize();
114
193
  // }
115
194
 
116
- export(options?: EncodingOptions) {
117
- if (options !== undefined) {
118
- if (options.format === 'jwk') {
119
- throw new Error('SecretKey export for jwk is not implemented');
120
- // return this.handle.exportJwk({}, false);
121
- }
195
+ export(options: { format: 'pem' } & EncodingOptions): never;
196
+ export(options: { format: 'der' } & EncodingOptions): Buffer;
197
+ export(options: { format: 'jwk' } & EncodingOptions): never;
198
+ export(options?: EncodingOptions): Buffer;
199
+ export(options?: EncodingOptions): Buffer {
200
+ if (options?.format === 'pem' || options?.format === 'jwk') {
201
+ throw new Error(
202
+ `SecretKey export for ${options.format} is not supported`,
203
+ );
122
204
  }
123
- return this.handle.exportKey();
205
+ const key = this.handle.exportKey();
206
+ return Buffer.from(key);
124
207
  }
125
208
  }
126
209
 
@@ -153,22 +236,18 @@ export class AsymmetricKeyObject extends KeyObject {
153
236
  return this._asymmetricKeyType;
154
237
  }
155
238
 
156
- // get asymmetricKeyDetails() {
157
- // switch (this._asymmetricKeyType) {
158
- // case 'rsa':
159
- // case 'rsa-pss':
160
- // case 'dsa':
161
- // case 'ec':
162
- // return (
163
- // this[kAsymmetricKeyDetails] ||
164
- // (this[kAsymmetricKeyDetails] = normalizeKeyDetails(
165
- // this[kHandle].keyDetail({})
166
- // ))
167
- // );
168
- // default:
169
- // return {};
170
- // }
171
- // }
239
+ private _asymmetricKeyDetails?: KeyDetail;
240
+
241
+ get asymmetricKeyDetails() {
242
+ if (!this._asymmetricKeyDetails) {
243
+ this._asymmetricKeyDetails = this.handle.keyDetail();
244
+ }
245
+ return this._asymmetricKeyDetails;
246
+ }
247
+
248
+ get namedCurve(): string | undefined {
249
+ return this.asymmetricKeyDetails?.namedCurve;
250
+ }
172
251
  }
173
252
 
174
253
  export class PublicKeyObject extends AsymmetricKeyObject {
@@ -176,16 +255,23 @@ export class PublicKeyObject extends AsymmetricKeyObject {
176
255
  super('public', handle);
177
256
  }
178
257
 
179
- export(options: EncodingOptions) {
258
+ export(options: { format: 'pem' } & EncodingOptions): string;
259
+ export(options: { format: 'der' } & EncodingOptions): Buffer;
260
+ export(options: { format: 'jwk' } & EncodingOptions): never;
261
+ export(options: EncodingOptions): string | Buffer {
180
262
  if (options?.format === 'jwk') {
181
263
  throw new Error('PublicKey export for jwk is not implemented');
182
- // return this.handle.exportJwk({}, false);
183
264
  }
184
265
  const { format, type } = parsePublicKeyEncoding(
185
266
  options,
186
267
  this.asymmetricKeyType,
187
268
  );
188
- return this.handle.exportKey(format, type);
269
+ const key = this.handle.exportKey(format, type);
270
+ const buffer = Buffer.from(key);
271
+ if (options?.format === 'pem') {
272
+ return buffer.toString('utf-8');
273
+ }
274
+ return buffer;
189
275
  }
190
276
  }
191
277
 
@@ -194,18 +280,25 @@ export class PrivateKeyObject extends AsymmetricKeyObject {
194
280
  super('private', handle);
195
281
  }
196
282
 
197
- export(options: EncodingOptions) {
283
+ export(options: { format: 'pem' } & EncodingOptions): string;
284
+ export(options: { format: 'der' } & EncodingOptions): Buffer;
285
+ export(options: { format: 'jwk' } & EncodingOptions): never;
286
+ export(options: EncodingOptions): string | Buffer {
198
287
  if (options?.format === 'jwk') {
199
288
  if (options.passphrase !== undefined) {
200
289
  throw new Error('jwk does not support encryption');
201
290
  }
202
291
  throw new Error('PrivateKey export for jwk is not implemented');
203
- // return this.handle.exportJwk({}, false);
204
292
  }
205
293
  const { format, type, cipher, passphrase } = parsePrivateKeyEncoding(
206
294
  options,
207
295
  this.asymmetricKeyType,
208
296
  );
209
- return this.handle.exportKey(format, type, cipher, passphrase);
297
+ const key = this.handle.exportKey(format, type, cipher, passphrase);
298
+ const buffer = Buffer.from(key);
299
+ if (options?.format === 'pem') {
300
+ return buffer.toString('utf-8');
301
+ }
302
+ return buffer;
210
303
  }
211
304
  }
@@ -1,146 +1,189 @@
1
- // import { ed25519 } from '../ed25519';
2
- // import {
3
- // kEmptyObject,
4
- // validateFunction,
5
- // type CryptoKeyPair,
6
- // type GenerateKeyPairCallback,
7
- // type GenerateKeyPairOptions,
8
- // type GenerateKeyPairPromiseReturn,
9
- // type GenerateKeyPairReturn,
10
- // type KeyPairGenConfig,
11
- // type KeyPairType,
12
- // } from '../utils';
13
- // import { parsePrivateKeyEncoding, parsePublicKeyEncoding } from './utils';
1
+ import { ed_generateKeyPair } from '../ed';
2
+ import { rsa_generateKeyPairNode, rsa_generateKeyPairNodeSync } from '../rsa';
3
+ import { ec_generateKeyPairNode, ec_generateKeyPairNodeSync } from '../ec';
4
+ import {
5
+ kEmptyObject,
6
+ validateFunction,
7
+ type CryptoKeyPair,
8
+ type GenerateKeyPairCallback,
9
+ type GenerateKeyPairOptions,
10
+ type GenerateKeyPairPromiseReturn,
11
+ type GenerateKeyPairReturn,
12
+ type KeyPairGenConfig,
13
+ type KeyPairType,
14
+ } from '../utils';
15
+ import { parsePrivateKeyEncoding, parsePublicKeyEncoding } from './utils';
14
16
 
15
- // export const generateKeyPair = (
16
- // type: KeyPairType,
17
- // options: GenerateKeyPairOptions,
18
- // callback: GenerateKeyPairCallback,
19
- // ): void => {
20
- // validateFunction(callback);
21
- // internalGenerateKeyPair(true, type, options, callback);
22
- // };
17
+ export const generateKeyPair = (
18
+ type: KeyPairType,
19
+ options: GenerateKeyPairOptions,
20
+ callback: GenerateKeyPairCallback,
21
+ ): void => {
22
+ validateFunction(callback);
23
+ internalGenerateKeyPair(true, type, options, callback);
24
+ };
23
25
 
24
- // // Promisify generateKeyPair
25
- // // (attempted to use util.promisify, to no avail)
26
- // export const generateKeyPairPromise = (
27
- // type: KeyPairType,
28
- // options: GenerateKeyPairOptions,
29
- // ): Promise<GenerateKeyPairPromiseReturn> => {
30
- // return new Promise((resolve, reject) => {
31
- // generateKeyPair(type, options, (err, publicKey, privateKey) => {
32
- // if (err) {
33
- // reject([err, undefined]);
34
- // } else {
35
- // resolve([undefined, { publicKey, privateKey }]);
36
- // }
37
- // });
38
- // });
39
- // };
26
+ // Promisify generateKeyPair
27
+ // (attempted to use util.promisify, to no avail)
28
+ export const generateKeyPairPromise = (
29
+ type: KeyPairType,
30
+ options: GenerateKeyPairOptions,
31
+ ): Promise<GenerateKeyPairPromiseReturn> => {
32
+ return new Promise((resolve, reject) => {
33
+ generateKeyPair(type, options, (err, publicKey, privateKey) => {
34
+ if (err) {
35
+ reject([err, undefined]);
36
+ } else {
37
+ resolve([undefined, { publicKey, privateKey }]);
38
+ }
39
+ });
40
+ });
41
+ };
40
42
 
41
- // // generateKeyPairSync
42
- // export function generateKeyPairSync(type: KeyPairType): CryptoKeyPair;
43
- // export function generateKeyPairSync(
44
- // type: KeyPairType,
45
- // options: GenerateKeyPairOptions,
46
- // ): CryptoKeyPair;
47
- // export function generateKeyPairSync(
48
- // type: KeyPairType,
49
- // options?: GenerateKeyPairOptions,
50
- // ): CryptoKeyPair {
51
- // const [err, publicKey, privateKey] = internalGenerateKeyPair(
52
- // false,
53
- // type,
54
- // options,
55
- // undefined,
56
- // )!;
43
+ // generateKeyPairSync
44
+ export function generateKeyPairSync(type: KeyPairType): CryptoKeyPair;
45
+ export function generateKeyPairSync(
46
+ type: KeyPairType,
47
+ options: GenerateKeyPairOptions,
48
+ ): CryptoKeyPair;
49
+ export function generateKeyPairSync(
50
+ type: KeyPairType,
51
+ options?: GenerateKeyPairOptions,
52
+ ): CryptoKeyPair {
53
+ const [err, publicKey, privateKey] = internalGenerateKeyPair(
54
+ false,
55
+ type,
56
+ options,
57
+ undefined,
58
+ )!;
57
59
 
58
- // if (err) {
59
- // throw err;
60
- // }
60
+ if (err) {
61
+ throw err;
62
+ }
61
63
 
62
- // return {
63
- // publicKey,
64
- // privateKey,
65
- // };
66
- // }
64
+ return {
65
+ publicKey,
66
+ privateKey,
67
+ };
68
+ }
67
69
 
68
- // function parseKeyPairEncoding(
69
- // keyType: string,
70
- // options: GenerateKeyPairOptions = kEmptyObject,
71
- // ): KeyPairGenConfig {
72
- // const { publicKeyEncoding, privateKeyEncoding } = options;
70
+ function parseKeyPairEncoding(
71
+ keyType: string,
72
+ options: GenerateKeyPairOptions = kEmptyObject,
73
+ ): KeyPairGenConfig {
74
+ const { publicKeyEncoding, privateKeyEncoding } = options;
73
75
 
74
- // let publicFormat, publicType;
75
- // if (publicKeyEncoding == null) {
76
- // publicFormat = publicType = -1;
77
- // } else if (typeof publicKeyEncoding === 'object') {
78
- // ({ format: publicFormat, type: publicType } = parsePublicKeyEncoding(
79
- // publicKeyEncoding,
80
- // keyType,
81
- // 'publicKeyEncoding',
82
- // ));
83
- // } else {
84
- // throw new Error(
85
- // 'Invalid argument options.publicKeyEncoding',
86
- // publicKeyEncoding,
87
- // );
88
- // }
76
+ let publicFormat, publicType;
77
+ if (publicKeyEncoding == null) {
78
+ publicFormat = publicType = -1;
79
+ } else if (typeof publicKeyEncoding === 'object') {
80
+ ({ format: publicFormat, type: publicType } = parsePublicKeyEncoding(
81
+ publicKeyEncoding,
82
+ keyType,
83
+ 'publicKeyEncoding',
84
+ ));
85
+ } else {
86
+ throw new Error(
87
+ 'Invalid argument options.publicKeyEncoding',
88
+ publicKeyEncoding,
89
+ );
90
+ }
89
91
 
90
- // let privateFormat, privateType, cipher, passphrase;
91
- // if (privateKeyEncoding == null) {
92
- // privateFormat = privateType = -1;
93
- // } else if (typeof privateKeyEncoding === 'object') {
94
- // ({
95
- // format: privateFormat,
96
- // type: privateType,
97
- // cipher,
98
- // passphrase,
99
- // } = parsePrivateKeyEncoding(
100
- // privateKeyEncoding,
101
- // keyType,
102
- // 'privateKeyEncoding',
103
- // ));
104
- // } else {
105
- // throw new Error(
106
- // 'Invalid argument options.privateKeyEncoding',
107
- // publicKeyEncoding as ErrorOptions,
108
- // );
109
- // }
92
+ let privateFormat, privateType, cipher, passphrase;
93
+ if (privateKeyEncoding == null) {
94
+ privateFormat = privateType = -1;
95
+ } else if (typeof privateKeyEncoding === 'object') {
96
+ ({
97
+ format: privateFormat,
98
+ type: privateType,
99
+ cipher,
100
+ passphrase,
101
+ } = parsePrivateKeyEncoding(
102
+ privateKeyEncoding,
103
+ keyType,
104
+ 'privateKeyEncoding',
105
+ ));
106
+ } else {
107
+ throw new Error(
108
+ 'Invalid argument options.privateKeyEncoding',
109
+ publicKeyEncoding as ErrorOptions,
110
+ );
111
+ }
110
112
 
111
- // return {
112
- // publicFormat,
113
- // publicType,
114
- // privateFormat,
115
- // privateType,
116
- // cipher,
117
- // passphrase,
118
- // };
119
- // }
113
+ return {
114
+ publicFormat,
115
+ publicType,
116
+ privateFormat,
117
+ privateType,
118
+ cipher,
119
+ passphrase,
120
+ };
121
+ }
120
122
 
121
- // function internalGenerateKeyPair(
122
- // isAsync: boolean,
123
- // type: KeyPairType,
124
- // options: GenerateKeyPairOptions | undefined,
125
- // callback: GenerateKeyPairCallback | undefined,
126
- // ): GenerateKeyPairReturn | void {
127
- // const encoding = parseKeyPairEncoding(type, options);
123
+ function internalGenerateKeyPair(
124
+ isAsync: boolean,
125
+ type: KeyPairType,
126
+ options: GenerateKeyPairOptions | undefined,
127
+ callback: GenerateKeyPairCallback | undefined,
128
+ ): GenerateKeyPairReturn | void {
129
+ const encoding = parseKeyPairEncoding(type, options);
128
130
 
129
- // switch (type) {
130
- // case 'ed25519':
131
- // case 'ed448':
132
- // case 'x25519':
133
- // case 'x448': {
134
- // return ed25519.utils.generateKeyPair(isAsync, type, encoding, callback);
135
- // }
136
- // default:
137
- // // Fall through
138
- // }
131
+ switch (type) {
132
+ case 'ed25519':
133
+ case 'ed448':
134
+ case 'x25519':
135
+ case 'x448':
136
+ return ed_generateKeyPair(isAsync, type, encoding, callback);
137
+ case 'rsa':
138
+ case 'rsa-pss':
139
+ case 'dsa':
140
+ case 'ec':
141
+ break;
142
+ default: {
143
+ const err = new Error(`
144
+ Invalid Argument options: '${type}' scheme not supported for
145
+ generateKeyPair(). Currently not all encryption methods are supported in
146
+ this library. Check docs/implementation_coverage.md for status.
147
+ `);
148
+ return [err, undefined, undefined];
149
+ }
150
+ }
139
151
 
140
- // const err = new Error(`
141
- // Invalid Argument options: '${type}' scheme not supported for
142
- // generateKeyPair(). Currently not all encryption methods are supported in
143
- // this library. Check docs/implementation_coverage.md for status.
144
- // `);
145
- // return [err, undefined, undefined];
146
- // }
152
+ if (isAsync) {
153
+ const impl = async (): Promise<GenerateKeyPairReturn> => {
154
+ try {
155
+ let result;
156
+ if (type === 'rsa' || type === 'rsa-pss') {
157
+ result = await rsa_generateKeyPairNode(type, options, encoding);
158
+ } else if (type === 'ec') {
159
+ result = await ec_generateKeyPairNode(options, encoding);
160
+ } else {
161
+ throw new Error(`Unsupported key type: ${type}`);
162
+ }
163
+ return [undefined, result.publicKey, result.privateKey];
164
+ } catch (error) {
165
+ return [error as Error, undefined, undefined];
166
+ }
167
+ };
168
+
169
+ impl().then(result => {
170
+ const [err, publicKey, privateKey] = result;
171
+ callback!(err, publicKey, privateKey);
172
+ });
173
+ return;
174
+ }
175
+
176
+ try {
177
+ let result;
178
+ if (type === 'rsa' || type === 'rsa-pss') {
179
+ result = rsa_generateKeyPairNodeSync(type, options, encoding);
180
+ } else if (type === 'ec') {
181
+ result = ec_generateKeyPairNodeSync(options, encoding);
182
+ } else {
183
+ throw new Error(`Unsupported key type: ${type}`);
184
+ }
185
+ return [undefined, result.publicKey, result.privateKey];
186
+ } catch (error) {
187
+ return [error as Error, undefined, undefined];
188
+ }
189
+ }