react-native-quick-crypto 1.0.9 → 1.0.11

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 (292) hide show
  1. package/QuickCrypto.podspec +9 -2
  2. package/README.md +13 -9
  3. package/android/CMakeLists.txt +13 -0
  4. package/cpp/argon2/HybridArgon2.cpp +103 -0
  5. package/cpp/argon2/HybridArgon2.hpp +32 -0
  6. package/cpp/certificate/HybridCertificate.cpp +42 -0
  7. package/cpp/certificate/HybridCertificate.hpp +16 -0
  8. package/cpp/cipher/HybridCipher.cpp +58 -0
  9. package/cpp/cipher/HybridCipher.hpp +4 -0
  10. package/cpp/cipher/HybridCipherFactory.hpp +15 -1
  11. package/cpp/cipher/OCBCipher.cpp +4 -4
  12. package/cpp/cipher/XChaCha20Poly1305Cipher.cpp +161 -0
  13. package/cpp/cipher/XChaCha20Poly1305Cipher.hpp +43 -0
  14. package/cpp/cipher/XSalsa20Poly1305Cipher.cpp +145 -0
  15. package/cpp/cipher/XSalsa20Poly1305Cipher.hpp +42 -0
  16. package/cpp/dh/HybridDhKeyPair.cpp +179 -0
  17. package/cpp/dh/HybridDhKeyPair.hpp +37 -0
  18. package/cpp/dh/HybridDiffieHellman.cpp +10 -0
  19. package/cpp/dh/HybridDiffieHellman.hpp +1 -0
  20. package/cpp/dsa/HybridDsaKeyPair.cpp +128 -0
  21. package/cpp/dsa/HybridDsaKeyPair.hpp +32 -0
  22. package/cpp/ec/HybridEcKeyPair.cpp +21 -0
  23. package/cpp/ec/HybridEcKeyPair.hpp +1 -0
  24. package/cpp/ecdh/HybridECDH.cpp +35 -0
  25. package/cpp/ecdh/HybridECDH.hpp +1 -0
  26. package/cpp/hash/HybridHash.cpp +1 -1
  27. package/cpp/hash/HybridHash.hpp +1 -1
  28. package/cpp/hmac/HybridHmac.cpp +1 -1
  29. package/cpp/hmac/HybridHmac.hpp +1 -1
  30. package/cpp/keys/HybridKeyObjectHandle.cpp +131 -1
  31. package/cpp/keys/HybridKeyObjectHandle.hpp +5 -1
  32. package/cpp/prime/HybridPrime.cpp +81 -0
  33. package/cpp/prime/HybridPrime.hpp +20 -0
  34. package/deps/ncrypto/.bazelrc +0 -1
  35. package/deps/ncrypto/.bazelversion +1 -1
  36. package/deps/ncrypto/.github/workflows/commitlint.yml +16 -0
  37. package/deps/ncrypto/.github/workflows/linter.yml +2 -2
  38. package/deps/ncrypto/.github/workflows/release-please.yml +16 -0
  39. package/deps/ncrypto/.github/workflows/ubuntu.yml +82 -0
  40. package/deps/ncrypto/.release-please-manifest.json +3 -0
  41. package/deps/ncrypto/BUILD.bazel +9 -1
  42. package/deps/ncrypto/CHANGELOG.md +37 -0
  43. package/deps/ncrypto/CMakeLists.txt +35 -11
  44. package/deps/ncrypto/MODULE.bazel +16 -1
  45. package/deps/ncrypto/MODULE.bazel.lock +299 -118
  46. package/deps/ncrypto/cmake/ncrypto-flags.cmake +1 -0
  47. package/deps/ncrypto/include/ncrypto/aead.h +137 -0
  48. package/deps/ncrypto/include/ncrypto/version.h +14 -0
  49. package/deps/ncrypto/include/ncrypto.h +85 -230
  50. package/deps/ncrypto/ncrypto.pc.in +10 -0
  51. package/deps/ncrypto/release-please-config.json +11 -0
  52. package/deps/ncrypto/src/CMakeLists.txt +31 -6
  53. package/deps/ncrypto/src/aead.cpp +302 -0
  54. package/deps/ncrypto/src/ncrypto.cpp +274 -556
  55. package/deps/ncrypto/tests/BUILD.bazel +2 -0
  56. package/deps/ncrypto/tests/basic.cpp +772 -2
  57. package/deps/ncrypto/tools/run-clang-format.sh +5 -5
  58. package/lib/commonjs/argon2.js +39 -0
  59. package/lib/commonjs/argon2.js.map +1 -0
  60. package/lib/commonjs/certificate.js +35 -0
  61. package/lib/commonjs/certificate.js.map +1 -0
  62. package/lib/commonjs/cipher.js +8 -0
  63. package/lib/commonjs/cipher.js.map +1 -1
  64. package/lib/commonjs/dhKeyPair.js +109 -0
  65. package/lib/commonjs/dhKeyPair.js.map +1 -0
  66. package/lib/commonjs/diffie-hellman.js +4 -1
  67. package/lib/commonjs/diffie-hellman.js.map +1 -1
  68. package/lib/commonjs/dsa.js +92 -0
  69. package/lib/commonjs/dsa.js.map +1 -0
  70. package/lib/commonjs/ec.js +20 -25
  71. package/lib/commonjs/ec.js.map +1 -1
  72. package/lib/commonjs/ecdh.js +37 -0
  73. package/lib/commonjs/ecdh.js.map +1 -1
  74. package/lib/commonjs/ed.js +1 -2
  75. package/lib/commonjs/ed.js.map +1 -1
  76. package/lib/commonjs/hash.js +7 -0
  77. package/lib/commonjs/hash.js.map +1 -1
  78. package/lib/commonjs/index.js +46 -1
  79. package/lib/commonjs/index.js.map +1 -1
  80. package/lib/commonjs/keys/classes.js +18 -12
  81. package/lib/commonjs/keys/classes.js.map +1 -1
  82. package/lib/commonjs/keys/generateKeyPair.js +11 -0
  83. package/lib/commonjs/keys/generateKeyPair.js.map +1 -1
  84. package/lib/commonjs/prime.js +84 -0
  85. package/lib/commonjs/prime.js.map +1 -0
  86. package/lib/commonjs/specs/argon2.nitro.js +6 -0
  87. package/lib/commonjs/specs/argon2.nitro.js.map +1 -0
  88. package/lib/commonjs/specs/certificate.nitro.js +6 -0
  89. package/lib/commonjs/specs/certificate.nitro.js.map +1 -0
  90. package/lib/commonjs/specs/dhKeyPair.nitro.js +6 -0
  91. package/lib/commonjs/specs/dhKeyPair.nitro.js.map +1 -0
  92. package/lib/commonjs/specs/dsaKeyPair.nitro.js +6 -0
  93. package/lib/commonjs/specs/dsaKeyPair.nitro.js.map +1 -0
  94. package/lib/commonjs/specs/prime.nitro.js +6 -0
  95. package/lib/commonjs/specs/prime.nitro.js.map +1 -0
  96. package/lib/commonjs/subtle.js +181 -39
  97. package/lib/commonjs/subtle.js.map +1 -1
  98. package/lib/commonjs/utils/types.js.map +1 -1
  99. package/lib/module/argon2.js +34 -0
  100. package/lib/module/argon2.js.map +1 -0
  101. package/lib/module/certificate.js +30 -0
  102. package/lib/module/certificate.js.map +1 -0
  103. package/lib/module/cipher.js +7 -0
  104. package/lib/module/cipher.js.map +1 -1
  105. package/lib/module/dhKeyPair.js +102 -0
  106. package/lib/module/dhKeyPair.js.map +1 -0
  107. package/lib/module/diffie-hellman.js +4 -0
  108. package/lib/module/diffie-hellman.js.map +1 -1
  109. package/lib/module/dsa.js +85 -0
  110. package/lib/module/dsa.js.map +1 -0
  111. package/lib/module/ec.js +19 -25
  112. package/lib/module/ec.js.map +1 -1
  113. package/lib/module/ecdh.js +37 -0
  114. package/lib/module/ecdh.js.map +1 -1
  115. package/lib/module/ed.js +1 -2
  116. package/lib/module/ed.js.map +1 -1
  117. package/lib/module/hash.js +6 -0
  118. package/lib/module/hash.js.map +1 -1
  119. package/lib/module/index.js +12 -0
  120. package/lib/module/index.js.map +1 -1
  121. package/lib/module/keys/classes.js +18 -12
  122. package/lib/module/keys/classes.js.map +1 -1
  123. package/lib/module/keys/generateKeyPair.js +11 -0
  124. package/lib/module/keys/generateKeyPair.js.map +1 -1
  125. package/lib/module/prime.js +77 -0
  126. package/lib/module/prime.js.map +1 -0
  127. package/lib/module/specs/argon2.nitro.js +4 -0
  128. package/lib/module/specs/argon2.nitro.js.map +1 -0
  129. package/lib/module/specs/certificate.nitro.js +4 -0
  130. package/lib/module/specs/certificate.nitro.js.map +1 -0
  131. package/lib/module/specs/dhKeyPair.nitro.js +4 -0
  132. package/lib/module/specs/dhKeyPair.nitro.js.map +1 -0
  133. package/lib/module/specs/dsaKeyPair.nitro.js +4 -0
  134. package/lib/module/specs/dsaKeyPair.nitro.js.map +1 -0
  135. package/lib/module/specs/prime.nitro.js +4 -0
  136. package/lib/module/specs/prime.nitro.js.map +1 -0
  137. package/lib/module/subtle.js +183 -42
  138. package/lib/module/subtle.js.map +1 -1
  139. package/lib/module/utils/types.js.map +1 -1
  140. package/lib/tsconfig.tsbuildinfo +1 -1
  141. package/lib/typescript/argon2.d.ts +16 -0
  142. package/lib/typescript/argon2.d.ts.map +1 -0
  143. package/lib/typescript/certificate.d.ts +8 -0
  144. package/lib/typescript/certificate.d.ts.map +1 -0
  145. package/lib/typescript/cipher.d.ts +12 -0
  146. package/lib/typescript/cipher.d.ts.map +1 -1
  147. package/lib/typescript/dhKeyPair.d.ts +19 -0
  148. package/lib/typescript/dhKeyPair.d.ts.map +1 -0
  149. package/lib/typescript/diffie-hellman.d.ts +2 -0
  150. package/lib/typescript/diffie-hellman.d.ts.map +1 -1
  151. package/lib/typescript/dsa.d.ts +19 -0
  152. package/lib/typescript/dsa.d.ts.map +1 -0
  153. package/lib/typescript/ec.d.ts +1 -0
  154. package/lib/typescript/ec.d.ts.map +1 -1
  155. package/lib/typescript/ecdh.d.ts +3 -0
  156. package/lib/typescript/ecdh.d.ts.map +1 -1
  157. package/lib/typescript/ed.d.ts.map +1 -1
  158. package/lib/typescript/hash.d.ts +2 -0
  159. package/lib/typescript/hash.d.ts.map +1 -1
  160. package/lib/typescript/index.d.ts +22 -0
  161. package/lib/typescript/index.d.ts.map +1 -1
  162. package/lib/typescript/keys/classes.d.ts +4 -0
  163. package/lib/typescript/keys/classes.d.ts.map +1 -1
  164. package/lib/typescript/keys/generateKeyPair.d.ts.map +1 -1
  165. package/lib/typescript/prime.d.ts +19 -0
  166. package/lib/typescript/prime.d.ts.map +1 -0
  167. package/lib/typescript/specs/argon2.nitro.d.ts +9 -0
  168. package/lib/typescript/specs/argon2.nitro.d.ts.map +1 -0
  169. package/lib/typescript/specs/certificate.nitro.d.ts +10 -0
  170. package/lib/typescript/specs/certificate.nitro.d.ts.map +1 -0
  171. package/lib/typescript/specs/cipher.nitro.d.ts +9 -0
  172. package/lib/typescript/specs/cipher.nitro.d.ts.map +1 -1
  173. package/lib/typescript/specs/dhKeyPair.nitro.d.ts +14 -0
  174. package/lib/typescript/specs/dhKeyPair.nitro.d.ts.map +1 -0
  175. package/lib/typescript/specs/diffie-hellman.nitro.d.ts +1 -0
  176. package/lib/typescript/specs/diffie-hellman.nitro.d.ts.map +1 -1
  177. package/lib/typescript/specs/dsaKeyPair.nitro.d.ts +13 -0
  178. package/lib/typescript/specs/dsaKeyPair.nitro.d.ts.map +1 -0
  179. package/lib/typescript/specs/ecKeyPair.nitro.d.ts +1 -0
  180. package/lib/typescript/specs/ecKeyPair.nitro.d.ts.map +1 -1
  181. package/lib/typescript/specs/ecdh.nitro.d.ts +1 -0
  182. package/lib/typescript/specs/ecdh.nitro.d.ts.map +1 -1
  183. package/lib/typescript/specs/keyObjectHandle.nitro.d.ts +2 -0
  184. package/lib/typescript/specs/keyObjectHandle.nitro.d.ts.map +1 -1
  185. package/lib/typescript/specs/prime.nitro.d.ts +11 -0
  186. package/lib/typescript/specs/prime.nitro.d.ts.map +1 -0
  187. package/lib/typescript/subtle.d.ts +2 -0
  188. package/lib/typescript/subtle.d.ts.map +1 -1
  189. package/lib/typescript/utils/types.d.ts +24 -7
  190. package/lib/typescript/utils/types.d.ts.map +1 -1
  191. package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +13 -5
  192. package/nitrogen/generated/android/QuickCrypto+autolinking.gradle +1 -1
  193. package/nitrogen/generated/android/QuickCryptoOnLoad.cpp +104 -54
  194. package/nitrogen/generated/android/QuickCryptoOnLoad.hpp +1 -1
  195. package/nitrogen/generated/android/kotlin/com/margelo/nitro/crypto/QuickCryptoOnLoad.kt +1 -1
  196. package/nitrogen/generated/ios/QuickCrypto+autolinking.rb +2 -2
  197. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.cpp +1 -1
  198. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.hpp +1 -1
  199. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Umbrella.hpp +1 -1
  200. package/nitrogen/generated/ios/QuickCryptoAutolinking.mm +104 -54
  201. package/nitrogen/generated/ios/QuickCryptoAutolinking.swift +5 -1
  202. package/nitrogen/generated/shared/c++/AsymmetricKeyType.hpp +1 -1
  203. package/nitrogen/generated/shared/c++/CipherArgs.hpp +34 -19
  204. package/nitrogen/generated/shared/c++/CipherInfo.hpp +104 -0
  205. package/nitrogen/generated/shared/c++/HybridArgon2Spec.cpp +22 -0
  206. package/nitrogen/generated/shared/c++/HybridArgon2Spec.hpp +66 -0
  207. package/nitrogen/generated/shared/c++/HybridBlake3Spec.cpp +1 -1
  208. package/nitrogen/generated/shared/c++/HybridBlake3Spec.hpp +1 -3
  209. package/nitrogen/generated/shared/c++/HybridCertificateSpec.cpp +23 -0
  210. package/nitrogen/generated/shared/c++/HybridCertificateSpec.hpp +64 -0
  211. package/nitrogen/generated/shared/c++/HybridCipherFactorySpec.cpp +1 -1
  212. package/nitrogen/generated/shared/c++/HybridCipherFactorySpec.hpp +1 -1
  213. package/nitrogen/generated/shared/c++/HybridCipherSpec.cpp +2 -1
  214. package/nitrogen/generated/shared/c++/HybridCipherSpec.hpp +5 -3
  215. package/nitrogen/generated/shared/c++/HybridDhKeyPairSpec.cpp +27 -0
  216. package/nitrogen/generated/shared/c++/HybridDhKeyPairSpec.hpp +69 -0
  217. package/nitrogen/generated/shared/c++/HybridDiffieHellmanSpec.cpp +2 -1
  218. package/nitrogen/generated/shared/c++/HybridDiffieHellmanSpec.hpp +3 -3
  219. package/nitrogen/generated/shared/c++/HybridDsaKeyPairSpec.cpp +26 -0
  220. package/nitrogen/generated/shared/c++/HybridDsaKeyPairSpec.hpp +68 -0
  221. package/nitrogen/generated/shared/c++/HybridECDHSpec.cpp +2 -1
  222. package/nitrogen/generated/shared/c++/HybridECDHSpec.hpp +3 -3
  223. package/nitrogen/generated/shared/c++/HybridEcKeyPairSpec.cpp +2 -1
  224. package/nitrogen/generated/shared/c++/HybridEcKeyPairSpec.hpp +2 -3
  225. package/nitrogen/generated/shared/c++/HybridEdKeyPairSpec.cpp +1 -1
  226. package/nitrogen/generated/shared/c++/HybridEdKeyPairSpec.hpp +2 -3
  227. package/nitrogen/generated/shared/c++/HybridHashSpec.cpp +1 -1
  228. package/nitrogen/generated/shared/c++/HybridHashSpec.hpp +2 -4
  229. package/nitrogen/generated/shared/c++/HybridHkdfSpec.cpp +1 -1
  230. package/nitrogen/generated/shared/c++/HybridHkdfSpec.hpp +2 -3
  231. package/nitrogen/generated/shared/c++/HybridHmacSpec.cpp +1 -1
  232. package/nitrogen/generated/shared/c++/HybridHmacSpec.hpp +3 -4
  233. package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.cpp +3 -1
  234. package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.hpp +8 -4
  235. package/nitrogen/generated/shared/c++/HybridMlDsaKeyPairSpec.cpp +1 -1
  236. package/nitrogen/generated/shared/c++/HybridMlDsaKeyPairSpec.hpp +2 -3
  237. package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.cpp +1 -1
  238. package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.hpp +2 -3
  239. package/nitrogen/generated/shared/c++/HybridPrimeSpec.cpp +24 -0
  240. package/nitrogen/generated/shared/c++/HybridPrimeSpec.hpp +67 -0
  241. package/nitrogen/generated/shared/c++/HybridRandomSpec.cpp +1 -1
  242. package/nitrogen/generated/shared/c++/HybridRandomSpec.hpp +2 -3
  243. package/nitrogen/generated/shared/c++/HybridRsaCipherSpec.cpp +1 -1
  244. package/nitrogen/generated/shared/c++/HybridRsaCipherSpec.hpp +1 -3
  245. package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.cpp +1 -1
  246. package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.hpp +1 -3
  247. package/nitrogen/generated/shared/c++/HybridScryptSpec.cpp +1 -1
  248. package/nitrogen/generated/shared/c++/HybridScryptSpec.hpp +2 -3
  249. package/nitrogen/generated/shared/c++/HybridSignHandleSpec.cpp +1 -1
  250. package/nitrogen/generated/shared/c++/HybridSignHandleSpec.hpp +1 -3
  251. package/nitrogen/generated/shared/c++/HybridUtilsSpec.cpp +1 -1
  252. package/nitrogen/generated/shared/c++/HybridUtilsSpec.hpp +2 -3
  253. package/nitrogen/generated/shared/c++/HybridVerifyHandleSpec.cpp +1 -1
  254. package/nitrogen/generated/shared/c++/HybridVerifyHandleSpec.hpp +1 -3
  255. package/nitrogen/generated/shared/c++/JWK.hpp +84 -68
  256. package/nitrogen/generated/shared/c++/JWKkty.hpp +5 -1
  257. package/nitrogen/generated/shared/c++/JWKuse.hpp +1 -1
  258. package/nitrogen/generated/shared/c++/KFormatType.hpp +1 -1
  259. package/nitrogen/generated/shared/c++/KeyDetail.hpp +39 -23
  260. package/nitrogen/generated/shared/c++/KeyEncoding.hpp +1 -1
  261. package/nitrogen/generated/shared/c++/KeyObject.hpp +21 -5
  262. package/nitrogen/generated/shared/c++/KeyType.hpp +1 -1
  263. package/nitrogen/generated/shared/c++/KeyUsage.hpp +1 -1
  264. package/nitrogen/generated/shared/c++/NamedCurve.hpp +1 -1
  265. package/package.json +1 -1
  266. package/src/argon2.ts +83 -0
  267. package/src/certificate.ts +41 -0
  268. package/src/cipher.ts +24 -0
  269. package/src/dhKeyPair.ts +156 -0
  270. package/src/diffie-hellman.ts +6 -0
  271. package/src/dsa.ts +129 -0
  272. package/src/ec.ts +23 -19
  273. package/src/ecdh.ts +59 -0
  274. package/src/ed.ts +1 -2
  275. package/src/hash.ts +11 -0
  276. package/src/index.ts +12 -0
  277. package/src/keys/classes.ts +26 -8
  278. package/src/keys/generateKeyPair.ts +14 -0
  279. package/src/prime.ts +134 -0
  280. package/src/specs/argon2.nitro.ts +29 -0
  281. package/src/specs/certificate.nitro.ts +8 -0
  282. package/src/specs/cipher.nitro.ts +14 -0
  283. package/src/specs/dhKeyPair.nitro.ts +14 -0
  284. package/src/specs/diffie-hellman.nitro.ts +1 -0
  285. package/src/specs/dsaKeyPair.nitro.ts +13 -0
  286. package/src/specs/ecKeyPair.nitro.ts +2 -0
  287. package/src/specs/ecdh.nitro.ts +1 -0
  288. package/src/specs/keyObjectHandle.nitro.ts +2 -0
  289. package/src/specs/prime.nitro.ts +18 -0
  290. package/src/subtle.ts +400 -42
  291. package/src/utils/types.ts +39 -5
  292. package/deps/ncrypto/WORKSPACE +0 -15
package/src/dsa.ts ADDED
@@ -0,0 +1,129 @@
1
+ import { NitroModules } from 'react-native-nitro-modules';
2
+ import { Buffer } from '@craftzdog/react-native-buffer';
3
+ import { KeyObject, PublicKeyObject, PrivateKeyObject } from './keys';
4
+ import type { DsaKeyPair } from './specs/dsaKeyPair.nitro';
5
+ import type { GenerateKeyPairOptions, KeyPairGenConfig } from './utils/types';
6
+ import { KFormatType, KeyEncoding } from './utils';
7
+
8
+ export class Dsa {
9
+ native: DsaKeyPair;
10
+
11
+ constructor(modulusLength: number, divisorLength?: number) {
12
+ this.native = NitroModules.createHybridObject<DsaKeyPair>('DsaKeyPair');
13
+ this.native.setModulusLength(modulusLength);
14
+ if (divisorLength !== undefined && divisorLength >= 0) {
15
+ this.native.setDivisorLength(divisorLength);
16
+ }
17
+ }
18
+
19
+ async generateKeyPair(): Promise<void> {
20
+ await this.native.generateKeyPair();
21
+ }
22
+
23
+ generateKeyPairSync(): void {
24
+ this.native.generateKeyPairSync();
25
+ }
26
+ }
27
+
28
+ function dsa_prepareKeyGenParams(
29
+ options: GenerateKeyPairOptions | undefined,
30
+ ): Dsa {
31
+ if (!options) {
32
+ throw new Error('Options are required for DSA key generation');
33
+ }
34
+
35
+ const { modulusLength, divisorLength } = options;
36
+
37
+ if (!modulusLength || modulusLength <= 0) {
38
+ throw new Error('Invalid or missing modulusLength for DSA key generation');
39
+ }
40
+
41
+ return new Dsa(modulusLength, divisorLength);
42
+ }
43
+
44
+ function dsa_formatKeyPairOutput(
45
+ dsa: Dsa,
46
+ encoding: KeyPairGenConfig,
47
+ ): {
48
+ publicKey: PublicKeyObject | Buffer | string | ArrayBuffer;
49
+ privateKey: PrivateKeyObject | Buffer | string | ArrayBuffer;
50
+ } {
51
+ const { publicFormat, privateFormat, cipher, passphrase } = encoding;
52
+
53
+ const publicKeyData = dsa.native.getPublicKey();
54
+ const privateKeyData = dsa.native.getPrivateKey();
55
+
56
+ const pub = KeyObject.createKeyObject(
57
+ 'public',
58
+ publicKeyData,
59
+ KFormatType.DER,
60
+ KeyEncoding.SPKI,
61
+ ) as PublicKeyObject;
62
+
63
+ const priv = KeyObject.createKeyObject(
64
+ 'private',
65
+ privateKeyData,
66
+ KFormatType.DER,
67
+ KeyEncoding.PKCS8,
68
+ ) as PrivateKeyObject;
69
+
70
+ let publicKey: PublicKeyObject | Buffer | string | ArrayBuffer;
71
+ let privateKey: PrivateKeyObject | Buffer | string | ArrayBuffer;
72
+
73
+ if (publicFormat === -1) {
74
+ publicKey = pub;
75
+ } else {
76
+ const format =
77
+ publicFormat === KFormatType.PEM ? KFormatType.PEM : KFormatType.DER;
78
+ const exported = pub.handle.exportKey(format, KeyEncoding.SPKI);
79
+ if (format === KFormatType.PEM) {
80
+ publicKey = Buffer.from(new Uint8Array(exported)).toString('utf-8');
81
+ } else {
82
+ publicKey = exported;
83
+ }
84
+ }
85
+
86
+ if (privateFormat === -1) {
87
+ privateKey = priv;
88
+ } else {
89
+ const format =
90
+ privateFormat === KFormatType.PEM ? KFormatType.PEM : KFormatType.DER;
91
+ const exported = priv.handle.exportKey(
92
+ format,
93
+ KeyEncoding.PKCS8,
94
+ cipher,
95
+ passphrase,
96
+ );
97
+ if (format === KFormatType.PEM) {
98
+ privateKey = Buffer.from(new Uint8Array(exported)).toString('utf-8');
99
+ } else {
100
+ privateKey = exported;
101
+ }
102
+ }
103
+
104
+ return { publicKey, privateKey };
105
+ }
106
+
107
+ export async function dsa_generateKeyPairNode(
108
+ options: GenerateKeyPairOptions | undefined,
109
+ encoding: KeyPairGenConfig,
110
+ ): Promise<{
111
+ publicKey: PublicKeyObject | Buffer | string | ArrayBuffer;
112
+ privateKey: PrivateKeyObject | Buffer | string | ArrayBuffer;
113
+ }> {
114
+ const dsa = dsa_prepareKeyGenParams(options);
115
+ await dsa.generateKeyPair();
116
+ return dsa_formatKeyPairOutput(dsa, encoding);
117
+ }
118
+
119
+ export function dsa_generateKeyPairNodeSync(
120
+ options: GenerateKeyPairOptions | undefined,
121
+ encoding: KeyPairGenConfig,
122
+ ): {
123
+ publicKey: PublicKeyObject | Buffer | string | ArrayBuffer;
124
+ privateKey: PrivateKeyObject | Buffer | string | ArrayBuffer;
125
+ } {
126
+ const dsa = dsa_prepareKeyGenParams(options);
127
+ dsa.generateKeyPairSync();
128
+ return dsa_formatKeyPairOutput(dsa, encoding);
129
+ }
package/src/ec.ts CHANGED
@@ -34,6 +34,23 @@ import {
34
34
  import { Buffer } from '@craftzdog/react-native-buffer';
35
35
  import { ECDH } from './ecdh';
36
36
 
37
+ class EcUtils {
38
+ private static _native: EcKeyPair | undefined;
39
+ private static get native(): EcKeyPair {
40
+ if (!this._native) {
41
+ this._native = NitroModules.createHybridObject<EcKeyPair>('EcKeyPair');
42
+ }
43
+ return this._native;
44
+ }
45
+ public static getSupportedCurves(): string[] {
46
+ return this.native.getSupportedCurves();
47
+ }
48
+ }
49
+
50
+ export function getCurves(): string[] {
51
+ return EcUtils.getSupportedCurves();
52
+ }
53
+
37
54
  export class Ec {
38
55
  native: EcKeyPair;
39
56
 
@@ -488,8 +505,7 @@ export function ecDeriveBits(
488
505
  baseKey: CryptoKey,
489
506
  length: number | null,
490
507
  ): ArrayBuffer {
491
- const publicParams = algorithm as SubtleAlgorithm & { public?: CryptoKey };
492
- const publicKey = publicParams.public;
508
+ const publicKey = algorithm.public;
493
509
 
494
510
  if (!publicKey) {
495
511
  throw new Error('Public key is required for ECDH derivation');
@@ -508,31 +524,19 @@ export function ecDeriveBits(
508
524
  throw new Error('Curve name is missing');
509
525
  }
510
526
 
511
- // Create new ECDH instance (Node.js style wrapper)
512
- const ecdh = new ECDH(namedCurve);
527
+ const opensslCurve =
528
+ kNamedCurveAliases[namedCurve as keyof typeof kNamedCurveAliases];
529
+ const ecdh = new ECDH(opensslCurve);
513
530
 
514
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
515
- const jwkPrivate = baseKey.keyObject.export({ format: 'jwk' }) as any;
531
+ const jwkPrivate = baseKey.keyObject.handle.exportJwk({}, false);
516
532
  if (!jwkPrivate.d) throw new Error('Invalid private key');
517
533
  const privateBytes = Buffer.from(jwkPrivate.d, 'base64');
518
-
519
534
  ecdh.setPrivateKey(privateBytes);
520
535
 
521
- // Public key
522
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
523
- const jwkPublic = publicKey.keyObject.export({ format: 'jwk' }) as any;
524
-
525
- // HybridECDH `computeSecret` takes public key.
526
- // My implementation `HybridECDH.cpp` `computeSecret` expects what?
527
- // `derive_secret` -> `EVP_PKEY_derive_set_peer`
528
- // `computeSecret` calls `EC_POINT_oct2point`. So it expects an uncompressed/compressed point (04... or 02/03...).
529
- // JWK gives `x` and `y`. We can construct the uncompressed point 04 + x + y.
530
-
536
+ const jwkPublic = publicKey.keyObject.handle.exportJwk({}, false);
531
537
  if (!jwkPublic.x || !jwkPublic.y) throw new Error('Invalid public key');
532
538
  const x = Buffer.from(jwkPublic.x, 'base64');
533
539
  const y = Buffer.from(jwkPublic.y, 'base64');
534
-
535
- // Uncompressed point: 0x04 || x || y
536
540
  const publicBytes = Buffer.concat([Buffer.from([0x04]), x, y]);
537
541
 
538
542
  const secret = ecdh.computeSecret(publicBytes);
package/src/ecdh.ts CHANGED
@@ -2,7 +2,20 @@ import { NitroModules } from 'react-native-nitro-modules';
2
2
  import type { ECDH as ECDHInterface } from './specs/ecdh.nitro';
3
3
  import { Buffer } from '@craftzdog/react-native-buffer';
4
4
 
5
+ const POINT_CONVERSION_COMPRESSED = 2;
6
+ const POINT_CONVERSION_UNCOMPRESSED = 4;
7
+ const POINT_CONVERSION_HYBRID = 6;
8
+
5
9
  export class ECDH {
10
+ private static _convertKeyHybrid: ECDHInterface | undefined;
11
+ private static get convertKeyHybrid(): ECDHInterface {
12
+ if (!this._convertKeyHybrid) {
13
+ this._convertKeyHybrid =
14
+ NitroModules.createHybridObject<ECDHInterface>('ECDH');
15
+ }
16
+ return this._convertKeyHybrid;
17
+ }
18
+
6
19
  private _hybrid: ECDHInterface;
7
20
 
8
21
  constructor(curveName: string) {
@@ -69,6 +82,52 @@ export class ECDH {
69
82
  }
70
83
  this._hybrid.setPublicKey(keyBuf.buffer as ArrayBuffer);
71
84
  }
85
+
86
+ static convertKey(
87
+ key: Buffer | string,
88
+ curve: string,
89
+ inputEncoding?: BufferEncoding,
90
+ outputEncoding?: BufferEncoding,
91
+ format?: 'uncompressed' | 'compressed' | 'hybrid',
92
+ ): Buffer | string {
93
+ let keyBuf: Buffer;
94
+ if (Buffer.isBuffer(key)) {
95
+ keyBuf = key;
96
+ } else {
97
+ keyBuf = Buffer.from(key, inputEncoding);
98
+ }
99
+
100
+ let formatNum: number;
101
+ switch (format) {
102
+ case 'compressed':
103
+ formatNum = POINT_CONVERSION_COMPRESSED;
104
+ break;
105
+ case 'hybrid':
106
+ formatNum = POINT_CONVERSION_HYBRID;
107
+ break;
108
+ case 'uncompressed':
109
+ case undefined:
110
+ formatNum = POINT_CONVERSION_UNCOMPRESSED;
111
+ break;
112
+ default:
113
+ throw new TypeError(
114
+ `Invalid point conversion format: ${format as string}`,
115
+ );
116
+ }
117
+
118
+ const result = Buffer.from(
119
+ ECDH.convertKeyHybrid.convertKey(
120
+ keyBuf.buffer as ArrayBuffer,
121
+ curve,
122
+ formatNum,
123
+ ),
124
+ );
125
+
126
+ if (outputEncoding) {
127
+ return result.toString(outputEncoding);
128
+ }
129
+ return result;
130
+ }
72
131
  }
73
132
 
74
133
  export function createECDH(curveName: string): ECDH {
package/src/ed.ts CHANGED
@@ -427,8 +427,7 @@ export function xDeriveBits(
427
427
  baseKey: CryptoKey,
428
428
  length: number | null,
429
429
  ): ArrayBuffer {
430
- const publicParams = algorithm as SubtleAlgorithm & { public?: CryptoKey };
431
- const publicKey = publicParams.public;
430
+ const publicKey = algorithm.public;
432
431
 
433
432
  if (!publicKey) {
434
433
  throw new Error('Public key is required for X25519/X448 derivation');
package/src/hash.ts CHANGED
@@ -272,8 +272,19 @@ const internalDigest = (
272
272
  return arrayBuffer;
273
273
  };
274
274
 
275
+ export function hash(
276
+ algorithm: string,
277
+ data: BinaryLike,
278
+ outputEncoding?: Encoding,
279
+ ): string | Buffer {
280
+ const h = createHash(algorithm);
281
+ h.update(data);
282
+ return outputEncoding ? h.digest(outputEncoding) : h.digest();
283
+ }
284
+
275
285
  export const hashExports = {
276
286
  createHash,
277
287
  getHashes,
288
+ hash,
278
289
  asyncDigest,
279
290
  };
package/src/index.ts CHANGED
@@ -2,6 +2,7 @@
2
2
  import { Buffer } from '@craftzdog/react-native-buffer';
3
3
 
4
4
  // API imports
5
+ import * as argon2Module from './argon2';
5
6
  import * as keys from './keys';
6
7
  import * as blake3 from './blake3';
7
8
  import * as cipher from './cipher';
@@ -10,10 +11,13 @@ import { hashExports as hash } from './hash';
10
11
  import { hmacExports as hmac } from './hmac';
11
12
  import * as hkdf from './hkdf';
12
13
  import * as pbkdf2 from './pbkdf2';
14
+ import * as prime from './prime';
13
15
  import * as scrypt from './scrypt';
14
16
  import * as random from './random';
15
17
  import * as ecdh from './ecdh';
16
18
  import * as dh from './diffie-hellman';
19
+ import { Certificate } from './certificate';
20
+ import { getCurves } from './ec';
17
21
  import { constants } from './constants';
18
22
 
19
23
  // utils import
@@ -25,6 +29,7 @@ import * as subtle from './subtle';
25
29
  * See `docs/implementation-coverage.md` for status.
26
30
  */
27
31
  const QuickCrypto = {
32
+ ...argon2Module,
28
33
  ...keys,
29
34
  ...blake3,
30
35
  ...cipher,
@@ -33,12 +38,15 @@ const QuickCrypto = {
33
38
  ...hmac,
34
39
  ...hkdf,
35
40
  ...pbkdf2,
41
+ ...prime,
36
42
  ...scrypt,
37
43
  ...random,
38
44
  ...ecdh,
39
45
  ...dh,
40
46
  ...utils,
41
47
  ...subtle,
48
+ Certificate,
49
+ getCurves,
42
50
  constants,
43
51
  Buffer,
44
52
  };
@@ -70,7 +78,9 @@ if (global.process.nextTick == null) {
70
78
 
71
79
  // exports
72
80
  export default QuickCrypto;
81
+ export * from './argon2';
73
82
  export * from './blake3';
83
+ export { Certificate } from './certificate';
74
84
  export * from './cipher';
75
85
  export * from './ed';
76
86
  export * from './keys';
@@ -78,9 +88,11 @@ export * from './hash';
78
88
  export * from './hmac';
79
89
  export * from './hkdf';
80
90
  export * from './pbkdf2';
91
+ export * from './prime';
81
92
  export * from './scrypt';
82
93
  export * from './random';
83
94
  export * from './ecdh';
95
+ export { getCurves } from './ec';
84
96
  export * from './diffie-hellman';
85
97
  export * from './utils';
86
98
  export * from './subtle';
@@ -89,6 +89,13 @@ export class KeyObject {
89
89
  throw new Error('export() must be implemented by subclasses');
90
90
  }
91
91
 
92
+ equals(otherKeyObject: KeyObject): boolean {
93
+ if (!(otherKeyObject instanceof KeyObject)) {
94
+ throw new TypeError('otherKeyObject must be a KeyObject');
95
+ }
96
+ return this.handle.keyEquals(otherKeyObject.handle);
97
+ }
98
+
92
99
  constructor(type: string, handle: KeyObjectHandle);
93
100
  constructor(type: string, key: ArrayBuffer);
94
101
  constructor(type: string, handleOrKey: KeyObjectHandle | ArrayBuffer) {
@@ -119,11 +126,22 @@ export class KeyObject {
119
126
  this.type = type as 'public' | 'secret' | 'private';
120
127
  }
121
128
 
122
- // static from(key) {
123
- // if (!isCryptoKey(key))
124
- // throw new ERR_INVALID_ARG_TYPE('key', 'CryptoKey', key);
125
- // return key[kKeyObject];
126
- // }
129
+ static from(key: CryptoKey): KeyObject {
130
+ if (!(key instanceof CryptoKey)) {
131
+ throw new TypeError(
132
+ `The "key" argument must be an instance of CryptoKey. Received ${typeof key}`,
133
+ );
134
+ }
135
+ return key.keyObject;
136
+ }
137
+
138
+ toCryptoKey(
139
+ algorithm: SubtleAlgorithm,
140
+ extractable: boolean,
141
+ keyUsages: KeyUsage[],
142
+ ): CryptoKey {
143
+ return new CryptoKey(this, algorithm, keyUsages, extractable);
144
+ }
127
145
 
128
146
  static createKeyObject(
129
147
  type: string,
@@ -197,9 +215,9 @@ export class SecretKeyObject extends KeyObject {
197
215
  super('secret', handle);
198
216
  }
199
217
 
200
- // get symmetricKeySize() {
201
- // return this.handle.getSymmetricKeySize();
202
- // }
218
+ get symmetricKeySize(): number {
219
+ return this.handle.getSymmetricKeySize();
220
+ }
203
221
 
204
222
  export(options: { format: 'pem' } & EncodingOptions): never;
205
223
  export(options: { format: 'der' } & EncodingOptions): Buffer;
@@ -1,6 +1,11 @@
1
1
  import { ed_generateKeyPair } from '../ed';
2
2
  import { rsa_generateKeyPairNode, rsa_generateKeyPairNodeSync } from '../rsa';
3
3
  import { ec_generateKeyPairNode, ec_generateKeyPairNodeSync } from '../ec';
4
+ import { dsa_generateKeyPairNode, dsa_generateKeyPairNodeSync } from '../dsa';
5
+ import {
6
+ dh_generateKeyPairNode,
7
+ dh_generateKeyPairNodeSync,
8
+ } from '../dhKeyPair';
4
9
  import {
5
10
  kEmptyObject,
6
11
  validateFunction,
@@ -139,6 +144,7 @@ function internalGenerateKeyPair(
139
144
  case 'rsa-pss':
140
145
  case 'dsa':
141
146
  case 'ec':
147
+ case 'dh':
142
148
  break;
143
149
  default: {
144
150
  const err = new Error(`
@@ -158,6 +164,10 @@ function internalGenerateKeyPair(
158
164
  result = await rsa_generateKeyPairNode(type, options, encoding);
159
165
  } else if (type === 'ec') {
160
166
  result = await ec_generateKeyPairNode(options, encoding);
167
+ } else if (type === 'dsa') {
168
+ result = await dsa_generateKeyPairNode(options, encoding);
169
+ } else if (type === 'dh') {
170
+ result = await dh_generateKeyPairNode(options, encoding);
161
171
  } else {
162
172
  throw new Error(`Unsupported key type: ${type}`);
163
173
  }
@@ -184,6 +194,10 @@ function internalGenerateKeyPair(
184
194
  result = rsa_generateKeyPairNodeSync(type, options, encoding);
185
195
  } else if (type === 'ec') {
186
196
  result = ec_generateKeyPairNodeSync(options, encoding);
197
+ } else if (type === 'dsa') {
198
+ result = dsa_generateKeyPairNodeSync(options, encoding);
199
+ } else if (type === 'dh') {
200
+ result = dh_generateKeyPairNodeSync(options, encoding);
187
201
  } else {
188
202
  throw new Error(`Unsupported key type: ${type}`);
189
203
  }
package/src/prime.ts ADDED
@@ -0,0 +1,134 @@
1
+ import { NitroModules } from 'react-native-nitro-modules';
2
+ import { Buffer } from '@craftzdog/react-native-buffer';
3
+ import type { Prime as NativePrime } from './specs/prime.nitro';
4
+ import type { BinaryLike } from './utils';
5
+ import { binaryLikeToArrayBuffer } from './utils';
6
+
7
+ let native: NativePrime;
8
+ function getNative(): NativePrime {
9
+ if (native == null) {
10
+ native = NitroModules.createHybridObject<NativePrime>('Prime');
11
+ }
12
+ return native;
13
+ }
14
+
15
+ export interface GeneratePrimeOptions {
16
+ safe?: boolean;
17
+ bigint?: boolean;
18
+ add?: ArrayBuffer | Buffer | Uint8Array;
19
+ rem?: ArrayBuffer | Buffer | Uint8Array;
20
+ }
21
+
22
+ export interface CheckPrimeOptions {
23
+ checks?: number;
24
+ }
25
+
26
+ function toOptionalArrayBuffer(
27
+ value?: ArrayBuffer | Buffer | Uint8Array,
28
+ ): ArrayBuffer | undefined {
29
+ if (value == null) return undefined;
30
+ if (value instanceof ArrayBuffer) return value;
31
+ return binaryLikeToArrayBuffer(value);
32
+ }
33
+
34
+ function bufferToBigInt(buf: Buffer): bigint {
35
+ let result = 0n;
36
+ for (let i = 0; i < buf.length; i++) {
37
+ result = (result << 8n) | BigInt(buf[i]!);
38
+ }
39
+ return result;
40
+ }
41
+
42
+ function bigIntToBuffer(value: bigint): ArrayBuffer {
43
+ if (value === 0n) return new Uint8Array([0]).buffer;
44
+ const hex = value.toString(16);
45
+ const paddedHex = hex.length % 2 ? '0' + hex : hex;
46
+ const bytes = new Uint8Array(paddedHex.length / 2);
47
+ for (let i = 0; i < bytes.length; i++) {
48
+ bytes[i] = parseInt(paddedHex.substring(i * 2, i * 2 + 2), 16);
49
+ }
50
+ return bytes.buffer;
51
+ }
52
+
53
+ export function generatePrimeSync(
54
+ size: number,
55
+ options?: GeneratePrimeOptions,
56
+ ): Buffer | bigint {
57
+ const safe = options?.safe ?? false;
58
+ const add = toOptionalArrayBuffer(options?.add);
59
+ const rem = toOptionalArrayBuffer(options?.rem);
60
+ const result = Buffer.from(
61
+ getNative().generatePrimeSync(size, safe, add, rem),
62
+ );
63
+ if (options?.bigint) {
64
+ return bufferToBigInt(result);
65
+ }
66
+ return result;
67
+ }
68
+
69
+ type GeneratePrimeCallback = (
70
+ err: Error | null,
71
+ prime: Buffer | bigint,
72
+ ) => void;
73
+
74
+ export function generatePrime(
75
+ size: number,
76
+ options: GeneratePrimeOptions | GeneratePrimeCallback,
77
+ callback?: GeneratePrimeCallback,
78
+ ): void {
79
+ if (typeof options === 'function') {
80
+ callback = options;
81
+ options = {};
82
+ }
83
+ const safe = options?.safe ?? false;
84
+ const add = toOptionalArrayBuffer(options?.add);
85
+ const rem = toOptionalArrayBuffer(options?.rem);
86
+ const wantBigint = options?.bigint ?? false;
87
+
88
+ getNative()
89
+ .generatePrime(size, safe, add, rem)
90
+ .then(ab => {
91
+ const result = Buffer.from(ab);
92
+ if (wantBigint) {
93
+ callback?.(null, bufferToBigInt(result));
94
+ } else {
95
+ callback?.(null, result);
96
+ }
97
+ })
98
+ .catch((err: Error) => callback?.(err, Buffer.alloc(0)));
99
+ }
100
+
101
+ export function checkPrimeSync(
102
+ candidate: BinaryLike | bigint,
103
+ options?: CheckPrimeOptions,
104
+ ): boolean {
105
+ const checks = options?.checks ?? 0;
106
+ const buf =
107
+ typeof candidate === 'bigint'
108
+ ? bigIntToBuffer(candidate)
109
+ : binaryLikeToArrayBuffer(candidate);
110
+ return getNative().checkPrimeSync(buf, checks);
111
+ }
112
+
113
+ type CheckPrimeCallback = (err: Error | null, result: boolean) => void;
114
+
115
+ export function checkPrime(
116
+ candidate: BinaryLike | bigint,
117
+ options: CheckPrimeOptions | CheckPrimeCallback,
118
+ callback?: CheckPrimeCallback,
119
+ ): void {
120
+ if (typeof options === 'function') {
121
+ callback = options;
122
+ options = {};
123
+ }
124
+ const checks = options.checks ?? 0;
125
+ const buf =
126
+ typeof candidate === 'bigint'
127
+ ? bigIntToBuffer(candidate)
128
+ : binaryLikeToArrayBuffer(candidate);
129
+
130
+ getNative()
131
+ .checkPrime(buf, checks)
132
+ .then(result => callback?.(null, result))
133
+ .catch((err: Error) => callback?.(err, false));
134
+ }
@@ -0,0 +1,29 @@
1
+ import type { HybridObject } from 'react-native-nitro-modules';
2
+
3
+ export interface Argon2 extends HybridObject<{ ios: 'c++'; android: 'c++' }> {
4
+ hash(
5
+ algorithm: string,
6
+ message: ArrayBuffer,
7
+ nonce: ArrayBuffer,
8
+ parallelism: number,
9
+ tagLength: number,
10
+ memory: number,
11
+ passes: number,
12
+ version: number,
13
+ secret?: ArrayBuffer,
14
+ associatedData?: ArrayBuffer,
15
+ ): Promise<ArrayBuffer>;
16
+
17
+ hashSync(
18
+ algorithm: string,
19
+ message: ArrayBuffer,
20
+ nonce: ArrayBuffer,
21
+ parallelism: number,
22
+ tagLength: number,
23
+ memory: number,
24
+ passes: number,
25
+ version: number,
26
+ secret?: ArrayBuffer,
27
+ associatedData?: ArrayBuffer,
28
+ ): ArrayBuffer;
29
+ }
@@ -0,0 +1,8 @@
1
+ import type { HybridObject } from 'react-native-nitro-modules';
2
+
3
+ export interface Certificate
4
+ extends HybridObject<{ ios: 'c++'; android: 'c++' }> {
5
+ verifySpkac(spkac: ArrayBuffer): boolean;
6
+ exportPublicKey(spkac: ArrayBuffer): ArrayBuffer;
7
+ exportChallenge(spkac: ArrayBuffer): ArrayBuffer;
8
+ }
@@ -8,6 +8,15 @@ type CipherArgs = {
8
8
  authTagLen?: number;
9
9
  };
10
10
 
11
+ interface CipherInfo {
12
+ name: string;
13
+ nid: number;
14
+ mode: string;
15
+ keyLength: number;
16
+ blockSize?: number;
17
+ ivLength?: number;
18
+ }
19
+
11
20
  export interface Cipher extends HybridObject<{ ios: 'c++'; android: 'c++' }> {
12
21
  update(data: ArrayBuffer): ArrayBuffer;
13
22
  final(): ArrayBuffer;
@@ -17,6 +26,11 @@ export interface Cipher extends HybridObject<{ ios: 'c++'; android: 'c++' }> {
17
26
  setAuthTag(tag: ArrayBuffer): boolean;
18
27
  getAuthTag(): ArrayBuffer;
19
28
  getSupportedCiphers(): string[];
29
+ getCipherInfo(
30
+ name: string,
31
+ keyLength?: number,
32
+ ivLength?: number,
33
+ ): CipherInfo | undefined;
20
34
  }
21
35
 
22
36
  export interface CipherFactory
@@ -0,0 +1,14 @@
1
+ import type { HybridObject } from 'react-native-nitro-modules';
2
+
3
+ export interface DhKeyPair
4
+ extends HybridObject<{ ios: 'c++'; android: 'c++' }> {
5
+ generateKeyPair(): Promise<void>;
6
+ generateKeyPairSync(): void;
7
+
8
+ setPrimeLength(primeLength: number): void;
9
+ setPrime(prime: ArrayBuffer): void;
10
+ setGenerator(generator: number): void;
11
+
12
+ getPublicKey(): ArrayBuffer;
13
+ getPrivateKey(): ArrayBuffer;
14
+ }
@@ -12,4 +12,5 @@ export interface DiffieHellman
12
12
  getPrivateKey(): ArrayBuffer;
13
13
  setPublicKey(publicKey: ArrayBuffer): void;
14
14
  setPrivateKey(privateKey: ArrayBuffer): void;
15
+ getVerifyError(): number;
15
16
  }