react-native-quick-crypto 1.0.0-beta.2 → 1.0.0-beta.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) hide show
  1. package/QuickCrypto.podspec +143 -7
  2. package/README.md +12 -6
  3. package/android/CMakeLists.txt +82 -21
  4. package/android/build.gradle +47 -4
  5. package/android/src/main/cpp/cpp-adapter.cpp +3 -10
  6. package/android/src/main/java/com/margelo/nitro/quickcrypto/QuickCryptoPackage.java +13 -10
  7. package/app.plugin.js +3 -0
  8. package/cpp/blake3/HybridBlake3.cpp +118 -0
  9. package/cpp/blake3/HybridBlake3.hpp +35 -0
  10. package/cpp/cipher/CCMCipher.cpp +199 -0
  11. package/cpp/cipher/CCMCipher.hpp +26 -0
  12. package/cpp/cipher/ChaCha20Cipher.cpp +97 -0
  13. package/cpp/cipher/ChaCha20Cipher.hpp +25 -0
  14. package/cpp/cipher/ChaCha20Poly1305Cipher.cpp +170 -0
  15. package/cpp/cipher/ChaCha20Poly1305Cipher.hpp +30 -0
  16. package/cpp/cipher/HybridCipher.cpp +322 -0
  17. package/cpp/cipher/HybridCipher.hpp +68 -0
  18. package/cpp/cipher/HybridCipherFactory.hpp +97 -0
  19. package/cpp/cipher/OCBCipher.cpp +55 -0
  20. package/cpp/cipher/OCBCipher.hpp +19 -0
  21. package/cpp/cipher/XSalsa20Cipher.cpp +61 -0
  22. package/cpp/cipher/XSalsa20Cipher.hpp +33 -0
  23. package/cpp/ec/HybridEcKeyPair.cpp +428 -0
  24. package/cpp/ec/HybridEcKeyPair.hpp +48 -0
  25. package/cpp/ed25519/HybridEdKeyPair.cpp +300 -0
  26. package/cpp/ed25519/HybridEdKeyPair.hpp +63 -0
  27. package/cpp/hash/HybridHash.cpp +185 -0
  28. package/cpp/hash/HybridHash.hpp +43 -0
  29. package/cpp/hmac/HybridHmac.cpp +95 -0
  30. package/cpp/hmac/HybridHmac.hpp +31 -0
  31. package/cpp/keys/HybridKeyObjectHandle.cpp +243 -0
  32. package/cpp/keys/HybridKeyObjectHandle.hpp +42 -0
  33. package/cpp/keys/KeyObjectData.cpp +226 -0
  34. package/cpp/keys/KeyObjectData.hpp +71 -0
  35. package/cpp/keys/node.h +5 -0
  36. package/cpp/pbkdf2/HybridPbkdf2.cpp +51 -0
  37. package/cpp/pbkdf2/HybridPbkdf2.hpp +24 -0
  38. package/cpp/random/HybridRandom.cpp +32 -18
  39. package/cpp/random/HybridRandom.hpp +18 -30
  40. package/cpp/rsa/HybridRsaKeyPair.cpp +154 -0
  41. package/cpp/rsa/HybridRsaKeyPair.hpp +43 -0
  42. package/cpp/utils/Macros.hpp +68 -0
  43. package/cpp/utils/Utils.hpp +53 -1
  44. package/deps/blake3/.cargo/config.toml +2 -0
  45. package/deps/blake3/.git-blame-ignore-revs +2 -0
  46. package/deps/blake3/.github/workflows/build_b3sum.py +38 -0
  47. package/deps/blake3/.github/workflows/ci.yml +491 -0
  48. package/deps/blake3/.github/workflows/tag.yml +43 -0
  49. package/deps/blake3/.github/workflows/upload_github_release_asset.py +73 -0
  50. package/deps/blake3/CONTRIBUTING.md +31 -0
  51. package/deps/blake3/Cargo.toml +135 -0
  52. package/deps/blake3/LICENSE_A2 +202 -0
  53. package/deps/blake3/LICENSE_A2LLVM +219 -0
  54. package/deps/blake3/LICENSE_CC0 +121 -0
  55. package/deps/blake3/README.md +229 -0
  56. package/deps/blake3/b3sum/Cargo.lock +513 -0
  57. package/deps/blake3/b3sum/Cargo.toml +26 -0
  58. package/deps/blake3/b3sum/README.md +72 -0
  59. package/deps/blake3/b3sum/src/main.rs +564 -0
  60. package/deps/blake3/b3sum/src/unit_tests.rs +235 -0
  61. package/deps/blake3/b3sum/tests/cli_tests.rs +680 -0
  62. package/deps/blake3/b3sum/what_does_check_do.md +176 -0
  63. package/deps/blake3/benches/bench.rs +623 -0
  64. package/deps/blake3/build.rs +389 -0
  65. package/deps/blake3/c/CMakeLists.txt +383 -0
  66. package/deps/blake3/c/CMakePresets.json +73 -0
  67. package/deps/blake3/c/Makefile.testing +82 -0
  68. package/deps/blake3/c/README.md +403 -0
  69. package/deps/blake3/c/blake3-config.cmake.in +14 -0
  70. package/deps/blake3/c/blake3.c +650 -0
  71. package/deps/blake3/c/blake3.h +86 -0
  72. package/deps/blake3/c/blake3_avx2.c +326 -0
  73. package/deps/blake3/c/blake3_avx2_x86-64_unix.S +1815 -0
  74. package/deps/blake3/c/blake3_avx2_x86-64_windows_gnu.S +1817 -0
  75. package/deps/blake3/c/blake3_avx2_x86-64_windows_msvc.asm +1828 -0
  76. package/deps/blake3/c/blake3_avx512.c +1388 -0
  77. package/deps/blake3/c/blake3_avx512_x86-64_unix.S +4824 -0
  78. package/deps/blake3/c/blake3_avx512_x86-64_windows_gnu.S +2615 -0
  79. package/deps/blake3/c/blake3_avx512_x86-64_windows_msvc.asm +2634 -0
  80. package/deps/blake3/c/blake3_c_rust_bindings/Cargo.toml +32 -0
  81. package/deps/blake3/c/blake3_c_rust_bindings/README.md +4 -0
  82. package/deps/blake3/c/blake3_c_rust_bindings/benches/bench.rs +477 -0
  83. package/deps/blake3/c/blake3_c_rust_bindings/build.rs +253 -0
  84. package/deps/blake3/c/blake3_c_rust_bindings/cross_test.sh +31 -0
  85. package/deps/blake3/c/blake3_c_rust_bindings/src/lib.rs +333 -0
  86. package/deps/blake3/c/blake3_c_rust_bindings/src/test.rs +696 -0
  87. package/deps/blake3/c/blake3_dispatch.c +332 -0
  88. package/deps/blake3/c/blake3_impl.h +333 -0
  89. package/deps/blake3/c/blake3_neon.c +366 -0
  90. package/deps/blake3/c/blake3_portable.c +160 -0
  91. package/deps/blake3/c/blake3_sse2.c +566 -0
  92. package/deps/blake3/c/blake3_sse2_x86-64_unix.S +2291 -0
  93. package/deps/blake3/c/blake3_sse2_x86-64_windows_gnu.S +2332 -0
  94. package/deps/blake3/c/blake3_sse2_x86-64_windows_msvc.asm +2350 -0
  95. package/deps/blake3/c/blake3_sse41.c +560 -0
  96. package/deps/blake3/c/blake3_sse41_x86-64_unix.S +2028 -0
  97. package/deps/blake3/c/blake3_sse41_x86-64_windows_gnu.S +2069 -0
  98. package/deps/blake3/c/blake3_sse41_x86-64_windows_msvc.asm +2089 -0
  99. package/deps/blake3/c/blake3_tbb.cpp +37 -0
  100. package/deps/blake3/c/dependencies/CMakeLists.txt +3 -0
  101. package/deps/blake3/c/dependencies/tbb/CMakeLists.txt +28 -0
  102. package/deps/blake3/c/example.c +36 -0
  103. package/deps/blake3/c/example_tbb.c +57 -0
  104. package/deps/blake3/c/libblake3.pc.in +12 -0
  105. package/deps/blake3/c/main.c +166 -0
  106. package/deps/blake3/c/test.py +97 -0
  107. package/deps/blake3/media/B3.svg +70 -0
  108. package/deps/blake3/media/BLAKE3.svg +85 -0
  109. package/deps/blake3/media/speed.svg +1474 -0
  110. package/deps/blake3/reference_impl/Cargo.toml +8 -0
  111. package/deps/blake3/reference_impl/README.md +14 -0
  112. package/deps/blake3/reference_impl/reference_impl.rs +374 -0
  113. package/deps/blake3/src/ffi_avx2.rs +65 -0
  114. package/deps/blake3/src/ffi_avx512.rs +169 -0
  115. package/deps/blake3/src/ffi_neon.rs +82 -0
  116. package/deps/blake3/src/ffi_sse2.rs +126 -0
  117. package/deps/blake3/src/ffi_sse41.rs +126 -0
  118. package/deps/blake3/src/guts.rs +60 -0
  119. package/deps/blake3/src/hazmat.rs +704 -0
  120. package/deps/blake3/src/io.rs +64 -0
  121. package/deps/blake3/src/join.rs +92 -0
  122. package/deps/blake3/src/lib.rs +1835 -0
  123. package/deps/blake3/src/platform.rs +587 -0
  124. package/deps/blake3/src/portable.rs +198 -0
  125. package/deps/blake3/src/rust_avx2.rs +474 -0
  126. package/deps/blake3/src/rust_sse2.rs +775 -0
  127. package/deps/blake3/src/rust_sse41.rs +766 -0
  128. package/deps/blake3/src/test.rs +1049 -0
  129. package/deps/blake3/src/traits.rs +227 -0
  130. package/deps/blake3/src/wasm32_simd.rs +794 -0
  131. package/deps/blake3/test_vectors/Cargo.toml +19 -0
  132. package/deps/blake3/test_vectors/cross_test.sh +25 -0
  133. package/deps/blake3/test_vectors/src/bin/generate.rs +4 -0
  134. package/deps/blake3/test_vectors/src/lib.rs +350 -0
  135. package/deps/blake3/test_vectors/test_vectors.json +217 -0
  136. package/deps/blake3/tools/compiler_version/Cargo.toml +7 -0
  137. package/deps/blake3/tools/compiler_version/build.rs +6 -0
  138. package/deps/blake3/tools/compiler_version/src/main.rs +27 -0
  139. package/deps/blake3/tools/instruction_set_support/Cargo.toml +6 -0
  140. package/deps/blake3/tools/instruction_set_support/src/main.rs +10 -0
  141. package/deps/blake3/tools/release.md +16 -0
  142. package/deps/fastpbkdf2/fastpbkdf2.c +356 -0
  143. package/deps/fastpbkdf2/fastpbkdf2.h +68 -0
  144. package/deps/ncrypto/ncrypto.cc +4679 -0
  145. package/deps/ncrypto/ncrypto.h +1625 -0
  146. package/lib/commonjs/blake3.js +98 -0
  147. package/lib/commonjs/blake3.js.map +1 -0
  148. package/lib/commonjs/cipher.js +180 -0
  149. package/lib/commonjs/cipher.js.map +1 -0
  150. package/lib/commonjs/ec.js +344 -0
  151. package/lib/commonjs/ec.js.map +1 -0
  152. package/lib/commonjs/ed.js +185 -0
  153. package/lib/commonjs/ed.js.map +1 -0
  154. package/lib/commonjs/expo-plugin/@types.js +2 -0
  155. package/lib/commonjs/expo-plugin/@types.js.map +1 -0
  156. package/lib/commonjs/expo-plugin/withRNQC.js +25 -0
  157. package/lib/commonjs/expo-plugin/withRNQC.js.map +1 -0
  158. package/lib/commonjs/expo-plugin/withSodiumAndroid.js +25 -0
  159. package/lib/commonjs/expo-plugin/withSodiumAndroid.js.map +1 -0
  160. package/lib/commonjs/expo-plugin/withSodiumIos.js +26 -0
  161. package/lib/commonjs/expo-plugin/withSodiumIos.js.map +1 -0
  162. package/lib/commonjs/expo-plugin/withXCode.js +51 -0
  163. package/lib/commonjs/expo-plugin/withXCode.js.map +1 -0
  164. package/lib/commonjs/hash.js +215 -0
  165. package/lib/commonjs/hash.js.map +1 -0
  166. package/lib/commonjs/hmac.js +109 -0
  167. package/lib/commonjs/hmac.js.map +1 -0
  168. package/lib/commonjs/index.js +152 -32
  169. package/lib/commonjs/index.js.map +1 -1
  170. package/lib/commonjs/keys/classes.js +250 -0
  171. package/lib/commonjs/keys/classes.js.map +1 -0
  172. package/lib/commonjs/keys/generateKeyPair.js +102 -0
  173. package/lib/commonjs/keys/generateKeyPair.js.map +1 -0
  174. package/lib/commonjs/keys/index.js +89 -0
  175. package/lib/commonjs/keys/index.js.map +1 -0
  176. package/lib/commonjs/keys/signVerify.js +41 -0
  177. package/lib/commonjs/keys/signVerify.js.map +1 -0
  178. package/lib/commonjs/keys/utils.js +123 -0
  179. package/lib/commonjs/keys/utils.js.map +1 -0
  180. package/lib/commonjs/pbkdf2.js +89 -0
  181. package/lib/commonjs/pbkdf2.js.map +1 -0
  182. package/lib/commonjs/random.js +9 -3
  183. package/lib/commonjs/random.js.map +1 -1
  184. package/lib/commonjs/rsa.js +129 -0
  185. package/lib/commonjs/rsa.js.map +1 -0
  186. package/lib/commonjs/specs/blake3.nitro.js +6 -0
  187. package/lib/commonjs/specs/blake3.nitro.js.map +1 -0
  188. package/lib/commonjs/specs/cipher.nitro.js +6 -0
  189. package/lib/commonjs/specs/cipher.nitro.js.map +1 -0
  190. package/lib/commonjs/specs/ecKeyPair.nitro.js +6 -0
  191. package/lib/commonjs/specs/ecKeyPair.nitro.js.map +1 -0
  192. package/lib/commonjs/specs/edKeyPair.nitro.js +6 -0
  193. package/lib/commonjs/specs/edKeyPair.nitro.js.map +1 -0
  194. package/lib/commonjs/specs/hash.nitro.js +6 -0
  195. package/lib/commonjs/specs/hash.nitro.js.map +1 -0
  196. package/lib/commonjs/specs/hmac.nitro.js +6 -0
  197. package/lib/commonjs/specs/hmac.nitro.js.map +1 -0
  198. package/lib/commonjs/specs/keyObjectHandle.nitro.js +6 -0
  199. package/lib/commonjs/specs/keyObjectHandle.nitro.js.map +1 -0
  200. package/lib/commonjs/specs/pbkdf2.nitro.js +6 -0
  201. package/lib/commonjs/specs/pbkdf2.nitro.js.map +1 -0
  202. package/lib/commonjs/specs/rsaKeyPair.nitro.js +6 -0
  203. package/lib/commonjs/specs/rsaKeyPair.nitro.js.map +1 -0
  204. package/lib/commonjs/subtle.js +365 -0
  205. package/lib/commonjs/subtle.js.map +1 -0
  206. package/lib/commonjs/utils/cipher.js +64 -0
  207. package/lib/commonjs/utils/cipher.js.map +1 -0
  208. package/lib/commonjs/utils/conversion.js +140 -6
  209. package/lib/commonjs/utils/conversion.js.map +1 -1
  210. package/lib/commonjs/utils/errors.js +14 -0
  211. package/lib/commonjs/utils/errors.js.map +1 -0
  212. package/lib/commonjs/utils/hashnames.js +91 -0
  213. package/lib/commonjs/utils/hashnames.js.map +1 -0
  214. package/lib/commonjs/utils/index.js +65 -5
  215. package/lib/commonjs/utils/index.js.map +1 -1
  216. package/lib/commonjs/utils/noble.js +82 -0
  217. package/lib/commonjs/utils/noble.js.map +1 -0
  218. package/lib/commonjs/utils/types.js +52 -0
  219. package/lib/commonjs/utils/types.js.map +1 -1
  220. package/lib/commonjs/utils/validation.js +98 -0
  221. package/lib/commonjs/utils/validation.js.map +1 -0
  222. package/lib/module/blake3.js +90 -0
  223. package/lib/module/blake3.js.map +1 -0
  224. package/lib/module/cipher.js +173 -0
  225. package/lib/module/cipher.js.map +1 -0
  226. package/lib/module/ec.js +336 -0
  227. package/lib/module/ec.js.map +1 -0
  228. package/lib/module/ed.js +178 -0
  229. package/lib/module/ed.js.map +1 -0
  230. package/lib/module/expo-plugin/@types.js +2 -0
  231. package/lib/module/expo-plugin/@types.js.map +1 -0
  232. package/lib/module/expo-plugin/withRNQC.js +21 -0
  233. package/lib/module/expo-plugin/withRNQC.js.map +1 -0
  234. package/lib/module/expo-plugin/withSodiumAndroid.js +20 -0
  235. package/lib/module/expo-plugin/withSodiumAndroid.js.map +1 -0
  236. package/lib/module/expo-plugin/withSodiumIos.js +20 -0
  237. package/lib/module/expo-plugin/withSodiumIos.js.map +1 -0
  238. package/lib/module/expo-plugin/withXCode.js +46 -0
  239. package/lib/module/expo-plugin/withXCode.js.map +1 -0
  240. package/lib/module/hash.js +207 -0
  241. package/lib/module/hash.js.map +1 -0
  242. package/lib/module/hmac.js +104 -0
  243. package/lib/module/hmac.js.map +1 -0
  244. package/lib/module/index.js +33 -29
  245. package/lib/module/index.js.map +1 -1
  246. package/lib/module/keys/classes.js +241 -0
  247. package/lib/module/keys/classes.js.map +1 -0
  248. package/lib/module/keys/generateKeyPair.js +96 -0
  249. package/lib/module/keys/generateKeyPair.js.map +1 -0
  250. package/lib/module/keys/index.js +32 -0
  251. package/lib/module/keys/index.js.map +1 -0
  252. package/lib/module/keys/signVerify.js +41 -0
  253. package/lib/module/keys/signVerify.js.map +1 -0
  254. package/lib/module/keys/utils.js +114 -0
  255. package/lib/module/keys/utils.js.map +1 -0
  256. package/lib/module/pbkdf2.js +83 -0
  257. package/lib/module/pbkdf2.js.map +1 -0
  258. package/lib/module/random.js +7 -1
  259. package/lib/module/random.js.map +1 -1
  260. package/lib/module/rsa.js +123 -0
  261. package/lib/module/rsa.js.map +1 -0
  262. package/lib/module/specs/blake3.nitro.js +4 -0
  263. package/lib/module/specs/blake3.nitro.js.map +1 -0
  264. package/lib/module/specs/cipher.nitro.js +4 -0
  265. package/lib/module/specs/cipher.nitro.js.map +1 -0
  266. package/lib/module/specs/ecKeyPair.nitro.js +4 -0
  267. package/lib/module/specs/ecKeyPair.nitro.js.map +1 -0
  268. package/lib/module/specs/edKeyPair.nitro.js +4 -0
  269. package/lib/module/specs/edKeyPair.nitro.js.map +1 -0
  270. package/lib/module/specs/hash.nitro.js +4 -0
  271. package/lib/module/specs/hash.nitro.js.map +1 -0
  272. package/lib/module/specs/hmac.nitro.js +4 -0
  273. package/lib/module/specs/hmac.nitro.js.map +1 -0
  274. package/lib/module/specs/keyObjectHandle.nitro.js +4 -0
  275. package/lib/module/specs/keyObjectHandle.nitro.js.map +1 -0
  276. package/lib/module/specs/pbkdf2.nitro.js +4 -0
  277. package/lib/module/specs/pbkdf2.nitro.js.map +1 -0
  278. package/lib/module/specs/rsaKeyPair.nitro.js +4 -0
  279. package/lib/module/specs/rsaKeyPair.nitro.js.map +1 -0
  280. package/lib/module/subtle.js +360 -0
  281. package/lib/module/subtle.js.map +1 -0
  282. package/lib/module/utils/cipher.js +56 -0
  283. package/lib/module/utils/cipher.js.map +1 -0
  284. package/lib/module/utils/conversion.js +120 -8
  285. package/lib/module/utils/conversion.js.map +1 -1
  286. package/lib/module/utils/errors.js +10 -0
  287. package/lib/module/utils/errors.js.map +1 -0
  288. package/lib/module/utils/hashnames.js +89 -0
  289. package/lib/module/utils/hashnames.js.map +1 -0
  290. package/lib/module/utils/index.js +6 -5
  291. package/lib/module/utils/index.js.map +1 -1
  292. package/lib/module/utils/noble.js +76 -0
  293. package/lib/module/utils/noble.js.map +1 -0
  294. package/lib/module/utils/types.js +53 -0
  295. package/lib/module/utils/types.js.map +1 -1
  296. package/lib/module/utils/validation.js +87 -0
  297. package/lib/module/utils/validation.js.map +1 -0
  298. package/lib/tsconfig.tsbuildinfo +1 -1
  299. package/lib/typescript/blake3.d.ts +33 -0
  300. package/lib/typescript/blake3.d.ts.map +1 -0
  301. package/lib/typescript/cipher.d.ts +60 -0
  302. package/lib/typescript/cipher.d.ts.map +1 -0
  303. package/lib/typescript/ec.d.ts +13 -0
  304. package/lib/typescript/ec.d.ts.map +1 -0
  305. package/lib/typescript/ed.d.ts +43 -0
  306. package/lib/typescript/ed.d.ts.map +1 -0
  307. package/lib/typescript/expo-plugin/@types.d.ts +8 -0
  308. package/lib/typescript/expo-plugin/@types.d.ts.map +1 -0
  309. package/lib/typescript/expo-plugin/withRNQC.d.ts +4 -0
  310. package/lib/typescript/expo-plugin/withRNQC.d.ts.map +1 -0
  311. package/lib/typescript/expo-plugin/withSodiumAndroid.d.ts +4 -0
  312. package/lib/typescript/expo-plugin/withSodiumAndroid.d.ts.map +1 -0
  313. package/lib/typescript/expo-plugin/withSodiumIos.d.ts +4 -0
  314. package/lib/typescript/expo-plugin/withSodiumIos.d.ts.map +1 -0
  315. package/lib/typescript/expo-plugin/withXCode.d.ts +9 -0
  316. package/lib/typescript/expo-plugin/withXCode.d.ts.map +1 -0
  317. package/lib/typescript/hash.d.ts +122 -0
  318. package/lib/typescript/hash.d.ts.map +1 -0
  319. package/lib/typescript/hmac.d.ts +66 -0
  320. package/lib/typescript/hmac.d.ts.map +1 -0
  321. package/lib/typescript/index.d.ts +110 -9
  322. package/lib/typescript/index.d.ts.map +1 -1
  323. package/lib/typescript/keys/classes.d.ts +79 -0
  324. package/lib/typescript/keys/classes.d.ts.map +1 -0
  325. package/lib/typescript/keys/generateKeyPair.d.ts +6 -0
  326. package/lib/typescript/keys/generateKeyPair.d.ts.map +1 -0
  327. package/lib/typescript/keys/index.d.ts +7 -0
  328. package/lib/typescript/keys/index.d.ts.map +1 -0
  329. package/lib/typescript/keys/signVerify.d.ts +1 -0
  330. package/lib/typescript/keys/signVerify.d.ts.map +1 -0
  331. package/lib/typescript/keys/utils.d.ts +34 -0
  332. package/lib/typescript/keys/utils.d.ts.map +1 -0
  333. package/lib/typescript/pbkdf2.d.ts +12 -0
  334. package/lib/typescript/pbkdf2.d.ts.map +1 -0
  335. package/lib/typescript/random.d.ts +11 -5
  336. package/lib/typescript/random.d.ts.map +1 -1
  337. package/lib/typescript/rsa.d.ts +10 -0
  338. package/lib/typescript/rsa.d.ts.map +1 -0
  339. package/lib/typescript/specs/blake3.nitro.d.ts +15 -0
  340. package/lib/typescript/specs/blake3.nitro.d.ts.map +1 -0
  341. package/lib/typescript/specs/cipher.nitro.d.ts +29 -0
  342. package/lib/typescript/specs/cipher.nitro.d.ts.map +1 -0
  343. package/lib/typescript/specs/ecKeyPair.nitro.d.ts +20 -0
  344. package/lib/typescript/specs/ecKeyPair.nitro.d.ts.map +1 -0
  345. package/lib/typescript/specs/edKeyPair.nitro.d.ts +17 -0
  346. package/lib/typescript/specs/edKeyPair.nitro.d.ts.map +1 -0
  347. package/lib/typescript/specs/hash.nitro.d.ts +13 -0
  348. package/lib/typescript/specs/hash.nitro.d.ts.map +1 -0
  349. package/lib/typescript/specs/hmac.nitro.d.ts +10 -0
  350. package/lib/typescript/specs/hmac.nitro.d.ts.map +1 -0
  351. package/lib/typescript/specs/keyObjectHandle.nitro.d.ts +14 -0
  352. package/lib/typescript/specs/keyObjectHandle.nitro.d.ts.map +1 -0
  353. package/lib/typescript/specs/pbkdf2.nitro.d.ts +9 -0
  354. package/lib/typescript/specs/pbkdf2.nitro.d.ts.map +1 -0
  355. package/lib/typescript/specs/rsaKeyPair.nitro.d.ts +20 -0
  356. package/lib/typescript/specs/rsaKeyPair.nitro.d.ts.map +1 -0
  357. package/lib/typescript/subtle.d.ts +17 -0
  358. package/lib/typescript/subtle.d.ts.map +1 -0
  359. package/lib/typescript/utils/cipher.d.ts +7 -0
  360. package/lib/typescript/utils/cipher.d.ts.map +1 -0
  361. package/lib/typescript/utils/conversion.d.ts +24 -2
  362. package/lib/typescript/utils/conversion.d.ts.map +1 -1
  363. package/lib/typescript/utils/errors.d.ts +7 -0
  364. package/lib/typescript/utils/errors.d.ts.map +1 -0
  365. package/lib/typescript/utils/hashnames.d.ts +13 -0
  366. package/lib/typescript/utils/hashnames.d.ts.map +1 -0
  367. package/lib/typescript/utils/index.d.ts +6 -5
  368. package/lib/typescript/utils/index.d.ts.map +1 -1
  369. package/lib/typescript/utils/noble.d.ts +19 -0
  370. package/lib/typescript/utils/noble.d.ts.map +1 -0
  371. package/lib/typescript/utils/types.d.ts +252 -2
  372. package/lib/typescript/utils/types.d.ts.map +1 -1
  373. package/lib/typescript/utils/validation.d.ts +13 -0
  374. package/lib/typescript/utils/validation.d.ts.map +1 -0
  375. package/nitrogen/generated/.gitattributes +1 -0
  376. package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +47 -4
  377. package/nitrogen/generated/android/QuickCrypto+autolinking.gradle +4 -3
  378. package/nitrogen/generated/android/QuickCryptoOnLoad.cpp +144 -0
  379. package/nitrogen/generated/android/QuickCryptoOnLoad.hpp +25 -0
  380. package/nitrogen/generated/android/kotlin/com/margelo/nitro/crypto/QuickCryptoOnLoad.kt +35 -0
  381. package/nitrogen/generated/ios/QuickCrypto+autolinking.rb +11 -8
  382. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.cpp +11 -3
  383. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.hpp +5 -3
  384. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Umbrella.hpp +16 -7
  385. package/nitrogen/generated/ios/QuickCryptoAutolinking.mm +135 -0
  386. package/nitrogen/generated/ios/QuickCryptoAutolinking.swift +12 -0
  387. package/nitrogen/generated/shared/c++/CFRGKeyPairType.hpp +84 -0
  388. package/nitrogen/generated/shared/c++/CipherArgs.hpp +86 -0
  389. package/nitrogen/generated/shared/c++/HybridBlake3Spec.cpp +28 -0
  390. package/nitrogen/generated/shared/c++/HybridBlake3Spec.hpp +76 -0
  391. package/nitrogen/generated/shared/c++/HybridCipherFactorySpec.cpp +21 -0
  392. package/nitrogen/generated/shared/c++/HybridCipherFactorySpec.hpp +67 -0
  393. package/nitrogen/generated/shared/c++/HybridCipherSpec.cpp +28 -0
  394. package/nitrogen/generated/shared/c++/HybridCipherSpec.hpp +76 -0
  395. package/nitrogen/generated/shared/c++/HybridEcKeyPairSpec.cpp +29 -0
  396. package/nitrogen/generated/shared/c++/HybridEcKeyPairSpec.hpp +77 -0
  397. package/nitrogen/generated/shared/c++/HybridEdKeyPairSpec.cpp +30 -0
  398. package/nitrogen/generated/shared/c++/HybridEdKeyPairSpec.hpp +75 -0
  399. package/nitrogen/generated/shared/c++/HybridHashSpec.cpp +26 -0
  400. package/nitrogen/generated/shared/c++/HybridHashSpec.hpp +75 -0
  401. package/nitrogen/generated/shared/c++/HybridHmacSpec.cpp +23 -0
  402. package/nitrogen/generated/shared/c++/HybridHmacSpec.hpp +66 -0
  403. package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.cpp +26 -0
  404. package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.hpp +92 -0
  405. package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.cpp +22 -0
  406. package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.hpp +66 -0
  407. package/nitrogen/generated/shared/c++/HybridRandomSpec.cpp +2 -3
  408. package/nitrogen/generated/shared/c++/HybridRandomSpec.hpp +9 -6
  409. package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.cpp +29 -0
  410. package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.hpp +77 -0
  411. package/nitrogen/generated/shared/c++/JWK.hpp +161 -0
  412. package/nitrogen/generated/shared/c++/JWKkty.hpp +84 -0
  413. package/nitrogen/generated/shared/c++/JWKuse.hpp +76 -0
  414. package/nitrogen/generated/shared/c++/KFormatType.hpp +63 -0
  415. package/nitrogen/generated/shared/c++/KeyDetail.hpp +92 -0
  416. package/nitrogen/generated/shared/c++/KeyEncoding.hpp +64 -0
  417. package/nitrogen/generated/shared/c++/KeyObject.hpp +67 -0
  418. package/nitrogen/generated/shared/c++/KeyType.hpp +63 -0
  419. package/nitrogen/generated/shared/c++/KeyUsage.hpp +116 -0
  420. package/nitrogen/generated/shared/c++/NamedCurve.hpp +80 -0
  421. package/package.json +66 -39
  422. package/src/blake3.ts +123 -0
  423. package/src/cipher.ts +335 -0
  424. package/src/ec.ts +432 -0
  425. package/src/ed.ts +256 -0
  426. package/src/expo-plugin/@types.ts +7 -0
  427. package/src/expo-plugin/withRNQC.ts +23 -0
  428. package/src/expo-plugin/withSodiumAndroid.ts +24 -0
  429. package/src/expo-plugin/withSodiumIos.ts +30 -0
  430. package/src/expo-plugin/withXCode.ts +55 -0
  431. package/src/hash.ts +274 -0
  432. package/src/hmac.ts +135 -0
  433. package/src/index.ts +32 -29
  434. package/src/keys/classes.ts +317 -0
  435. package/src/keys/generateKeyPair.ts +145 -0
  436. package/src/keys/index.ts +52 -0
  437. package/src/keys/signVerify.ts +39 -0
  438. package/src/keys/utils.ts +190 -0
  439. package/src/pbkdf2.ts +154 -0
  440. package/src/random.ts +26 -23
  441. package/src/rsa.ts +176 -0
  442. package/src/specs/blake3.nitro.ts +12 -0
  443. package/src/specs/cipher.nitro.ts +25 -0
  444. package/src/specs/ecKeyPair.nitro.ts +38 -0
  445. package/src/specs/edKeyPair.nitro.ts +43 -0
  446. package/src/specs/hash.nitro.ts +10 -0
  447. package/src/specs/hmac.nitro.ts +7 -0
  448. package/src/specs/keyObjectHandle.nitro.ts +31 -0
  449. package/src/specs/pbkdf2.nitro.ts +18 -0
  450. package/src/specs/random.nitro.ts +2 -2
  451. package/src/specs/rsaKeyPair.nitro.ts +33 -0
  452. package/src/subtle.ts +614 -0
  453. package/src/utils/cipher.ts +60 -0
  454. package/src/utils/conversion.ts +143 -9
  455. package/src/utils/errors.ts +15 -0
  456. package/src/utils/hashnames.ts +98 -0
  457. package/src/utils/index.ts +6 -6
  458. package/src/utils/noble.ts +85 -0
  459. package/src/utils/types.ts +423 -3
  460. package/src/utils/validation.ts +130 -0
  461. package/ios/QuickCryptoOnLoad.mm +0 -19
  462. package/lib/module/package.json +0 -1
@@ -0,0 +1,24 @@
1
+ #include <openssl/evp.h>
2
+
3
+ #include "HybridPbkdf2Spec.hpp"
4
+ #include "fastpbkdf2.h"
5
+
6
+ namespace margelo::nitro::crypto {
7
+
8
+ using namespace facebook;
9
+
10
+ class HybridPbkdf2 : public HybridPbkdf2Spec {
11
+ public:
12
+ HybridPbkdf2() : HybridObject(TAG) {}
13
+
14
+ public:
15
+ // Methods
16
+ std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> pbkdf2(const std::shared_ptr<ArrayBuffer>& password,
17
+ const std::shared_ptr<ArrayBuffer>& salt, double iterations, double keylen,
18
+ const std::string& digest) override;
19
+
20
+ std::shared_ptr<ArrayBuffer> pbkdf2Sync(const std::shared_ptr<ArrayBuffer>& password, const std::shared_ptr<ArrayBuffer>& salt,
21
+ double iterations, double keylen, const std::string& digest) override;
22
+ };
23
+
24
+ } // namespace margelo::nitro::crypto
@@ -1,34 +1,48 @@
1
- #include "HybridRandom.hpp"
2
-
3
1
  #include <openssl/err.h>
4
2
  #include <openssl/rand.h>
5
3
 
6
- namespace margelo::crypto {
4
+ #include "HybridRandom.hpp"
5
+ #include "Utils.hpp"
7
6
 
8
- using namespace margelo::nitro;
9
- using namespace margelo::nitro::crypto;
7
+ namespace margelo::nitro::crypto {
10
8
 
11
- std::future<std::shared_ptr<ArrayBuffer>> HybridRandom::randomFill(const std::shared_ptr<ArrayBuffer>& buffer, double dOffset,
12
- double dSize) {
13
- size_t size = checkSize(dSize);
14
- // copy the JSArrayBuffer that we do not own into a NativeArrayBuffer that we do own, before passing to sync function
15
- uint8_t* data = new uint8_t[size];
16
- memcpy(data, buffer.get()->data(), size);
17
- std::shared_ptr<ArrayBuffer> nativeBuffer = std::make_shared<NativeArrayBuffer>(data, size, false);
9
+ size_t checkSize(double size) {
10
+ if (!CheckIsUint32(size)) {
11
+ throw std::runtime_error("size must be uint32");
12
+ }
13
+ if (static_cast<uint32_t>(size) > pow(2, 31) - 1) {
14
+ throw std::runtime_error("size must be less than 2^31 - 1");
15
+ }
16
+ return static_cast<size_t>(size);
17
+ }
18
18
 
19
- return std::async(std::launch::async,
20
- [this, nativeBuffer, dOffset, dSize]() { return this->randomFillSync(nativeBuffer, dOffset, dSize); });
19
+ size_t checkOffset(double size, double offset) {
20
+ if (!CheckIsUint32(offset)) {
21
+ throw std::runtime_error("offset must be uint32");
22
+ }
23
+ if (offset > size) {
24
+ throw std::runtime_error("offset must be less than size");
25
+ }
26
+ return static_cast<size_t>(offset);
27
+ }
28
+
29
+ std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> HybridRandom::randomFill(const std::shared_ptr<ArrayBuffer>& buffer, double dOffset,
30
+ double dSize) {
31
+ // get owned NativeArrayBuffer before passing to sync function
32
+ auto nativeBuffer = ToNativeArrayBuffer(buffer);
33
+
34
+ return Promise<std::shared_ptr<ArrayBuffer>>::async(
35
+ [this, nativeBuffer, dOffset, dSize]() { return this->randomFillSync(nativeBuffer, dOffset, dSize); });
21
36
  };
22
37
 
23
38
  std::shared_ptr<ArrayBuffer> HybridRandom::randomFillSync(const std::shared_ptr<ArrayBuffer>& buffer, double dOffset, double dSize) {
24
39
  size_t size = checkSize(dSize);
25
40
  size_t offset = checkOffset(dSize, dOffset);
26
41
  uint8_t* data = buffer.get()->data();
27
-
28
42
  if (RAND_bytes(data + offset, (int)size) != 1) {
29
- throw std::runtime_error("error calling RAND_bytes" + std::to_string(ERR_get_error()));
43
+ throw std::runtime_error("error calling RAND_bytes: " + std::to_string(ERR_get_error()));
30
44
  }
31
- return std::make_shared<NativeArrayBuffer>(data, size, false);
45
+ return buffer;
32
46
  };
33
47
 
34
- } // namespace margelo::crypto
48
+ } // namespace margelo::nitro::crypto
@@ -1,44 +1,32 @@
1
- #include <NitroModules/ArrayBuffer.hpp>
2
1
  #include <cmath>
3
2
  #include <future>
3
+ #include <iostream>
4
+ #include <memory>
4
5
 
5
6
  #include "HybridRandomSpec.hpp"
6
7
 
7
- #ifdef ANDROID
8
- #include "utils/Utils.hpp"
9
- #else
10
- #include "Utils.hpp"
11
- #endif
8
+ namespace margelo::nitro::crypto {
12
9
 
13
- namespace margelo::crypto {
14
-
15
- using namespace margelo::nitro;
16
- using namespace margelo::nitro::crypto;
10
+ using namespace facebook;
17
11
 
18
12
  class HybridRandom : public HybridRandomSpec {
19
- public:
20
- std::future<std::shared_ptr<ArrayBuffer>> randomFill(const std::shared_ptr<ArrayBuffer>& buffer, double dOffset, double dSize) override;
13
+ public:
14
+ HybridRandom() : HybridObject(TAG) {}
15
+
16
+ public:
17
+ // Methods
18
+ std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> randomFill(const std::shared_ptr<ArrayBuffer>& buffer, double dOffset,
19
+ double dSize) override;
20
+
21
21
  std::shared_ptr<ArrayBuffer> randomFillSync(const std::shared_ptr<ArrayBuffer>& buffer, double dOffset, double dSize) override;
22
22
  };
23
23
 
24
- inline size_t checkSize(double size) {
25
- if (!CheckIsUint32(size)) {
26
- throw std::runtime_error("size must be uint32");
27
- }
28
- if (static_cast<uint32_t>(size) > pow(2, 31) - 1) {
29
- throw std::runtime_error("size must be less than 2^31 - 1");
30
- }
31
- return static_cast<size_t>(size);
32
- }
33
-
34
- inline size_t checkOffset(double size, double offset) {
35
- if (!CheckIsUint32(offset)) {
36
- throw std::runtime_error("offset must be uint32");
37
- }
38
- if (offset > size) {
39
- throw std::runtime_error("offset must be less than size");
24
+ inline void printData(std::string name, uint8_t* data, size_t size) {
25
+ std::cout << "data - " << name << std::endl;
26
+ for (size_t i = 0; i < size; i++) {
27
+ printf("%u ", data[i]);
40
28
  }
41
- return static_cast<size_t>(offset);
29
+ printf("\n");
42
30
  }
43
31
 
44
- } // namespace margelo::crypto
32
+ } // namespace margelo::nitro::crypto
@@ -0,0 +1,154 @@
1
+ #include <NitroModules/ArrayBuffer.hpp>
2
+ #include <NitroModules/Promise.hpp>
3
+ #include <memory>
4
+ #include <openssl/bio.h>
5
+ #include <openssl/buffer.h>
6
+ #include <openssl/err.h>
7
+ #include <openssl/evp.h>
8
+ #include <openssl/pem.h>
9
+ #include <openssl/rsa.h>
10
+ #include <stdexcept>
11
+ #include <string>
12
+
13
+ #include "HybridRsaKeyPair.hpp"
14
+ #include "Utils.hpp"
15
+
16
+ namespace margelo::nitro::crypto {
17
+
18
+ std::shared_ptr<Promise<void>> HybridRsaKeyPair::generateKeyPair() {
19
+ return Promise<void>::async([this]() { this->generateKeyPairSync(); });
20
+ }
21
+
22
+ void HybridRsaKeyPair::generateKeyPairSync() {
23
+ // Clean up existing key if any
24
+ if (this->pkey != nullptr) {
25
+ EVP_PKEY_free(this->pkey);
26
+ this->pkey = nullptr;
27
+ }
28
+
29
+ // Create key generation context
30
+ std::unique_ptr<EVP_PKEY_CTX, decltype(&EVP_PKEY_CTX_free)> ctx(EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, nullptr), EVP_PKEY_CTX_free);
31
+
32
+ if (!ctx) {
33
+ throw std::runtime_error("Failed to create RSA key generation context");
34
+ }
35
+
36
+ if (EVP_PKEY_keygen_init(ctx.get()) <= 0) {
37
+ throw std::runtime_error("Failed to initialize RSA key generation");
38
+ }
39
+
40
+ // Set modulus length
41
+ if (EVP_PKEY_CTX_set_rsa_keygen_bits(ctx.get(), this->modulusLength) <= 0) {
42
+ throw std::runtime_error("Failed to set RSA modulus length");
43
+ }
44
+
45
+ // Set public exponent
46
+ std::unique_ptr<BIGNUM, decltype(&BN_free)> exponent(BN_new(), BN_free);
47
+ if (!exponent) {
48
+ throw std::runtime_error("Failed to create BIGNUM for public exponent");
49
+ }
50
+
51
+ // Default to 65537 (0x10001) if no public exponent is set
52
+ if (this->publicExponent.empty()) {
53
+ if (BN_set_word(exponent.get(), RSA_F4) != 1) {
54
+ throw std::runtime_error("Failed to set default public exponent");
55
+ }
56
+ } else {
57
+ if (BN_bin2bn(this->publicExponent.data(), this->publicExponent.size(), exponent.get()) == nullptr) {
58
+ throw std::runtime_error("Failed to convert public exponent to BIGNUM");
59
+ }
60
+ }
61
+
62
+ if (EVP_PKEY_CTX_set1_rsa_keygen_pubexp(ctx.get(), exponent.get()) <= 0) {
63
+ throw std::runtime_error("Failed to set RSA public exponent");
64
+ }
65
+
66
+ // Generate the key pair
67
+ EVP_PKEY* raw_pkey = nullptr;
68
+ if (EVP_PKEY_keygen(ctx.get(), &raw_pkey) <= 0) {
69
+ throw std::runtime_error("Failed to generate RSA key pair");
70
+ }
71
+
72
+ this->pkey = raw_pkey;
73
+ }
74
+
75
+ void HybridRsaKeyPair::setModulusLength(double modulusLength) {
76
+ this->modulusLength = static_cast<int>(modulusLength);
77
+ }
78
+
79
+ void HybridRsaKeyPair::setPublicExponent(const std::shared_ptr<ArrayBuffer>& publicExponent) {
80
+ if (publicExponent && publicExponent->size() > 0) {
81
+ const uint8_t* data = publicExponent->data();
82
+ this->publicExponent.assign(data, data + publicExponent->size());
83
+ }
84
+ }
85
+
86
+ void HybridRsaKeyPair::setHashAlgorithm(const std::string& hashAlgorithm) {
87
+ this->hashAlgorithm = hashAlgorithm;
88
+ }
89
+
90
+ std::shared_ptr<ArrayBuffer> HybridRsaKeyPair::getPublicKey() {
91
+ this->checkKeyPair();
92
+
93
+ // Export as DER format using direct OpenSSL calls
94
+ BIO* bio = BIO_new(BIO_s_mem());
95
+ if (!bio) {
96
+ throw std::runtime_error("Failed to create BIO for public key export");
97
+ }
98
+
99
+ if (i2d_PUBKEY_bio(bio, this->pkey) != 1) {
100
+ BIO_free(bio);
101
+ throw std::runtime_error("Failed to export public key to DER format");
102
+ }
103
+
104
+ BUF_MEM* mem;
105
+ BIO_get_mem_ptr(bio, &mem);
106
+
107
+ // Create a string from the DER data and use ToNativeArrayBuffer utility
108
+ std::string derData(mem->data, mem->length);
109
+ BIO_free(bio);
110
+
111
+ return ToNativeArrayBuffer(derData);
112
+ }
113
+
114
+ std::shared_ptr<ArrayBuffer> HybridRsaKeyPair::getPrivateKey() {
115
+ this->checkKeyPair();
116
+
117
+ // Export as DER format in PKCS8 format using direct OpenSSL calls
118
+ BIO* bio = BIO_new(BIO_s_mem());
119
+ if (!bio) {
120
+ throw std::runtime_error("Failed to create BIO for private key export");
121
+ }
122
+
123
+ if (i2d_PKCS8PrivateKey_bio(bio, this->pkey, nullptr, nullptr, 0, nullptr, nullptr) != 1) {
124
+ BIO_free(bio);
125
+ throw std::runtime_error("Failed to export private key to DER PKCS8 format");
126
+ }
127
+
128
+ BUF_MEM* mem;
129
+ BIO_get_mem_ptr(bio, &mem);
130
+
131
+ // Create a string from the DER data and use ToNativeArrayBuffer utility
132
+ std::string derData(mem->data, mem->length);
133
+ BIO_free(bio);
134
+
135
+ return ToNativeArrayBuffer(derData);
136
+ }
137
+
138
+ KeyObject HybridRsaKeyPair::importKey(const std::string& /* format */, const std::shared_ptr<ArrayBuffer>& /* keyData */,
139
+ const std::string& /* algorithm */, bool /* extractable */,
140
+ const std::vector<std::string>& /* keyUsages */) {
141
+ throw std::runtime_error("HybridRsaKeyPair::importKey() is not yet implemented");
142
+ }
143
+
144
+ std::shared_ptr<ArrayBuffer> HybridRsaKeyPair::exportKey(const KeyObject& /* key */, const std::string& /* format */) {
145
+ throw std::runtime_error("HybridRsaKeyPair::exportKey() is not yet implemented");
146
+ }
147
+
148
+ void HybridRsaKeyPair::checkKeyPair() {
149
+ if (this->pkey == nullptr) {
150
+ throw std::runtime_error("RSA KeyPair not initialized");
151
+ }
152
+ }
153
+
154
+ } // namespace margelo::nitro::crypto
@@ -0,0 +1,43 @@
1
+ #pragma once
2
+
3
+ #include "HybridRsaKeyPairSpec.hpp"
4
+ #include <NitroModules/ArrayBuffer.hpp>
5
+ #include <NitroModules/Promise.hpp>
6
+ #include <memory>
7
+ #include <openssl/evp.h>
8
+ #include <openssl/rsa.h>
9
+ #include <string>
10
+ #include <vector>
11
+
12
+ namespace margelo::nitro::crypto {
13
+
14
+ class HybridRsaKeyPair : public HybridRsaKeyPairSpec {
15
+ public:
16
+ HybridRsaKeyPair() : HybridObject(TAG), pkey(nullptr), modulusLength(2048), hashAlgorithm("SHA-256") {}
17
+ ~HybridRsaKeyPair() {
18
+ if (pkey) {
19
+ EVP_PKEY_free(pkey);
20
+ }
21
+ }
22
+
23
+ std::shared_ptr<Promise<void>> generateKeyPair() override;
24
+ void generateKeyPairSync() override;
25
+ void setModulusLength(double modulusLength) override;
26
+ void setPublicExponent(const std::shared_ptr<ArrayBuffer>& publicExponent) override;
27
+ void setHashAlgorithm(const std::string& hashAlgorithm) override;
28
+ std::shared_ptr<ArrayBuffer> getPublicKey() override;
29
+ std::shared_ptr<ArrayBuffer> getPrivateKey() override;
30
+ KeyObject importKey(const std::string& format, const std::shared_ptr<ArrayBuffer>& keyData, const std::string& algorithm,
31
+ bool extractable, const std::vector<std::string>& keyUsages) override;
32
+ std::shared_ptr<ArrayBuffer> exportKey(const KeyObject& key, const std::string& format) override;
33
+
34
+ private:
35
+ EVP_PKEY* pkey;
36
+ int modulusLength;
37
+ std::vector<unsigned char> publicExponent;
38
+ std::string hashAlgorithm;
39
+
40
+ void checkKeyPair();
41
+ };
42
+
43
+ } // namespace margelo::nitro::crypto
@@ -0,0 +1,68 @@
1
+ #include <utility>
2
+
3
+ // Windows 8+ does not like abort() in Release mode
4
+ #ifdef _WIN32
5
+ #define ABORT_NO_BACKTRACE() _exit(134)
6
+ #else
7
+ #define ABORT_NO_BACKTRACE() abort()
8
+ #endif
9
+
10
+ struct AssertionInfo {
11
+ const char* file_line; // filename:line
12
+ const char* message;
13
+ const char* function;
14
+ };
15
+
16
+ inline void Abort() {
17
+ // DumpBacktrace(stderr);
18
+ fflush(stderr);
19
+ ABORT_NO_BACKTRACE();
20
+ }
21
+
22
+ inline void Assert(const AssertionInfo& info) {
23
+ // std::string name = GetHumanReadableProcessName();
24
+
25
+ fprintf(stderr, "%s:%s%s Assertion `%s' failed.\n", info.file_line, info.function, *info.function ? ":" : "", info.message);
26
+ fflush(stderr);
27
+
28
+ Abort();
29
+ }
30
+
31
+ // Macros stolen from Node
32
+ #define ERROR_AND_ABORT(expr) \
33
+ do { \
34
+ /* Make sure that this struct does not end up in inline code, but */ \
35
+ /* rather in a read-only data section when modifying this code. */ \
36
+ static const AssertionInfo args = {__FILE__ ":" STRINGIFY(__LINE__), #expr, PRETTY_FUNCTION_NAME}; \
37
+ Assert(args); \
38
+ } while (0)
39
+
40
+ #ifdef __GNUC__
41
+ #define LIKELY(expr) __builtin_expect(!!(expr), 1)
42
+ #define UNLIKELY(expr) __builtin_expect(!!(expr), 0)
43
+ #define PRETTY_FUNCTION_NAME __PRETTY_FUNCTION__
44
+ #else
45
+ #define LIKELY(expr) expr
46
+ #define UNLIKELY(expr) expr
47
+ #define PRETTY_FUNCTION_NAME ""
48
+ #endif
49
+
50
+ #define STRINGIFY_(x) #x
51
+ #define STRINGIFY(x) STRINGIFY_(x)
52
+
53
+ #define CHECK(expr) \
54
+ do { \
55
+ if (UNLIKELY(!(expr))) { \
56
+ ERROR_AND_ABORT(expr); \
57
+ } \
58
+ } while (0)
59
+
60
+ #define CHECK_EQ(a, b) CHECK((a) == (b))
61
+ #define CHECK_GE(a, b) CHECK((a) >= (b))
62
+ #define CHECK_GT(a, b) CHECK((a) > (b))
63
+ #define CHECK_LE(a, b) CHECK((a) <= (b))
64
+ #define CHECK_LT(a, b) CHECK((a) < (b))
65
+ #define CHECK_NE(a, b) CHECK((a) != (b))
66
+ #define CHECK_NULL(val) CHECK((val) == nullptr)
67
+ #define CHECK_NOT_NULL(val) CHECK((val) != nullptr)
68
+ #define CHECK_IMPLIES(a, b) CHECK(!(a) || (b))
@@ -1,4 +1,48 @@
1
+ #pragma once
2
+
3
+ #include <algorithm>
4
+ #include <cctype>
1
5
  #include <limits>
6
+ #include <openssl/err.h>
7
+ #include <string>
8
+
9
+ #include "Macros.hpp"
10
+ #include <NitroModules/ArrayBuffer.hpp>
11
+
12
+ namespace margelo::nitro::crypto {
13
+
14
+ // Function to get the last OpenSSL error message and clear the error stack
15
+ inline std::string getOpenSSLError() {
16
+ unsigned long errCode = ERR_get_error();
17
+ if (errCode == 0) {
18
+ return "";
19
+ }
20
+ char errStr[256];
21
+ ERR_error_string_n(errCode, errStr, sizeof(errStr));
22
+ // Clear any remaining errors from the error stack to prevent pollution
23
+ ERR_clear_error();
24
+ return std::string(errStr);
25
+ }
26
+
27
+ // Function to clear OpenSSL error stack without getting error message
28
+ inline void clearOpenSSLErrors() {
29
+ ERR_clear_error();
30
+ }
31
+
32
+ // copy a JSArrayBuffer that we do not own into a NativeArrayBuffer that we do own
33
+ inline std::shared_ptr<margelo::nitro::NativeArrayBuffer> ToNativeArrayBuffer(const std::shared_ptr<margelo::nitro::ArrayBuffer>& buffer) {
34
+ size_t bufferSize = buffer.get()->size();
35
+ uint8_t* data = new uint8_t[bufferSize];
36
+ memcpy(data, buffer.get()->data(), bufferSize);
37
+ return std::make_shared<margelo::nitro::NativeArrayBuffer>(data, bufferSize, [=]() { delete[] data; });
38
+ }
39
+
40
+ inline std::shared_ptr<margelo::nitro::NativeArrayBuffer> ToNativeArrayBuffer(std::string str) {
41
+ size_t size = str.size();
42
+ uint8_t* data = new uint8_t[size];
43
+ memcpy(data, str.data(), size);
44
+ return std::make_shared<margelo::nitro::NativeArrayBuffer>(data, size, [=]() { delete[] data; });
45
+ }
2
46
 
3
47
  inline bool CheckIsUint32(double value) {
4
48
  return (value >= std::numeric_limits<uint32_t>::lowest() && value <= std::numeric_limits<uint32_t>::max());
@@ -6,4 +50,12 @@ inline bool CheckIsUint32(double value) {
6
50
 
7
51
  inline bool CheckIsInt32(double value) {
8
52
  return (value >= std::numeric_limits<int32_t>::lowest() && value <= std::numeric_limits<int32_t>::max());
9
- }
53
+ }
54
+
55
+ // Function to convert a string to lowercase
56
+ inline std::string toLower(std::string s) {
57
+ std::transform(s.begin(), s.end(), s.begin(), [](unsigned char c) { return static_cast<char>(std::tolower(c)); });
58
+ return s;
59
+ }
60
+
61
+ } // namespace margelo::nitro::crypto
@@ -0,0 +1,2 @@
1
+ [target.wasm32-wasip1]
2
+ runner = "wasmtime"
@@ -0,0 +1,2 @@
1
+ # CMakeLists.txt whitespace fixups
2
+ 3e14f865d30271c74fc68d417af488ea91b66d48
@@ -0,0 +1,38 @@
1
+ #! /usr/bin/env python3
2
+
3
+ from pathlib import Path
4
+ import platform
5
+ import shutil
6
+ import subprocess
7
+ import sys
8
+
9
+ ROOT = Path(__file__).parent.parent.parent
10
+ RUST_TARGET = sys.argv[1]
11
+
12
+ subprocess.run(
13
+ ["cargo", "build", "--target", sys.argv[1], "--release"], cwd=ROOT / "b3sum"
14
+ )
15
+
16
+ if platform.system() == "Windows":
17
+ original_exe_name = "b3sum.exe"
18
+ else:
19
+ original_exe_name = "b3sum"
20
+
21
+ if platform.system() == "Windows":
22
+ new_exe_name = "b3sum_windows_x64_bin.exe"
23
+ elif platform.system() == "Darwin":
24
+ new_exe_name = "b3sum_macos_x64_bin"
25
+ elif platform.system() == "Linux":
26
+ new_exe_name = "b3sum_linux_x64_bin"
27
+ else:
28
+ raise RuntimeError("Unexpected platform: " + platform.system())
29
+
30
+ # Copy the built binary so that it has the upload name we want.
31
+ out_dir = ROOT / "b3sum/target" / RUST_TARGET / "release"
32
+ original_exe_path = str(out_dir / original_exe_name)
33
+ new_exe_path = str(out_dir / new_exe_name)
34
+ print("copying", repr(original_exe_path), "to", repr(new_exe_path))
35
+ shutil.copyfile(original_exe_path, new_exe_path)
36
+
37
+ # This lets the subsequent upload step get the filepath.
38
+ print("::set-output name=bin_path::" + new_exe_path)