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
@@ -3,6 +3,8 @@
3
3
  import { ed_generateKeyPair } from '../ed';
4
4
  import { rsa_generateKeyPairNode, rsa_generateKeyPairNodeSync } from '../rsa';
5
5
  import { ec_generateKeyPairNode, ec_generateKeyPairNodeSync } from '../ec';
6
+ import { dsa_generateKeyPairNode, dsa_generateKeyPairNodeSync } from '../dsa';
7
+ import { dh_generateKeyPairNode, dh_generateKeyPairNodeSync } from '../dhKeyPair';
6
8
  import { kEmptyObject, validateFunction } from '../utils';
7
9
  import { parsePrivateKeyEncoding, parsePublicKeyEncoding } from './utils';
8
10
  export const generateKeyPair = (type, options, callback) => {
@@ -89,6 +91,7 @@ function internalGenerateKeyPair(isAsync, type, options, callback) {
89
91
  case 'rsa-pss':
90
92
  case 'dsa':
91
93
  case 'ec':
94
+ case 'dh':
92
95
  break;
93
96
  default:
94
97
  {
@@ -108,6 +111,10 @@ function internalGenerateKeyPair(isAsync, type, options, callback) {
108
111
  result = await rsa_generateKeyPairNode(type, options, encoding);
109
112
  } else if (type === 'ec') {
110
113
  result = await ec_generateKeyPairNode(options, encoding);
114
+ } else if (type === 'dsa') {
115
+ result = await dsa_generateKeyPairNode(options, encoding);
116
+ } else if (type === 'dh') {
117
+ result = await dh_generateKeyPairNode(options, encoding);
111
118
  } else {
112
119
  throw new Error(`Unsupported key type: ${type}`);
113
120
  }
@@ -128,6 +135,10 @@ function internalGenerateKeyPair(isAsync, type, options, callback) {
128
135
  result = rsa_generateKeyPairNodeSync(type, options, encoding);
129
136
  } else if (type === 'ec') {
130
137
  result = ec_generateKeyPairNodeSync(options, encoding);
138
+ } else if (type === 'dsa') {
139
+ result = dsa_generateKeyPairNodeSync(options, encoding);
140
+ } else if (type === 'dh') {
141
+ result = dh_generateKeyPairNodeSync(options, encoding);
131
142
  } else {
132
143
  throw new Error(`Unsupported key type: ${type}`);
133
144
  }
@@ -1 +1 @@
1
- {"version":3,"names":["ed_generateKeyPair","rsa_generateKeyPairNode","rsa_generateKeyPairNodeSync","ec_generateKeyPairNode","ec_generateKeyPairNodeSync","kEmptyObject","validateFunction","parsePrivateKeyEncoding","parsePublicKeyEncoding","generateKeyPair","type","options","callback","internalGenerateKeyPair","generateKeyPairPromise","Promise","resolve","reject","err","publicKey","privateKey","undefined","generateKeyPairSync","parseKeyPairEncoding","keyType","publicKeyEncoding","privateKeyEncoding","publicFormat","publicType","format","Error","privateFormat","privateType","cipher","passphrase","isAsync","encoding","impl","result","error","then"],"sourceRoot":"../../../src","sources":["keys/generateKeyPair.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["ed_generateKeyPair","rsa_generateKeyPairNode","rsa_generateKeyPairNodeSync","ec_generateKeyPairNode","ec_generateKeyPairNodeSync","dsa_generateKeyPairNode","dsa_generateKeyPairNodeSync","dh_generateKeyPairNode","dh_generateKeyPairNodeSync","kEmptyObject","validateFunction","parsePrivateKeyEncoding","parsePublicKeyEncoding","generateKeyPair","type","options","callback","internalGenerateKeyPair","generateKeyPairPromise","Promise","resolve","reject","err","publicKey","privateKey","undefined","generateKeyPairSync","parseKeyPairEncoding","keyType","publicKeyEncoding","privateKeyEncoding","publicFormat","publicType","format","Error","privateFormat","privateType","cipher","passphrase","isAsync","encoding","impl","result","error","then"],"sourceRoot":"../../../src","sources":["keys/generateKeyPair.ts"],"mappings":";;AAAA,SAASA,kBAAkB,QAAQ,OAAO;AAC1C,SAASC,uBAAuB,EAAEC,2BAA2B,QAAQ,QAAQ;AAC7E,SAASC,sBAAsB,EAAEC,0BAA0B,QAAQ,OAAO;AAC1E,SAASC,uBAAuB,EAAEC,2BAA2B,QAAQ,QAAQ;AAC7E,SACEC,sBAAsB,EACtBC,0BAA0B,QACrB,cAAc;AACrB,SACEC,YAAY,EACZC,gBAAgB,QASX,UAAU;AACjB,SAASC,uBAAuB,EAAEC,sBAAsB,QAAQ,SAAS;AAEzE,OAAO,MAAMC,eAAe,GAAGA,CAC7BC,IAAiB,EACjBC,OAA+B,EAC/BC,QAAiC,KACxB;EACTN,gBAAgB,CAACM,QAAQ,CAAC;EAC1BC,uBAAuB,CAAC,IAAI,EAAEH,IAAI,EAAEC,OAAO,EAAEC,QAAQ,CAAC;AACxD,CAAC;;AAED;AACA;AACA,OAAO,MAAME,sBAAsB,GAAGA,CACpCJ,IAAiB,EACjBC,OAA+B,KACW;EAC1C,OAAO,IAAII,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;IACtCR,eAAe,CAACC,IAAI,EAAEC,OAAO,EAAE,CAACO,GAAG,EAAEC,SAAS,EAAEC,UAAU,KAAK;MAC7D,IAAIF,GAAG,EAAE;QACPD,MAAM,CAAC,CAACC,GAAG,EAAEG,SAAS,CAAC,CAAC;MAC1B,CAAC,MAAM;QACLL,OAAO,CAAC,CAACK,SAAS,EAAE;UAAEF,SAAS;UAAEC;QAAW,CAAC,CAAC,CAAC;MACjD;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC;;AAED;;AAMA,OAAO,SAASE,mBAAmBA,CACjCZ,IAAiB,EACjBC,OAAgC,EACjB;EACf,MAAM,CAACO,GAAG,EAAEC,SAAS,EAAEC,UAAU,CAAC,GAAGP,uBAAuB,CAC1D,KAAK,EACLH,IAAI,EACJC,OAAO,EACPU,SACF,CAAE;EAEF,IAAIH,GAAG,EAAE;IACP,MAAMA,GAAG;EACX;EAEA,OAAO;IACLC,SAAS;IACTC;EACF,CAAC;AACH;AAEA,SAASG,oBAAoBA,CAC3BC,OAAe,EACfb,OAA+B,GAAGN,YAAY,EAC5B;EAClB,MAAM;IAAEoB,iBAAiB;IAAEC;EAAmB,CAAC,GAAGf,OAAO;EAEzD,IAAIgB,YAAY,EAAEC,UAAU;EAC5B,IAAIH,iBAAiB,IAAI,IAAI,EAAE;IAC7BE,YAAY,GAAGC,UAAU,GAAG,CAAC,CAAC;EAChC,CAAC,MAAM,IAAI,OAAOH,iBAAiB,KAAK,QAAQ,EAAE;IAChD,CAAC;MAAEI,MAAM,EAAEF,YAAY;MAAEjB,IAAI,EAAEkB;IAAW,CAAC,GAAGpB,sBAAsB,CAClEiB,iBAAiB,EACjBD,OAAO,EACP,mBACF,CAAC;EACH,CAAC,MAAM;IACL,MAAM,IAAIM,KAAK,CACb,4CAA4C,EAC5CL,iBACF,CAAC;EACH;EAEA,IAAIM,aAAa,EAAEC,WAAW,EAAEC,MAAM,EAAEC,UAAU;EAClD,IAAIR,kBAAkB,IAAI,IAAI,EAAE;IAC9BK,aAAa,GAAGC,WAAW,GAAG,CAAC,CAAC;EAClC,CAAC,MAAM,IAAI,OAAON,kBAAkB,KAAK,QAAQ,EAAE;IACjD,CAAC;MACCG,MAAM,EAAEE,aAAa;MACrBrB,IAAI,EAAEsB,WAAW;MACjBC,MAAM;MACNC;IACF,CAAC,GAAG3B,uBAAuB,CACzBmB,kBAAkB,EAClBF,OAAO,EACP,oBACF,CAAC;EACH,CAAC,MAAM;IACL,MAAM,IAAIM,KAAK,CACb,6CAA6C,EAC7CL,iBACF,CAAC;EACH;EAEA,OAAO;IACLE,YAAY;IACZC,UAAU;IACVG,aAAa;IACbC,WAAW;IACXC,MAAM;IACNC;EACF,CAAC;AACH;AAEA,SAASrB,uBAAuBA,CAC9BsB,OAAgB,EAChBzB,IAAiB,EACjBC,OAA2C,EAC3CC,QAA6C,EACf;EAC9B,MAAMwB,QAAQ,GAAGb,oBAAoB,CAACb,IAAI,EAAEC,OAAO,CAAC;EAEpD,QAAQD,IAAI;IACV,KAAK,SAAS;IACd,KAAK,OAAO;IACZ,KAAK,QAAQ;IACb,KAAK,MAAM;MACT,OAAOd,kBAAkB,CAACuC,OAAO,EAAEzB,IAAI,EAAE0B,QAAQ,EAAExB,QAAQ,CAAC;IAC9D,KAAK,KAAK;IACV,KAAK,SAAS;IACd,KAAK,KAAK;IACV,KAAK,IAAI;IACT,KAAK,IAAI;MACP;IACF;MAAS;QACP,MAAMM,GAAG,GAAG,IAAIY,KAAK,CAAC;AAC5B,qCAAqCpB,IAAI;AACzC;AACA;AACA,OAAO,CAAC;QACF,OAAO,CAACQ,GAAG,EAAEG,SAAS,EAAEA,SAAS,CAAC;MACpC;EACF;EAEA,IAAIc,OAAO,EAAE;IACX,MAAME,IAAI,GAAG,MAAAA,CAAA,KAA4C;MACvD,IAAI;QACF,IAAIC,MAAM;QACV,IAAI5B,IAAI,KAAK,KAAK,IAAIA,IAAI,KAAK,SAAS,EAAE;UACxC4B,MAAM,GAAG,MAAMzC,uBAAuB,CAACa,IAAI,EAAEC,OAAO,EAAEyB,QAAQ,CAAC;QACjE,CAAC,MAAM,IAAI1B,IAAI,KAAK,IAAI,EAAE;UACxB4B,MAAM,GAAG,MAAMvC,sBAAsB,CAACY,OAAO,EAAEyB,QAAQ,CAAC;QAC1D,CAAC,MAAM,IAAI1B,IAAI,KAAK,KAAK,EAAE;UACzB4B,MAAM,GAAG,MAAMrC,uBAAuB,CAACU,OAAO,EAAEyB,QAAQ,CAAC;QAC3D,CAAC,MAAM,IAAI1B,IAAI,KAAK,IAAI,EAAE;UACxB4B,MAAM,GAAG,MAAMnC,sBAAsB,CAACQ,OAAO,EAAEyB,QAAQ,CAAC;QAC1D,CAAC,MAAM;UACL,MAAM,IAAIN,KAAK,CAAC,yBAAyBpB,IAAI,EAAE,CAAC;QAClD;QACA,OAAO,CACLW,SAAS,EACTiB,MAAM,CAACnB,SAAS,EAChBmB,MAAM,CAAClB,UAAU,CAClB;MACH,CAAC,CAAC,OAAOmB,KAAK,EAAE;QACd,OAAO,CAACA,KAAK,EAAWlB,SAAS,EAAEA,SAAS,CAAC;MAC/C;IACF,CAAC;IAEDgB,IAAI,CAAC,CAAC,CAACG,IAAI,CAACF,MAAM,IAAI;MACpB,MAAM,CAACpB,GAAG,EAAEC,SAAS,EAAEC,UAAU,CAAC,GAAGkB,MAAM;MAC3C1B,QAAQ,CAAEM,GAAG,EAAEC,SAAS,EAAEC,UAAU,CAAC;IACvC,CAAC,CAAC;IACF;EACF;EAEA,IAAI;IACF,IAAIkB,MAAM;IACV,IAAI5B,IAAI,KAAK,KAAK,IAAIA,IAAI,KAAK,SAAS,EAAE;MACxC4B,MAAM,GAAGxC,2BAA2B,CAACY,IAAI,EAAEC,OAAO,EAAEyB,QAAQ,CAAC;IAC/D,CAAC,MAAM,IAAI1B,IAAI,KAAK,IAAI,EAAE;MACxB4B,MAAM,GAAGtC,0BAA0B,CAACW,OAAO,EAAEyB,QAAQ,CAAC;IACxD,CAAC,MAAM,IAAI1B,IAAI,KAAK,KAAK,EAAE;MACzB4B,MAAM,GAAGpC,2BAA2B,CAACS,OAAO,EAAEyB,QAAQ,CAAC;IACzD,CAAC,MAAM,IAAI1B,IAAI,KAAK,IAAI,EAAE;MACxB4B,MAAM,GAAGlC,0BAA0B,CAACO,OAAO,EAAEyB,QAAQ,CAAC;IACxD,CAAC,MAAM;MACL,MAAM,IAAIN,KAAK,CAAC,yBAAyBpB,IAAI,EAAE,CAAC;IAClD;IACA,OAAO,CACLW,SAAS,EACTiB,MAAM,CAACnB,SAAS,EAChBmB,MAAM,CAAClB,UAAU,CAClB;EACH,CAAC,CAAC,OAAOmB,KAAK,EAAE;IACd,OAAO,CAACA,KAAK,EAAWlB,SAAS,EAAEA,SAAS,CAAC;EAC/C;AACF","ignoreList":[]}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+
3
+ import { NitroModules } from 'react-native-nitro-modules';
4
+ import { Buffer } from '@craftzdog/react-native-buffer';
5
+ import { binaryLikeToArrayBuffer } from './utils';
6
+ let native;
7
+ function getNative() {
8
+ if (native == null) {
9
+ native = NitroModules.createHybridObject('Prime');
10
+ }
11
+ return native;
12
+ }
13
+ function toOptionalArrayBuffer(value) {
14
+ if (value == null) return undefined;
15
+ if (value instanceof ArrayBuffer) return value;
16
+ return binaryLikeToArrayBuffer(value);
17
+ }
18
+ function bufferToBigInt(buf) {
19
+ let result = 0n;
20
+ for (let i = 0; i < buf.length; i++) {
21
+ result = result << 8n | BigInt(buf[i]);
22
+ }
23
+ return result;
24
+ }
25
+ function bigIntToBuffer(value) {
26
+ if (value === 0n) return new Uint8Array([0]).buffer;
27
+ const hex = value.toString(16);
28
+ const paddedHex = hex.length % 2 ? '0' + hex : hex;
29
+ const bytes = new Uint8Array(paddedHex.length / 2);
30
+ for (let i = 0; i < bytes.length; i++) {
31
+ bytes[i] = parseInt(paddedHex.substring(i * 2, i * 2 + 2), 16);
32
+ }
33
+ return bytes.buffer;
34
+ }
35
+ export function generatePrimeSync(size, options) {
36
+ const safe = options?.safe ?? false;
37
+ const add = toOptionalArrayBuffer(options?.add);
38
+ const rem = toOptionalArrayBuffer(options?.rem);
39
+ const result = Buffer.from(getNative().generatePrimeSync(size, safe, add, rem));
40
+ if (options?.bigint) {
41
+ return bufferToBigInt(result);
42
+ }
43
+ return result;
44
+ }
45
+ export function generatePrime(size, options, callback) {
46
+ if (typeof options === 'function') {
47
+ callback = options;
48
+ options = {};
49
+ }
50
+ const safe = options?.safe ?? false;
51
+ const add = toOptionalArrayBuffer(options?.add);
52
+ const rem = toOptionalArrayBuffer(options?.rem);
53
+ const wantBigint = options?.bigint ?? false;
54
+ getNative().generatePrime(size, safe, add, rem).then(ab => {
55
+ const result = Buffer.from(ab);
56
+ if (wantBigint) {
57
+ callback?.(null, bufferToBigInt(result));
58
+ } else {
59
+ callback?.(null, result);
60
+ }
61
+ }).catch(err => callback?.(err, Buffer.alloc(0)));
62
+ }
63
+ export function checkPrimeSync(candidate, options) {
64
+ const checks = options?.checks ?? 0;
65
+ const buf = typeof candidate === 'bigint' ? bigIntToBuffer(candidate) : binaryLikeToArrayBuffer(candidate);
66
+ return getNative().checkPrimeSync(buf, checks);
67
+ }
68
+ export function checkPrime(candidate, options, callback) {
69
+ if (typeof options === 'function') {
70
+ callback = options;
71
+ options = {};
72
+ }
73
+ const checks = options.checks ?? 0;
74
+ const buf = typeof candidate === 'bigint' ? bigIntToBuffer(candidate) : binaryLikeToArrayBuffer(candidate);
75
+ getNative().checkPrime(buf, checks).then(result => callback?.(null, result)).catch(err => callback?.(err, false));
76
+ }
77
+ //# sourceMappingURL=prime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NitroModules","Buffer","binaryLikeToArrayBuffer","native","getNative","createHybridObject","toOptionalArrayBuffer","value","undefined","ArrayBuffer","bufferToBigInt","buf","result","i","length","BigInt","bigIntToBuffer","Uint8Array","buffer","hex","toString","paddedHex","bytes","parseInt","substring","generatePrimeSync","size","options","safe","add","rem","from","bigint","generatePrime","callback","wantBigint","then","ab","catch","err","alloc","checkPrimeSync","candidate","checks","checkPrime"],"sourceRoot":"../../src","sources":["prime.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=argon2.nitro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["specs/argon2.nitro.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=certificate.nitro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["specs/certificate.nitro.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=dhKeyPair.nitro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["specs/dhKeyPair.nitro.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=dsaKeyPair.nitro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["specs/dsaKeyPair.nitro.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=prime.nitro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["specs/prime.nitro.ts"],"mappings":"","ignoreList":[]}
@@ -2,14 +2,15 @@
2
2
 
3
3
  /* eslint-disable @typescript-eslint/no-unused-vars */
4
4
  import { Buffer as SBuffer } from 'safe-buffer';
5
- import { KFormatType, KeyEncoding } from './utils';
5
+ import { KFormatType, KeyEncoding, KeyType } from './utils';
6
6
  import { CryptoKey, KeyObject, PublicKeyObject, PrivateKeyObject, SecretKeyObject } from './keys';
7
7
  import { bufferLikeToArrayBuffer } from './utils/conversion';
8
+ import { argon2Sync } from './argon2';
8
9
  import { lazyDOMException } from './utils/errors';
9
10
  import { normalizeHashName, HashContext } from './utils/hashnames';
10
11
  import { validateMaxBufferLength } from './utils/validation';
11
12
  import { asyncDigest } from './hash';
12
- import { createSecretKey } from './keys';
13
+ import { createSecretKey, createPublicKey } from './keys';
13
14
  import { NitroModules } from 'react-native-nitro-modules';
14
15
  import { pbkdf2DeriveBits } from './pbkdf2';
15
16
  import { ecImportKey, ecdsaSignVerify, ec_generateKeyPair, ecDeriveBits } from './ec';
@@ -20,12 +21,6 @@ import { createSign, createVerify } from './keys/signVerify';
20
21
  import { ed_generateKeyPairWebCrypto, x_generateKeyPairWebCrypto, xDeriveBits, Ed } from './ed';
21
22
  import { mldsa_generateKeyPairWebCrypto } from './mldsa';
22
23
  import { hkdfDeriveBits } from './hkdf';
23
- // import { pbkdf2DeriveBits } from './pbkdf2';
24
- // import { aesCipher, aesGenerateKey, aesImportKey, getAlgorithmName } from './aes';
25
- // import { rsaCipher, rsaExportKey, rsaImportKey, rsaKeyGenerate } from './rsa';
26
- // import { normalizeAlgorithm, type Operation } from './algorithms';
27
- // import { hmacImportKey } from './mac';
28
-
29
24
  // Temporary enums that need to be defined
30
25
  var KWebCryptoKeyFormat = /*#__PURE__*/function (KWebCryptoKeyFormat) {
31
26
  KWebCryptoKeyFormat[KWebCryptoKeyFormat["kWebCryptoKeyFormatRaw"] = 0] = "kWebCryptoKeyFormatRaw";
@@ -50,21 +45,36 @@ function normalizeAlgorithm(algorithm, _operation) {
50
45
  return algorithm;
51
46
  }
52
47
  function getAlgorithmName(name, length) {
53
- return `${name}${length}`;
48
+ switch (name) {
49
+ case 'AES-CBC':
50
+ return `A${length}CBC`;
51
+ case 'AES-CTR':
52
+ return `A${length}CTR`;
53
+ case 'AES-GCM':
54
+ return `A${length}GCM`;
55
+ case 'AES-KW':
56
+ return `A${length}KW`;
57
+ case 'AES-OCB':
58
+ return `A${length}OCB`;
59
+ case 'ChaCha20-Poly1305':
60
+ return 'C20P';
61
+ default:
62
+ return `${name}${length}`;
63
+ }
54
64
  }
55
65
 
56
66
  // Placeholder implementations for missing functions
57
67
  function ecExportKey(key, format) {
58
68
  const keyObject = key.keyObject;
59
- if (format === KWebCryptoKeyFormat.kWebCryptoKeyFormatSPKI) {
60
- // Export public key in SPKI format
69
+ if (format === KWebCryptoKeyFormat.kWebCryptoKeyFormatRaw) {
70
+ return bufferLikeToArrayBuffer(keyObject.handle.exportKey());
71
+ } else if (format === KWebCryptoKeyFormat.kWebCryptoKeyFormatSPKI) {
61
72
  const exported = keyObject.export({
62
73
  format: 'der',
63
74
  type: 'spki'
64
75
  });
65
76
  return bufferLikeToArrayBuffer(exported);
66
77
  } else if (format === KWebCryptoKeyFormat.kWebCryptoKeyFormatPKCS8) {
67
- // Export private key in PKCS8 format
68
78
  const exported = keyObject.export({
69
79
  format: 'der',
70
80
  type: 'pkcs8'
@@ -133,6 +143,8 @@ async function aesCipher(mode, key, data, algorithm) {
133
143
  return aesCbcCipher(mode, key, data, algorithm);
134
144
  case 'AES-GCM':
135
145
  return aesGcmCipher(mode, key, data, algorithm);
146
+ case 'AES-OCB':
147
+ return aesOcbCipher(mode, key, data, algorithm);
136
148
  default:
137
149
  throw lazyDOMException(`Unsupported AES algorithm: ${name}`, 'NotSupportedError');
138
150
  }
@@ -199,61 +211,40 @@ async function aesCbcCipher(mode, key, data, algorithm) {
199
211
  result.set(new Uint8Array(final), updated.byteLength);
200
212
  return result.buffer;
201
213
  }
202
- async function aesGcmCipher(mode, key, data, algorithm) {
203
- const {
204
- tagLength = 128
205
- } = algorithm;
206
-
207
- // Validate tag length
208
- const validTagLengths = [32, 64, 96, 104, 112, 120, 128];
209
- if (!validTagLengths.includes(tagLength)) {
210
- throw lazyDOMException(`${tagLength} is not a valid AES-GCM tag length`, 'OperationError');
214
+ async function aesAeadCipher(mode, key, data, config, additionalData, tagLength = 128) {
215
+ if (!config.validTagLengths.includes(tagLength)) {
216
+ throw lazyDOMException(`${tagLength} is not a valid ${config.algorithmName} tag length`, 'OperationError');
211
217
  }
212
218
  const tagByteLength = tagLength / 8;
213
-
214
- // Get cipher type based on key length
215
219
  const keyLength = key.algorithm.length;
216
- const cipherType = `aes-${keyLength}-gcm`;
217
-
218
- // Create cipher
220
+ const cipherType = `aes-${keyLength}-${config.cipherSuffix}`;
219
221
  const factory = NitroModules.createHybridObject('CipherFactory');
220
222
  const cipher = factory.createCipher({
221
223
  isCipher: mode === CipherOrWrapMode.kWebCryptoCipherEncrypt,
222
224
  cipherType,
223
225
  cipherKey: bufferLikeToArrayBuffer(key.keyObject.export()),
224
- iv: bufferLikeToArrayBuffer(algorithm.iv),
226
+ iv: config.iv,
225
227
  authTagLen: tagByteLength
226
228
  });
227
229
  let processData;
228
- let authTag;
229
230
  if (mode === CipherOrWrapMode.kWebCryptoCipherDecrypt) {
230
- // For decryption, extract auth tag from end of data
231
231
  const dataView = new Uint8Array(data);
232
232
  if (dataView.byteLength < tagByteLength) {
233
233
  throw lazyDOMException('The provided data is too small.', 'OperationError');
234
234
  }
235
-
236
- // Split data and tag
237
235
  const ciphertextLength = dataView.byteLength - tagByteLength;
238
236
  processData = dataView.slice(0, ciphertextLength).buffer;
239
- authTag = dataView.slice(ciphertextLength).buffer;
240
-
241
- // Set auth tag for verification
237
+ const authTag = dataView.slice(ciphertextLength).buffer;
242
238
  cipher.setAuthTag(authTag);
243
239
  } else {
244
240
  processData = data;
245
241
  }
246
-
247
- // Set additional authenticated data if provided
248
- if (algorithm.additionalData) {
249
- cipher.setAAD(bufferLikeToArrayBuffer(algorithm.additionalData));
242
+ if (additionalData) {
243
+ cipher.setAAD(bufferLikeToArrayBuffer(additionalData));
250
244
  }
251
-
252
- // Process data
253
245
  const updated = cipher.update(processData);
254
246
  const final = cipher.final();
255
247
  if (mode === CipherOrWrapMode.kWebCryptoCipherEncrypt) {
256
- // For encryption, append auth tag to result
257
248
  const tag = cipher.getAuthTag();
258
249
  const result = new Uint8Array(updated.byteLength + final.byteLength + tag.byteLength);
259
250
  result.set(new Uint8Array(updated), 0);
@@ -261,13 +252,32 @@ async function aesGcmCipher(mode, key, data, algorithm) {
261
252
  result.set(new Uint8Array(tag), updated.byteLength + final.byteLength);
262
253
  return result.buffer;
263
254
  } else {
264
- // For decryption, just concatenate plaintext
265
255
  const result = new Uint8Array(updated.byteLength + final.byteLength);
266
256
  result.set(new Uint8Array(updated), 0);
267
257
  result.set(new Uint8Array(final), updated.byteLength);
268
258
  return result.buffer;
269
259
  }
270
260
  }
261
+ async function aesGcmCipher(mode, key, data, algorithm) {
262
+ return aesAeadCipher(mode, key, data, {
263
+ algorithmName: 'AES-GCM',
264
+ validTagLengths: [32, 64, 96, 104, 112, 120, 128],
265
+ cipherSuffix: 'gcm',
266
+ iv: bufferLikeToArrayBuffer(algorithm.iv)
267
+ }, algorithm.additionalData, algorithm.tagLength);
268
+ }
269
+ async function aesOcbCipher(mode, key, data, algorithm) {
270
+ const ivBuffer = bufferLikeToArrayBuffer(algorithm.iv);
271
+ if (ivBuffer.byteLength < 1 || ivBuffer.byteLength > 15) {
272
+ throw lazyDOMException('AES-OCB algorithm.iv must be between 1 and 15 bytes', 'OperationError');
273
+ }
274
+ return aesAeadCipher(mode, key, data, {
275
+ algorithmName: 'AES-OCB',
276
+ validTagLengths: [64, 96, 128],
277
+ cipherSuffix: 'ocb',
278
+ iv: ivBuffer
279
+ }, algorithm.additionalData, algorithm.tagLength);
280
+ }
271
281
  async function aesKwCipher(mode, key, data) {
272
282
  const isWrap = mode === CipherOrWrapMode.kWebCryptoCipherEncrypt;
273
283
 
@@ -691,6 +701,18 @@ function edImportKey(format, data, algorithm, extractable, keyUsages) {
691
701
  // Raw public keys are just the key bytes
692
702
  handle.init(1, keyData); // 1 = public key type
693
703
  keyObject = new PublicKeyObject(handle);
704
+ } else if (format === 'jwk') {
705
+ const jwkData = data;
706
+ const handle = NitroModules.createHybridObject('KeyObjectHandle');
707
+ const keyType = handle.initJwk(jwkData);
708
+ if (keyType === undefined) {
709
+ throw lazyDOMException('Invalid JWK data', 'DataError');
710
+ }
711
+ if (keyType === KeyType.PRIVATE) {
712
+ keyObject = new PrivateKeyObject(handle);
713
+ } else {
714
+ keyObject = new PublicKeyObject(handle);
715
+ }
694
716
  } else {
695
717
  throw lazyDOMException(`Unsupported format for ${name} import: ${format}`, 'NotSupportedError');
696
718
  }
@@ -839,6 +861,8 @@ const exportKeyRaw = key => {
839
861
  // Fall through
840
862
  case 'AES-KW':
841
863
  // Fall through
864
+ case 'AES-OCB':
865
+ // Fall through
842
866
  case 'ChaCha20-Poly1305':
843
867
  // Fall through
844
868
  case 'HMAC':
@@ -873,6 +897,14 @@ const exportKeyJWK = key => {
873
897
  case 'ECDH':
874
898
  jwk.crv ||= key.algorithm.namedCurve;
875
899
  return jwk;
900
+ case 'Ed25519':
901
+ // Fall through
902
+ case 'Ed448':
903
+ // Fall through
904
+ case 'X25519':
905
+ // Fall through
906
+ case 'X448':
907
+ return jwk;
876
908
  case 'AES-CTR':
877
909
  // Fall through
878
910
  case 'AES-CBC':
@@ -881,6 +913,8 @@ const exportKeyJWK = key => {
881
913
  // Fall through
882
914
  case 'AES-KW':
883
915
  // Fall through
916
+ case 'AES-OCB':
917
+ // Fall through
884
918
  case 'ChaCha20-Poly1305':
885
919
  if (key.algorithm.length === undefined) {
886
920
  throw lazyDOMException(`Algorithm ${key.algorithm.name} missing required length property`, 'InvalidAccessError');
@@ -945,6 +979,37 @@ const checkCryptoKeyPairUsages = pair => {
945
979
  }
946
980
  throw lazyDOMException('Usages cannot be empty when creating a key.', 'SyntaxError');
947
981
  };
982
+ function argon2DeriveBits(algorithm, baseKey, length) {
983
+ if (length === 0 || length % 8 !== 0) {
984
+ throw lazyDOMException('Invalid Argon2 derived key length', 'OperationError');
985
+ }
986
+ if (length < 32) {
987
+ throw lazyDOMException('Argon2 derived key length must be at least 32 bits', 'OperationError');
988
+ }
989
+ const {
990
+ nonce,
991
+ parallelism,
992
+ memory,
993
+ passes,
994
+ secretValue,
995
+ associatedData
996
+ } = algorithm;
997
+ const tagLength = length / 8;
998
+ const message = baseKey.keyObject.export();
999
+ const algName = algorithm.name.toLowerCase();
1000
+ const result = argon2Sync(algName, {
1001
+ message,
1002
+ nonce: nonce ?? new Uint8Array(0),
1003
+ parallelism: parallelism ?? 1,
1004
+ tagLength,
1005
+ memory: memory ?? 65536,
1006
+ passes: passes ?? 3,
1007
+ secret: secretValue,
1008
+ associatedData,
1009
+ version: algorithm.version
1010
+ });
1011
+ return bufferLikeToArrayBuffer(result);
1012
+ }
948
1013
 
949
1014
  // Type guard to check if result is CryptoKeyPair
950
1015
  export function isCryptoKeyPair(result) {
@@ -1097,6 +1162,8 @@ const cipherOrWrap = async (mode, algorithm, key, data, op) => {
1097
1162
  case 'AES-CBC':
1098
1163
  // Fall through
1099
1164
  case 'AES-GCM':
1165
+ // Fall through
1166
+ case 'AES-OCB':
1100
1167
  return aesCipher(mode, key, data, algorithm);
1101
1168
  case 'AES-KW':
1102
1169
  return aesKwCipher(mode, key, data);
@@ -1104,7 +1171,49 @@ const cipherOrWrap = async (mode, algorithm, key, data, op) => {
1104
1171
  return chaCha20Poly1305Cipher(mode, key, data, algorithm);
1105
1172
  }
1106
1173
  };
1174
+ const SUPPORTED_ALGORITHMS = {
1175
+ encrypt: new Set(['RSA-OAEP', 'AES-CTR', 'AES-CBC', 'AES-GCM', 'AES-OCB', 'ChaCha20-Poly1305']),
1176
+ decrypt: new Set(['RSA-OAEP', 'AES-CTR', 'AES-CBC', 'AES-GCM', 'AES-OCB', 'ChaCha20-Poly1305']),
1177
+ sign: new Set(['RSASSA-PKCS1-v1_5', 'RSA-PSS', 'ECDSA', 'HMAC', 'Ed25519', 'Ed448', 'ML-DSA-44', 'ML-DSA-65', 'ML-DSA-87']),
1178
+ verify: new Set(['RSASSA-PKCS1-v1_5', 'RSA-PSS', 'ECDSA', 'HMAC', 'Ed25519', 'Ed448', 'ML-DSA-44', 'ML-DSA-65', 'ML-DSA-87']),
1179
+ digest: new Set(['SHA-1', 'SHA-256', 'SHA-384', 'SHA-512']),
1180
+ generateKey: new Set(['RSASSA-PKCS1-v1_5', 'RSA-PSS', 'RSA-OAEP', 'ECDSA', 'ECDH', 'Ed25519', 'Ed448', 'X25519', 'X448', 'AES-CTR', 'AES-CBC', 'AES-GCM', 'AES-KW', 'AES-OCB', 'ChaCha20-Poly1305', 'HMAC', 'ML-DSA-44', 'ML-DSA-65', 'ML-DSA-87']),
1181
+ importKey: new Set(['RSASSA-PKCS1-v1_5', 'RSA-PSS', 'RSA-OAEP', 'ECDSA', 'ECDH', 'Ed25519', 'Ed448', 'X25519', 'X448', 'AES-CTR', 'AES-CBC', 'AES-GCM', 'AES-KW', 'AES-OCB', 'ChaCha20-Poly1305', 'HMAC', 'HKDF', 'PBKDF2', 'Argon2d', 'Argon2i', 'Argon2id', 'ML-DSA-44', 'ML-DSA-65', 'ML-DSA-87']),
1182
+ exportKey: new Set(['RSASSA-PKCS1-v1_5', 'RSA-PSS', 'RSA-OAEP', 'ECDSA', 'ECDH', 'Ed25519', 'Ed448', 'X25519', 'X448', 'AES-CTR', 'AES-CBC', 'AES-GCM', 'AES-KW', 'AES-OCB', 'ChaCha20-Poly1305', 'HMAC', 'ML-DSA-44', 'ML-DSA-65', 'ML-DSA-87']),
1183
+ deriveBits: new Set(['PBKDF2', 'HKDF', 'ECDH', 'X25519', 'X448', 'Argon2d', 'Argon2i', 'Argon2id']),
1184
+ wrapKey: new Set(['AES-CTR', 'AES-CBC', 'AES-GCM', 'AES-KW', 'AES-OCB', 'ChaCha20-Poly1305', 'RSA-OAEP']),
1185
+ unwrapKey: new Set(['AES-CTR', 'AES-CBC', 'AES-GCM', 'AES-KW', 'AES-OCB', 'ChaCha20-Poly1305', 'RSA-OAEP'])
1186
+ };
1187
+ const ASYMMETRIC_ALGORITHMS = new Set(['RSASSA-PKCS1-v1_5', 'RSA-PSS', 'RSA-OAEP', 'ECDSA', 'ECDH', 'Ed25519', 'Ed448', 'X25519', 'X448', 'ML-DSA-44', 'ML-DSA-65', 'ML-DSA-87']);
1107
1188
  export class Subtle {
1189
+ static supports(operation, algorithm, _lengthOrAdditionalAlgorithm) {
1190
+ let normalizedAlgorithm;
1191
+ try {
1192
+ normalizedAlgorithm = normalizeAlgorithm(algorithm, operation === 'getPublicKey' ? 'exportKey' : operation);
1193
+ } catch {
1194
+ return false;
1195
+ }
1196
+ const name = normalizedAlgorithm.name;
1197
+ if (operation === 'getPublicKey') {
1198
+ return ASYMMETRIC_ALGORITHMS.has(name);
1199
+ }
1200
+ if (operation === 'deriveKey') {
1201
+ // deriveKey decomposes to deriveBits + importKey of additional algorithm
1202
+ if (!SUPPORTED_ALGORITHMS.deriveBits?.has(name)) return false;
1203
+ if (_lengthOrAdditionalAlgorithm != null) {
1204
+ try {
1205
+ const additionalAlg = normalizeAlgorithm(_lengthOrAdditionalAlgorithm, 'importKey');
1206
+ return SUPPORTED_ALGORITHMS.importKey?.has(additionalAlg.name) ?? false;
1207
+ } catch {
1208
+ return false;
1209
+ }
1210
+ }
1211
+ return true;
1212
+ }
1213
+ const supported = SUPPORTED_ALGORITHMS[operation];
1214
+ if (!supported) return false;
1215
+ return supported.has(name);
1216
+ }
1108
1217
  async decrypt(algorithm, key, data) {
1109
1218
  const normalizedAlgorithm = normalizeAlgorithm(algorithm, 'decrypt');
1110
1219
  return cipherOrWrap(CipherOrWrapMode.kWebCryptoCipherDecrypt, normalizedAlgorithm, key, bufferLikeToArrayBuffer(data), 'decrypt');
@@ -1130,6 +1239,10 @@ export class Subtle {
1130
1239
  return ecDeriveBits(algorithm, baseKey, length);
1131
1240
  case 'HKDF':
1132
1241
  return hkdfDeriveBits(algorithm, baseKey, length);
1242
+ case 'Argon2d':
1243
+ case 'Argon2i':
1244
+ case 'Argon2id':
1245
+ return argon2DeriveBits(algorithm, baseKey, length);
1133
1246
  }
1134
1247
  throw new Error(`'subtle.deriveBits()' for ${algorithm.name} is not implemented.`);
1135
1248
  }
@@ -1154,9 +1267,17 @@ export class Subtle {
1154
1267
  case 'X448':
1155
1268
  derivedBits = await xDeriveBits(algorithm, baseKey, length);
1156
1269
  break;
1270
+ case 'ECDH':
1271
+ derivedBits = await ecDeriveBits(algorithm, baseKey, length);
1272
+ break;
1157
1273
  case 'HKDF':
1158
1274
  derivedBits = hkdfDeriveBits(algorithm, baseKey, length);
1159
1275
  break;
1276
+ case 'Argon2d':
1277
+ case 'Argon2i':
1278
+ case 'Argon2id':
1279
+ derivedBits = argon2DeriveBits(algorithm, baseKey, length);
1280
+ break;
1160
1281
  default:
1161
1282
  throw new Error(`'subtle.deriveKey()' for ${algorithm.name} is not implemented.`);
1162
1283
  }
@@ -1170,6 +1291,7 @@ export class Subtle {
1170
1291
  }
1171
1292
  async exportKey(format, key) {
1172
1293
  if (!key.extractable) throw new Error('key is not extractable');
1294
+ if (format === 'raw-secret' || format === 'raw-public') format = 'raw';
1173
1295
  switch (format) {
1174
1296
  case 'spki':
1175
1297
  return await exportKeySpki(key);
@@ -1275,6 +1397,8 @@ export class Subtle {
1275
1397
  case 'AES-GCM':
1276
1398
  // Fall through
1277
1399
  case 'AES-KW':
1400
+ // Fall through
1401
+ case 'AES-OCB':
1278
1402
  result = await aesGenerateKey(algorithm, extractable, keyUsages);
1279
1403
  break;
1280
1404
  case 'ChaCha20-Poly1305':
@@ -1318,7 +1442,18 @@ export class Subtle {
1318
1442
  }
1319
1443
  return result;
1320
1444
  }
1445
+ async getPublicKey(key, keyUsages) {
1446
+ if (key.type === 'secret') {
1447
+ throw lazyDOMException('key must be a private key', 'NotSupportedError');
1448
+ }
1449
+ if (key.type !== 'private') {
1450
+ throw lazyDOMException('key must be a private key', 'InvalidAccessError');
1451
+ }
1452
+ const publicKeyObject = createPublicKey(key.keyObject);
1453
+ return publicKeyObject.toCryptoKey(key.algorithm, true, keyUsages);
1454
+ }
1321
1455
  async importKey(format, data, algorithm, extractable, keyUsages) {
1456
+ if (format === 'raw-secret' || format === 'raw-public') format = 'raw';
1322
1457
  const normalizedAlgorithm = normalizeAlgorithm(algorithm, 'importKey');
1323
1458
  let result;
1324
1459
  switch (normalizedAlgorithm.name) {
@@ -1345,10 +1480,15 @@ export class Subtle {
1345
1480
  // Fall through
1346
1481
  case 'AES-KW':
1347
1482
  // Fall through
1483
+ case 'AES-OCB':
1484
+ // Fall through
1348
1485
  case 'ChaCha20-Poly1305':
1349
1486
  result = await aesImportKey(normalizedAlgorithm, format, data, extractable, keyUsages);
1350
1487
  break;
1351
1488
  case 'PBKDF2':
1489
+ case 'Argon2d':
1490
+ case 'Argon2i':
1491
+ case 'Argon2id':
1352
1492
  result = await importGenericSecretKey(normalizedAlgorithm, format, data, extractable, keyUsages);
1353
1493
  break;
1354
1494
  case 'HKDF':
@@ -1468,6 +1608,7 @@ function getKeyLength(algorithm) {
1468
1608
  case 'AES-CBC':
1469
1609
  case 'AES-GCM':
1470
1610
  case 'AES-KW':
1611
+ case 'AES-OCB':
1471
1612
  case 'ChaCha20-Poly1305':
1472
1613
  return algorithm.length || 256;
1473
1614
  case 'HMAC':