react-native-quick-crypto 1.0.10 → 1.0.12

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 (293) hide show
  1. package/android/CMakeLists.txt +16 -0
  2. package/cpp/argon2/HybridArgon2.cpp +103 -0
  3. package/cpp/argon2/HybridArgon2.hpp +32 -0
  4. package/cpp/certificate/HybridCertificate.cpp +42 -0
  5. package/cpp/certificate/HybridCertificate.hpp +16 -0
  6. package/cpp/cipher/CCMCipher.cpp +4 -1
  7. package/cpp/cipher/ChaCha20Cipher.cpp +3 -1
  8. package/cpp/cipher/ChaCha20Poly1305Cipher.cpp +5 -5
  9. package/cpp/cipher/ChaCha20Poly1305Cipher.hpp +1 -2
  10. package/cpp/cipher/HybridCipher.cpp +68 -1
  11. package/cpp/cipher/HybridCipher.hpp +6 -0
  12. package/cpp/cipher/HybridRsaCipher.cpp +0 -13
  13. package/cpp/cipher/XChaCha20Poly1305Cipher.cpp +7 -5
  14. package/cpp/cipher/XChaCha20Poly1305Cipher.hpp +1 -2
  15. package/cpp/cipher/XSalsa20Cipher.cpp +4 -0
  16. package/cpp/cipher/XSalsa20Poly1305Cipher.cpp +7 -5
  17. package/cpp/cipher/XSalsa20Poly1305Cipher.hpp +1 -2
  18. package/cpp/dh/HybridDhKeyPair.cpp +179 -0
  19. package/cpp/dh/HybridDhKeyPair.hpp +37 -0
  20. package/cpp/dsa/HybridDsaKeyPair.cpp +128 -0
  21. package/cpp/dsa/HybridDsaKeyPair.hpp +32 -0
  22. package/cpp/ecdh/HybridECDH.cpp +42 -120
  23. package/cpp/ecdh/HybridECDH.hpp +1 -0
  24. package/cpp/keys/HybridKeyObjectHandle.cpp +150 -128
  25. package/cpp/keys/HybridKeyObjectHandle.hpp +6 -3
  26. package/cpp/keys/KeyObjectData.hpp +2 -0
  27. package/cpp/kmac/HybridKmac.cpp +83 -0
  28. package/cpp/kmac/HybridKmac.hpp +31 -0
  29. package/cpp/mldsa/HybridMlDsaKeyPair.cpp +11 -20
  30. package/cpp/mldsa/HybridMlDsaKeyPair.hpp +4 -2
  31. package/cpp/mlkem/HybridMlKemKeyPair.cpp +319 -0
  32. package/cpp/mlkem/HybridMlKemKeyPair.hpp +48 -0
  33. package/cpp/prime/HybridPrime.cpp +81 -0
  34. package/cpp/prime/HybridPrime.hpp +20 -0
  35. package/cpp/sign/SignUtils.hpp +9 -26
  36. package/cpp/utils/QuickCryptoUtils.cpp +44 -0
  37. package/cpp/utils/QuickCryptoUtils.hpp +39 -0
  38. package/cpp/x509/HybridX509Certificate.cpp +174 -0
  39. package/cpp/x509/HybridX509Certificate.hpp +51 -0
  40. package/lib/commonjs/argon2.js +39 -0
  41. package/lib/commonjs/argon2.js.map +1 -0
  42. package/lib/commonjs/certificate.js +35 -0
  43. package/lib/commonjs/certificate.js.map +1 -0
  44. package/lib/commonjs/cipher.js +23 -2
  45. package/lib/commonjs/cipher.js.map +1 -1
  46. package/lib/commonjs/dhKeyPair.js +109 -0
  47. package/lib/commonjs/dhKeyPair.js.map +1 -0
  48. package/lib/commonjs/dsa.js +92 -0
  49. package/lib/commonjs/dsa.js.map +1 -0
  50. package/lib/commonjs/ec.js +18 -18
  51. package/lib/commonjs/ec.js.map +1 -1
  52. package/lib/commonjs/ecdh.js +37 -0
  53. package/lib/commonjs/ecdh.js.map +1 -1
  54. package/lib/commonjs/ed.js +9 -9
  55. package/lib/commonjs/ed.js.map +1 -1
  56. package/lib/commonjs/hash.js +17 -12
  57. package/lib/commonjs/hash.js.map +1 -1
  58. package/lib/commonjs/hkdf.js.map +1 -1
  59. package/lib/commonjs/index.js +57 -0
  60. package/lib/commonjs/index.js.map +1 -1
  61. package/lib/commonjs/keys/classes.js +11 -9
  62. package/lib/commonjs/keys/classes.js.map +1 -1
  63. package/lib/commonjs/keys/generateKeyPair.js +11 -0
  64. package/lib/commonjs/keys/generateKeyPair.js.map +1 -1
  65. package/lib/commonjs/keys/index.js +24 -0
  66. package/lib/commonjs/keys/index.js.map +1 -1
  67. package/lib/commonjs/keys/signVerify.js +0 -2
  68. package/lib/commonjs/keys/signVerify.js.map +1 -1
  69. package/lib/commonjs/mlkem.js +219 -0
  70. package/lib/commonjs/mlkem.js.map +1 -0
  71. package/lib/commonjs/pbkdf2.js +18 -1
  72. package/lib/commonjs/pbkdf2.js.map +1 -1
  73. package/lib/commonjs/prime.js +84 -0
  74. package/lib/commonjs/prime.js.map +1 -0
  75. package/lib/commonjs/rsa.js +7 -7
  76. package/lib/commonjs/rsa.js.map +1 -1
  77. package/lib/commonjs/specs/argon2.nitro.js +6 -0
  78. package/lib/commonjs/specs/argon2.nitro.js.map +1 -0
  79. package/lib/commonjs/specs/certificate.nitro.js +6 -0
  80. package/lib/commonjs/specs/certificate.nitro.js.map +1 -0
  81. package/lib/commonjs/specs/dhKeyPair.nitro.js +6 -0
  82. package/lib/commonjs/specs/dhKeyPair.nitro.js.map +1 -0
  83. package/lib/commonjs/specs/dsaKeyPair.nitro.js +6 -0
  84. package/lib/commonjs/specs/dsaKeyPair.nitro.js.map +1 -0
  85. package/lib/commonjs/specs/kmac.nitro.js +6 -0
  86. package/lib/commonjs/specs/kmac.nitro.js.map +1 -0
  87. package/lib/commonjs/specs/mlKemKeyPair.nitro.js +6 -0
  88. package/lib/commonjs/specs/mlKemKeyPair.nitro.js.map +1 -0
  89. package/lib/commonjs/specs/prime.nitro.js +6 -0
  90. package/lib/commonjs/specs/prime.nitro.js.map +1 -0
  91. package/lib/commonjs/specs/x509certificate.nitro.js +6 -0
  92. package/lib/commonjs/specs/x509certificate.nitro.js.map +1 -0
  93. package/lib/commonjs/subtle.js +385 -114
  94. package/lib/commonjs/subtle.js.map +1 -1
  95. package/lib/commonjs/utils/conversion.js +3 -3
  96. package/lib/commonjs/utils/conversion.js.map +1 -1
  97. package/lib/commonjs/utils/hashnames.js +31 -0
  98. package/lib/commonjs/utils/hashnames.js.map +1 -1
  99. package/lib/commonjs/utils/types.js.map +1 -1
  100. package/lib/commonjs/x509certificate.js +189 -0
  101. package/lib/commonjs/x509certificate.js.map +1 -0
  102. package/lib/module/argon2.js +34 -0
  103. package/lib/module/argon2.js.map +1 -0
  104. package/lib/module/certificate.js +30 -0
  105. package/lib/module/certificate.js.map +1 -0
  106. package/lib/module/cipher.js +23 -3
  107. package/lib/module/cipher.js.map +1 -1
  108. package/lib/module/dhKeyPair.js +102 -0
  109. package/lib/module/dhKeyPair.js.map +1 -0
  110. package/lib/module/dsa.js +85 -0
  111. package/lib/module/dsa.js.map +1 -0
  112. package/lib/module/ec.js +6 -6
  113. package/lib/module/ec.js.map +1 -1
  114. package/lib/module/ecdh.js +37 -0
  115. package/lib/module/ecdh.js.map +1 -1
  116. package/lib/module/ed.js +1 -1
  117. package/lib/module/ed.js.map +1 -1
  118. package/lib/module/hash.js +17 -12
  119. package/lib/module/hash.js.map +1 -1
  120. package/lib/module/hkdf.js.map +1 -1
  121. package/lib/module/index.js +15 -0
  122. package/lib/module/index.js.map +1 -1
  123. package/lib/module/keys/classes.js +11 -9
  124. package/lib/module/keys/classes.js.map +1 -1
  125. package/lib/module/keys/generateKeyPair.js +11 -0
  126. package/lib/module/keys/generateKeyPair.js.map +1 -1
  127. package/lib/module/keys/index.js +25 -1
  128. package/lib/module/keys/index.js.map +1 -1
  129. package/lib/module/keys/signVerify.js +0 -2
  130. package/lib/module/keys/signVerify.js.map +1 -1
  131. package/lib/module/mlkem.js +211 -0
  132. package/lib/module/mlkem.js.map +1 -0
  133. package/lib/module/pbkdf2.js +18 -1
  134. package/lib/module/pbkdf2.js.map +1 -1
  135. package/lib/module/prime.js +77 -0
  136. package/lib/module/prime.js.map +1 -0
  137. package/lib/module/rsa.js +1 -1
  138. package/lib/module/rsa.js.map +1 -1
  139. package/lib/module/specs/argon2.nitro.js +4 -0
  140. package/lib/module/specs/argon2.nitro.js.map +1 -0
  141. package/lib/module/specs/certificate.nitro.js +4 -0
  142. package/lib/module/specs/certificate.nitro.js.map +1 -0
  143. package/lib/module/specs/dhKeyPair.nitro.js +4 -0
  144. package/lib/module/specs/dhKeyPair.nitro.js.map +1 -0
  145. package/lib/module/specs/dsaKeyPair.nitro.js +4 -0
  146. package/lib/module/specs/dsaKeyPair.nitro.js.map +1 -0
  147. package/lib/module/specs/kmac.nitro.js +4 -0
  148. package/lib/module/specs/kmac.nitro.js.map +1 -0
  149. package/lib/module/specs/mlKemKeyPair.nitro.js +4 -0
  150. package/lib/module/specs/mlKemKeyPair.nitro.js.map +1 -0
  151. package/lib/module/specs/prime.nitro.js +4 -0
  152. package/lib/module/specs/prime.nitro.js.map +1 -0
  153. package/lib/module/specs/x509certificate.nitro.js +4 -0
  154. package/lib/module/specs/x509certificate.nitro.js.map +1 -0
  155. package/lib/module/subtle.js +386 -116
  156. package/lib/module/subtle.js.map +1 -1
  157. package/lib/module/utils/conversion.js +3 -4
  158. package/lib/module/utils/conversion.js.map +1 -1
  159. package/lib/module/utils/hashnames.js +31 -0
  160. package/lib/module/utils/hashnames.js.map +1 -1
  161. package/lib/module/utils/types.js.map +1 -1
  162. package/lib/module/x509certificate.js +184 -0
  163. package/lib/module/x509certificate.js.map +1 -0
  164. package/lib/tsconfig.tsbuildinfo +1 -1
  165. package/lib/typescript/argon2.d.ts +16 -0
  166. package/lib/typescript/argon2.d.ts.map +1 -0
  167. package/lib/typescript/certificate.d.ts +8 -0
  168. package/lib/typescript/certificate.d.ts.map +1 -0
  169. package/lib/typescript/cipher.d.ts +15 -0
  170. package/lib/typescript/cipher.d.ts.map +1 -1
  171. package/lib/typescript/dhKeyPair.d.ts +19 -0
  172. package/lib/typescript/dhKeyPair.d.ts.map +1 -0
  173. package/lib/typescript/dsa.d.ts +19 -0
  174. package/lib/typescript/dsa.d.ts.map +1 -0
  175. package/lib/typescript/ec.d.ts +1 -1
  176. package/lib/typescript/ec.d.ts.map +1 -1
  177. package/lib/typescript/ecdh.d.ts +3 -0
  178. package/lib/typescript/ecdh.d.ts.map +1 -1
  179. package/lib/typescript/ed.d.ts +1 -1
  180. package/lib/typescript/ed.d.ts.map +1 -1
  181. package/lib/typescript/hash.d.ts.map +1 -1
  182. package/lib/typescript/hkdf.d.ts +2 -6
  183. package/lib/typescript/hkdf.d.ts.map +1 -1
  184. package/lib/typescript/index.d.ts +32 -4
  185. package/lib/typescript/index.d.ts.map +1 -1
  186. package/lib/typescript/keys/classes.d.ts +7 -5
  187. package/lib/typescript/keys/classes.d.ts.map +1 -1
  188. package/lib/typescript/keys/generateKeyPair.d.ts.map +1 -1
  189. package/lib/typescript/keys/index.d.ts +2 -2
  190. package/lib/typescript/keys/index.d.ts.map +1 -1
  191. package/lib/typescript/keys/signVerify.d.ts.map +1 -1
  192. package/lib/typescript/mlkem.d.ts +30 -0
  193. package/lib/typescript/mlkem.d.ts.map +1 -0
  194. package/lib/typescript/pbkdf2.d.ts +2 -2
  195. package/lib/typescript/pbkdf2.d.ts.map +1 -1
  196. package/lib/typescript/prime.d.ts +19 -0
  197. package/lib/typescript/prime.d.ts.map +1 -0
  198. package/lib/typescript/rsa.d.ts +1 -1
  199. package/lib/typescript/rsa.d.ts.map +1 -1
  200. package/lib/typescript/specs/argon2.nitro.d.ts +9 -0
  201. package/lib/typescript/specs/argon2.nitro.d.ts.map +1 -0
  202. package/lib/typescript/specs/certificate.nitro.d.ts +10 -0
  203. package/lib/typescript/specs/certificate.nitro.d.ts.map +1 -0
  204. package/lib/typescript/specs/cipher.nitro.d.ts +9 -0
  205. package/lib/typescript/specs/cipher.nitro.d.ts.map +1 -1
  206. package/lib/typescript/specs/dhKeyPair.nitro.d.ts +14 -0
  207. package/lib/typescript/specs/dhKeyPair.nitro.d.ts.map +1 -0
  208. package/lib/typescript/specs/dsaKeyPair.nitro.d.ts +13 -0
  209. package/lib/typescript/specs/dsaKeyPair.nitro.d.ts.map +1 -0
  210. package/lib/typescript/specs/ecdh.nitro.d.ts +1 -0
  211. package/lib/typescript/specs/ecdh.nitro.d.ts.map +1 -1
  212. package/lib/typescript/specs/keyObjectHandle.nitro.d.ts +1 -0
  213. package/lib/typescript/specs/keyObjectHandle.nitro.d.ts.map +1 -1
  214. package/lib/typescript/specs/kmac.nitro.d.ts +10 -0
  215. package/lib/typescript/specs/kmac.nitro.d.ts.map +1 -0
  216. package/lib/typescript/specs/mlKemKeyPair.nitro.d.ts +18 -0
  217. package/lib/typescript/specs/mlKemKeyPair.nitro.d.ts.map +1 -0
  218. package/lib/typescript/specs/prime.nitro.d.ts +11 -0
  219. package/lib/typescript/specs/prime.nitro.d.ts.map +1 -0
  220. package/lib/typescript/specs/x509certificate.nitro.d.ts +34 -0
  221. package/lib/typescript/specs/x509certificate.nitro.d.ts.map +1 -0
  222. package/lib/typescript/subtle.d.ts +12 -0
  223. package/lib/typescript/subtle.d.ts.map +1 -1
  224. package/lib/typescript/utils/conversion.d.ts.map +1 -1
  225. package/lib/typescript/utils/hashnames.d.ts +1 -1
  226. package/lib/typescript/utils/hashnames.d.ts.map +1 -1
  227. package/lib/typescript/utils/types.d.ts +25 -9
  228. package/lib/typescript/utils/types.d.ts.map +1 -1
  229. package/lib/typescript/x509certificate.d.ts +64 -0
  230. package/lib/typescript/x509certificate.d.ts.map +1 -0
  231. package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +8 -0
  232. package/nitrogen/generated/android/QuickCryptoOnLoad.cpp +80 -0
  233. package/nitrogen/generated/ios/QuickCryptoAutolinking.mm +80 -0
  234. package/nitrogen/generated/shared/c++/AsymmetricKeyType.hpp +12 -0
  235. package/nitrogen/generated/shared/c++/CipherInfo.hpp +104 -0
  236. package/nitrogen/generated/shared/c++/HybridArgon2Spec.cpp +22 -0
  237. package/nitrogen/generated/shared/c++/HybridArgon2Spec.hpp +66 -0
  238. package/nitrogen/generated/shared/c++/HybridCertificateSpec.cpp +23 -0
  239. package/nitrogen/generated/shared/c++/HybridCertificateSpec.hpp +64 -0
  240. package/nitrogen/generated/shared/c++/HybridCipherSpec.cpp +1 -0
  241. package/nitrogen/generated/shared/c++/HybridCipherSpec.hpp +4 -0
  242. package/nitrogen/generated/shared/c++/HybridDhKeyPairSpec.cpp +27 -0
  243. package/nitrogen/generated/shared/c++/HybridDhKeyPairSpec.hpp +69 -0
  244. package/nitrogen/generated/shared/c++/HybridDsaKeyPairSpec.cpp +26 -0
  245. package/nitrogen/generated/shared/c++/HybridDsaKeyPairSpec.hpp +68 -0
  246. package/nitrogen/generated/shared/c++/HybridECDHSpec.cpp +1 -0
  247. package/nitrogen/generated/shared/c++/HybridECDHSpec.hpp +1 -0
  248. package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.cpp +1 -0
  249. package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.hpp +1 -0
  250. package/nitrogen/generated/shared/c++/HybridKmacSpec.cpp +23 -0
  251. package/nitrogen/generated/shared/c++/HybridKmacSpec.hpp +66 -0
  252. package/nitrogen/generated/shared/c++/HybridMlKemKeyPairSpec.cpp +31 -0
  253. package/nitrogen/generated/shared/c++/HybridMlKemKeyPairSpec.hpp +74 -0
  254. package/nitrogen/generated/shared/c++/HybridPrimeSpec.cpp +24 -0
  255. package/nitrogen/generated/shared/c++/HybridPrimeSpec.hpp +67 -0
  256. package/nitrogen/generated/shared/c++/HybridX509CertificateHandleSpec.cpp +46 -0
  257. package/nitrogen/generated/shared/c++/HybridX509CertificateHandleSpec.hpp +96 -0
  258. package/package.json +4 -1
  259. package/src/argon2.ts +83 -0
  260. package/src/certificate.ts +41 -0
  261. package/src/cipher.ts +41 -3
  262. package/src/dhKeyPair.ts +156 -0
  263. package/src/dsa.ts +129 -0
  264. package/src/ec.ts +9 -9
  265. package/src/ecdh.ts +59 -0
  266. package/src/ed.ts +2 -2
  267. package/src/hash.ts +34 -11
  268. package/src/hkdf.ts +2 -7
  269. package/src/index.ts +16 -0
  270. package/src/keys/classes.ts +26 -14
  271. package/src/keys/generateKeyPair.ts +14 -0
  272. package/src/keys/index.ts +37 -2
  273. package/src/keys/signVerify.ts +0 -5
  274. package/src/mlkem.ts +350 -0
  275. package/src/pbkdf2.ts +34 -5
  276. package/src/prime.ts +134 -0
  277. package/src/rsa.ts +1 -1
  278. package/src/specs/argon2.nitro.ts +29 -0
  279. package/src/specs/certificate.nitro.ts +8 -0
  280. package/src/specs/cipher.nitro.ts +14 -0
  281. package/src/specs/dhKeyPair.nitro.ts +14 -0
  282. package/src/specs/dsaKeyPair.nitro.ts +13 -0
  283. package/src/specs/ecdh.nitro.ts +1 -0
  284. package/src/specs/keyObjectHandle.nitro.ts +5 -0
  285. package/src/specs/kmac.nitro.ts +12 -0
  286. package/src/specs/mlKemKeyPair.nitro.ts +32 -0
  287. package/src/specs/prime.nitro.ts +18 -0
  288. package/src/specs/x509certificate.nitro.ts +38 -0
  289. package/src/subtle.ts +821 -136
  290. package/src/utils/conversion.ts +10 -4
  291. package/src/utils/hashnames.ts +33 -2
  292. package/src/utils/types.ts +64 -8
  293. package/src/x509certificate.ts +277 -0
@@ -0,0 +1,81 @@
1
+ #include "HybridPrime.hpp"
2
+ #include "QuickCryptoUtils.hpp"
3
+ #include <ncrypto.h>
4
+
5
+ namespace margelo::nitro::crypto {
6
+
7
+ using namespace ncrypto;
8
+
9
+ static BignumPointer toBignum(const std::optional<std::shared_ptr<ArrayBuffer>>& buf) {
10
+ if (!buf.has_value() || buf.value()->size() == 0) {
11
+ return BignumPointer();
12
+ }
13
+ return BignumPointer(buf.value()->data(), buf.value()->size());
14
+ }
15
+
16
+ static std::shared_ptr<ArrayBuffer> generatePrimeImpl(double size, bool safe, const std::optional<std::shared_ptr<ArrayBuffer>>& add,
17
+ const std::optional<std::shared_ptr<ArrayBuffer>>& rem) {
18
+ int bits = static_cast<int>(size);
19
+
20
+ auto addBn = toBignum(add);
21
+ auto remBn = toBignum(rem);
22
+
23
+ BignumPointer::PrimeConfig config{bits, safe, addBn, remBn};
24
+ auto prime = BignumPointer::NewPrime(config);
25
+ if (!prime) {
26
+ throw std::runtime_error("Failed to generate prime");
27
+ }
28
+
29
+ auto encoded = prime.encode();
30
+ if (!encoded) {
31
+ throw std::runtime_error("Failed to encode prime");
32
+ }
33
+
34
+ return ToNativeArrayBuffer(encoded.get<uint8_t>(), encoded.size());
35
+ }
36
+
37
+ std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> HybridPrime::generatePrime(double size, bool safe,
38
+ const std::optional<std::shared_ptr<ArrayBuffer>>& add,
39
+ const std::optional<std::shared_ptr<ArrayBuffer>>& rem) {
40
+ auto addCopy = add.has_value() ? std::make_optional(ToNativeArrayBuffer(add.value())) : std::nullopt;
41
+ auto remCopy = rem.has_value() ? std::make_optional(ToNativeArrayBuffer(rem.value())) : std::nullopt;
42
+
43
+ return Promise<std::shared_ptr<ArrayBuffer>>::async([size, safe, addCopy = std::move(addCopy), remCopy = std::move(remCopy)]() {
44
+ return generatePrimeImpl(size, safe, addCopy, remCopy);
45
+ });
46
+ }
47
+
48
+ std::shared_ptr<ArrayBuffer> HybridPrime::generatePrimeSync(double size, bool safe, const std::optional<std::shared_ptr<ArrayBuffer>>& add,
49
+ const std::optional<std::shared_ptr<ArrayBuffer>>& rem) {
50
+ return generatePrimeImpl(size, safe, add, rem);
51
+ }
52
+
53
+ bool HybridPrime::checkPrimeSync(const std::shared_ptr<ArrayBuffer>& candidate, double checks) {
54
+ BignumPointer bn(candidate->data(), candidate->size());
55
+ if (!bn) {
56
+ throw std::runtime_error("Invalid candidate");
57
+ }
58
+
59
+ int result = bn.isPrime(static_cast<int>(checks));
60
+ if (result == -1) {
61
+ throw std::runtime_error("Prime check failed");
62
+ }
63
+ return result == 1;
64
+ }
65
+
66
+ std::shared_ptr<Promise<bool>> HybridPrime::checkPrime(const std::shared_ptr<ArrayBuffer>& candidate, double checks) {
67
+ auto candidateCopy = ToNativeArrayBuffer(candidate);
68
+ return Promise<bool>::async([candidateCopy, checks]() {
69
+ BignumPointer bn(candidateCopy->data(), candidateCopy->size());
70
+ if (!bn) {
71
+ throw std::runtime_error("Invalid candidate");
72
+ }
73
+ int result = bn.isPrime(static_cast<int>(checks));
74
+ if (result == -1) {
75
+ throw std::runtime_error("Prime check failed");
76
+ }
77
+ return result == 1;
78
+ });
79
+ }
80
+
81
+ } // namespace margelo::nitro::crypto
@@ -0,0 +1,20 @@
1
+ #pragma once
2
+
3
+ #include "HybridPrimeSpec.hpp"
4
+
5
+ namespace margelo::nitro::crypto {
6
+
7
+ class HybridPrime : public HybridPrimeSpec {
8
+ public:
9
+ HybridPrime() : HybridObject(TAG) {}
10
+
11
+ std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> generatePrime(double size, bool safe,
12
+ const std::optional<std::shared_ptr<ArrayBuffer>>& add,
13
+ const std::optional<std::shared_ptr<ArrayBuffer>>& rem) override;
14
+ std::shared_ptr<ArrayBuffer> generatePrimeSync(double size, bool safe, const std::optional<std::shared_ptr<ArrayBuffer>>& add,
15
+ const std::optional<std::shared_ptr<ArrayBuffer>>& rem) override;
16
+ std::shared_ptr<Promise<bool>> checkPrime(const std::shared_ptr<ArrayBuffer>& candidate, double checks) override;
17
+ bool checkPrimeSync(const std::shared_ptr<ArrayBuffer>& candidate, double checks) override;
18
+ };
19
+
20
+ } // namespace margelo::nitro::crypto
@@ -2,12 +2,16 @@
2
2
 
3
3
  #include <cstring>
4
4
  #include <memory>
5
+ #include <openssl/bn.h>
6
+ #include <openssl/core_names.h>
5
7
  #include <openssl/dsa.h>
6
8
  #include <openssl/ec.h>
7
9
  #include <openssl/ecdsa.h>
8
10
  #include <openssl/evp.h>
9
11
  #include <string>
10
12
 
13
+ #include "../utils/QuickCryptoUtils.hpp"
14
+
11
15
  namespace margelo::nitro::crypto {
12
16
 
13
17
  enum DSASigEnc {
@@ -15,29 +19,6 @@ enum DSASigEnc {
15
19
  kSigEncP1363 = 1,
16
20
  };
17
21
 
18
- inline const EVP_MD* getDigestByName(const std::string& algorithm) {
19
- if (algorithm == "SHA1" || algorithm == "sha1" || algorithm == "SHA-1" || algorithm == "sha-1") {
20
- return EVP_sha1();
21
- } else if (algorithm == "SHA224" || algorithm == "sha224" || algorithm == "SHA-224" || algorithm == "sha-224") {
22
- return EVP_sha224();
23
- } else if (algorithm == "SHA256" || algorithm == "sha256" || algorithm == "SHA-256" || algorithm == "sha-256") {
24
- return EVP_sha256();
25
- } else if (algorithm == "SHA384" || algorithm == "sha384" || algorithm == "SHA-384" || algorithm == "sha-384") {
26
- return EVP_sha384();
27
- } else if (algorithm == "SHA512" || algorithm == "sha512" || algorithm == "SHA-512" || algorithm == "sha-512") {
28
- return EVP_sha512();
29
- } else if (algorithm == "SHA3-224" || algorithm == "sha3-224") {
30
- return EVP_sha3_224();
31
- } else if (algorithm == "SHA3-256" || algorithm == "sha3-256") {
32
- return EVP_sha3_256();
33
- } else if (algorithm == "SHA3-384" || algorithm == "sha3-384") {
34
- return EVP_sha3_384();
35
- } else if (algorithm == "SHA3-512" || algorithm == "sha3-512") {
36
- return EVP_sha3_512();
37
- }
38
- throw std::runtime_error("Unsupported hash algorithm: " + algorithm);
39
- }
40
-
41
22
  inline unsigned int getBytesOfRS(EVP_PKEY* pkey) {
42
23
  int bits;
43
24
  int base_id = EVP_PKEY_base_id(pkey);
@@ -46,9 +27,11 @@ inline unsigned int getBytesOfRS(EVP_PKEY* pkey) {
46
27
  const DSA* dsa_key = EVP_PKEY_get0_DSA(pkey);
47
28
  bits = BN_num_bits(DSA_get0_q(dsa_key));
48
29
  } else if (base_id == EVP_PKEY_EC) {
49
- const EC_KEY* ec_key = EVP_PKEY_get0_EC_KEY(pkey);
50
- const EC_GROUP* ec_group = EC_KEY_get0_group(ec_key);
51
- bits = EC_GROUP_order_bits(ec_group);
30
+ BIGNUM* order = nullptr;
31
+ if (EVP_PKEY_get_bn_param(pkey, OSSL_PKEY_PARAM_EC_ORDER, &order) != 1 || !order)
32
+ return 0;
33
+ bits = BN_num_bits(order);
34
+ BN_free(order);
52
35
  } else {
53
36
  return 0;
54
37
  }
@@ -0,0 +1,44 @@
1
+ #include "QuickCryptoUtils.hpp"
2
+ #include <openssl/bn.h>
3
+ #include <openssl/core_names.h>
4
+ #include <openssl/evp.h>
5
+ #include <openssl/param_build.h>
6
+ #include <stdexcept>
7
+
8
+ namespace margelo::nitro::crypto {
9
+
10
+ EVP_PKEY* createEcEvpPkey(const char* group_name, const uint8_t* pub_oct, size_t pub_len, const BIGNUM* priv_bn) {
11
+ OSSL_PARAM_BLD* bld = OSSL_PARAM_BLD_new();
12
+ if (!bld)
13
+ throw std::runtime_error("Failed to create OSSL_PARAM_BLD");
14
+
15
+ OSSL_PARAM_BLD_push_utf8_string(bld, OSSL_PKEY_PARAM_GROUP_NAME, group_name, 0);
16
+ OSSL_PARAM_BLD_push_octet_string(bld, OSSL_PKEY_PARAM_PUB_KEY, pub_oct, pub_len);
17
+ if (priv_bn)
18
+ OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PRIV_KEY, priv_bn);
19
+
20
+ OSSL_PARAM* params = OSSL_PARAM_BLD_to_param(bld);
21
+ OSSL_PARAM_BLD_free(bld);
22
+ if (!params)
23
+ throw std::runtime_error("Failed to build EC parameters");
24
+
25
+ EVP_PKEY_CTX* ctx = EVP_PKEY_CTX_new_from_name(nullptr, "EC", nullptr);
26
+ if (!ctx) {
27
+ OSSL_PARAM_free(params);
28
+ throw std::runtime_error("Failed to create EVP_PKEY_CTX for EC");
29
+ }
30
+
31
+ int selection = priv_bn ? EVP_PKEY_KEYPAIR : EVP_PKEY_PUBLIC_KEY;
32
+ EVP_PKEY* pkey = nullptr;
33
+ if (EVP_PKEY_fromdata_init(ctx) <= 0 || EVP_PKEY_fromdata(ctx, &pkey, selection, params) <= 0) {
34
+ EVP_PKEY_CTX_free(ctx);
35
+ OSSL_PARAM_free(params);
36
+ throw std::runtime_error("Failed to create EVP_PKEY from EC parameters");
37
+ }
38
+
39
+ EVP_PKEY_CTX_free(ctx);
40
+ OSSL_PARAM_free(params);
41
+ return pkey;
42
+ }
43
+
44
+ } // namespace margelo::nitro::crypto
@@ -3,7 +3,9 @@
3
3
  #include <algorithm>
4
4
  #include <cctype>
5
5
  #include <limits>
6
+ #include <openssl/bn.h>
6
7
  #include <openssl/err.h>
8
+ #include <openssl/evp.h>
7
9
  #include <string>
8
10
  #include <vector>
9
11
 
@@ -72,4 +74,41 @@ inline std::string toLower(std::string s) {
72
74
  return s;
73
75
  }
74
76
 
77
+ inline const EVP_MD* getDigestByName(const std::string& algorithm) {
78
+ std::string algo = toLower(algorithm);
79
+
80
+ // Strip legacy RSA- prefix (e.g. rsa-sha256 -> sha256) for Node.js compat
81
+ if (algo.size() > 4 && algo.compare(0, 4, "rsa-") == 0) {
82
+ algo = algo.substr(4);
83
+ }
84
+
85
+ if (algo == "sha1" || algo == "sha-1") {
86
+ return EVP_sha1();
87
+ } else if (algo == "sha224" || algo == "sha-224") {
88
+ return EVP_sha224();
89
+ } else if (algo == "sha256" || algo == "sha-256") {
90
+ return EVP_sha256();
91
+ } else if (algo == "sha384" || algo == "sha-384") {
92
+ return EVP_sha384();
93
+ } else if (algo == "sha512" || algo == "sha-512") {
94
+ return EVP_sha512();
95
+ } else if (algo == "sha3-224") {
96
+ return EVP_sha3_224();
97
+ } else if (algo == "sha3-256") {
98
+ return EVP_sha3_256();
99
+ } else if (algo == "sha3-384") {
100
+ return EVP_sha3_384();
101
+ } else if (algo == "sha3-512") {
102
+ return EVP_sha3_512();
103
+ } else if (algo == "ripemd160" || algo == "ripemd-160") {
104
+ return EVP_ripemd160();
105
+ }
106
+ throw std::runtime_error("Unsupported hash algorithm: " + algorithm);
107
+ }
108
+
109
+ // Build an EVP_PKEY from EC curve name + public key octets + optional private key BIGNUM.
110
+ // Uses OSSL_PARAM_BLD + EVP_PKEY_fromdata (OpenSSL 3.x, no deprecated EC_KEY APIs).
111
+ // Caller owns the returned EVP_PKEY*.
112
+ EVP_PKEY* createEcEvpPkey(const char* group_name, const uint8_t* pub_oct, size_t pub_len, const BIGNUM* priv_bn = nullptr);
113
+
75
114
  } // namespace margelo::nitro::crypto
@@ -0,0 +1,174 @@
1
+ #include "HybridX509Certificate.hpp"
2
+ #include "../keys/HybridKeyObjectHandle.hpp"
3
+ #include "../keys/KeyObjectData.hpp"
4
+ #include "QuickCryptoUtils.hpp"
5
+ #include <ncrypto.h>
6
+
7
+ namespace margelo::nitro::crypto {
8
+
9
+ std::string HybridX509Certificate::bioToString(ncrypto::BIOPointer bio) const {
10
+ if (!bio)
11
+ return "";
12
+ BUF_MEM* mem = bio;
13
+ if (!mem || mem->length == 0)
14
+ return "";
15
+ return std::string(mem->data, mem->length);
16
+ }
17
+
18
+ void HybridX509Certificate::init(const std::shared_ptr<ArrayBuffer>& buffer) {
19
+ ncrypto::Buffer<const unsigned char> buf{.data = reinterpret_cast<const unsigned char*>(buffer->data()), .len = buffer->size()};
20
+ auto result = ncrypto::X509Pointer::Parse(buf);
21
+ if (!result) {
22
+ throw std::runtime_error("Failed to parse X509 certificate");
23
+ }
24
+ cert_ = std::move(result.value);
25
+ }
26
+
27
+ std::string HybridX509Certificate::subject() {
28
+ return bioToString(cert_.view().getSubject());
29
+ }
30
+
31
+ std::string HybridX509Certificate::subjectAltName() {
32
+ return bioToString(cert_.view().getSubjectAltName());
33
+ }
34
+
35
+ std::string HybridX509Certificate::issuer() {
36
+ return bioToString(cert_.view().getIssuer());
37
+ }
38
+
39
+ std::string HybridX509Certificate::infoAccess() {
40
+ return bioToString(cert_.view().getInfoAccess());
41
+ }
42
+
43
+ std::string HybridX509Certificate::validFrom() {
44
+ return bioToString(cert_.view().getValidFrom());
45
+ }
46
+
47
+ std::string HybridX509Certificate::validTo() {
48
+ return bioToString(cert_.view().getValidTo());
49
+ }
50
+
51
+ double HybridX509Certificate::validFromDate() {
52
+ return static_cast<double>(cert_.view().getValidFromTime()) * 1000.0;
53
+ }
54
+
55
+ double HybridX509Certificate::validToDate() {
56
+ return static_cast<double>(cert_.view().getValidToTime()) * 1000.0;
57
+ }
58
+
59
+ std::string HybridX509Certificate::signatureAlgorithm() {
60
+ auto algo = cert_.view().getSignatureAlgorithm();
61
+ if (!algo.has_value())
62
+ return "";
63
+ return std::string(algo.value());
64
+ }
65
+
66
+ std::string HybridX509Certificate::signatureAlgorithmOid() {
67
+ return cert_.view().getSignatureAlgorithmOID().value_or("");
68
+ }
69
+
70
+ std::string HybridX509Certificate::serialNumber() {
71
+ auto serial = cert_.view().getSerialNumber();
72
+ if (!serial)
73
+ return "";
74
+ return std::string(static_cast<const char*>(serial.get()), serial.size());
75
+ }
76
+
77
+ std::string HybridX509Certificate::fingerprint() {
78
+ return cert_.view().getFingerprint(ncrypto::Digest::SHA1).value_or("");
79
+ }
80
+
81
+ std::string HybridX509Certificate::fingerprint256() {
82
+ return cert_.view().getFingerprint(ncrypto::Digest::SHA256).value_or("");
83
+ }
84
+
85
+ std::string HybridX509Certificate::fingerprint512() {
86
+ return cert_.view().getFingerprint(ncrypto::Digest::SHA512).value_or("");
87
+ }
88
+
89
+ std::shared_ptr<ArrayBuffer> HybridX509Certificate::raw() {
90
+ auto bio = cert_.view().toDER();
91
+ if (!bio) {
92
+ throw std::runtime_error("Failed to export certificate as DER");
93
+ }
94
+ BUF_MEM* mem = bio;
95
+ return ToNativeArrayBuffer(reinterpret_cast<const uint8_t*>(mem->data), mem->length);
96
+ }
97
+
98
+ std::string HybridX509Certificate::pem() {
99
+ return bioToString(cert_.view().toPEM());
100
+ }
101
+
102
+ std::shared_ptr<HybridKeyObjectHandleSpec> HybridX509Certificate::publicKey() {
103
+ auto result = cert_.view().getPublicKey();
104
+ if (!result) {
105
+ throw std::runtime_error("Failed to extract public key from certificate");
106
+ }
107
+ auto handle = std::make_shared<HybridKeyObjectHandle>();
108
+ handle->setKeyObjectData(KeyObjectData::CreateAsymmetric(KeyType::PUBLIC, std::move(result.value)));
109
+ return handle;
110
+ }
111
+
112
+ std::vector<std::string> HybridX509Certificate::keyUsage() {
113
+ std::vector<std::string> usages;
114
+ cert_.view().enumUsages([&](const char* usage) { usages.emplace_back(usage); });
115
+ return usages;
116
+ }
117
+
118
+ bool HybridX509Certificate::ca() {
119
+ return cert_.view().isCA();
120
+ }
121
+
122
+ bool HybridX509Certificate::checkIssued(const std::shared_ptr<HybridX509CertificateHandleSpec>& other) {
123
+ auto otherCert = std::dynamic_pointer_cast<HybridX509Certificate>(other);
124
+ if (!otherCert) {
125
+ throw std::runtime_error("Invalid X509Certificate");
126
+ }
127
+ return cert_.view().isIssuedBy(otherCert->cert_.view());
128
+ }
129
+
130
+ bool HybridX509Certificate::checkPrivateKey(const std::shared_ptr<HybridKeyObjectHandleSpec>& key) {
131
+ auto handle = std::dynamic_pointer_cast<HybridKeyObjectHandle>(key);
132
+ if (!handle) {
133
+ throw std::runtime_error("Invalid key object");
134
+ }
135
+ return cert_.view().checkPrivateKey(handle->getKeyObjectData().GetAsymmetricKey());
136
+ }
137
+
138
+ bool HybridX509Certificate::verify(const std::shared_ptr<HybridKeyObjectHandleSpec>& key) {
139
+ auto handle = std::dynamic_pointer_cast<HybridKeyObjectHandle>(key);
140
+ if (!handle) {
141
+ throw std::runtime_error("Invalid key object");
142
+ }
143
+ return cert_.view().checkPublicKey(handle->getKeyObjectData().GetAsymmetricKey());
144
+ }
145
+
146
+ std::optional<std::string> HybridX509Certificate::checkHost(const std::string& name, double flags) {
147
+ ncrypto::DataPointer peername;
148
+ auto match = cert_.view().checkHost(name, static_cast<int>(flags), &peername);
149
+ if (match == ncrypto::X509View::CheckMatch::MATCH) {
150
+ if (peername) {
151
+ return std::string(static_cast<const char*>(peername.get()), peername.size());
152
+ }
153
+ return name;
154
+ }
155
+ return std::nullopt;
156
+ }
157
+
158
+ std::optional<std::string> HybridX509Certificate::checkEmail(const std::string& email, double flags) {
159
+ auto match = cert_.view().checkEmail(email, static_cast<int>(flags));
160
+ if (match == ncrypto::X509View::CheckMatch::MATCH) {
161
+ return email;
162
+ }
163
+ return std::nullopt;
164
+ }
165
+
166
+ std::optional<std::string> HybridX509Certificate::checkIP(const std::string& ip) {
167
+ auto match = cert_.view().checkIp(ip, 0);
168
+ if (match == ncrypto::X509View::CheckMatch::MATCH) {
169
+ return ip;
170
+ }
171
+ return std::nullopt;
172
+ }
173
+
174
+ } // namespace margelo::nitro::crypto
@@ -0,0 +1,51 @@
1
+ #pragma once
2
+
3
+ #include "HybridX509CertificateHandleSpec.hpp"
4
+ #include <ncrypto.h>
5
+ #include <string>
6
+
7
+ namespace margelo::nitro::crypto {
8
+
9
+ class HybridX509Certificate : public HybridX509CertificateHandleSpec {
10
+ public:
11
+ HybridX509Certificate() : HybridObject(TAG) {}
12
+
13
+ void init(const std::shared_ptr<ArrayBuffer>& buffer) override;
14
+
15
+ std::string subject() override;
16
+ std::string subjectAltName() override;
17
+ std::string issuer() override;
18
+ std::string infoAccess() override;
19
+ std::string validFrom() override;
20
+ std::string validTo() override;
21
+ double validFromDate() override;
22
+ double validToDate() override;
23
+ std::string signatureAlgorithm() override;
24
+ std::string signatureAlgorithmOid() override;
25
+ std::string serialNumber() override;
26
+
27
+ std::string fingerprint() override;
28
+ std::string fingerprint256() override;
29
+ std::string fingerprint512() override;
30
+
31
+ std::shared_ptr<ArrayBuffer> raw() override;
32
+ std::string pem() override;
33
+
34
+ std::shared_ptr<HybridKeyObjectHandleSpec> publicKey() override;
35
+ std::vector<std::string> keyUsage() override;
36
+
37
+ bool ca() override;
38
+ bool checkIssued(const std::shared_ptr<HybridX509CertificateHandleSpec>& other) override;
39
+ bool checkPrivateKey(const std::shared_ptr<HybridKeyObjectHandleSpec>& key) override;
40
+ bool verify(const std::shared_ptr<HybridKeyObjectHandleSpec>& key) override;
41
+
42
+ std::optional<std::string> checkHost(const std::string& name, double flags) override;
43
+ std::optional<std::string> checkEmail(const std::string& email, double flags) override;
44
+ std::optional<std::string> checkIP(const std::string& ip) override;
45
+
46
+ private:
47
+ ncrypto::X509Pointer cert_;
48
+ std::string bioToString(ncrypto::BIOPointer bio) const;
49
+ };
50
+
51
+ } // namespace margelo::nitro::crypto
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.argon2 = argon2;
7
+ exports.argon2Sync = argon2Sync;
8
+ var _reactNativeBuffer = require("@craftzdog/react-native-buffer");
9
+ var _reactNativeNitroModules = require("react-native-nitro-modules");
10
+ var _utils = require("./utils");
11
+ let native;
12
+ function getNative() {
13
+ if (native == null) {
14
+ native = _reactNativeNitroModules.NitroModules.createHybridObject('Argon2');
15
+ }
16
+ return native;
17
+ }
18
+ const ARGON2_VERSION = 0x13; // v1.3
19
+
20
+ function validateAlgorithm(algorithm) {
21
+ if (algorithm !== 'argon2d' && algorithm !== 'argon2i' && algorithm !== 'argon2id') {
22
+ throw new TypeError(`Unknown argon2 algorithm: ${algorithm}`);
23
+ }
24
+ }
25
+ function toAB(value) {
26
+ return (0, _utils.binaryLikeToArrayBuffer)(value);
27
+ }
28
+ function argon2Sync(algorithm, params) {
29
+ validateAlgorithm(algorithm);
30
+ const version = params.version ?? ARGON2_VERSION;
31
+ const result = getNative().hashSync(algorithm, toAB(params.message), toAB(params.nonce), params.parallelism, params.tagLength, params.memory, params.passes, version, params.secret ? toAB(params.secret) : undefined, params.associatedData ? toAB(params.associatedData) : undefined);
32
+ return _reactNativeBuffer.Buffer.from(result);
33
+ }
34
+ function argon2(algorithm, params, callback) {
35
+ validateAlgorithm(algorithm);
36
+ const version = params.version ?? ARGON2_VERSION;
37
+ getNative().hash(algorithm, toAB(params.message), toAB(params.nonce), params.parallelism, params.tagLength, params.memory, params.passes, version, params.secret ? toAB(params.secret) : undefined, params.associatedData ? toAB(params.associatedData) : undefined).then(ab => callback(null, _reactNativeBuffer.Buffer.from(ab))).catch(err => callback(err, _reactNativeBuffer.Buffer.alloc(0)));
38
+ }
39
+ //# sourceMappingURL=argon2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNativeBuffer","require","_reactNativeNitroModules","_utils","native","getNative","NitroModules","createHybridObject","ARGON2_VERSION","validateAlgorithm","algorithm","TypeError","toAB","value","binaryLikeToArrayBuffer","argon2Sync","params","version","result","hashSync","message","nonce","parallelism","tagLength","memory","passes","secret","undefined","associatedData","Buffer","from","argon2","callback","hash","then","ab","catch","err","alloc"],"sourceRoot":"../../src","sources":["argon2.ts"],"mappings":";;;;;;;AAAA,IAAAA,kBAAA,GAAAC,OAAA;AACA,IAAAC,wBAAA,GAAAD,OAAA;AAEA,IAAAE,MAAA,GAAAF,OAAA;AAGA,IAAIG,MAAoB;AACxB,SAASC,SAASA,CAAA,EAAiB;EACjC,IAAID,MAAM,IAAI,IAAI,EAAE;IAClBA,MAAM,GAAGE,qCAAY,CAACC,kBAAkB,CAAe,QAAQ,CAAC;EAClE;EACA,OAAOH,MAAM;AACf;AAcA,MAAMI,cAAc,GAAG,IAAI,CAAC,CAAC;;AAE7B,SAASC,iBAAiBA,CAACC,SAAiB,EAAQ;EAClD,IACEA,SAAS,KAAK,SAAS,IACvBA,SAAS,KAAK,SAAS,IACvBA,SAAS,KAAK,UAAU,EACxB;IACA,MAAM,IAAIC,SAAS,CAAC,6BAA6BD,SAAS,EAAE,CAAC;EAC/D;AACF;AAEA,SAASE,IAAIA,CAACC,KAAiB,EAAe;EAC5C,OAAO,IAAAC,8BAAuB,EAACD,KAAK,CAAC;AACvC;AAEO,SAASE,UAAUA,CAACL,SAAiB,EAAEM,MAAoB,EAAU;EAC1EP,iBAAiB,CAACC,SAAS,CAAC;EAC5B,MAAMO,OAAO,GAAGD,MAAM,CAACC,OAAO,IAAIT,cAAc;EAChD,MAAMU,MAAM,GAAGb,SAAS,CAAC,CAAC,CAACc,QAAQ,CACjCT,SAAS,EACTE,IAAI,CAACI,MAAM,CAACI,OAAO,CAAC,EACpBR,IAAI,CAACI,MAAM,CAACK,KAAK,CAAC,EAClBL,MAAM,CAACM,WAAW,EAClBN,MAAM,CAACO,SAAS,EAChBP,MAAM,CAACQ,MAAM,EACbR,MAAM,CAACS,MAAM,EACbR,OAAO,EACPD,MAAM,CAACU,MAAM,GAAGd,IAAI,CAACI,MAAM,CAACU,MAAM,CAAC,GAAGC,SAAS,EAC/CX,MAAM,CAACY,cAAc,GAAGhB,IAAI,CAACI,MAAM,CAACY,cAAc,CAAC,GAAGD,SACxD,CAAC;EACD,OAAOE,yBAAM,CAACC,IAAI,CAACZ,MAAM,CAAC;AAC5B;AAEO,SAASa,MAAMA,CACpBrB,SAAiB,EACjBM,MAAoB,EACpBgB,QAAqD,EAC/C;EACNvB,iBAAiB,CAACC,SAAS,CAAC;EAC5B,MAAMO,OAAO,GAAGD,MAAM,CAACC,OAAO,IAAIT,cAAc;EAChDH,SAAS,CAAC,CAAC,CACR4B,IAAI,CACHvB,SAAS,EACTE,IAAI,CAACI,MAAM,CAACI,OAAO,CAAC,EACpBR,IAAI,CAACI,MAAM,CAACK,KAAK,CAAC,EAClBL,MAAM,CAACM,WAAW,EAClBN,MAAM,CAACO,SAAS,EAChBP,MAAM,CAACQ,MAAM,EACbR,MAAM,CAACS,MAAM,EACbR,OAAO,EACPD,MAAM,CAACU,MAAM,GAAGd,IAAI,CAACI,MAAM,CAACU,MAAM,CAAC,GAAGC,SAAS,EAC/CX,MAAM,CAACY,cAAc,GAAGhB,IAAI,CAACI,MAAM,CAACY,cAAc,CAAC,GAAGD,SACxD,CAAC,CACAO,IAAI,CAACC,EAAE,IAAIH,QAAQ,CAAC,IAAI,EAAEH,yBAAM,CAACC,IAAI,CAACK,EAAE,CAAC,CAAC,CAAC,CAC3CC,KAAK,CAAEC,GAAU,IAAKL,QAAQ,CAACK,GAAG,EAAER,yBAAM,CAACS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D","ignoreList":[]}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Certificate = void 0;
7
+ var _reactNativeNitroModules = require("react-native-nitro-modules");
8
+ var _reactNativeBuffer = require("@craftzdog/react-native-buffer");
9
+ var _utils = require("./utils");
10
+ let native;
11
+ function getNative() {
12
+ if (native == null) {
13
+ native = _reactNativeNitroModules.NitroModules.createHybridObject('Certificate');
14
+ }
15
+ return native;
16
+ }
17
+ function toArrayBuffer(spkac, encoding) {
18
+ if (typeof spkac === 'string') {
19
+ return (0, _utils.binaryLikeToArrayBuffer)(spkac, encoding || 'utf8');
20
+ }
21
+ return (0, _utils.binaryLikeToArrayBuffer)(spkac);
22
+ }
23
+ class Certificate {
24
+ static exportChallenge(spkac, encoding) {
25
+ return _reactNativeBuffer.Buffer.from(getNative().exportChallenge(toArrayBuffer(spkac, encoding)));
26
+ }
27
+ static exportPublicKey(spkac, encoding) {
28
+ return _reactNativeBuffer.Buffer.from(getNative().exportPublicKey(toArrayBuffer(spkac, encoding)));
29
+ }
30
+ static verifySpkac(spkac, encoding) {
31
+ return getNative().verifySpkac(toArrayBuffer(spkac, encoding));
32
+ }
33
+ }
34
+ exports.Certificate = Certificate;
35
+ //# sourceMappingURL=certificate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNativeNitroModules","require","_reactNativeBuffer","_utils","native","getNative","NitroModules","createHybridObject","toArrayBuffer","spkac","encoding","binaryLikeToArrayBuffer","Certificate","exportChallenge","Buffer","from","exportPublicKey","verifySpkac","exports"],"sourceRoot":"../../src","sources":["certificate.ts"],"mappings":";;;;;;AAAA,IAAAA,wBAAA,GAAAC,OAAA;AACA,IAAAC,kBAAA,GAAAD,OAAA;AAGA,IAAAE,MAAA,GAAAF,OAAA;AAEA,IAAIG,MAAyB;AAC7B,SAASC,SAASA,CAAA,EAAsB;EACtC,IAAID,MAAM,IAAI,IAAI,EAAE;IAClBA,MAAM,GAAGE,qCAAY,CAACC,kBAAkB,CAAoB,aAAa,CAAC;EAC5E;EACA,OAAOH,MAAM;AACf;AAEA,SAASI,aAAaA,CACpBC,KAAiB,EACjBC,QAAyB,EACZ;EACb,IAAI,OAAOD,KAAK,KAAK,QAAQ,EAAE;IAC7B,OAAO,IAAAE,8BAAuB,EAACF,KAAK,EAAEC,QAAQ,IAAI,MAAM,CAAC;EAC3D;EACA,OAAO,IAAAC,8BAAuB,EAACF,KAAK,CAAC;AACvC;AAEO,MAAMG,WAAW,CAAC;EACvB,OAAOC,eAAeA,CAACJ,KAAiB,EAAEC,QAAyB,EAAU;IAC3E,OAAOI,yBAAM,CAACC,IAAI,CAChBV,SAAS,CAAC,CAAC,CAACQ,eAAe,CAACL,aAAa,CAACC,KAAK,EAAEC,QAAQ,CAAC,CAC5D,CAAC;EACH;EAEA,OAAOM,eAAeA,CAACP,KAAiB,EAAEC,QAAyB,EAAU;IAC3E,OAAOI,yBAAM,CAACC,IAAI,CAChBV,SAAS,CAAC,CAAC,CAACW,eAAe,CAACR,aAAa,CAACC,KAAK,EAAEC,QAAQ,CAAC,CAC5D,CAAC;EACH;EAEA,OAAOO,WAAWA,CAACR,KAAiB,EAAEC,QAAyB,EAAW;IACxE,OAAOL,SAAS,CAAC,CAAC,CAACY,WAAW,CAACT,aAAa,CAACC,KAAK,EAAEC,QAAQ,CAAC,CAAC;EAChE;AACF;AAACQ,OAAA,CAAAN,WAAA,GAAAA,WAAA","ignoreList":[]}
@@ -5,10 +5,12 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.createCipheriv = createCipheriv;
7
7
  exports.createDecipheriv = createDecipheriv;
8
+ exports.getCipherInfo = getCipherInfo;
8
9
  exports.getCiphers = getCiphers;
9
10
  exports.xsalsa20 = xsalsa20;
10
11
  var _reactNativeNitroModules = require("react-native-nitro-modules");
11
12
  var _readableStream = _interopRequireDefault(require("readable-stream"));
13
+ var _string_decoder = require("string_decoder");
12
14
  var _reactNativeBuffer = require("@craftzdog/react-native-buffer");
13
15
  var _utils = require("./utils");
14
16
  var _cipher = require("./utils/cipher");
@@ -20,11 +22,20 @@ class CipherUtils {
20
22
  static getSupportedCiphers() {
21
23
  return this.native.getSupportedCiphers();
22
24
  }
25
+ static getCipherInfo(name, keyLength, ivLength) {
26
+ return this.native.getCipherInfo(name, keyLength, ivLength);
27
+ }
23
28
  }
24
29
  function getCiphers() {
25
30
  return CipherUtils.getSupportedCiphers();
26
31
  }
32
+ function getCipherInfo(name, options) {
33
+ if (typeof name !== 'string' || name.length === 0) return undefined;
34
+ return CipherUtils.getCipherInfo(name, options?.keyLength, options?.ivLength);
35
+ }
27
36
  class CipherCommon extends _readableStream.default.Transform {
37
+ _decoder = null;
38
+ _decoderEncoding = undefined;
28
39
  constructor({
29
40
  isCipher,
30
41
  cipherType,
@@ -59,6 +70,16 @@ class CipherCommon extends _readableStream.default.Transform {
59
70
  authTagLen
60
71
  });
61
72
  }
73
+ getDecoder(encoding) {
74
+ const normalized = (0, _cipher.normalizeEncoding)(encoding);
75
+ if (!this._decoder) {
76
+ this._decoder = new _string_decoder.StringDecoder(encoding);
77
+ this._decoderEncoding = normalized;
78
+ } else if (this._decoderEncoding !== normalized) {
79
+ throw new Error('Cannot change encoding');
80
+ }
81
+ return this._decoder;
82
+ }
62
83
  update(data, inputEncoding, outputEncoding) {
63
84
  const defaultEncoding = (0, _cipher.getDefaultEncoding)();
64
85
  inputEncoding = inputEncoding ?? defaultEncoding;
@@ -70,14 +91,14 @@ class CipherCommon extends _readableStream.default.Transform {
70
91
  }
71
92
  const ret = this.native.update((0, _utils.binaryLikeToArrayBuffer)(data, inputEncoding));
72
93
  if (outputEncoding && outputEncoding !== 'buffer') {
73
- return (0, _utils.ab2str)(ret, outputEncoding);
94
+ return this.getDecoder(outputEncoding).write(_reactNativeBuffer.Buffer.from(ret));
74
95
  }
75
96
  return _reactNativeBuffer.Buffer.from(ret);
76
97
  }
77
98
  final(outputEncoding) {
78
99
  const ret = this.native.final();
79
100
  if (outputEncoding && outputEncoding !== 'buffer') {
80
- return (0, _utils.ab2str)(ret, outputEncoding);
101
+ return this.getDecoder(outputEncoding).end(_reactNativeBuffer.Buffer.from(ret));
81
102
  }
82
103
  return _reactNativeBuffer.Buffer.from(ret);
83
104
  }