@hxa-rn/react-native-quick-crypto 1.1.0-beta.1

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 (1236) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +171 -0
  3. package/dist/commonjs/argon2.js +39 -0
  4. package/dist/commonjs/argon2.js.map +1 -0
  5. package/dist/commonjs/blake3.js +106 -0
  6. package/dist/commonjs/blake3.js.map +1 -0
  7. package/dist/commonjs/certificate.js +35 -0
  8. package/dist/commonjs/certificate.js.map +1 -0
  9. package/dist/commonjs/cipher.js +202 -0
  10. package/dist/commonjs/cipher.js.map +1 -0
  11. package/dist/commonjs/constants.js +32 -0
  12. package/dist/commonjs/constants.js.map +1 -0
  13. package/dist/commonjs/dh-groups.js +29 -0
  14. package/dist/commonjs/dh-groups.js.map +1 -0
  15. package/dist/commonjs/dhKeyPair.js +113 -0
  16. package/dist/commonjs/dhKeyPair.js.map +1 -0
  17. package/dist/commonjs/diffie-hellman.js +155 -0
  18. package/dist/commonjs/diffie-hellman.js.map +1 -0
  19. package/dist/commonjs/dsa.js +96 -0
  20. package/dist/commonjs/dsa.js.map +1 -0
  21. package/dist/commonjs/ec.js +368 -0
  22. package/dist/commonjs/ec.js.map +1 -0
  23. package/dist/commonjs/ecdh.js +114 -0
  24. package/dist/commonjs/ecdh.js.map +1 -0
  25. package/dist/commonjs/ed.js +395 -0
  26. package/dist/commonjs/ed.js.map +1 -0
  27. package/dist/commonjs/expo-plugin/@types.js +2 -0
  28. package/dist/commonjs/expo-plugin/@types.js.map +1 -0
  29. package/dist/commonjs/expo-plugin/withRNQC.js +25 -0
  30. package/dist/commonjs/expo-plugin/withRNQC.js.map +1 -0
  31. package/dist/commonjs/expo-plugin/withSodiumAndroid.js +25 -0
  32. package/dist/commonjs/expo-plugin/withSodiumAndroid.js.map +1 -0
  33. package/dist/commonjs/expo-plugin/withSodiumIos.js +23 -0
  34. package/dist/commonjs/expo-plugin/withSodiumIos.js.map +1 -0
  35. package/dist/commonjs/expo-plugin/withXCode.js +51 -0
  36. package/dist/commonjs/expo-plugin/withXCode.js.map +1 -0
  37. package/dist/commonjs/hash.js +241 -0
  38. package/dist/commonjs/hash.js.map +1 -0
  39. package/dist/commonjs/hkdf.js +81 -0
  40. package/dist/commonjs/hkdf.js.map +1 -0
  41. package/dist/commonjs/hmac.js +121 -0
  42. package/dist/commonjs/hmac.js.map +1 -0
  43. package/dist/commonjs/index.js +358 -0
  44. package/dist/commonjs/index.js.map +1 -0
  45. package/dist/commonjs/keys/classes.js +272 -0
  46. package/dist/commonjs/keys/classes.js.map +1 -0
  47. package/dist/commonjs/keys/generateKeyPair.js +156 -0
  48. package/dist/commonjs/keys/generateKeyPair.js.map +1 -0
  49. package/dist/commonjs/keys/index.js +327 -0
  50. package/dist/commonjs/keys/index.js.map +1 -0
  51. package/dist/commonjs/keys/publicCipher.js +165 -0
  52. package/dist/commonjs/keys/publicCipher.js.map +1 -0
  53. package/dist/commonjs/keys/signVerify.js +225 -0
  54. package/dist/commonjs/keys/signVerify.js.map +1 -0
  55. package/dist/commonjs/keys/utils.js +123 -0
  56. package/dist/commonjs/keys/utils.js.map +1 -0
  57. package/dist/commonjs/mldsa.js +74 -0
  58. package/dist/commonjs/mldsa.js.map +1 -0
  59. package/dist/commonjs/mlkem.js +224 -0
  60. package/dist/commonjs/mlkem.js.map +1 -0
  61. package/dist/commonjs/pbkdf2.js +106 -0
  62. package/dist/commonjs/pbkdf2.js.map +1 -0
  63. package/dist/commonjs/prime.js +96 -0
  64. package/dist/commonjs/prime.js.map +1 -0
  65. package/dist/commonjs/random.js +233 -0
  66. package/dist/commonjs/random.js.map +1 -0
  67. package/dist/commonjs/rsa.js +207 -0
  68. package/dist/commonjs/rsa.js.map +1 -0
  69. package/dist/commonjs/scrypt.js +98 -0
  70. package/dist/commonjs/scrypt.js.map +1 -0
  71. package/dist/commonjs/specs/v1/NativeQuickCrypto.js +17 -0
  72. package/dist/commonjs/specs/v1/NativeQuickCrypto.js.map +1 -0
  73. package/dist/commonjs/specs/v1/argon2.nitro.js +6 -0
  74. package/dist/commonjs/specs/v1/argon2.nitro.js.map +1 -0
  75. package/dist/commonjs/specs/v1/blake3.nitro.js +6 -0
  76. package/dist/commonjs/specs/v1/blake3.nitro.js.map +1 -0
  77. package/dist/commonjs/specs/v1/certificate.nitro.js +6 -0
  78. package/dist/commonjs/specs/v1/certificate.nitro.js.map +1 -0
  79. package/dist/commonjs/specs/v1/cipher.nitro.js +6 -0
  80. package/dist/commonjs/specs/v1/cipher.nitro.js.map +1 -0
  81. package/dist/commonjs/specs/v1/dhKeyPair.nitro.js +6 -0
  82. package/dist/commonjs/specs/v1/dhKeyPair.nitro.js.map +1 -0
  83. package/dist/commonjs/specs/v1/diffie-hellman.nitro.js +6 -0
  84. package/dist/commonjs/specs/v1/diffie-hellman.nitro.js.map +1 -0
  85. package/dist/commonjs/specs/v1/dsaKeyPair.nitro.js +6 -0
  86. package/dist/commonjs/specs/v1/dsaKeyPair.nitro.js.map +1 -0
  87. package/dist/commonjs/specs/v1/ecKeyPair.nitro.js +6 -0
  88. package/dist/commonjs/specs/v1/ecKeyPair.nitro.js.map +1 -0
  89. package/dist/commonjs/specs/v1/ecdh.nitro.js +6 -0
  90. package/dist/commonjs/specs/v1/ecdh.nitro.js.map +1 -0
  91. package/dist/commonjs/specs/v1/edKeyPair.nitro.js +6 -0
  92. package/dist/commonjs/specs/v1/edKeyPair.nitro.js.map +1 -0
  93. package/dist/commonjs/specs/v1/hash.nitro.js +6 -0
  94. package/dist/commonjs/specs/v1/hash.nitro.js.map +1 -0
  95. package/dist/commonjs/specs/v1/hkdf.nitro.js +6 -0
  96. package/dist/commonjs/specs/v1/hkdf.nitro.js.map +1 -0
  97. package/dist/commonjs/specs/v1/hmac.nitro.js +6 -0
  98. package/dist/commonjs/specs/v1/hmac.nitro.js.map +1 -0
  99. package/dist/commonjs/specs/v1/keyObjectHandle.nitro.js +6 -0
  100. package/dist/commonjs/specs/v1/keyObjectHandle.nitro.js.map +1 -0
  101. package/dist/commonjs/specs/v1/kmac.nitro.js +6 -0
  102. package/dist/commonjs/specs/v1/kmac.nitro.js.map +1 -0
  103. package/dist/commonjs/specs/v1/mlDsaKeyPair.nitro.js +6 -0
  104. package/dist/commonjs/specs/v1/mlDsaKeyPair.nitro.js.map +1 -0
  105. package/dist/commonjs/specs/v1/mlKemKeyPair.nitro.js +6 -0
  106. package/dist/commonjs/specs/v1/mlKemKeyPair.nitro.js.map +1 -0
  107. package/dist/commonjs/specs/v1/pbkdf2.nitro.js +6 -0
  108. package/dist/commonjs/specs/v1/pbkdf2.nitro.js.map +1 -0
  109. package/dist/commonjs/specs/v1/prime.nitro.js +6 -0
  110. package/dist/commonjs/specs/v1/prime.nitro.js.map +1 -0
  111. package/dist/commonjs/specs/v1/random.nitro.js +6 -0
  112. package/dist/commonjs/specs/v1/random.nitro.js.map +1 -0
  113. package/dist/commonjs/specs/v1/rsaCipher.nitro.js +6 -0
  114. package/dist/commonjs/specs/v1/rsaCipher.nitro.js.map +1 -0
  115. package/dist/commonjs/specs/v1/rsaKeyPair.nitro.js +6 -0
  116. package/dist/commonjs/specs/v1/rsaKeyPair.nitro.js.map +1 -0
  117. package/dist/commonjs/specs/v1/scrypt.nitro.js +6 -0
  118. package/dist/commonjs/specs/v1/scrypt.nitro.js.map +1 -0
  119. package/dist/commonjs/specs/v1/sign.nitro.js +6 -0
  120. package/dist/commonjs/specs/v1/sign.nitro.js.map +1 -0
  121. package/dist/commonjs/specs/v1/utils.nitro.js +6 -0
  122. package/dist/commonjs/specs/v1/utils.nitro.js.map +1 -0
  123. package/dist/commonjs/specs/v1/x509certificate.nitro.js +6 -0
  124. package/dist/commonjs/specs/v1/x509certificate.nitro.js.map +1 -0
  125. package/dist/commonjs/subtle.js +1811 -0
  126. package/dist/commonjs/subtle.js.map +1 -0
  127. package/dist/commonjs/utils/cipher.js +64 -0
  128. package/dist/commonjs/utils/cipher.js.map +1 -0
  129. package/dist/commonjs/utils/conversion.js +181 -0
  130. package/dist/commonjs/utils/conversion.js.map +1 -0
  131. package/dist/commonjs/utils/errors.js +14 -0
  132. package/dist/commonjs/utils/errors.js.map +1 -0
  133. package/dist/commonjs/utils/hashnames.js +122 -0
  134. package/dist/commonjs/utils/hashnames.js.map +1 -0
  135. package/dist/commonjs/utils/index.js +83 -0
  136. package/dist/commonjs/utils/index.js.map +1 -0
  137. package/dist/commonjs/utils/noble.js +82 -0
  138. package/dist/commonjs/utils/noble.js.map +1 -0
  139. package/dist/commonjs/utils/timingSafeEqual.js +24 -0
  140. package/dist/commonjs/utils/timingSafeEqual.js.map +1 -0
  141. package/dist/commonjs/utils/types.js +55 -0
  142. package/dist/commonjs/utils/types.js.map +1 -0
  143. package/dist/commonjs/utils/validation.js +98 -0
  144. package/dist/commonjs/utils/validation.js.map +1 -0
  145. package/dist/commonjs/x509certificate.js +193 -0
  146. package/dist/commonjs/x509certificate.js.map +1 -0
  147. package/dist/module/argon2.js +32 -0
  148. package/dist/module/argon2.js.map +1 -0
  149. package/dist/module/blake3.js +96 -0
  150. package/dist/module/blake3.js.map +1 -0
  151. package/dist/module/certificate.js +28 -0
  152. package/dist/module/certificate.js.map +1 -0
  153. package/dist/module/cipher.js +194 -0
  154. package/dist/module/cipher.js.map +1 -0
  155. package/dist/module/constants.js +26 -0
  156. package/dist/module/constants.js.map +1 -0
  157. package/dist/module/dh-groups.js +23 -0
  158. package/dist/module/dh-groups.js.map +1 -0
  159. package/dist/module/dhKeyPair.js +104 -0
  160. package/dist/module/dhKeyPair.js.map +1 -0
  161. package/dist/module/diffie-hellman.js +147 -0
  162. package/dist/module/diffie-hellman.js.map +1 -0
  163. package/dist/module/dsa.js +87 -0
  164. package/dist/module/dsa.js.map +1 -0
  165. package/dist/module/ec.js +354 -0
  166. package/dist/module/ec.js.map +1 -0
  167. package/dist/module/ecdh.js +106 -0
  168. package/dist/module/ecdh.js.map +1 -0
  169. package/dist/module/ed.js +383 -0
  170. package/dist/module/ed.js.map +1 -0
  171. package/dist/module/expo-plugin/@types.js +2 -0
  172. package/dist/module/expo-plugin/@types.js.map +1 -0
  173. package/dist/module/expo-plugin/withRNQC.js +19 -0
  174. package/dist/module/expo-plugin/withRNQC.js.map +1 -0
  175. package/dist/module/expo-plugin/withSodiumAndroid.js +18 -0
  176. package/dist/module/expo-plugin/withSodiumAndroid.js.map +1 -0
  177. package/dist/module/expo-plugin/withSodiumIos.js +15 -0
  178. package/dist/module/expo-plugin/withSodiumIos.js.map +1 -0
  179. package/dist/module/expo-plugin/withXCode.js +44 -0
  180. package/dist/module/expo-plugin/withXCode.js.map +1 -0
  181. package/dist/module/hash.js +230 -0
  182. package/dist/module/hash.js.map +1 -0
  183. package/dist/module/hkdf.js +73 -0
  184. package/dist/module/hkdf.js.map +1 -0
  185. package/dist/module/hmac.js +114 -0
  186. package/dist/module/hmac.js.map +1 -0
  187. package/dist/module/index.js +134 -0
  188. package/dist/module/index.js.map +1 -0
  189. package/dist/module/keys/classes.js +261 -0
  190. package/dist/module/keys/classes.js.map +1 -0
  191. package/dist/module/keys/generateKeyPair.js +148 -0
  192. package/dist/module/keys/generateKeyPair.js.map +1 -0
  193. package/dist/module/keys/index.js +190 -0
  194. package/dist/module/keys/index.js.map +1 -0
  195. package/dist/module/keys/publicCipher.js +156 -0
  196. package/dist/module/keys/publicCipher.js.map +1 -0
  197. package/dist/module/keys/signVerify.js +213 -0
  198. package/dist/module/keys/signVerify.js.map +1 -0
  199. package/dist/module/keys/utils.js +112 -0
  200. package/dist/module/keys/utils.js.map +1 -0
  201. package/dist/module/mldsa.js +66 -0
  202. package/dist/module/mldsa.js.map +1 -0
  203. package/dist/module/mlkem.js +214 -0
  204. package/dist/module/mlkem.js.map +1 -0
  205. package/dist/module/pbkdf2.js +98 -0
  206. package/dist/module/pbkdf2.js.map +1 -0
  207. package/dist/module/prime.js +87 -0
  208. package/dist/module/prime.js.map +1 -0
  209. package/dist/module/random.js +220 -0
  210. package/dist/module/random.js.map +1 -0
  211. package/dist/module/rsa.js +197 -0
  212. package/dist/module/rsa.js.map +1 -0
  213. package/dist/module/scrypt.js +91 -0
  214. package/dist/module/scrypt.js.map +1 -0
  215. package/dist/module/specs/v1/NativeQuickCrypto.js +13 -0
  216. package/dist/module/specs/v1/NativeQuickCrypto.js.map +1 -0
  217. package/dist/module/specs/v1/argon2.nitro.js +2 -0
  218. package/dist/module/specs/v1/argon2.nitro.js.map +1 -0
  219. package/dist/module/specs/v1/blake3.nitro.js +2 -0
  220. package/dist/module/specs/v1/blake3.nitro.js.map +1 -0
  221. package/dist/module/specs/v1/certificate.nitro.js +2 -0
  222. package/dist/module/specs/v1/certificate.nitro.js.map +1 -0
  223. package/dist/module/specs/v1/cipher.nitro.js +2 -0
  224. package/dist/module/specs/v1/cipher.nitro.js.map +1 -0
  225. package/dist/module/specs/v1/dhKeyPair.nitro.js +2 -0
  226. package/dist/module/specs/v1/dhKeyPair.nitro.js.map +1 -0
  227. package/dist/module/specs/v1/diffie-hellman.nitro.js +2 -0
  228. package/dist/module/specs/v1/diffie-hellman.nitro.js.map +1 -0
  229. package/dist/module/specs/v1/dsaKeyPair.nitro.js +2 -0
  230. package/dist/module/specs/v1/dsaKeyPair.nitro.js.map +1 -0
  231. package/dist/module/specs/v1/ecKeyPair.nitro.js +2 -0
  232. package/dist/module/specs/v1/ecKeyPair.nitro.js.map +1 -0
  233. package/dist/module/specs/v1/ecdh.nitro.js +2 -0
  234. package/dist/module/specs/v1/ecdh.nitro.js.map +1 -0
  235. package/dist/module/specs/v1/edKeyPair.nitro.js +2 -0
  236. package/dist/module/specs/v1/edKeyPair.nitro.js.map +1 -0
  237. package/dist/module/specs/v1/hash.nitro.js +2 -0
  238. package/dist/module/specs/v1/hash.nitro.js.map +1 -0
  239. package/dist/module/specs/v1/hkdf.nitro.js +2 -0
  240. package/dist/module/specs/v1/hkdf.nitro.js.map +1 -0
  241. package/dist/module/specs/v1/hmac.nitro.js +2 -0
  242. package/dist/module/specs/v1/hmac.nitro.js.map +1 -0
  243. package/dist/module/specs/v1/keyObjectHandle.nitro.js +2 -0
  244. package/dist/module/specs/v1/keyObjectHandle.nitro.js.map +1 -0
  245. package/dist/module/specs/v1/kmac.nitro.js +2 -0
  246. package/dist/module/specs/v1/kmac.nitro.js.map +1 -0
  247. package/dist/module/specs/v1/mlDsaKeyPair.nitro.js +2 -0
  248. package/dist/module/specs/v1/mlDsaKeyPair.nitro.js.map +1 -0
  249. package/dist/module/specs/v1/mlKemKeyPair.nitro.js +2 -0
  250. package/dist/module/specs/v1/mlKemKeyPair.nitro.js.map +1 -0
  251. package/dist/module/specs/v1/pbkdf2.nitro.js +2 -0
  252. package/dist/module/specs/v1/pbkdf2.nitro.js.map +1 -0
  253. package/dist/module/specs/v1/prime.nitro.js +2 -0
  254. package/dist/module/specs/v1/prime.nitro.js.map +1 -0
  255. package/dist/module/specs/v1/random.nitro.js +2 -0
  256. package/dist/module/specs/v1/random.nitro.js.map +1 -0
  257. package/dist/module/specs/v1/rsaCipher.nitro.js +2 -0
  258. package/dist/module/specs/v1/rsaCipher.nitro.js.map +1 -0
  259. package/dist/module/specs/v1/rsaKeyPair.nitro.js +2 -0
  260. package/dist/module/specs/v1/rsaKeyPair.nitro.js.map +1 -0
  261. package/dist/module/specs/v1/scrypt.nitro.js +2 -0
  262. package/dist/module/specs/v1/scrypt.nitro.js.map +1 -0
  263. package/dist/module/specs/v1/sign.nitro.js +2 -0
  264. package/dist/module/specs/v1/sign.nitro.js.map +1 -0
  265. package/dist/module/specs/v1/utils.nitro.js +2 -0
  266. package/dist/module/specs/v1/utils.nitro.js.map +1 -0
  267. package/dist/module/specs/v1/x509certificate.nitro.js +2 -0
  268. package/dist/module/specs/v1/x509certificate.nitro.js.map +1 -0
  269. package/dist/module/subtle.js +1803 -0
  270. package/dist/module/subtle.js.map +1 -0
  271. package/dist/module/utils/cipher.js +54 -0
  272. package/dist/module/utils/cipher.js.map +1 -0
  273. package/dist/module/utils/conversion.js +146 -0
  274. package/dist/module/utils/conversion.js.map +1 -0
  275. package/dist/module/utils/errors.js +8 -0
  276. package/dist/module/utils/errors.js.map +1 -0
  277. package/dist/module/utils/hashnames.js +118 -0
  278. package/dist/module/utils/hashnames.js.map +1 -0
  279. package/dist/module/utils/index.js +8 -0
  280. package/dist/module/utils/index.js.map +1 -0
  281. package/dist/module/utils/noble.js +74 -0
  282. package/dist/module/utils/noble.js.map +1 -0
  283. package/dist/module/utils/timingSafeEqual.js +18 -0
  284. package/dist/module/utils/timingSafeEqual.js.map +1 -0
  285. package/dist/module/utils/types.js +55 -0
  286. package/dist/module/utils/types.js.map +1 -0
  287. package/dist/module/utils/validation.js +85 -0
  288. package/dist/module/utils/validation.js.map +1 -0
  289. package/dist/module/x509certificate.js +186 -0
  290. package/dist/module/x509certificate.js.map +1 -0
  291. package/dist/typescript/argon2.d.ts +15 -0
  292. package/dist/typescript/blake3.d.ts +32 -0
  293. package/dist/typescript/certificate.d.ts +7 -0
  294. package/dist/typescript/cipher.d.ts +74 -0
  295. package/dist/typescript/constants.d.ts +20 -0
  296. package/dist/typescript/dh-groups.d.ts +4 -0
  297. package/dist/typescript/dhKeyPair.d.ts +18 -0
  298. package/dist/typescript/diffie-hellman.d.ts +17 -0
  299. package/dist/typescript/dsa.d.ts +18 -0
  300. package/dist/typescript/ec.d.ts +23 -0
  301. package/dist/typescript/ecdh.d.ts +18 -0
  302. package/dist/typescript/ed.d.ts +46 -0
  303. package/dist/typescript/hash.d.ts +125 -0
  304. package/dist/typescript/hkdf.d.ts +21 -0
  305. package/dist/typescript/hmac.d.ts +65 -0
  306. package/dist/typescript/index.d.ts +224 -0
  307. package/dist/typescript/keys/classes.d.ts +85 -0
  308. package/dist/typescript/keys/generateKeyPair.d.ts +5 -0
  309. package/dist/typescript/keys/index.d.ts +23 -0
  310. package/dist/typescript/keys/publicCipher.d.ts +22 -0
  311. package/dist/typescript/keys/signVerify.d.ts +34 -0
  312. package/dist/typescript/keys/utils.d.ts +33 -0
  313. package/dist/typescript/mldsa.d.ts +17 -0
  314. package/dist/typescript/mlkem.d.ts +29 -0
  315. package/dist/typescript/pbkdf2.d.ts +11 -0
  316. package/dist/typescript/prime.d.ts +18 -0
  317. package/dist/typescript/random.d.ts +26 -0
  318. package/dist/typescript/rsa.d.ts +19 -0
  319. package/dist/typescript/scrypt.d.ts +17 -0
  320. package/dist/typescript/specs/v1/NativeQuickCrypto.d.ts +17 -0
  321. package/dist/typescript/specs/v1/argon2.nitro.d.ts +8 -0
  322. package/dist/typescript/specs/v1/blake3.nitro.d.ts +14 -0
  323. package/dist/typescript/specs/v1/certificate.nitro.d.ts +9 -0
  324. package/dist/typescript/specs/v1/cipher.nitro.d.ts +37 -0
  325. package/dist/typescript/specs/v1/dhKeyPair.nitro.d.ts +13 -0
  326. package/dist/typescript/specs/v1/diffie-hellman.nitro.d.ts +17 -0
  327. package/dist/typescript/specs/v1/dsaKeyPair.nitro.d.ts +12 -0
  328. package/dist/typescript/specs/v1/ecKeyPair.nitro.d.ts +20 -0
  329. package/dist/typescript/specs/v1/ecdh.nitro.d.ts +14 -0
  330. package/dist/typescript/specs/v1/edKeyPair.nitro.d.ts +16 -0
  331. package/dist/typescript/specs/v1/hash.nitro.d.ts +12 -0
  332. package/dist/typescript/specs/v1/hkdf.nitro.d.ts +8 -0
  333. package/dist/typescript/specs/v1/hmac.nitro.d.ts +9 -0
  334. package/dist/typescript/specs/v1/keyObjectHandle.nitro.d.ts +17 -0
  335. package/dist/typescript/specs/v1/kmac.nitro.d.ts +9 -0
  336. package/dist/typescript/specs/v1/mlDsaKeyPair.nitro.d.ts +15 -0
  337. package/dist/typescript/specs/v1/mlKemKeyPair.nitro.d.ts +17 -0
  338. package/dist/typescript/specs/v1/pbkdf2.nitro.d.ts +8 -0
  339. package/dist/typescript/specs/v1/prime.nitro.d.ts +10 -0
  340. package/dist/typescript/specs/v1/random.nitro.d.ts +8 -0
  341. package/dist/typescript/specs/v1/rsaCipher.nitro.d.ts +53 -0
  342. package/dist/typescript/specs/v1/rsaKeyPair.nitro.d.ts +19 -0
  343. package/dist/typescript/specs/v1/scrypt.nitro.d.ts +8 -0
  344. package/dist/typescript/specs/v1/sign.nitro.d.ts +18 -0
  345. package/dist/typescript/specs/v1/utils.nitro.d.ts +9 -0
  346. package/dist/typescript/specs/v1/x509certificate.nitro.d.ts +33 -0
  347. package/dist/typescript/subtle.d.ts +31 -0
  348. package/dist/typescript/utils/cipher.d.ts +6 -0
  349. package/dist/typescript/utils/conversion.d.ts +29 -0
  350. package/dist/typescript/utils/errors.d.ts +6 -0
  351. package/dist/typescript/utils/hashnames.d.ts +12 -0
  352. package/dist/typescript/utils/index.d.ts +7 -0
  353. package/dist/typescript/utils/noble.d.ts +18 -0
  354. package/dist/typescript/utils/timingSafeEqual.d.ts +2 -0
  355. package/dist/typescript/utils/types.d.ts +294 -0
  356. package/dist/typescript/utils/validation.d.ts +12 -0
  357. package/dist/typescript/x509certificate.d.ts +63 -0
  358. package/harmony/quick_crypto/LICENSE +21 -0
  359. package/harmony/quick_crypto/NOTICE +33 -0
  360. package/harmony/quick_crypto/OAT.xml +38 -0
  361. package/harmony/quick_crypto/build-profile.json5 +16 -0
  362. package/harmony/quick_crypto/deps/blake3/blake3.c +650 -0
  363. package/harmony/quick_crypto/deps/blake3/blake3.h +86 -0
  364. package/harmony/quick_crypto/deps/blake3/blake3_avx2.c +326 -0
  365. package/harmony/quick_crypto/deps/blake3/blake3_avx512.c +1388 -0
  366. package/harmony/quick_crypto/deps/blake3/blake3_dispatch.c +332 -0
  367. package/harmony/quick_crypto/deps/blake3/blake3_impl.h +333 -0
  368. package/harmony/quick_crypto/deps/blake3/blake3_neon.c +366 -0
  369. package/harmony/quick_crypto/deps/blake3/blake3_portable.c +160 -0
  370. package/harmony/quick_crypto/deps/blake3/blake3_sse2.c +566 -0
  371. package/harmony/quick_crypto/deps/blake3/blake3_sse41.c +560 -0
  372. package/harmony/quick_crypto/deps/blake3/example.c +36 -0
  373. package/harmony/quick_crypto/deps/blake3/example_tbb.c +57 -0
  374. package/harmony/quick_crypto/deps/blake3/main.c +166 -0
  375. package/harmony/quick_crypto/deps/fastpbkdf2/fastpbkdf2.c +356 -0
  376. package/harmony/quick_crypto/deps/fastpbkdf2/fastpbkdf2.h +68 -0
  377. package/harmony/quick_crypto/deps/ncrypto/include/dh-primes.h +67 -0
  378. package/harmony/quick_crypto/deps/ncrypto/include/ncrypto/aead.h +137 -0
  379. package/harmony/quick_crypto/deps/ncrypto/include/ncrypto/version.h +14 -0
  380. package/harmony/quick_crypto/deps/ncrypto/include/ncrypto.h +1752 -0
  381. package/harmony/quick_crypto/deps/ncrypto/src/aead.cpp +302 -0
  382. package/harmony/quick_crypto/deps/ncrypto/src/engine.cpp +93 -0
  383. package/harmony/quick_crypto/deps/ncrypto/src/ncrypto.cpp +5331 -0
  384. package/harmony/quick_crypto/deps/simdutf/include/simdutf/avx512.h +79 -0
  385. package/harmony/quick_crypto/deps/simdutf/include/simdutf/base64_implementation.h +158 -0
  386. package/harmony/quick_crypto/deps/simdutf/include/simdutf/base64_tables.h +887 -0
  387. package/harmony/quick_crypto/deps/simdutf/include/simdutf/common_defs.h +186 -0
  388. package/harmony/quick_crypto/deps/simdutf/include/simdutf/compiler_check.h +50 -0
  389. package/harmony/quick_crypto/deps/simdutf/include/simdutf/constexpr_ptr.h +138 -0
  390. package/harmony/quick_crypto/deps/simdutf/include/simdutf/encoding_types.h +189 -0
  391. package/harmony/quick_crypto/deps/simdutf/include/simdutf/error.h +126 -0
  392. package/harmony/quick_crypto/deps/simdutf/include/simdutf/implementation.h +7081 -0
  393. package/harmony/quick_crypto/deps/simdutf/include/simdutf/internal/isadetection.h +325 -0
  394. package/harmony/quick_crypto/deps/simdutf/include/simdutf/portability.h +285 -0
  395. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/ascii.h +86 -0
  396. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/atomic_util.h +105 -0
  397. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/base64.h +911 -0
  398. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/latin1.h +26 -0
  399. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/latin1_to_utf16/latin1_to_utf16.h +52 -0
  400. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/latin1_to_utf32/latin1_to_utf32.h +27 -0
  401. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/latin1_to_utf8/latin1_to_utf8.h +191 -0
  402. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/swap_bytes.h +35 -0
  403. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/utf16.h +226 -0
  404. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/utf16_to_latin1.h +108 -0
  405. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/valid_utf16_to_latin1.h +40 -0
  406. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/utf16_to_utf32.h +86 -0
  407. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/valid_utf16_to_utf32.h +44 -0
  408. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/utf16_to_utf8.h +295 -0
  409. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/valid_utf16_to_utf8.h +91 -0
  410. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/utf32.h +82 -0
  411. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/utf32_to_latin1.h +68 -0
  412. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/valid_utf32_to_latin1.h +67 -0
  413. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/utf32_to_utf16.h +84 -0
  414. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/valid_utf32_to_utf16.h +44 -0
  415. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/utf32_to_utf8.h +142 -0
  416. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/valid_utf32_to_utf8.h +72 -0
  417. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/utf8.h +326 -0
  418. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/utf8_to_latin1.h +225 -0
  419. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/valid_utf8_to_latin1.h +87 -0
  420. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/utf8_to_utf16.h +342 -0
  421. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/valid_utf8_to_utf16.h +106 -0
  422. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/utf8_to_utf32.h +299 -0
  423. package/harmony/quick_crypto/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/valid_utf8_to_utf32.h +83 -0
  424. package/harmony/quick_crypto/deps/simdutf/include/simdutf/simdutf_version.h +26 -0
  425. package/harmony/quick_crypto/deps/simdutf/include/simdutf.h +26 -0
  426. package/harmony/quick_crypto/deps/simdutf/include/simdutf_c.h +342 -0
  427. package/harmony/quick_crypto/deps/simdutf/src/CMakeLists.txt +78 -0
  428. package/harmony/quick_crypto/deps/simdutf/src/arm64/arm_base64.cpp +791 -0
  429. package/harmony/quick_crypto/deps/simdutf/src/arm64/arm_convert_latin1_to_utf16.cpp +24 -0
  430. package/harmony/quick_crypto/deps/simdutf/src/arm64/arm_convert_latin1_to_utf32.cpp +24 -0
  431. package/harmony/quick_crypto/deps/simdutf/src/arm64/arm_convert_latin1_to_utf8.cpp +70 -0
  432. package/harmony/quick_crypto/deps/simdutf/src/arm64/arm_convert_utf16_to_latin1.cpp +61 -0
  433. package/harmony/quick_crypto/deps/simdutf/src/arm64/arm_convert_utf16_to_utf32.cpp +185 -0
  434. package/harmony/quick_crypto/deps/simdutf/src/arm64/arm_convert_utf16_to_utf8.cpp +780 -0
  435. package/harmony/quick_crypto/deps/simdutf/src/arm64/arm_convert_utf32_to_latin1.cpp +60 -0
  436. package/harmony/quick_crypto/deps/simdutf/src/arm64/arm_convert_utf32_to_utf16.cpp +208 -0
  437. package/harmony/quick_crypto/deps/simdutf/src/arm64/arm_convert_utf32_to_utf8.cpp +505 -0
  438. package/harmony/quick_crypto/deps/simdutf/src/arm64/arm_convert_utf8_to_latin1.cpp +69 -0
  439. package/harmony/quick_crypto/deps/simdutf/src/arm64/arm_convert_utf8_to_utf16.cpp +313 -0
  440. package/harmony/quick_crypto/deps/simdutf/src/arm64/arm_convert_utf8_to_utf32.cpp +179 -0
  441. package/harmony/quick_crypto/deps/simdutf/src/arm64/arm_find.cpp +199 -0
  442. package/harmony/quick_crypto/deps/simdutf/src/arm64/arm_utf16fix.cpp +185 -0
  443. package/harmony/quick_crypto/deps/simdutf/src/arm64/arm_validate_utf16.cpp +165 -0
  444. package/harmony/quick_crypto/deps/simdutf/src/arm64/arm_validate_utf32le.cpp +65 -0
  445. package/harmony/quick_crypto/deps/simdutf/src/arm64/implementation.cpp +1442 -0
  446. package/harmony/quick_crypto/deps/simdutf/src/encoding_types.cpp +67 -0
  447. package/harmony/quick_crypto/deps/simdutf/src/error.cpp +3 -0
  448. package/harmony/quick_crypto/deps/simdutf/src/fallback/implementation.cpp +589 -0
  449. package/harmony/quick_crypto/deps/simdutf/src/generic/ascii_validation.h +50 -0
  450. package/harmony/quick_crypto/deps/simdutf/src/generic/base64.h +233 -0
  451. package/harmony/quick_crypto/deps/simdutf/src/generic/base64lengths.h +63 -0
  452. package/harmony/quick_crypto/deps/simdutf/src/generic/buf_block_reader.h +109 -0
  453. package/harmony/quick_crypto/deps/simdutf/src/generic/find.h +75 -0
  454. package/harmony/quick_crypto/deps/simdutf/src/generic/utf16/change_endianness.h +24 -0
  455. package/harmony/quick_crypto/deps/simdutf/src/generic/utf16/count_code_points_bytemask.h +58 -0
  456. package/harmony/quick_crypto/deps/simdutf/src/generic/utf16/to_well_formed.h +93 -0
  457. package/harmony/quick_crypto/deps/simdutf/src/generic/utf16/utf32_length_from_utf16.h +15 -0
  458. package/harmony/quick_crypto/deps/simdutf/src/generic/utf16/utf8_length_from_utf16.h +35 -0
  459. package/harmony/quick_crypto/deps/simdutf/src/generic/utf16/utf8_length_from_utf16_bytemask.h +199 -0
  460. package/harmony/quick_crypto/deps/simdutf/src/generic/utf16.h +73 -0
  461. package/harmony/quick_crypto/deps/simdutf/src/generic/utf32.h +136 -0
  462. package/harmony/quick_crypto/deps/simdutf/src/generic/utf8/utf16_length_from_utf8_bytemask.h +53 -0
  463. package/harmony/quick_crypto/deps/simdutf/src/generic/utf8.h +92 -0
  464. package/harmony/quick_crypto/deps/simdutf/src/generic/utf8_to_latin1/utf8_to_latin1.h +316 -0
  465. package/harmony/quick_crypto/deps/simdutf/src/generic/utf8_to_latin1/valid_utf8_to_latin1.h +78 -0
  466. package/harmony/quick_crypto/deps/simdutf/src/generic/utf8_to_utf16/utf8_to_utf16.h +332 -0
  467. package/harmony/quick_crypto/deps/simdutf/src/generic/utf8_to_utf16/valid_utf8_to_utf16.h +74 -0
  468. package/harmony/quick_crypto/deps/simdutf/src/generic/utf8_to_utf32/utf8_to_utf32.h +318 -0
  469. package/harmony/quick_crypto/deps/simdutf/src/generic/utf8_to_utf32/valid_utf8_to_utf32.h +42 -0
  470. package/harmony/quick_crypto/deps/simdutf/src/generic/utf8_validation/utf8_lookup4_algorithm.h +223 -0
  471. package/harmony/quick_crypto/deps/simdutf/src/generic/utf8_validation/utf8_validator.h +84 -0
  472. package/harmony/quick_crypto/deps/simdutf/src/generic/validate_utf16.h +164 -0
  473. package/harmony/quick_crypto/deps/simdutf/src/generic/validate_utf32.h +99 -0
  474. package/harmony/quick_crypto/deps/simdutf/src/haswell/avx2_base64.cpp +837 -0
  475. package/harmony/quick_crypto/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf16.cpp +28 -0
  476. package/harmony/quick_crypto/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf32.cpp +20 -0
  477. package/harmony/quick_crypto/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf8.cpp +83 -0
  478. package/harmony/quick_crypto/deps/simdutf/src/haswell/avx2_convert_utf16_to_latin1.cpp +83 -0
  479. package/harmony/quick_crypto/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf32.cpp +210 -0
  480. package/harmony/quick_crypto/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf8.cpp +602 -0
  481. package/harmony/quick_crypto/deps/simdutf/src/haswell/avx2_convert_utf32_to_latin1.cpp +116 -0
  482. package/harmony/quick_crypto/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf16.cpp +164 -0
  483. package/harmony/quick_crypto/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf8.cpp +569 -0
  484. package/harmony/quick_crypto/deps/simdutf/src/haswell/avx2_convert_utf8_to_latin1.cpp +60 -0
  485. package/harmony/quick_crypto/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf16.cpp +195 -0
  486. package/harmony/quick_crypto/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf32.cpp +135 -0
  487. package/harmony/quick_crypto/deps/simdutf/src/haswell/avx2_utf16fix.cpp +173 -0
  488. package/harmony/quick_crypto/deps/simdutf/src/haswell/avx2_validate_utf16.cpp +17 -0
  489. package/harmony/quick_crypto/deps/simdutf/src/haswell/implementation.cpp +1447 -0
  490. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_ascii_validation.inl.cpp +19 -0
  491. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_base64.inl.cpp +630 -0
  492. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_common.inl.cpp +37 -0
  493. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf16.inl.cpp +36 -0
  494. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf32.inl.cpp +23 -0
  495. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf8.inl.cpp +107 -0
  496. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_convert_utf16_to_latin1.inl.cpp +103 -0
  497. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf32.inl.cpp +136 -0
  498. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf8.inl.cpp +206 -0
  499. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_convert_utf32_to_latin1.inl.cpp +74 -0
  500. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf16.inl.cpp +338 -0
  501. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf8.inl.cpp +574 -0
  502. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_convert_utf8_to_latin1.inl.cpp +104 -0
  503. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_convert_utf8_to_utf16.inl.cpp +75 -0
  504. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_convert_valid_utf8_to_latin1.inl.cpp +69 -0
  505. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_find.inl.cpp +146 -0
  506. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_from_utf8.inl.cpp +266 -0
  507. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_from_valid_utf8.inl.cpp +136 -0
  508. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_macros.inl.cpp +143 -0
  509. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_utf16fix.cpp +138 -0
  510. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_utf32_validation.inl.cpp +63 -0
  511. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_utf8_common.inl.cpp +753 -0
  512. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_utf8_length_from_utf16.inl.cpp +269 -0
  513. package/harmony/quick_crypto/deps/simdutf/src/icelake/icelake_utf8_validation.inl.cpp +116 -0
  514. package/harmony/quick_crypto/deps/simdutf/src/icelake/implementation.cpp +1903 -0
  515. package/harmony/quick_crypto/deps/simdutf/src/implementation.cpp +2526 -0
  516. package/harmony/quick_crypto/deps/simdutf/src/lasx/implementation.cpp +1531 -0
  517. package/harmony/quick_crypto/deps/simdutf/src/lasx/lasx_base64.cpp +695 -0
  518. package/harmony/quick_crypto/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf16.cpp +76 -0
  519. package/harmony/quick_crypto/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf32.cpp +55 -0
  520. package/harmony/quick_crypto/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf8.cpp +65 -0
  521. package/harmony/quick_crypto/deps/simdutf/src/lasx/lasx_convert_utf16_to_latin1.cpp +64 -0
  522. package/harmony/quick_crypto/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf32.cpp +183 -0
  523. package/harmony/quick_crypto/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf8.cpp +550 -0
  524. package/harmony/quick_crypto/deps/simdutf/src/lasx/lasx_convert_utf32_to_latin1.cpp +73 -0
  525. package/harmony/quick_crypto/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf16.cpp +218 -0
  526. package/harmony/quick_crypto/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf8.cpp +589 -0
  527. package/harmony/quick_crypto/deps/simdutf/src/lasx/lasx_convert_utf8_to_latin1.cpp +72 -0
  528. package/harmony/quick_crypto/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf16.cpp +296 -0
  529. package/harmony/quick_crypto/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf32.cpp +190 -0
  530. package/harmony/quick_crypto/deps/simdutf/src/lasx/lasx_find.cpp +64 -0
  531. package/harmony/quick_crypto/deps/simdutf/src/lasx/lasx_validate_utf16.cpp +13 -0
  532. package/harmony/quick_crypto/deps/simdutf/src/lasx/lasx_validate_utf32le.cpp +84 -0
  533. package/harmony/quick_crypto/deps/simdutf/src/lsx/implementation.cpp +1417 -0
  534. package/harmony/quick_crypto/deps/simdutf/src/lsx/lsx_base64.cpp +675 -0
  535. package/harmony/quick_crypto/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf16.cpp +39 -0
  536. package/harmony/quick_crypto/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf32.cpp +27 -0
  537. package/harmony/quick_crypto/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf8.cpp +56 -0
  538. package/harmony/quick_crypto/deps/simdutf/src/lsx/lsx_convert_utf16_to_latin1.cpp +64 -0
  539. package/harmony/quick_crypto/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf32.cpp +133 -0
  540. package/harmony/quick_crypto/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf8.cpp +518 -0
  541. package/harmony/quick_crypto/deps/simdutf/src/lsx/lsx_convert_utf32_to_latin1.cpp +66 -0
  542. package/harmony/quick_crypto/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf16.cpp +155 -0
  543. package/harmony/quick_crypto/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf8.cpp +459 -0
  544. package/harmony/quick_crypto/deps/simdutf/src/lsx/lsx_convert_utf8_to_latin1.cpp +75 -0
  545. package/harmony/quick_crypto/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf16.cpp +291 -0
  546. package/harmony/quick_crypto/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf32.cpp +179 -0
  547. package/harmony/quick_crypto/deps/simdutf/src/lsx/lsx_find.cpp +60 -0
  548. package/harmony/quick_crypto/deps/simdutf/src/lsx/lsx_validate_utf16.cpp +13 -0
  549. package/harmony/quick_crypto/deps/simdutf/src/lsx/lsx_validate_utf32le.cpp +68 -0
  550. package/harmony/quick_crypto/deps/simdutf/src/ppc64/implementation.cpp +992 -0
  551. package/harmony/quick_crypto/deps/simdutf/src/ppc64/ppc64_base64.cpp +480 -0
  552. package/harmony/quick_crypto/deps/simdutf/src/ppc64/ppc64_base64_internal_tests.cpp +401 -0
  553. package/harmony/quick_crypto/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf16.cpp +12 -0
  554. package/harmony/quick_crypto/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf32.cpp +12 -0
  555. package/harmony/quick_crypto/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf8.cpp +149 -0
  556. package/harmony/quick_crypto/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_latin1.cpp +67 -0
  557. package/harmony/quick_crypto/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf32.cpp +87 -0
  558. package/harmony/quick_crypto/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf8.cpp +296 -0
  559. package/harmony/quick_crypto/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_latin1.cpp +57 -0
  560. package/harmony/quick_crypto/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf16.cpp +117 -0
  561. package/harmony/quick_crypto/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf8.cpp +166 -0
  562. package/harmony/quick_crypto/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_latin1.cpp +69 -0
  563. package/harmony/quick_crypto/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf16.cpp +211 -0
  564. package/harmony/quick_crypto/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf32.cpp +153 -0
  565. package/harmony/quick_crypto/deps/simdutf/src/ppc64/ppc64_utf16_to_utf8_tables.h +1011 -0
  566. package/harmony/quick_crypto/deps/simdutf/src/ppc64/ppc64_utf8_length_from_latin1.cpp +37 -0
  567. package/harmony/quick_crypto/deps/simdutf/src/ppc64/ppc64_validate_utf16.cpp +19 -0
  568. package/harmony/quick_crypto/deps/simdutf/src/ppc64/templates.cpp +91 -0
  569. package/harmony/quick_crypto/deps/simdutf/src/rvv/implementation.cpp +138 -0
  570. package/harmony/quick_crypto/deps/simdutf/src/rvv/rvv_find.cpp +27 -0
  571. package/harmony/quick_crypto/deps/simdutf/src/rvv/rvv_helpers.inl.cpp +23 -0
  572. package/harmony/quick_crypto/deps/simdutf/src/rvv/rvv_latin1_to.inl.cpp +71 -0
  573. package/harmony/quick_crypto/deps/simdutf/src/rvv/rvv_length_from.inl.cpp +164 -0
  574. package/harmony/quick_crypto/deps/simdutf/src/rvv/rvv_utf16_to.inl.cpp +399 -0
  575. package/harmony/quick_crypto/deps/simdutf/src/rvv/rvv_utf16fix.cpp +110 -0
  576. package/harmony/quick_crypto/deps/simdutf/src/rvv/rvv_utf32_to.inl.cpp +307 -0
  577. package/harmony/quick_crypto/deps/simdutf/src/rvv/rvv_utf8_to.inl.cpp +435 -0
  578. package/harmony/quick_crypto/deps/simdutf/src/rvv/rvv_validate.inl.cpp +275 -0
  579. package/harmony/quick_crypto/deps/simdutf/src/simdutf/arm64/begin.h +2 -0
  580. package/harmony/quick_crypto/deps/simdutf/src/simdutf/arm64/bitmanipulation.h +34 -0
  581. package/harmony/quick_crypto/deps/simdutf/src/simdutf/arm64/end.h +2 -0
  582. package/harmony/quick_crypto/deps/simdutf/src/simdutf/arm64/implementation.h +307 -0
  583. package/harmony/quick_crypto/deps/simdutf/src/simdutf/arm64/intrinsics.h +10 -0
  584. package/harmony/quick_crypto/deps/simdutf/src/simdutf/arm64/simd.h +547 -0
  585. package/harmony/quick_crypto/deps/simdutf/src/simdutf/arm64/simd16-inl.h +403 -0
  586. package/harmony/quick_crypto/deps/simdutf/src/simdutf/arm64/simd32-inl.h +129 -0
  587. package/harmony/quick_crypto/deps/simdutf/src/simdutf/arm64/simd64-inl.h +28 -0
  588. package/harmony/quick_crypto/deps/simdutf/src/simdutf/arm64.h +43 -0
  589. package/harmony/quick_crypto/deps/simdutf/src/simdutf/fallback/begin.h +1 -0
  590. package/harmony/quick_crypto/deps/simdutf/src/simdutf/fallback/bitmanipulation.h +13 -0
  591. package/harmony/quick_crypto/deps/simdutf/src/simdutf/fallback/end.h +1 -0
  592. package/harmony/quick_crypto/deps/simdutf/src/simdutf/fallback/implementation.h +331 -0
  593. package/harmony/quick_crypto/deps/simdutf/src/simdutf/fallback.h +42 -0
  594. package/harmony/quick_crypto/deps/simdutf/src/simdutf/haswell/begin.h +15 -0
  595. package/harmony/quick_crypto/deps/simdutf/src/simdutf/haswell/bitmanipulation.h +35 -0
  596. package/harmony/quick_crypto/deps/simdutf/src/simdutf/haswell/end.h +13 -0
  597. package/harmony/quick_crypto/deps/simdutf/src/simdutf/haswell/implementation.h +338 -0
  598. package/harmony/quick_crypto/deps/simdutf/src/simdutf/haswell/intrinsics.h +67 -0
  599. package/harmony/quick_crypto/deps/simdutf/src/simdutf/haswell/simd.h +363 -0
  600. package/harmony/quick_crypto/deps/simdutf/src/simdutf/haswell/simd16-inl.h +261 -0
  601. package/harmony/quick_crypto/deps/simdutf/src/simdutf/haswell/simd32-inl.h +111 -0
  602. package/harmony/quick_crypto/deps/simdutf/src/simdutf/haswell/simd64-inl.h +34 -0
  603. package/harmony/quick_crypto/deps/simdutf/src/simdutf/haswell.h +63 -0
  604. package/harmony/quick_crypto/deps/simdutf/src/simdutf/icelake/begin.h +14 -0
  605. package/harmony/quick_crypto/deps/simdutf/src/simdutf/icelake/bitmanipulation.h +44 -0
  606. package/harmony/quick_crypto/deps/simdutf/src/simdutf/icelake/end.h +12 -0
  607. package/harmony/quick_crypto/deps/simdutf/src/simdutf/icelake/implementation.h +346 -0
  608. package/harmony/quick_crypto/deps/simdutf/src/simdutf/icelake/intrinsics.h +138 -0
  609. package/harmony/quick_crypto/deps/simdutf/src/simdutf/icelake/simd.h +17 -0
  610. package/harmony/quick_crypto/deps/simdutf/src/simdutf/icelake/simd16-inl.h +90 -0
  611. package/harmony/quick_crypto/deps/simdutf/src/simdutf/icelake/simd32-inl.h +47 -0
  612. package/harmony/quick_crypto/deps/simdutf/src/simdutf/icelake.h +81 -0
  613. package/harmony/quick_crypto/deps/simdutf/src/simdutf/lasx/begin.h +8 -0
  614. package/harmony/quick_crypto/deps/simdutf/src/simdutf/lasx/bitmanipulation.h +25 -0
  615. package/harmony/quick_crypto/deps/simdutf/src/simdutf/lasx/end.h +8 -0
  616. package/harmony/quick_crypto/deps/simdutf/src/simdutf/lasx/implementation.h +310 -0
  617. package/harmony/quick_crypto/deps/simdutf/src/simdutf/lasx/intrinsics.h +319 -0
  618. package/harmony/quick_crypto/deps/simdutf/src/simdutf/lasx/simd.h +551 -0
  619. package/harmony/quick_crypto/deps/simdutf/src/simdutf/lasx/simd16-inl.h +234 -0
  620. package/harmony/quick_crypto/deps/simdutf/src/simdutf/lasx/simd32-inl.h +74 -0
  621. package/harmony/quick_crypto/deps/simdutf/src/simdutf/lasx/simd64-inl.h +52 -0
  622. package/harmony/quick_crypto/deps/simdutf/src/simdutf/lasx.h +49 -0
  623. package/harmony/quick_crypto/deps/simdutf/src/simdutf/lsx/begin.h +2 -0
  624. package/harmony/quick_crypto/deps/simdutf/src/simdutf/lsx/bitmanipulation.h +25 -0
  625. package/harmony/quick_crypto/deps/simdutf/src/simdutf/lsx/end.h +2 -0
  626. package/harmony/quick_crypto/deps/simdutf/src/simdutf/lsx/implementation.h +309 -0
  627. package/harmony/quick_crypto/deps/simdutf/src/simdutf/lsx/intrinsics.h +196 -0
  628. package/harmony/quick_crypto/deps/simdutf/src/simdutf/lsx/simd.h +421 -0
  629. package/harmony/quick_crypto/deps/simdutf/src/simdutf/lsx/simd16-inl.h +242 -0
  630. package/harmony/quick_crypto/deps/simdutf/src/simdutf/lsx/simd32-inl.h +69 -0
  631. package/harmony/quick_crypto/deps/simdutf/src/simdutf/lsx/simd64-inl.h +50 -0
  632. package/harmony/quick_crypto/deps/simdutf/src/simdutf/lsx.h +52 -0
  633. package/harmony/quick_crypto/deps/simdutf/src/simdutf/ppc64/begin.h +1 -0
  634. package/harmony/quick_crypto/deps/simdutf/src/simdutf/ppc64/bitmanipulation.h +29 -0
  635. package/harmony/quick_crypto/deps/simdutf/src/simdutf/ppc64/end.h +1 -0
  636. package/harmony/quick_crypto/deps/simdutf/src/simdutf/ppc64/implementation.h +348 -0
  637. package/harmony/quick_crypto/deps/simdutf/src/simdutf/ppc64/intrinsics.h +19 -0
  638. package/harmony/quick_crypto/deps/simdutf/src/simdutf/ppc64/simd.h +177 -0
  639. package/harmony/quick_crypto/deps/simdutf/src/simdutf/ppc64/simd16-inl.h +327 -0
  640. package/harmony/quick_crypto/deps/simdutf/src/simdutf/ppc64/simd32-inl.h +247 -0
  641. package/harmony/quick_crypto/deps/simdutf/src/simdutf/ppc64/simd8-inl.h +618 -0
  642. package/harmony/quick_crypto/deps/simdutf/src/simdutf/ppc64.h +40 -0
  643. package/harmony/quick_crypto/deps/simdutf/src/simdutf/rvv/begin.h +7 -0
  644. package/harmony/quick_crypto/deps/simdutf/src/simdutf/rvv/end.h +7 -0
  645. package/harmony/quick_crypto/deps/simdutf/src/simdutf/rvv/implementation.h +321 -0
  646. package/harmony/quick_crypto/deps/simdutf/src/simdutf/rvv/intrinsics.h +131 -0
  647. package/harmony/quick_crypto/deps/simdutf/src/simdutf/rvv.h +41 -0
  648. package/harmony/quick_crypto/deps/simdutf/src/simdutf/westmere/begin.h +8 -0
  649. package/harmony/quick_crypto/deps/simdutf/src/simdutf/westmere/bitmanipulation.h +37 -0
  650. package/harmony/quick_crypto/deps/simdutf/src/simdutf/westmere/end.h +8 -0
  651. package/harmony/quick_crypto/deps/simdutf/src/simdutf/westmere/implementation.h +338 -0
  652. package/harmony/quick_crypto/deps/simdutf/src/simdutf/westmere/intrinsics.h +38 -0
  653. package/harmony/quick_crypto/deps/simdutf/src/simdutf/westmere/simd.h +379 -0
  654. package/harmony/quick_crypto/deps/simdutf/src/simdutf/westmere/simd16-inl.h +242 -0
  655. package/harmony/quick_crypto/deps/simdutf/src/simdutf/westmere/simd32-inl.h +151 -0
  656. package/harmony/quick_crypto/deps/simdutf/src/simdutf/westmere/simd64-inl.h +33 -0
  657. package/harmony/quick_crypto/deps/simdutf/src/simdutf/westmere.h +59 -0
  658. package/harmony/quick_crypto/deps/simdutf/src/simdutf.cpp +152 -0
  659. package/harmony/quick_crypto/deps/simdutf/src/simdutf_c.cpp +525 -0
  660. package/harmony/quick_crypto/deps/simdutf/src/tables/utf16_to_utf8_tables.h +768 -0
  661. package/harmony/quick_crypto/deps/simdutf/src/tables/utf32_to_utf16_tables.h +53 -0
  662. package/harmony/quick_crypto/deps/simdutf/src/tables/utf8_to_utf16_tables.h +826 -0
  663. package/harmony/quick_crypto/deps/simdutf/src/westmere/implementation.cpp +1479 -0
  664. package/harmony/quick_crypto/deps/simdutf/src/westmere/internal/loader.cpp +7 -0
  665. package/harmony/quick_crypto/deps/simdutf/src/westmere/internal/write_v_u16_11bits_to_utf8.cpp +66 -0
  666. package/harmony/quick_crypto/deps/simdutf/src/westmere/sse_base64.cpp +672 -0
  667. package/harmony/quick_crypto/deps/simdutf/src/westmere/sse_convert_latin1_to_utf16.cpp +21 -0
  668. package/harmony/quick_crypto/deps/simdutf/src/westmere/sse_convert_latin1_to_utf32.cpp +31 -0
  669. package/harmony/quick_crypto/deps/simdutf/src/westmere/sse_convert_latin1_to_utf8.cpp +71 -0
  670. package/harmony/quick_crypto/deps/simdutf/src/westmere/sse_convert_utf16_to_latin1.cpp +70 -0
  671. package/harmony/quick_crypto/deps/simdutf/src/westmere/sse_convert_utf16_to_utf32.cpp +206 -0
  672. package/harmony/quick_crypto/deps/simdutf/src/westmere/sse_convert_utf16_to_utf8.cpp +504 -0
  673. package/harmony/quick_crypto/deps/simdutf/src/westmere/sse_convert_utf32_to_latin1.cpp +82 -0
  674. package/harmony/quick_crypto/deps/simdutf/src/westmere/sse_convert_utf32_to_utf16.cpp +209 -0
  675. package/harmony/quick_crypto/deps/simdutf/src/westmere/sse_convert_utf32_to_utf8.cpp +589 -0
  676. package/harmony/quick_crypto/deps/simdutf/src/westmere/sse_convert_utf8_to_latin1.cpp +58 -0
  677. package/harmony/quick_crypto/deps/simdutf/src/westmere/sse_convert_utf8_to_utf16.cpp +197 -0
  678. package/harmony/quick_crypto/deps/simdutf/src/westmere/sse_convert_utf8_to_utf32.cpp +141 -0
  679. package/harmony/quick_crypto/deps/simdutf/src/westmere/sse_utf16fix.cpp +82 -0
  680. package/harmony/quick_crypto/deps/simdutf/src/westmere/sse_validate_utf16.cpp +17 -0
  681. package/harmony/quick_crypto/hvigorfile.ts +2 -0
  682. package/harmony/quick_crypto/index.ets +1 -0
  683. package/harmony/quick_crypto/oh-package.json5 +14 -0
  684. package/harmony/quick_crypto/src/main/cpp/CMakeLists.txt +296 -0
  685. package/harmony/quick_crypto/src/main/cpp/QuickCryptoOnLoad.cpp +211 -0
  686. package/harmony/quick_crypto/src/main/cpp/QuickCryptoOnLoad.hpp +16 -0
  687. package/harmony/quick_crypto/src/main/cpp/QuickCryptoPackage.h +50 -0
  688. package/harmony/quick_crypto/src/main/cpp/cpp/argon2/HybridArgon2.cpp +103 -0
  689. package/harmony/quick_crypto/src/main/cpp/cpp/argon2/HybridArgon2.hpp +32 -0
  690. package/harmony/quick_crypto/src/main/cpp/cpp/blake3/HybridBlake3.cpp +118 -0
  691. package/harmony/quick_crypto/src/main/cpp/cpp/blake3/HybridBlake3.hpp +35 -0
  692. package/harmony/quick_crypto/src/main/cpp/cpp/certificate/HybridCertificate.cpp +42 -0
  693. package/harmony/quick_crypto/src/main/cpp/cpp/certificate/HybridCertificate.hpp +16 -0
  694. package/harmony/quick_crypto/src/main/cpp/cpp/cipher/CCMCipher.cpp +202 -0
  695. package/harmony/quick_crypto/src/main/cpp/cpp/cipher/CCMCipher.hpp +26 -0
  696. package/harmony/quick_crypto/src/main/cpp/cpp/cipher/ChaCha20Cipher.cpp +99 -0
  697. package/harmony/quick_crypto/src/main/cpp/cpp/cipher/ChaCha20Cipher.hpp +25 -0
  698. package/harmony/quick_crypto/src/main/cpp/cpp/cipher/ChaCha20Poly1305Cipher.cpp +170 -0
  699. package/harmony/quick_crypto/src/main/cpp/cpp/cipher/ChaCha20Poly1305Cipher.hpp +29 -0
  700. package/harmony/quick_crypto/src/main/cpp/cpp/cipher/GCMCipher.cpp +68 -0
  701. package/harmony/quick_crypto/src/main/cpp/cpp/cipher/GCMCipher.hpp +14 -0
  702. package/harmony/quick_crypto/src/main/cpp/cpp/cipher/HybridCipher.cpp +415 -0
  703. package/harmony/quick_crypto/src/main/cpp/cpp/cipher/HybridCipher.hpp +74 -0
  704. package/harmony/quick_crypto/src/main/cpp/cpp/cipher/HybridCipherFactory.hpp +119 -0
  705. package/harmony/quick_crypto/src/main/cpp/cpp/cipher/HybridRsaCipher.cpp +440 -0
  706. package/harmony/quick_crypto/src/main/cpp/cpp/cipher/HybridRsaCipher.hpp +33 -0
  707. package/harmony/quick_crypto/src/main/cpp/cpp/cipher/OCBCipher.cpp +55 -0
  708. package/harmony/quick_crypto/src/main/cpp/cpp/cipher/OCBCipher.hpp +19 -0
  709. package/harmony/quick_crypto/src/main/cpp/cpp/cipher/XChaCha20Poly1305Cipher.cpp +163 -0
  710. package/harmony/quick_crypto/src/main/cpp/cpp/cipher/XChaCha20Poly1305Cipher.hpp +42 -0
  711. package/harmony/quick_crypto/src/main/cpp/cpp/cipher/XSalsa20Cipher.cpp +65 -0
  712. package/harmony/quick_crypto/src/main/cpp/cpp/cipher/XSalsa20Cipher.hpp +33 -0
  713. package/harmony/quick_crypto/src/main/cpp/cpp/cipher/XSalsa20Poly1305Cipher.cpp +147 -0
  714. package/harmony/quick_crypto/src/main/cpp/cpp/cipher/XSalsa20Poly1305Cipher.hpp +41 -0
  715. package/harmony/quick_crypto/src/main/cpp/cpp/dh/HybridDhKeyPair.cpp +179 -0
  716. package/harmony/quick_crypto/src/main/cpp/cpp/dh/HybridDhKeyPair.hpp +37 -0
  717. package/harmony/quick_crypto/src/main/cpp/cpp/dh/HybridDiffieHellman.cpp +501 -0
  718. package/harmony/quick_crypto/src/main/cpp/cpp/dh/HybridDiffieHellman.hpp +42 -0
  719. package/harmony/quick_crypto/src/main/cpp/cpp/dsa/HybridDsaKeyPair.cpp +128 -0
  720. package/harmony/quick_crypto/src/main/cpp/cpp/dsa/HybridDsaKeyPair.hpp +32 -0
  721. package/harmony/quick_crypto/src/main/cpp/cpp/ec/HybridEcKeyPair.cpp +479 -0
  722. package/harmony/quick_crypto/src/main/cpp/cpp/ec/HybridEcKeyPair.hpp +49 -0
  723. package/harmony/quick_crypto/src/main/cpp/cpp/ecdh/HybridECDH.cpp +228 -0
  724. package/harmony/quick_crypto/src/main/cpp/cpp/ecdh/HybridECDH.hpp +43 -0
  725. package/harmony/quick_crypto/src/main/cpp/cpp/ed25519/HybridEdKeyPair.cpp +404 -0
  726. package/harmony/quick_crypto/src/main/cpp/cpp/ed25519/HybridEdKeyPair.hpp +71 -0
  727. package/harmony/quick_crypto/src/main/cpp/cpp/hash/HybridHash.cpp +207 -0
  728. package/harmony/quick_crypto/src/main/cpp/cpp/hash/HybridHash.hpp +43 -0
  729. package/harmony/quick_crypto/src/main/cpp/cpp/hkdf/HybridHkdf.cpp +96 -0
  730. package/harmony/quick_crypto/src/main/cpp/cpp/hkdf/HybridHkdf.hpp +28 -0
  731. package/harmony/quick_crypto/src/main/cpp/cpp/hmac/HybridHmac.cpp +104 -0
  732. package/harmony/quick_crypto/src/main/cpp/cpp/hmac/HybridHmac.hpp +32 -0
  733. package/harmony/quick_crypto/src/main/cpp/cpp/keys/HybridKeyObjectHandle.cpp +891 -0
  734. package/harmony/quick_crypto/src/main/cpp/cpp/keys/HybridKeyObjectHandle.hpp +58 -0
  735. package/harmony/quick_crypto/src/main/cpp/cpp/keys/KeyObjectData.cpp +284 -0
  736. package/harmony/quick_crypto/src/main/cpp/cpp/keys/KeyObjectData.hpp +73 -0
  737. package/harmony/quick_crypto/src/main/cpp/cpp/keys/node.h +5 -0
  738. package/harmony/quick_crypto/src/main/cpp/cpp/kmac/HybridKmac.cpp +83 -0
  739. package/harmony/quick_crypto/src/main/cpp/cpp/kmac/HybridKmac.hpp +31 -0
  740. package/harmony/quick_crypto/src/main/cpp/cpp/mldsa/HybridMlDsaKeyPair.cpp +255 -0
  741. package/harmony/quick_crypto/src/main/cpp/cpp/mldsa/HybridMlDsaKeyPair.hpp +49 -0
  742. package/harmony/quick_crypto/src/main/cpp/cpp/mlkem/HybridMlKemKeyPair.cpp +319 -0
  743. package/harmony/quick_crypto/src/main/cpp/cpp/mlkem/HybridMlKemKeyPair.hpp +48 -0
  744. package/harmony/quick_crypto/src/main/cpp/cpp/pbkdf2/HybridPbkdf2.cpp +51 -0
  745. package/harmony/quick_crypto/src/main/cpp/cpp/pbkdf2/HybridPbkdf2.hpp +24 -0
  746. package/harmony/quick_crypto/src/main/cpp/cpp/prime/HybridPrime.cpp +81 -0
  747. package/harmony/quick_crypto/src/main/cpp/cpp/prime/HybridPrime.hpp +20 -0
  748. package/harmony/quick_crypto/src/main/cpp/cpp/random/HybridRandom.cpp +48 -0
  749. package/harmony/quick_crypto/src/main/cpp/cpp/random/HybridRandom.hpp +32 -0
  750. package/harmony/quick_crypto/src/main/cpp/cpp/rsa/HybridRsaKeyPair.cpp +154 -0
  751. package/harmony/quick_crypto/src/main/cpp/cpp/rsa/HybridRsaKeyPair.hpp +43 -0
  752. package/harmony/quick_crypto/src/main/cpp/cpp/scrypt/HybridScrypt.cpp +62 -0
  753. package/harmony/quick_crypto/src/main/cpp/cpp/scrypt/HybridScrypt.hpp +28 -0
  754. package/harmony/quick_crypto/src/main/cpp/cpp/sign/HybridSignHandle.cpp +266 -0
  755. package/harmony/quick_crypto/src/main/cpp/cpp/sign/HybridSignHandle.hpp +36 -0
  756. package/harmony/quick_crypto/src/main/cpp/cpp/sign/HybridVerifyHandle.cpp +227 -0
  757. package/harmony/quick_crypto/src/main/cpp/cpp/sign/HybridVerifyHandle.hpp +36 -0
  758. package/harmony/quick_crypto/src/main/cpp/cpp/sign/SignUtils.hpp +91 -0
  759. package/harmony/quick_crypto/src/main/cpp/cpp/utils/HybridUtils.cpp +197 -0
  760. package/harmony/quick_crypto/src/main/cpp/cpp/utils/HybridUtils.hpp +17 -0
  761. package/harmony/quick_crypto/src/main/cpp/cpp/utils/Macros.hpp +68 -0
  762. package/harmony/quick_crypto/src/main/cpp/cpp/utils/QuickCryptoUtils.cpp +44 -0
  763. package/harmony/quick_crypto/src/main/cpp/cpp/utils/QuickCryptoUtils.hpp +114 -0
  764. package/harmony/quick_crypto/src/main/cpp/cpp/utils/base64.h +309 -0
  765. package/harmony/quick_crypto/src/main/cpp/cpp/x509/HybridX509Certificate.cpp +174 -0
  766. package/harmony/quick_crypto/src/main/cpp/cpp/x509/HybridX509Certificate.hpp +51 -0
  767. package/harmony/quick_crypto/src/main/cpp/generated/RNOH/generated/BaseQuickCryptoPackage.h +72 -0
  768. package/harmony/quick_crypto/src/main/cpp/generated/RNOH/generated/dummy.cpp +2 -0
  769. package/harmony/quick_crypto/src/main/cpp/generated/RNOH/generated/turbo_modules/QuickCrypto.cpp +16 -0
  770. package/harmony/quick_crypto/src/main/cpp/generated/RNOH/generated/turbo_modules/QuickCrypto.h +16 -0
  771. package/harmony/quick_crypto/src/main/cpp/generated/react/renderer/components/quick_crypto/ComponentDescriptors.h +24 -0
  772. package/harmony/quick_crypto/src/main/cpp/generated/react/renderer/components/quick_crypto/EventEmitters.cpp +16 -0
  773. package/harmony/quick_crypto/src/main/cpp/generated/react/renderer/components/quick_crypto/EventEmitters.h +17 -0
  774. package/harmony/quick_crypto/src/main/cpp/generated/react/renderer/components/quick_crypto/Props.cpp +19 -0
  775. package/harmony/quick_crypto/src/main/cpp/generated/react/renderer/components/quick_crypto/Props.h +18 -0
  776. package/harmony/quick_crypto/src/main/cpp/generated/react/renderer/components/quick_crypto/ShadowNodes.cpp +17 -0
  777. package/harmony/quick_crypto/src/main/cpp/generated/react/renderer/components/quick_crypto/ShadowNodes.h +23 -0
  778. package/harmony/quick_crypto/src/main/cpp/generated/react/renderer/components/quick_crypto/States.cpp +16 -0
  779. package/harmony/quick_crypto/src/main/cpp/generated/react/renderer/components/quick_crypto/States.h +19 -0
  780. package/harmony/quick_crypto/src/main/cpp/nitro/HarmonyDispatcher.h +84 -0
  781. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/AnyMap.hpp +216 -0
  782. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/ArrayBuffer.hpp +157 -0
  783. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/AssertPromiseState.hpp +34 -0
  784. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/BorrowingReference.hpp +223 -0
  785. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/BoxedHybridObject.hpp +36 -0
  786. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/CachedProp.hpp +44 -0
  787. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/CallInvokerDispatcher.hpp +38 -0
  788. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/CountTrailingOptionals.hpp +64 -0
  789. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/Dispatcher.hpp +83 -0
  790. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/FastVectorCopy.hpp +45 -0
  791. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/FutureType.hpp +28 -0
  792. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/HybridFunction.hpp +269 -0
  793. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/HybridNitroModulesProxy.hpp +52 -0
  794. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/HybridObject.hpp +152 -0
  795. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/HybridObjectPrototype.hpp +93 -0
  796. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/HybridObjectRegistry.hpp +53 -0
  797. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/InstallNitro.hpp +41 -0
  798. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/InstanceMethod.hpp +23 -0
  799. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/IsSharedPtrTo.hpp +27 -0
  800. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/JSCallback.hpp +132 -0
  801. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/JSICache.hpp +123 -0
  802. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/JSIConverter+AnyMap.hpp +86 -0
  803. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/JSIConverter+ArrayBuffer.hpp +96 -0
  804. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/JSIConverter+Date.hpp +83 -0
  805. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/JSIConverter+Exception.hpp +59 -0
  806. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/JSIConverter+Function.hpp +92 -0
  807. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/JSIConverter+HostObject.hpp +73 -0
  808. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/JSIConverter+NativeState.hpp +93 -0
  809. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/JSIConverter+Null.hpp +38 -0
  810. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/JSIConverter+Optional.hpp +50 -0
  811. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/JSIConverter+Promise.hpp +112 -0
  812. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/JSIConverter+Tuple.hpp +93 -0
  813. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/JSIConverter+UnorderedMap.hpp +70 -0
  814. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/JSIConverter+Variant.hpp +67 -0
  815. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/JSIConverter+Vector.hpp +69 -0
  816. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/JSIConverter.hpp +197 -0
  817. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/JSIHelpers.hpp +52 -0
  818. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/NitroDefines.hpp +73 -0
  819. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/NitroHash.hpp +61 -0
  820. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/NitroLogger.hpp +69 -0
  821. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/NitroTypeInfo.hpp +66 -0
  822. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/Null.hpp +42 -0
  823. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/ObjectUtils.hpp +94 -0
  824. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/Promise.hpp +324 -0
  825. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/PromiseType.hpp +44 -0
  826. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/PropNameIDCache.hpp +24 -0
  827. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/Prototype.hpp +182 -0
  828. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/PrototypeChain.hpp +78 -0
  829. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/ReferenceState.hpp +40 -0
  830. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/ThreadPool.hpp +66 -0
  831. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/ThreadUtils.hpp +31 -0
  832. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/TypeIndex.hpp +29 -0
  833. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/WeakReference+Owning.hpp +33 -0
  834. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModules/WeakReference.hpp +102 -0
  835. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModulesTurboModule.cpp +92 -0
  836. package/harmony/quick_crypto/src/main/cpp/nitro/NitroModulesTurboModule.h +74 -0
  837. package/harmony/quick_crypto/src/main/cpp/nitro/platform/ThreadUtils.cpp +60 -0
  838. package/harmony/quick_crypto/src/main/cpp/nitro/shared/AnyMap.cpp +202 -0
  839. package/harmony/quick_crypto/src/main/cpp/nitro/shared/AnyMap.hpp +216 -0
  840. package/harmony/quick_crypto/src/main/cpp/nitro/shared/ArrayBuffer.cpp +125 -0
  841. package/harmony/quick_crypto/src/main/cpp/nitro/shared/ArrayBuffer.hpp +157 -0
  842. package/harmony/quick_crypto/src/main/cpp/nitro/shared/AssertPromiseState.hpp +34 -0
  843. package/harmony/quick_crypto/src/main/cpp/nitro/shared/BorrowingReference.hpp +223 -0
  844. package/harmony/quick_crypto/src/main/cpp/nitro/shared/BoxedHybridObject.cpp +30 -0
  845. package/harmony/quick_crypto/src/main/cpp/nitro/shared/BoxedHybridObject.hpp +36 -0
  846. package/harmony/quick_crypto/src/main/cpp/nitro/shared/CachedProp.hpp +44 -0
  847. package/harmony/quick_crypto/src/main/cpp/nitro/shared/CallInvokerDispatcher.hpp +38 -0
  848. package/harmony/quick_crypto/src/main/cpp/nitro/shared/CountTrailingOptionals.hpp +64 -0
  849. package/harmony/quick_crypto/src/main/cpp/nitro/shared/Dispatcher.cpp +71 -0
  850. package/harmony/quick_crypto/src/main/cpp/nitro/shared/Dispatcher.hpp +83 -0
  851. package/harmony/quick_crypto/src/main/cpp/nitro/shared/FastVectorCopy.hpp +45 -0
  852. package/harmony/quick_crypto/src/main/cpp/nitro/shared/FutureType.hpp +28 -0
  853. package/harmony/quick_crypto/src/main/cpp/nitro/shared/HybridFunction.hpp +269 -0
  854. package/harmony/quick_crypto/src/main/cpp/nitro/shared/HybridNitroModulesProxy.cpp +92 -0
  855. package/harmony/quick_crypto/src/main/cpp/nitro/shared/HybridNitroModulesProxy.hpp +52 -0
  856. package/harmony/quick_crypto/src/main/cpp/nitro/shared/HybridObject.cpp +107 -0
  857. package/harmony/quick_crypto/src/main/cpp/nitro/shared/HybridObject.hpp +152 -0
  858. package/harmony/quick_crypto/src/main/cpp/nitro/shared/HybridObjectPrototype.cpp +113 -0
  859. package/harmony/quick_crypto/src/main/cpp/nitro/shared/HybridObjectPrototype.hpp +93 -0
  860. package/harmony/quick_crypto/src/main/cpp/nitro/shared/HybridObjectRegistry.cpp +105 -0
  861. package/harmony/quick_crypto/src/main/cpp/nitro/shared/HybridObjectRegistry.hpp +53 -0
  862. package/harmony/quick_crypto/src/main/cpp/nitro/shared/InstallNitro.cpp +29 -0
  863. package/harmony/quick_crypto/src/main/cpp/nitro/shared/InstallNitro.hpp +41 -0
  864. package/harmony/quick_crypto/src/main/cpp/nitro/shared/InstanceMethod.hpp +23 -0
  865. package/harmony/quick_crypto/src/main/cpp/nitro/shared/IsSharedPtrTo.hpp +27 -0
  866. package/harmony/quick_crypto/src/main/cpp/nitro/shared/JSCallback.hpp +132 -0
  867. package/harmony/quick_crypto/src/main/cpp/nitro/shared/JSICache.cpp +66 -0
  868. package/harmony/quick_crypto/src/main/cpp/nitro/shared/JSICache.hpp +123 -0
  869. package/harmony/quick_crypto/src/main/cpp/nitro/shared/JSIConverter+AnyMap.hpp +86 -0
  870. package/harmony/quick_crypto/src/main/cpp/nitro/shared/JSIConverter+ArrayBuffer.hpp +96 -0
  871. package/harmony/quick_crypto/src/main/cpp/nitro/shared/JSIConverter+Date.hpp +83 -0
  872. package/harmony/quick_crypto/src/main/cpp/nitro/shared/JSIConverter+Exception.hpp +59 -0
  873. package/harmony/quick_crypto/src/main/cpp/nitro/shared/JSIConverter+Function.hpp +92 -0
  874. package/harmony/quick_crypto/src/main/cpp/nitro/shared/JSIConverter+HostObject.hpp +73 -0
  875. package/harmony/quick_crypto/src/main/cpp/nitro/shared/JSIConverter+NativeState.hpp +93 -0
  876. package/harmony/quick_crypto/src/main/cpp/nitro/shared/JSIConverter+Null.hpp +38 -0
  877. package/harmony/quick_crypto/src/main/cpp/nitro/shared/JSIConverter+Optional.hpp +50 -0
  878. package/harmony/quick_crypto/src/main/cpp/nitro/shared/JSIConverter+Promise.hpp +112 -0
  879. package/harmony/quick_crypto/src/main/cpp/nitro/shared/JSIConverter+Tuple.hpp +93 -0
  880. package/harmony/quick_crypto/src/main/cpp/nitro/shared/JSIConverter+UnorderedMap.hpp +70 -0
  881. package/harmony/quick_crypto/src/main/cpp/nitro/shared/JSIConverter+Variant.hpp +67 -0
  882. package/harmony/quick_crypto/src/main/cpp/nitro/shared/JSIConverter+Vector.hpp +69 -0
  883. package/harmony/quick_crypto/src/main/cpp/nitro/shared/JSIConverter.hpp +197 -0
  884. package/harmony/quick_crypto/src/main/cpp/nitro/shared/JSIHelpers.hpp +52 -0
  885. package/harmony/quick_crypto/src/main/cpp/nitro/shared/NitroDefines.hpp +73 -0
  886. package/harmony/quick_crypto/src/main/cpp/nitro/shared/NitroHash.hpp +61 -0
  887. package/harmony/quick_crypto/src/main/cpp/nitro/shared/NitroLogger.hpp +69 -0
  888. package/harmony/quick_crypto/src/main/cpp/nitro/shared/NitroTypeInfo.cpp +80 -0
  889. package/harmony/quick_crypto/src/main/cpp/nitro/shared/NitroTypeInfo.hpp +66 -0
  890. package/harmony/quick_crypto/src/main/cpp/nitro/shared/Null.hpp +42 -0
  891. package/harmony/quick_crypto/src/main/cpp/nitro/shared/ObjectUtils.cpp +172 -0
  892. package/harmony/quick_crypto/src/main/cpp/nitro/shared/ObjectUtils.hpp +94 -0
  893. package/harmony/quick_crypto/src/main/cpp/nitro/shared/Promise.cpp +136 -0
  894. package/harmony/quick_crypto/src/main/cpp/nitro/shared/Promise.hpp +324 -0
  895. package/harmony/quick_crypto/src/main/cpp/nitro/shared/PromiseType.hpp +44 -0
  896. package/harmony/quick_crypto/src/main/cpp/nitro/shared/Prototype.hpp +182 -0
  897. package/harmony/quick_crypto/src/main/cpp/nitro/shared/PrototypeChain.hpp +78 -0
  898. package/harmony/quick_crypto/src/main/cpp/nitro/shared/ReferenceState.hpp +40 -0
  899. package/harmony/quick_crypto/src/main/cpp/nitro/shared/ThreadPool.cpp +99 -0
  900. package/harmony/quick_crypto/src/main/cpp/nitro/shared/ThreadPool.hpp +66 -0
  901. package/harmony/quick_crypto/src/main/cpp/nitro/shared/ThreadUtils.hpp +31 -0
  902. package/harmony/quick_crypto/src/main/cpp/nitro/shared/TypeIndex.hpp +29 -0
  903. package/harmony/quick_crypto/src/main/cpp/nitro/shared/WeakReference+Owning.hpp +33 -0
  904. package/harmony/quick_crypto/src/main/cpp/nitro/shared/WeakReference.hpp +102 -0
  905. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/AsymmetricKeyType.hpp +128 -0
  906. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/CipherArgs.hpp +101 -0
  907. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/CipherInfo.hpp +104 -0
  908. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridArgon2Spec.cpp +22 -0
  909. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridArgon2Spec.hpp +66 -0
  910. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridBlake3Spec.cpp +28 -0
  911. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridBlake3Spec.hpp +74 -0
  912. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridCertificateSpec.cpp +23 -0
  913. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridCertificateSpec.hpp +64 -0
  914. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridCipherFactorySpec.cpp +21 -0
  915. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridCipherFactorySpec.hpp +67 -0
  916. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridCipherSpec.cpp +29 -0
  917. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridCipherSpec.hpp +78 -0
  918. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridDhKeyPairSpec.cpp +27 -0
  919. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridDhKeyPairSpec.hpp +69 -0
  920. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridDiffieHellmanSpec.cpp +31 -0
  921. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridDiffieHellmanSpec.hpp +72 -0
  922. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridDsaKeyPairSpec.cpp +26 -0
  923. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridDsaKeyPairSpec.hpp +68 -0
  924. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridECDHSpec.cpp +28 -0
  925. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridECDHSpec.hpp +70 -0
  926. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridEcKeyPairSpec.cpp +30 -0
  927. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridEcKeyPairSpec.hpp +76 -0
  928. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridEdKeyPairSpec.cpp +30 -0
  929. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridEdKeyPairSpec.hpp +74 -0
  930. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridHashSpec.cpp +26 -0
  931. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridHashSpec.hpp +74 -0
  932. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridHkdfSpec.cpp +22 -0
  933. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridHkdfSpec.hpp +65 -0
  934. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridHmacSpec.cpp +23 -0
  935. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridHmacSpec.hpp +66 -0
  936. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridKeyObjectHandleSpec.cpp +30 -0
  937. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridKeyObjectHandleSpec.hpp +98 -0
  938. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridKmacSpec.cpp +23 -0
  939. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridKmacSpec.hpp +66 -0
  940. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridMlDsaKeyPairSpec.cpp +29 -0
  941. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridMlDsaKeyPairSpec.hpp +72 -0
  942. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridMlKemKeyPairSpec.cpp +31 -0
  943. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridMlKemKeyPairSpec.hpp +74 -0
  944. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridPbkdf2Spec.cpp +22 -0
  945. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridPbkdf2Spec.hpp +65 -0
  946. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridPrimeSpec.cpp +24 -0
  947. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridPrimeSpec.hpp +67 -0
  948. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridRandomSpec.cpp +22 -0
  949. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridRandomSpec.hpp +64 -0
  950. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridRsaCipherSpec.cpp +25 -0
  951. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridRsaCipherSpec.hpp +71 -0
  952. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridRsaKeyPairSpec.cpp +29 -0
  953. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridRsaKeyPairSpec.hpp +75 -0
  954. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridScryptSpec.cpp +22 -0
  955. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridScryptSpec.hpp +64 -0
  956. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridSignHandleSpec.cpp +23 -0
  957. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridSignHandleSpec.hpp +69 -0
  958. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridUtilsSpec.cpp +23 -0
  959. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridUtilsSpec.hpp +65 -0
  960. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridVerifyHandleSpec.cpp +23 -0
  961. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridVerifyHandleSpec.hpp +69 -0
  962. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridX509CertificateHandleSpec.cpp +46 -0
  963. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/HybridX509CertificateHandleSpec.hpp +96 -0
  964. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/JWK.hpp +177 -0
  965. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/JWKkty.hpp +88 -0
  966. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/JWKuse.hpp +76 -0
  967. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/KFormatType.hpp +63 -0
  968. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/KeyDetail.hpp +108 -0
  969. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/KeyEncoding.hpp +64 -0
  970. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/KeyObject.hpp +83 -0
  971. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/KeyType.hpp +63 -0
  972. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/KeyUsage.hpp +116 -0
  973. package/harmony/quick_crypto/src/main/cpp/nitrogen/shared/NamedCurve.hpp +80 -0
  974. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/README.md +11 -0
  975. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/__DECC_INCLUDE_EPILOGUE.H +22 -0
  976. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/__DECC_INCLUDE_PROLOGUE.H +26 -0
  977. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/aes.h +111 -0
  978. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/asn1.h +1134 -0
  979. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/asn1.h.in +967 -0
  980. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/asn1err.h +142 -0
  981. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/asn1t.h +946 -0
  982. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/asn1t.h.in +923 -0
  983. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/async.h +104 -0
  984. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/asyncerr.h +29 -0
  985. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/bio.h +1022 -0
  986. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/bio.h.in +999 -0
  987. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/bioerr.h +72 -0
  988. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/blowfish.h +78 -0
  989. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/bn.h +590 -0
  990. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/bnerr.h +47 -0
  991. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/buffer.h +62 -0
  992. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/buffererr.h +25 -0
  993. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/byteorder.h +339 -0
  994. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/camellia.h +117 -0
  995. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/cast.h +71 -0
  996. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/cmac.h +52 -0
  997. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/cmp.h +727 -0
  998. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/cmp.h.in +584 -0
  999. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/cmp_util.h +56 -0
  1000. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/cmperr.h +134 -0
  1001. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/cms.h +520 -0
  1002. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/cms.h.in +422 -0
  1003. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/cmserr.h +129 -0
  1004. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/comp.h +98 -0
  1005. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/comp.h.in +76 -0
  1006. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/comperr.h +38 -0
  1007. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/conf.h +214 -0
  1008. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/conf.h.in +177 -0
  1009. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/conf_api.h +46 -0
  1010. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/conferr.h +52 -0
  1011. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/configuration.h +224 -0
  1012. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/configuration.h.in +75 -0
  1013. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/conftypes.h +44 -0
  1014. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/core.h +236 -0
  1015. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/core_dispatch.h +1156 -0
  1016. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/core_names.h +584 -0
  1017. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/core_names.h.in +129 -0
  1018. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/core_object.h +41 -0
  1019. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/crmf.h +278 -0
  1020. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/crmf.h.in +207 -0
  1021. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/crmferr.h +57 -0
  1022. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/crypto.h +614 -0
  1023. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/crypto.h.in +591 -0
  1024. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/cryptoerr.h +56 -0
  1025. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/cryptoerr_legacy.h +1466 -0
  1026. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/ct.h +573 -0
  1027. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/ct.h.in +525 -0
  1028. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/cterr.h +45 -0
  1029. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/decoder.h +133 -0
  1030. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/decodererr.h +28 -0
  1031. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/des.h +211 -0
  1032. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/dh.h +339 -0
  1033. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/dherr.h +59 -0
  1034. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/dsa.h +280 -0
  1035. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/dsaerr.h +44 -0
  1036. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/dtls1.h +57 -0
  1037. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/e_os2.h +310 -0
  1038. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/e_ostime.h +38 -0
  1039. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/ebcdic.h +39 -0
  1040. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/ec.h +1588 -0
  1041. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/ecdh.h +10 -0
  1042. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/ecdsa.h +10 -0
  1043. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/ecerr.h +104 -0
  1044. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/encoder.h +124 -0
  1045. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/encodererr.h +28 -0
  1046. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/engine.h +833 -0
  1047. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/engineerr.h +63 -0
  1048. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/err.h +512 -0
  1049. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/err.h.in +501 -0
  1050. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/ess.h +128 -0
  1051. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/ess.h.in +81 -0
  1052. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/esserr.h +32 -0
  1053. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/evp.h +2345 -0
  1054. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/evperr.h +148 -0
  1055. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/fips_names.h +50 -0
  1056. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/fipskey.h +41 -0
  1057. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/fipskey.h.in +40 -0
  1058. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/hmac.h +62 -0
  1059. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/hpke.h +169 -0
  1060. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/http.h +119 -0
  1061. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/httperr.h +56 -0
  1062. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/idea.h +82 -0
  1063. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/indicator.h +31 -0
  1064. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/kdf.h +142 -0
  1065. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/kdferr.h +16 -0
  1066. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/lhash.h +398 -0
  1067. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/lhash.h.in +373 -0
  1068. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/macros.h +361 -0
  1069. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/md2.h +56 -0
  1070. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/md4.h +63 -0
  1071. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/md5.h +62 -0
  1072. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/mdc2.h +55 -0
  1073. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/ml_kem.h +31 -0
  1074. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/modes.h +219 -0
  1075. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/obj_mac.h +6695 -0
  1076. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/objects.h +184 -0
  1077. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/objectserr.h +28 -0
  1078. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/ocsp.h +483 -0
  1079. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/ocsp.h.in +387 -0
  1080. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/ocsperr.h +53 -0
  1081. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/opensslconf.h +17 -0
  1082. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/opensslv.h +109 -0
  1083. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/opensslv.h.in +108 -0
  1084. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/ossl_typ.h +16 -0
  1085. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/param_build.h +63 -0
  1086. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/params.h +166 -0
  1087. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/pem.h +548 -0
  1088. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/pem2.h +19 -0
  1089. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/pemerr.h +59 -0
  1090. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/pkcs12.h +372 -0
  1091. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/pkcs12.h.in +349 -0
  1092. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/pkcs12err.h +46 -0
  1093. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/pkcs7.h +430 -0
  1094. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/pkcs7.h.in +359 -0
  1095. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/pkcs7err.h +63 -0
  1096. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/prov_ssl.h +38 -0
  1097. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/proverr.h +171 -0
  1098. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/provider.h +94 -0
  1099. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/quic.h +75 -0
  1100. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/rand.h +131 -0
  1101. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/randerr.h +70 -0
  1102. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/rc2.h +68 -0
  1103. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/rc4.h +47 -0
  1104. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/rc5.h +79 -0
  1105. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/ripemd.h +59 -0
  1106. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/rsa.h +615 -0
  1107. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/rsaerr.h +107 -0
  1108. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/safestack.h +320 -0
  1109. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/safestack.h.in +250 -0
  1110. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/seed.h +113 -0
  1111. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/self_test.h +116 -0
  1112. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/sha.h +139 -0
  1113. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/srp.h +285 -0
  1114. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/srp.h.in +214 -0
  1115. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/srtp.h +68 -0
  1116. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/ssl.h +2940 -0
  1117. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/ssl.h.in +2893 -0
  1118. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/ssl2.h +30 -0
  1119. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/ssl3.h +358 -0
  1120. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/sslerr.h +382 -0
  1121. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/sslerr_legacy.h +467 -0
  1122. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/stack.h +92 -0
  1123. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/store.h +379 -0
  1124. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/storeerr.h +49 -0
  1125. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/symhacks.h +39 -0
  1126. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/thread.h +31 -0
  1127. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/tls1.h +1226 -0
  1128. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/trace.h +321 -0
  1129. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/ts.h +522 -0
  1130. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/tserr.h +67 -0
  1131. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/txt_db.h +63 -0
  1132. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/types.h +248 -0
  1133. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/ui.h +407 -0
  1134. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/ui.h.in +384 -0
  1135. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/uierr.h +38 -0
  1136. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/whrlpool.h +62 -0
  1137. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/x509.h +1304 -0
  1138. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/x509.h.in +1110 -0
  1139. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/x509_acert.h +294 -0
  1140. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/x509_acert.h.in +199 -0
  1141. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/x509_vfy.h +921 -0
  1142. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/x509_vfy.h.in +824 -0
  1143. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/x509err.h +70 -0
  1144. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/x509v3.h +1968 -0
  1145. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/x509v3.h.in +1367 -0
  1146. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/include/openssl/x509v3err.h +97 -0
  1147. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/lib/libcrypto.a +0 -0
  1148. package/harmony/quick_crypto/src/main/cpp/third_party/openssl/lib/libssl.a +0 -0
  1149. package/harmony/quick_crypto/src/main/ets/QuickCryptoTurboModule.ts +14 -0
  1150. package/harmony/quick_crypto/src/main/ets/QuickCryptoTurboModulesFactory.ets +26 -0
  1151. package/harmony/quick_crypto/src/main/ets/generated/index.ets +5 -0
  1152. package/harmony/quick_crypto/src/main/ets/generated/ts.ts +5 -0
  1153. package/harmony/quick_crypto/src/main/ets/generated/turboModules/QuickCrypto.ts +14 -0
  1154. package/harmony/quick_crypto/src/main/ets/generated/turboModules/ts.ts +5 -0
  1155. package/harmony/quick_crypto/src/main/ets/nitro/Logger.ts +58 -0
  1156. package/harmony/quick_crypto/src/main/ets/nitro/NitroModulesModule.ts +134 -0
  1157. package/harmony/quick_crypto/src/main/module.json5 +13 -0
  1158. package/harmony/quick_crypto/src/main/resources/base/element/string.json +8 -0
  1159. package/harmony/quick_crypto/src/main/resources/en_US/element/string.json +8 -0
  1160. package/harmony/quick_crypto/src/main/resources/zh_CN/element/string.json +8 -0
  1161. package/harmony/quick_crypto.har +0 -0
  1162. package/package.json +87 -0
  1163. package/src/argon2.ts +83 -0
  1164. package/src/blake3.ts +124 -0
  1165. package/src/certificate.ts +41 -0
  1166. package/src/cipher.ts +373 -0
  1167. package/src/constants.ts +32 -0
  1168. package/src/dh-groups.ts +27 -0
  1169. package/src/dhKeyPair.ts +156 -0
  1170. package/src/diffie-hellman.ts +195 -0
  1171. package/src/dsa.ts +129 -0
  1172. package/src/ec.ts +557 -0
  1173. package/src/ecdh.ts +132 -0
  1174. package/src/ed.ts +526 -0
  1175. package/src/expo-plugin/@types.ts +7 -0
  1176. package/src/expo-plugin/withRNQC.ts +23 -0
  1177. package/src/expo-plugin/withSodiumAndroid.ts +24 -0
  1178. package/src/expo-plugin/withSodiumIos.ts +25 -0
  1179. package/src/expo-plugin/withXCode.ts +55 -0
  1180. package/src/hash.ts +320 -0
  1181. package/src/hkdf.ts +147 -0
  1182. package/src/hmac.ts +140 -0
  1183. package/src/index.ts +144 -0
  1184. package/src/keys/classes.ts +332 -0
  1185. package/src/keys/generateKeyPair.ts +212 -0
  1186. package/src/keys/index.ts +298 -0
  1187. package/src/keys/publicCipher.ts +250 -0
  1188. package/src/keys/signVerify.ts +318 -0
  1189. package/src/keys/utils.ts +190 -0
  1190. package/src/mldsa.ts +125 -0
  1191. package/src/mlkem.ts +350 -0
  1192. package/src/pbkdf2.ts +183 -0
  1193. package/src/prime.ts +134 -0
  1194. package/src/random.ts +334 -0
  1195. package/src/rsa.ts +311 -0
  1196. package/src/scrypt.ts +134 -0
  1197. package/src/specs/v1/.gitkeep +1 -0
  1198. package/src/specs/v1/NativeQuickCrypto.ts +19 -0
  1199. package/src/specs/v1/argon2.nitro.ts +29 -0
  1200. package/src/specs/v1/blake3.nitro.ts +12 -0
  1201. package/src/specs/v1/certificate.nitro.ts +8 -0
  1202. package/src/specs/v1/cipher.nitro.ts +39 -0
  1203. package/src/specs/v1/dhKeyPair.nitro.ts +14 -0
  1204. package/src/specs/v1/diffie-hellman.nitro.ts +16 -0
  1205. package/src/specs/v1/dsaKeyPair.nitro.ts +13 -0
  1206. package/src/specs/v1/ecKeyPair.nitro.ts +40 -0
  1207. package/src/specs/v1/ecdh.nitro.ts +12 -0
  1208. package/src/specs/v1/edKeyPair.nitro.ts +43 -0
  1209. package/src/specs/v1/hash.nitro.ts +10 -0
  1210. package/src/specs/v1/hkdf.nitro.ts +19 -0
  1211. package/src/specs/v1/hmac.nitro.ts +7 -0
  1212. package/src/specs/v1/keyObjectHandle.nitro.ts +39 -0
  1213. package/src/specs/v1/kmac.nitro.ts +12 -0
  1214. package/src/specs/v1/mlDsaKeyPair.nitro.ts +29 -0
  1215. package/src/specs/v1/mlKemKeyPair.nitro.ts +32 -0
  1216. package/src/specs/v1/pbkdf2.nitro.ts +18 -0
  1217. package/src/specs/v1/prime.nitro.ts +18 -0
  1218. package/src/specs/v1/random.nitro.ts +14 -0
  1219. package/src/specs/v1/rsaCipher.nitro.ts +82 -0
  1220. package/src/specs/v1/rsaKeyPair.nitro.ts +33 -0
  1221. package/src/specs/v1/scrypt.nitro.ts +23 -0
  1222. package/src/specs/v1/sign.nitro.ts +31 -0
  1223. package/src/specs/v1/utils.nitro.ts +7 -0
  1224. package/src/specs/v1/x509certificate.nitro.ts +38 -0
  1225. package/src/specs/v2/.gitkeep +1 -0
  1226. package/src/subtle.ts +2922 -0
  1227. package/src/utils/cipher.ts +60 -0
  1228. package/src/utils/conversion.ts +194 -0
  1229. package/src/utils/errors.ts +15 -0
  1230. package/src/utils/hashnames.ts +129 -0
  1231. package/src/utils/index.ts +7 -0
  1232. package/src/utils/noble.ts +85 -0
  1233. package/src/utils/timingSafeEqual.ts +23 -0
  1234. package/src/utils/types.ts +547 -0
  1235. package/src/utils/validation.ts +130 -0
  1236. package/src/x509certificate.ts +277 -0
package/src/subtle.ts ADDED
@@ -0,0 +1,2922 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ import { Buffer as SBuffer } from 'safe-buffer';
3
+ import type {
4
+ SubtleAlgorithm,
5
+ KeyUsage,
6
+ BinaryLike,
7
+ BufferLike,
8
+ JWK,
9
+ AnyAlgorithm,
10
+ ImportFormat,
11
+ AesKeyGenParams,
12
+ EncryptDecryptParams,
13
+ Operation,
14
+ AesCtrParams,
15
+ AesCbcParams,
16
+ AesGcmParams,
17
+ AesOcbParams,
18
+ RsaOaepParams,
19
+ ChaCha20Poly1305Params,
20
+ } from './utils';
21
+ import { KFormatType, KeyEncoding, KeyType } from './utils';
22
+ import {
23
+ CryptoKey,
24
+ KeyObject,
25
+ PublicKeyObject,
26
+ PrivateKeyObject,
27
+ SecretKeyObject,
28
+ } from './keys';
29
+ import type { CryptoKeyPair } from './utils/types';
30
+ import { bufferLikeToArrayBuffer } from './utils/conversion';
31
+ import { argon2Sync } from './argon2';
32
+ import { lazyDOMException } from './utils/errors';
33
+ import { normalizeHashName, HashContext } from './utils/hashnames';
34
+ import { validateMaxBufferLength } from './utils/validation';
35
+ import { asyncDigest } from './hash';
36
+ import { createSecretKey, createPublicKey } from './keys';
37
+ import { NitroModules } from 'react-native-nitro-modules';
38
+ import type { KeyObjectHandle } from './specs/v1/keyObjectHandle.nitro';
39
+ import type { RsaCipher } from './specs/v1/rsaCipher.nitro';
40
+ import type { CipherFactory } from './specs/v1/cipher.nitro';
41
+ import { pbkdf2DeriveBits } from './pbkdf2';
42
+ import {
43
+ ecImportKey,
44
+ ecdsaSignVerify,
45
+ ec_generateKeyPair,
46
+ ecDeriveBits,
47
+ } from './ec';
48
+ import { rsa_generateKeyPair } from './rsa';
49
+ import { getRandomValues } from './random';
50
+ import { createHmac } from './hmac';
51
+ import type { Kmac } from './specs/v1/kmac.nitro';
52
+ import { timingSafeEqual } from './utils/timingSafeEqual';
53
+ import { createSign, createVerify } from './keys/signVerify';
54
+ import {
55
+ ed_generateKeyPairWebCrypto,
56
+ x_generateKeyPairWebCrypto,
57
+ xDeriveBits,
58
+ Ed,
59
+ } from './ed';
60
+ import { mldsa_generateKeyPairWebCrypto, type MlDsaVariant } from './mldsa';
61
+ import {
62
+ mlkem_generateKeyPairWebCrypto,
63
+ type MlKemVariant,
64
+ MlKem,
65
+ } from './mlkem';
66
+ import type { EncapsulateResult } from './utils';
67
+ import { hkdfDeriveBits, type HkdfAlgorithm } from './hkdf';
68
+ // Temporary enums that need to be defined
69
+
70
+ enum KWebCryptoKeyFormat {
71
+ kWebCryptoKeyFormatRaw,
72
+ kWebCryptoKeyFormatSPKI,
73
+ kWebCryptoKeyFormatPKCS8,
74
+ }
75
+
76
+ enum CipherOrWrapMode {
77
+ kWebCryptoCipherEncrypt,
78
+ kWebCryptoCipherDecrypt,
79
+ }
80
+
81
+ // Placeholder functions that need to be implemented
82
+ function hasAnyNotIn(usages: KeyUsage[], allowed: KeyUsage[]): boolean {
83
+ return usages.some(usage => !allowed.includes(usage));
84
+ }
85
+
86
+ function normalizeAlgorithm(
87
+ algorithm: SubtleAlgorithm | AnyAlgorithm,
88
+ _operation: Operation,
89
+ ): SubtleAlgorithm {
90
+ if (typeof algorithm === 'string') {
91
+ return { name: algorithm };
92
+ }
93
+ return algorithm as SubtleAlgorithm;
94
+ }
95
+
96
+ function getAlgorithmName(name: string, length: number): string {
97
+ switch (name) {
98
+ case 'AES-CBC':
99
+ return `A${length}CBC`;
100
+ case 'AES-CTR':
101
+ return `A${length}CTR`;
102
+ case 'AES-GCM':
103
+ return `A${length}GCM`;
104
+ case 'AES-KW':
105
+ return `A${length}KW`;
106
+ case 'AES-OCB':
107
+ return `A${length}OCB`;
108
+ case 'ChaCha20-Poly1305':
109
+ return 'C20P';
110
+ default:
111
+ return `${name}${length}`;
112
+ }
113
+ }
114
+
115
+ // Placeholder implementations for missing functions
116
+ function ecExportKey(key: CryptoKey, format: KWebCryptoKeyFormat): ArrayBuffer {
117
+ const keyObject = key.keyObject;
118
+
119
+ if (format === KWebCryptoKeyFormat.kWebCryptoKeyFormatRaw) {
120
+ return bufferLikeToArrayBuffer(keyObject.handle.exportKey());
121
+ } else if (format === KWebCryptoKeyFormat.kWebCryptoKeyFormatSPKI) {
122
+ const exported = keyObject.export({ format: 'der', type: 'spki' });
123
+ return bufferLikeToArrayBuffer(exported);
124
+ } else if (format === KWebCryptoKeyFormat.kWebCryptoKeyFormatPKCS8) {
125
+ const exported = keyObject.export({ format: 'der', type: 'pkcs8' });
126
+ return bufferLikeToArrayBuffer(exported);
127
+ } else {
128
+ throw new Error(`Unsupported EC export format: ${format}`);
129
+ }
130
+ }
131
+
132
+ function rsaExportKey(
133
+ key: CryptoKey,
134
+ format: KWebCryptoKeyFormat,
135
+ ): ArrayBuffer {
136
+ const keyObject = key.keyObject;
137
+
138
+ if (format === KWebCryptoKeyFormat.kWebCryptoKeyFormatSPKI) {
139
+ // Export public key in SPKI format
140
+ const exported = keyObject.export({ format: 'der', type: 'spki' });
141
+ return bufferLikeToArrayBuffer(exported);
142
+ } else if (format === KWebCryptoKeyFormat.kWebCryptoKeyFormatPKCS8) {
143
+ // Export private key in PKCS8 format
144
+ const exported = keyObject.export({ format: 'der', type: 'pkcs8' });
145
+ return bufferLikeToArrayBuffer(exported);
146
+ } else {
147
+ throw new Error(`Unsupported RSA export format: ${format}`);
148
+ }
149
+ }
150
+
151
+ async function rsaCipher(
152
+ mode: CipherOrWrapMode,
153
+ key: CryptoKey,
154
+ data: ArrayBuffer,
155
+ algorithm: EncryptDecryptParams,
156
+ ): Promise<ArrayBuffer> {
157
+ const rsaParams = algorithm as RsaOaepParams;
158
+
159
+ // Validate key type matches operation
160
+ const expectedType =
161
+ mode === CipherOrWrapMode.kWebCryptoCipherEncrypt ? 'public' : 'private';
162
+ if (key.type !== expectedType) {
163
+ throw lazyDOMException(
164
+ 'The requested operation is not valid for the provided key',
165
+ 'InvalidAccessError',
166
+ );
167
+ }
168
+
169
+ // Get hash algorithm from key
170
+ const hashAlgorithm = normalizeHashName(key.algorithm.hash);
171
+
172
+ // Prepare label (optional)
173
+ const label = rsaParams.label
174
+ ? bufferLikeToArrayBuffer(rsaParams.label)
175
+ : undefined;
176
+
177
+ // Create RSA cipher instance
178
+ const rsaCipherModule =
179
+ NitroModules.createHybridObject<RsaCipher>('RsaCipher');
180
+
181
+ // RSA-OAEP padding constant = 4
182
+ const RSA_PKCS1_OAEP_PADDING = 4;
183
+
184
+ if (mode === CipherOrWrapMode.kWebCryptoCipherEncrypt) {
185
+ // Encrypt with public key
186
+ return rsaCipherModule.encrypt(
187
+ key.keyObject.handle,
188
+ data,
189
+ RSA_PKCS1_OAEP_PADDING,
190
+ hashAlgorithm,
191
+ label,
192
+ );
193
+ } else {
194
+ // Decrypt with private key
195
+ return rsaCipherModule.decrypt(
196
+ key.keyObject.handle,
197
+ data,
198
+ RSA_PKCS1_OAEP_PADDING,
199
+ hashAlgorithm,
200
+ label,
201
+ );
202
+ }
203
+ }
204
+
205
+ async function aesCipher(
206
+ mode: CipherOrWrapMode,
207
+ key: CryptoKey,
208
+ data: ArrayBuffer,
209
+ algorithm: EncryptDecryptParams,
210
+ ): Promise<ArrayBuffer> {
211
+ const { name } = algorithm;
212
+
213
+ switch (name) {
214
+ case 'AES-CTR':
215
+ return aesCtrCipher(mode, key, data, algorithm as AesCtrParams);
216
+ case 'AES-CBC':
217
+ return aesCbcCipher(mode, key, data, algorithm as AesCbcParams);
218
+ case 'AES-GCM':
219
+ return aesGcmCipher(mode, key, data, algorithm as AesGcmParams);
220
+ case 'AES-OCB':
221
+ return aesOcbCipher(mode, key, data, algorithm as AesOcbParams);
222
+ default:
223
+ throw lazyDOMException(
224
+ `Unsupported AES algorithm: ${name}`,
225
+ 'NotSupportedError',
226
+ );
227
+ }
228
+ }
229
+
230
+ async function aesCtrCipher(
231
+ mode: CipherOrWrapMode,
232
+ key: CryptoKey,
233
+ data: ArrayBuffer,
234
+ algorithm: AesCtrParams,
235
+ ): Promise<ArrayBuffer> {
236
+ // Validate counter and length
237
+ if (!algorithm.counter || algorithm.counter.byteLength !== 16) {
238
+ throw lazyDOMException(
239
+ 'AES-CTR algorithm.counter must be 16 bytes',
240
+ 'OperationError',
241
+ );
242
+ }
243
+
244
+ if (algorithm.length < 1 || algorithm.length > 128) {
245
+ throw lazyDOMException(
246
+ 'AES-CTR algorithm.length must be between 1 and 128',
247
+ 'OperationError',
248
+ );
249
+ }
250
+
251
+ // Get cipher type based on key length
252
+ const keyLength = (key.algorithm as { length: number }).length;
253
+ const cipherType = `aes-${keyLength}-ctr`;
254
+
255
+ // Create cipher
256
+ const factory =
257
+ NitroModules.createHybridObject<CipherFactory>('CipherFactory');
258
+ const cipher = factory.createCipher({
259
+ isCipher: mode === CipherOrWrapMode.kWebCryptoCipherEncrypt,
260
+ cipherType,
261
+ cipherKey: bufferLikeToArrayBuffer(key.keyObject.export()),
262
+ iv: bufferLikeToArrayBuffer(algorithm.counter),
263
+ });
264
+
265
+ // Process data
266
+ const updated = cipher.update(data);
267
+ const final = cipher.final();
268
+
269
+ // Concatenate results
270
+ const result = new Uint8Array(updated.byteLength + final.byteLength);
271
+ result.set(new Uint8Array(updated), 0);
272
+ result.set(new Uint8Array(final), updated.byteLength);
273
+
274
+ return result.buffer;
275
+ }
276
+
277
+ async function aesCbcCipher(
278
+ mode: CipherOrWrapMode,
279
+ key: CryptoKey,
280
+ data: ArrayBuffer,
281
+ algorithm: AesCbcParams,
282
+ ): Promise<ArrayBuffer> {
283
+ // Validate IV
284
+ const iv = bufferLikeToArrayBuffer(algorithm.iv);
285
+ if (iv.byteLength !== 16) {
286
+ throw lazyDOMException(
287
+ 'algorithm.iv must contain exactly 16 bytes',
288
+ 'OperationError',
289
+ );
290
+ }
291
+
292
+ // Get cipher type based on key length
293
+ const keyLength = (key.algorithm as { length: number }).length;
294
+ const cipherType = `aes-${keyLength}-cbc`;
295
+
296
+ // Create cipher
297
+ const factory =
298
+ NitroModules.createHybridObject<CipherFactory>('CipherFactory');
299
+ const cipher = factory.createCipher({
300
+ isCipher: mode === CipherOrWrapMode.kWebCryptoCipherEncrypt,
301
+ cipherType,
302
+ cipherKey: bufferLikeToArrayBuffer(key.keyObject.export()),
303
+ iv,
304
+ });
305
+
306
+ // Process data
307
+ const updated = cipher.update(data);
308
+ const final = cipher.final();
309
+
310
+ // Concatenate results
311
+ const result = new Uint8Array(updated.byteLength + final.byteLength);
312
+ result.set(new Uint8Array(updated), 0);
313
+ result.set(new Uint8Array(final), updated.byteLength);
314
+
315
+ return result.buffer;
316
+ }
317
+
318
+ interface AeadCipherConfig {
319
+ algorithmName: string;
320
+ validTagLengths: number[];
321
+ cipherSuffix: string;
322
+ iv: ArrayBuffer;
323
+ }
324
+
325
+ async function aesAeadCipher(
326
+ mode: CipherOrWrapMode,
327
+ key: CryptoKey,
328
+ data: ArrayBuffer,
329
+ config: AeadCipherConfig,
330
+ additionalData?: BufferLike,
331
+ tagLength: number = 128,
332
+ ): Promise<ArrayBuffer> {
333
+ if (!config.validTagLengths.includes(tagLength)) {
334
+ throw lazyDOMException(
335
+ `${tagLength} is not a valid ${config.algorithmName} tag length`,
336
+ 'OperationError',
337
+ );
338
+ }
339
+
340
+ const tagByteLength = tagLength / 8;
341
+ const keyLength = (key.algorithm as { length: number }).length;
342
+ const cipherType = `aes-${keyLength}-${config.cipherSuffix}`;
343
+
344
+ const factory =
345
+ NitroModules.createHybridObject<CipherFactory>('CipherFactory');
346
+ const cipher = factory.createCipher({
347
+ isCipher: mode === CipherOrWrapMode.kWebCryptoCipherEncrypt,
348
+ cipherType,
349
+ cipherKey: bufferLikeToArrayBuffer(key.keyObject.export()),
350
+ iv: config.iv,
351
+ authTagLen: tagByteLength,
352
+ });
353
+
354
+ let processData: ArrayBuffer;
355
+
356
+ if (mode === CipherOrWrapMode.kWebCryptoCipherDecrypt) {
357
+ const dataView = new Uint8Array(data);
358
+
359
+ if (dataView.byteLength < tagByteLength) {
360
+ throw lazyDOMException(
361
+ 'The provided data is too small.',
362
+ 'OperationError',
363
+ );
364
+ }
365
+
366
+ const ciphertextLength = dataView.byteLength - tagByteLength;
367
+ processData = dataView.slice(0, ciphertextLength).buffer;
368
+ const authTag = dataView.slice(ciphertextLength).buffer;
369
+ cipher.setAuthTag(authTag);
370
+ } else {
371
+ processData = data;
372
+ }
373
+
374
+ if (additionalData) {
375
+ cipher.setAAD(bufferLikeToArrayBuffer(additionalData));
376
+ }
377
+
378
+ const updated = cipher.update(processData);
379
+ const final = cipher.final();
380
+
381
+ if (mode === CipherOrWrapMode.kWebCryptoCipherEncrypt) {
382
+ const tag = cipher.getAuthTag();
383
+ const result = new Uint8Array(
384
+ updated.byteLength + final.byteLength + tag.byteLength,
385
+ );
386
+ result.set(new Uint8Array(updated), 0);
387
+ result.set(new Uint8Array(final), updated.byteLength);
388
+ result.set(new Uint8Array(tag), updated.byteLength + final.byteLength);
389
+ return result.buffer;
390
+ } else {
391
+ const result = new Uint8Array(updated.byteLength + final.byteLength);
392
+ result.set(new Uint8Array(updated), 0);
393
+ result.set(new Uint8Array(final), updated.byteLength);
394
+ return result.buffer;
395
+ }
396
+ }
397
+
398
+ async function aesGcmCipher(
399
+ mode: CipherOrWrapMode,
400
+ key: CryptoKey,
401
+ data: ArrayBuffer,
402
+ algorithm: AesGcmParams,
403
+ ): Promise<ArrayBuffer> {
404
+ return aesAeadCipher(
405
+ mode,
406
+ key,
407
+ data,
408
+ {
409
+ algorithmName: 'AES-GCM',
410
+ validTagLengths: [32, 64, 96, 104, 112, 120, 128],
411
+ cipherSuffix: 'gcm',
412
+ iv: bufferLikeToArrayBuffer(algorithm.iv),
413
+ },
414
+ algorithm.additionalData,
415
+ algorithm.tagLength,
416
+ );
417
+ }
418
+
419
+ async function aesOcbCipher(
420
+ mode: CipherOrWrapMode,
421
+ key: CryptoKey,
422
+ data: ArrayBuffer,
423
+ algorithm: AesOcbParams,
424
+ ): Promise<ArrayBuffer> {
425
+ const ivBuffer = bufferLikeToArrayBuffer(algorithm.iv);
426
+ if (ivBuffer.byteLength < 1 || ivBuffer.byteLength > 15) {
427
+ throw lazyDOMException(
428
+ 'AES-OCB algorithm.iv must be between 1 and 15 bytes',
429
+ 'OperationError',
430
+ );
431
+ }
432
+
433
+ return aesAeadCipher(
434
+ mode,
435
+ key,
436
+ data,
437
+ {
438
+ algorithmName: 'AES-OCB',
439
+ validTagLengths: [64, 96, 128],
440
+ cipherSuffix: 'ocb',
441
+ iv: ivBuffer,
442
+ },
443
+ algorithm.additionalData,
444
+ algorithm.tagLength,
445
+ );
446
+ }
447
+
448
+ async function aesKwCipher(
449
+ mode: CipherOrWrapMode,
450
+ key: CryptoKey,
451
+ data: ArrayBuffer,
452
+ ): Promise<ArrayBuffer> {
453
+ const isWrap = mode === CipherOrWrapMode.kWebCryptoCipherEncrypt;
454
+
455
+ // AES-KW requires input to be a multiple of 8 bytes (64 bits)
456
+ if (data.byteLength % 8 !== 0) {
457
+ throw lazyDOMException(
458
+ `AES-KW input length must be a multiple of 8 bytes, got ${data.byteLength}`,
459
+ 'OperationError',
460
+ );
461
+ }
462
+
463
+ // AES-KW requires at least 16 bytes of input (128 bits)
464
+ if (isWrap && data.byteLength < 16) {
465
+ throw lazyDOMException(
466
+ `AES-KW input must be at least 16 bytes, got ${data.byteLength}`,
467
+ 'OperationError',
468
+ );
469
+ }
470
+
471
+ // Get cipher type based on key length
472
+ const keyLength = (key.algorithm as { length: number }).length;
473
+ // Use aes*-wrap for both operations (matching Node.js)
474
+ const cipherType = `aes${keyLength}-wrap`;
475
+
476
+ // Export key material
477
+ const exportedKey = key.keyObject.export();
478
+ const cipherKey = bufferLikeToArrayBuffer(exportedKey);
479
+
480
+ // AES-KW uses a default IV as specified in RFC 3394
481
+ const defaultWrapIV = new Uint8Array([
482
+ 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
483
+ ]);
484
+
485
+ const factory =
486
+ NitroModules.createHybridObject<CipherFactory>('CipherFactory');
487
+
488
+ const cipher = factory.createCipher({
489
+ isCipher: isWrap,
490
+ cipherType,
491
+ cipherKey,
492
+ iv: defaultWrapIV.buffer, // RFC 3394 default IV for AES-KW
493
+ });
494
+
495
+ // Process data
496
+ const updated = cipher.update(data);
497
+ const final = cipher.final();
498
+
499
+ // Concatenate results
500
+ const result = new Uint8Array(updated.byteLength + final.byteLength);
501
+ result.set(new Uint8Array(updated), 0);
502
+ result.set(new Uint8Array(final), updated.byteLength);
503
+
504
+ return result.buffer;
505
+ }
506
+
507
+ async function chaCha20Poly1305Cipher(
508
+ mode: CipherOrWrapMode,
509
+ key: CryptoKey,
510
+ data: ArrayBuffer,
511
+ algorithm: ChaCha20Poly1305Params,
512
+ ): Promise<ArrayBuffer> {
513
+ const { iv, additionalData, tagLength = 128 } = algorithm;
514
+
515
+ // Validate IV (must be 12 bytes for ChaCha20-Poly1305)
516
+ const ivBuffer = bufferLikeToArrayBuffer(iv);
517
+ if (!ivBuffer || ivBuffer.byteLength !== 12) {
518
+ throw lazyDOMException(
519
+ 'ChaCha20-Poly1305 IV must be exactly 12 bytes',
520
+ 'OperationError',
521
+ );
522
+ }
523
+
524
+ // Validate tag length (only 128-bit supported)
525
+ if (tagLength !== 128) {
526
+ throw lazyDOMException(
527
+ 'ChaCha20-Poly1305 only supports 128-bit auth tags',
528
+ 'NotSupportedError',
529
+ );
530
+ }
531
+
532
+ const tagByteLength = 16; // 128 bits = 16 bytes
533
+
534
+ // Create cipher using existing ChaCha20-Poly1305 implementation
535
+ const factory =
536
+ NitroModules.createHybridObject<CipherFactory>('CipherFactory');
537
+ const cipher = factory.createCipher({
538
+ isCipher: mode === CipherOrWrapMode.kWebCryptoCipherEncrypt,
539
+ cipherType: 'chacha20-poly1305',
540
+ cipherKey: bufferLikeToArrayBuffer(key.keyObject.export()),
541
+ iv: ivBuffer,
542
+ authTagLen: tagByteLength,
543
+ });
544
+
545
+ let processData: ArrayBuffer;
546
+ let authTag: ArrayBuffer | undefined;
547
+
548
+ if (mode === CipherOrWrapMode.kWebCryptoCipherDecrypt) {
549
+ // For decryption, extract auth tag from end of data
550
+ const dataView = new Uint8Array(data);
551
+
552
+ if (dataView.byteLength < tagByteLength) {
553
+ throw lazyDOMException(
554
+ 'The provided data is too small.',
555
+ 'OperationError',
556
+ );
557
+ }
558
+
559
+ // Split data and tag
560
+ const ciphertextLength = dataView.byteLength - tagByteLength;
561
+ processData = dataView.slice(0, ciphertextLength).buffer;
562
+ authTag = dataView.slice(ciphertextLength).buffer;
563
+
564
+ // Set auth tag for verification
565
+ cipher.setAuthTag(authTag);
566
+ } else {
567
+ processData = data;
568
+ }
569
+
570
+ // Set additional authenticated data if provided
571
+ if (additionalData) {
572
+ cipher.setAAD(bufferLikeToArrayBuffer(additionalData));
573
+ }
574
+
575
+ // Process data
576
+ const updated = cipher.update(processData);
577
+ const final = cipher.final();
578
+
579
+ if (mode === CipherOrWrapMode.kWebCryptoCipherEncrypt) {
580
+ // For encryption, append auth tag to result
581
+ const tag = cipher.getAuthTag();
582
+ const result = new Uint8Array(
583
+ updated.byteLength + final.byteLength + tag.byteLength,
584
+ );
585
+ result.set(new Uint8Array(updated), 0);
586
+ result.set(new Uint8Array(final), updated.byteLength);
587
+ result.set(new Uint8Array(tag), updated.byteLength + final.byteLength);
588
+ return result.buffer;
589
+ } else {
590
+ // For decryption, just concatenate plaintext
591
+ const result = new Uint8Array(updated.byteLength + final.byteLength);
592
+ result.set(new Uint8Array(updated), 0);
593
+ result.set(new Uint8Array(final), updated.byteLength);
594
+ return result.buffer;
595
+ }
596
+ }
597
+
598
+ async function aesGenerateKey(
599
+ algorithm: AesKeyGenParams,
600
+ extractable: boolean,
601
+ keyUsages: KeyUsage[],
602
+ ): Promise<CryptoKey> {
603
+ const { length } = algorithm;
604
+ const name = algorithm.name;
605
+
606
+ if (!name) {
607
+ throw lazyDOMException('Algorithm name is required', 'OperationError');
608
+ }
609
+
610
+ // Validate key length
611
+ if (![128, 192, 256].includes(length)) {
612
+ throw lazyDOMException(
613
+ `Invalid AES key length: ${length}. Must be 128, 192, or 256.`,
614
+ 'OperationError',
615
+ );
616
+ }
617
+
618
+ // Validate usages
619
+ const validUsages: KeyUsage[] = [
620
+ 'encrypt',
621
+ 'decrypt',
622
+ 'wrapKey',
623
+ 'unwrapKey',
624
+ ];
625
+ if (hasAnyNotIn(keyUsages, validUsages)) {
626
+ throw lazyDOMException(`Unsupported key usage for ${name}`, 'SyntaxError');
627
+ }
628
+
629
+ // Generate random key bytes
630
+ const keyBytes = new Uint8Array(length / 8);
631
+ getRandomValues(keyBytes);
632
+
633
+ // Create secret key
634
+ const keyObject = createSecretKey(keyBytes);
635
+
636
+ // Construct algorithm object with guaranteed name
637
+ const keyAlgorithm: SubtleAlgorithm = { name, length };
638
+
639
+ return new CryptoKey(keyObject, keyAlgorithm, keyUsages, extractable);
640
+ }
641
+
642
+ async function hmacGenerateKey(
643
+ algorithm: SubtleAlgorithm,
644
+ extractable: boolean,
645
+ keyUsages: KeyUsage[],
646
+ ): Promise<CryptoKey> {
647
+ // Validate usages
648
+ if (hasAnyNotIn(keyUsages, ['sign', 'verify'])) {
649
+ throw lazyDOMException('Unsupported key usage for HMAC key', 'SyntaxError');
650
+ }
651
+
652
+ // Get hash algorithm
653
+ const hash = algorithm.hash;
654
+ if (!hash) {
655
+ throw lazyDOMException(
656
+ 'HMAC algorithm requires a hash parameter',
657
+ 'TypeError',
658
+ );
659
+ }
660
+
661
+ const hashName = normalizeHashName(hash);
662
+
663
+ // Determine key length
664
+ let length = algorithm.length;
665
+ if (length === undefined) {
666
+ // Use hash output length as default key length
667
+ switch (hashName) {
668
+ case 'SHA-1':
669
+ length = 160;
670
+ break;
671
+ case 'SHA-256':
672
+ length = 256;
673
+ break;
674
+ case 'SHA-384':
675
+ length = 384;
676
+ break;
677
+ case 'SHA-512':
678
+ length = 512;
679
+ break;
680
+ default:
681
+ length = 256; // Default to 256 bits
682
+ }
683
+ }
684
+
685
+ if (length === 0) {
686
+ throw lazyDOMException(
687
+ 'Zero-length key is not supported',
688
+ 'OperationError',
689
+ );
690
+ }
691
+
692
+ // Generate random key bytes
693
+ const keyBytes = new Uint8Array(Math.ceil(length / 8));
694
+ getRandomValues(keyBytes);
695
+
696
+ // Create secret key
697
+ const keyObject = createSecretKey(keyBytes);
698
+
699
+ // Construct algorithm object with hash normalized to { name: string } format per WebCrypto spec
700
+ const webCryptoHashName = normalizeHashName(hash, HashContext.WebCrypto);
701
+ const keyAlgorithm: SubtleAlgorithm = {
702
+ name: 'HMAC',
703
+ hash: { name: webCryptoHashName },
704
+ length,
705
+ };
706
+
707
+ return new CryptoKey(keyObject, keyAlgorithm, keyUsages, extractable);
708
+ }
709
+
710
+ async function kmacGenerateKey(
711
+ algorithm: SubtleAlgorithm,
712
+ extractable: boolean,
713
+ keyUsages: KeyUsage[],
714
+ ): Promise<CryptoKey> {
715
+ const { name } = algorithm;
716
+
717
+ if (hasAnyNotIn(keyUsages, ['sign', 'verify'])) {
718
+ throw lazyDOMException(
719
+ `Unsupported key usage for ${name} key`,
720
+ 'SyntaxError',
721
+ );
722
+ }
723
+
724
+ const defaultLength = name === 'KMAC128' ? 128 : 256;
725
+ const length = algorithm.length ?? defaultLength;
726
+
727
+ if (length === 0) {
728
+ throw lazyDOMException(
729
+ 'Zero-length key is not supported',
730
+ 'OperationError',
731
+ );
732
+ }
733
+
734
+ const keyBytes = new Uint8Array(Math.ceil(length / 8));
735
+ getRandomValues(keyBytes);
736
+
737
+ const keyObject = createSecretKey(keyBytes);
738
+
739
+ const keyAlgorithm: SubtleAlgorithm = { name: name as AnyAlgorithm, length };
740
+
741
+ return new CryptoKey(keyObject, keyAlgorithm, keyUsages, extractable);
742
+ }
743
+
744
+ function kmacSignVerify(
745
+ key: CryptoKey,
746
+ data: BufferLike,
747
+ algorithm: SubtleAlgorithm,
748
+ signature?: BufferLike,
749
+ ): ArrayBuffer | boolean {
750
+ const { name } = algorithm;
751
+
752
+ const defaultLength = name === 'KMAC128' ? 256 : 512;
753
+ const outputLengthBits = algorithm.length ?? defaultLength;
754
+
755
+ if (outputLengthBits % 8 !== 0) {
756
+ throw lazyDOMException(
757
+ 'KMAC output length must be a multiple of 8',
758
+ 'OperationError',
759
+ );
760
+ }
761
+
762
+ const outputLengthBytes = outputLengthBits / 8;
763
+
764
+ const keyData = key.keyObject.export();
765
+
766
+ const kmac = NitroModules.createHybridObject<Kmac>('Kmac');
767
+
768
+ let customizationBuffer: ArrayBuffer | undefined;
769
+ if (algorithm.customization !== undefined) {
770
+ customizationBuffer = bufferLikeToArrayBuffer(algorithm.customization);
771
+ }
772
+
773
+ kmac.createKmac(
774
+ name,
775
+ bufferLikeToArrayBuffer(keyData),
776
+ outputLengthBytes,
777
+ customizationBuffer,
778
+ );
779
+ kmac.update(bufferLikeToArrayBuffer(data));
780
+ const computed = kmac.digest();
781
+
782
+ if (signature === undefined) {
783
+ return computed;
784
+ }
785
+
786
+ const sigBuffer = bufferLikeToArrayBuffer(signature);
787
+ if (computed.byteLength !== sigBuffer.byteLength) {
788
+ return false;
789
+ }
790
+
791
+ return timingSafeEqual(new Uint8Array(computed), new Uint8Array(sigBuffer));
792
+ }
793
+
794
+ async function kmacImportKey(
795
+ algorithm: SubtleAlgorithm,
796
+ format: ImportFormat,
797
+ data: BufferLike | JWK,
798
+ extractable: boolean,
799
+ keyUsages: KeyUsage[],
800
+ ): Promise<CryptoKey> {
801
+ const { name } = algorithm;
802
+
803
+ if (hasAnyNotIn(keyUsages, ['sign', 'verify'])) {
804
+ throw lazyDOMException(
805
+ `Unsupported key usage for ${name} key`,
806
+ 'SyntaxError',
807
+ );
808
+ }
809
+
810
+ let keyObject: KeyObject;
811
+
812
+ if (format === 'jwk') {
813
+ const jwk = data as JWK;
814
+
815
+ if (!jwk || typeof jwk !== 'object') {
816
+ throw lazyDOMException('Invalid keyData', 'DataError');
817
+ }
818
+
819
+ if (jwk.kty !== 'oct') {
820
+ throw lazyDOMException('Invalid JWK format for KMAC key', 'DataError');
821
+ }
822
+
823
+ const expectedAlg = name === 'KMAC128' ? 'K128' : 'K256';
824
+ if (jwk.alg !== undefined && jwk.alg !== expectedAlg) {
825
+ throw lazyDOMException(
826
+ 'JWK "alg" does not match the requested algorithm',
827
+ 'DataError',
828
+ );
829
+ }
830
+
831
+ const handle =
832
+ NitroModules.createHybridObject<KeyObjectHandle>('KeyObjectHandle');
833
+ const keyType = handle.initJwk(jwk, undefined);
834
+
835
+ if (keyType === undefined || keyType !== 0) {
836
+ throw lazyDOMException('Failed to import KMAC JWK', 'DataError');
837
+ }
838
+
839
+ keyObject = new SecretKeyObject(handle);
840
+ } else if (format === 'raw' || format === 'raw-secret') {
841
+ keyObject = createSecretKey(data as BinaryLike);
842
+ } else {
843
+ throw lazyDOMException(
844
+ `Unable to import ${name} key with format ${format}`,
845
+ 'NotSupportedError',
846
+ );
847
+ }
848
+
849
+ const exported = keyObject.export();
850
+ const keyLength = exported.byteLength * 8;
851
+
852
+ if (keyLength === 0) {
853
+ throw lazyDOMException('Zero-length key is not supported', 'DataError');
854
+ }
855
+
856
+ if (algorithm.length !== undefined && algorithm.length !== keyLength) {
857
+ throw lazyDOMException('Invalid key length', 'DataError');
858
+ }
859
+
860
+ const keyAlgorithm: SubtleAlgorithm = {
861
+ name: name as AnyAlgorithm,
862
+ length: keyLength,
863
+ };
864
+
865
+ return new CryptoKey(keyObject, keyAlgorithm, keyUsages, extractable);
866
+ }
867
+
868
+ function rsaImportKey(
869
+ format: ImportFormat,
870
+ data: BufferLike | JWK,
871
+ algorithm: SubtleAlgorithm,
872
+ extractable: boolean,
873
+ keyUsages: KeyUsage[],
874
+ ): CryptoKey {
875
+ const { name } = algorithm;
876
+
877
+ // Validate usages
878
+ let checkSet: KeyUsage[];
879
+ switch (name) {
880
+ case 'RSASSA-PKCS1-v1_5':
881
+ case 'RSA-PSS':
882
+ checkSet = ['sign', 'verify'];
883
+ break;
884
+ case 'RSA-OAEP':
885
+ checkSet = ['encrypt', 'decrypt', 'wrapKey', 'unwrapKey'];
886
+ break;
887
+ default:
888
+ throw new Error(`Unsupported RSA algorithm: ${name}`);
889
+ }
890
+
891
+ if (hasAnyNotIn(keyUsages, checkSet)) {
892
+ throw new Error(`Unsupported key usage for ${name}`);
893
+ }
894
+
895
+ let keyObject: KeyObject;
896
+
897
+ if (format === 'jwk') {
898
+ const jwk = data as JWK;
899
+
900
+ // Validate JWK
901
+ if (jwk.kty !== 'RSA') {
902
+ throw new Error('Invalid JWK format for RSA key');
903
+ }
904
+
905
+ const handle =
906
+ NitroModules.createHybridObject<KeyObjectHandle>('KeyObjectHandle');
907
+ const keyType = handle.initJwk(jwk, undefined);
908
+
909
+ if (keyType === undefined) {
910
+ throw new Error('Failed to import RSA JWK');
911
+ }
912
+
913
+ // Create the appropriate KeyObject based on type
914
+ if (keyType === 1) {
915
+ keyObject = new PublicKeyObject(handle);
916
+ } else if (keyType === 2) {
917
+ keyObject = new PrivateKeyObject(handle);
918
+ } else {
919
+ throw new Error('Unexpected key type from RSA JWK import');
920
+ }
921
+ } else if (format === 'spki') {
922
+ const keyData = bufferLikeToArrayBuffer(data as BufferLike);
923
+ keyObject = KeyObject.createKeyObject(
924
+ 'public',
925
+ keyData,
926
+ KFormatType.DER,
927
+ KeyEncoding.SPKI,
928
+ );
929
+ } else if (format === 'pkcs8') {
930
+ const keyData = bufferLikeToArrayBuffer(data as BufferLike);
931
+ keyObject = KeyObject.createKeyObject(
932
+ 'private',
933
+ keyData,
934
+ KFormatType.DER,
935
+ KeyEncoding.PKCS8,
936
+ );
937
+ } else {
938
+ throw new Error(`Unsupported format for RSA import: ${format}`);
939
+ }
940
+
941
+ // Get the modulus length from the key and add it to the algorithm
942
+ const keyDetails = (keyObject as PublicKeyObject | PrivateKeyObject)
943
+ .asymmetricKeyDetails;
944
+
945
+ // Convert publicExponent number to big-endian byte array
946
+ let publicExponentBytes: Uint8Array | undefined;
947
+ if (keyDetails?.publicExponent) {
948
+ const exp = keyDetails.publicExponent;
949
+ // Convert number to big-endian bytes
950
+ const bytes: number[] = [];
951
+ let value = exp;
952
+ while (value > 0) {
953
+ bytes.unshift(value & 0xff);
954
+ value = Math.floor(value / 256);
955
+ }
956
+ publicExponentBytes = new Uint8Array(bytes.length > 0 ? bytes : [0]);
957
+ }
958
+
959
+ // Normalize hash to { name: string } format per WebCrypto spec
960
+ const hashName = normalizeHashName(algorithm.hash, HashContext.WebCrypto);
961
+ const normalizedHash = { name: hashName };
962
+
963
+ const algorithmWithDetails = {
964
+ ...algorithm,
965
+ modulusLength: keyDetails?.modulusLength,
966
+ publicExponent: publicExponentBytes,
967
+ hash: normalizedHash,
968
+ };
969
+
970
+ return new CryptoKey(keyObject, algorithmWithDetails, keyUsages, extractable);
971
+ }
972
+
973
+ async function hmacImportKey(
974
+ algorithm: SubtleAlgorithm,
975
+ format: ImportFormat,
976
+ data: BufferLike | JWK,
977
+ extractable: boolean,
978
+ keyUsages: KeyUsage[],
979
+ ): Promise<CryptoKey> {
980
+ // Validate usages
981
+ if (hasAnyNotIn(keyUsages, ['sign', 'verify'])) {
982
+ throw new Error('Unsupported key usage for an HMAC key');
983
+ }
984
+
985
+ let keyObject: KeyObject;
986
+
987
+ if (format === 'jwk') {
988
+ const jwk = data as JWK;
989
+
990
+ // Validate JWK
991
+ if (!jwk || typeof jwk !== 'object') {
992
+ throw new Error('Invalid keyData');
993
+ }
994
+
995
+ if (jwk.kty !== 'oct') {
996
+ throw new Error('Invalid JWK format for HMAC key');
997
+ }
998
+
999
+ // Validate key length if specified
1000
+ if (algorithm.length !== undefined) {
1001
+ if (!jwk.k) {
1002
+ throw new Error('JWK missing key data');
1003
+ }
1004
+ // Decode to check length
1005
+ const decoded = SBuffer.from(jwk.k, 'base64');
1006
+ const keyBitLength = decoded.length * 8;
1007
+ if (algorithm.length === 0) {
1008
+ throw new Error('Zero-length key is not supported');
1009
+ }
1010
+ if (algorithm.length !== keyBitLength) {
1011
+ throw new Error('Invalid key length');
1012
+ }
1013
+ }
1014
+
1015
+ const handle =
1016
+ NitroModules.createHybridObject<KeyObjectHandle>('KeyObjectHandle');
1017
+ const keyType = handle.initJwk(jwk, undefined);
1018
+
1019
+ if (keyType === undefined || keyType !== 0) {
1020
+ throw new Error('Failed to import HMAC JWK');
1021
+ }
1022
+
1023
+ keyObject = new SecretKeyObject(handle);
1024
+ } else if (format === 'raw') {
1025
+ keyObject = createSecretKey(data as BinaryLike);
1026
+ } else {
1027
+ throw new Error(`Unable to import HMAC key with format ${format}`);
1028
+ }
1029
+
1030
+ // Normalize hash to { name: string } format per WebCrypto spec
1031
+ const hashName = normalizeHashName(algorithm.hash, HashContext.WebCrypto);
1032
+ const normalizedAlgorithm: SubtleAlgorithm = {
1033
+ ...algorithm,
1034
+ name: 'HMAC',
1035
+ hash: { name: hashName },
1036
+ };
1037
+
1038
+ return new CryptoKey(keyObject, normalizedAlgorithm, keyUsages, extractable);
1039
+ }
1040
+
1041
+ async function aesImportKey(
1042
+ algorithm: SubtleAlgorithm,
1043
+ format: ImportFormat,
1044
+ data: BufferLike | JWK,
1045
+ extractable: boolean,
1046
+ keyUsages: KeyUsage[],
1047
+ ): Promise<CryptoKey> {
1048
+ const { name, length } = algorithm;
1049
+
1050
+ // Validate usages
1051
+ const validUsages: KeyUsage[] = [
1052
+ 'encrypt',
1053
+ 'decrypt',
1054
+ 'wrapKey',
1055
+ 'unwrapKey',
1056
+ ];
1057
+ if (hasAnyNotIn(keyUsages, validUsages)) {
1058
+ throw new Error(`Unsupported key usage for ${name}`);
1059
+ }
1060
+
1061
+ let keyObject: KeyObject;
1062
+ let actualLength: number;
1063
+
1064
+ if (format === 'jwk') {
1065
+ const jwk = data as JWK;
1066
+
1067
+ // Validate JWK
1068
+ if (jwk.kty !== 'oct') {
1069
+ throw new Error('Invalid JWK format for AES key');
1070
+ }
1071
+
1072
+ const handle =
1073
+ NitroModules.createHybridObject<KeyObjectHandle>('KeyObjectHandle');
1074
+ const keyType = handle.initJwk(jwk, undefined);
1075
+
1076
+ if (keyType === undefined || keyType !== 0) {
1077
+ throw new Error('Failed to import AES JWK');
1078
+ }
1079
+
1080
+ keyObject = new SecretKeyObject(handle);
1081
+
1082
+ // Get actual key length from imported key
1083
+ const exported = keyObject.export();
1084
+ actualLength = exported.byteLength * 8;
1085
+ } else if (format === 'raw') {
1086
+ const keyData = bufferLikeToArrayBuffer(data as BufferLike);
1087
+ actualLength = keyData.byteLength * 8;
1088
+
1089
+ // Validate key length
1090
+ if (![128, 192, 256].includes(actualLength)) {
1091
+ throw new Error('Invalid AES key length');
1092
+ }
1093
+
1094
+ keyObject = createSecretKey(keyData);
1095
+ } else {
1096
+ throw new Error(`Unsupported format for AES import: ${format}`);
1097
+ }
1098
+
1099
+ // Validate length if specified
1100
+ if (length !== undefined && length !== actualLength) {
1101
+ throw new Error(
1102
+ `Key length mismatch: expected ${length}, got ${actualLength}`,
1103
+ );
1104
+ }
1105
+
1106
+ return new CryptoKey(
1107
+ keyObject,
1108
+ { name, length: actualLength },
1109
+ keyUsages,
1110
+ extractable,
1111
+ );
1112
+ }
1113
+
1114
+ function edImportKey(
1115
+ format: ImportFormat,
1116
+ data: BufferLike | JWK,
1117
+ algorithm: SubtleAlgorithm,
1118
+ extractable: boolean,
1119
+ keyUsages: KeyUsage[],
1120
+ ): CryptoKey {
1121
+ const { name } = algorithm;
1122
+
1123
+ // Validate usages
1124
+ const isX = name === 'X25519' || name === 'X448';
1125
+ const allowedUsages: KeyUsage[] = isX
1126
+ ? ['deriveKey', 'deriveBits']
1127
+ : ['sign', 'verify'];
1128
+
1129
+ if (hasAnyNotIn(keyUsages, allowedUsages)) {
1130
+ throw lazyDOMException(
1131
+ `Unsupported key usage for ${name} key`,
1132
+ 'SyntaxError',
1133
+ );
1134
+ }
1135
+
1136
+ let keyObject: KeyObject;
1137
+
1138
+ if (format === 'spki') {
1139
+ // Import public key
1140
+ const keyData = bufferLikeToArrayBuffer(data as BufferLike);
1141
+ keyObject = KeyObject.createKeyObject(
1142
+ 'public',
1143
+ keyData,
1144
+ KFormatType.DER,
1145
+ KeyEncoding.SPKI,
1146
+ );
1147
+ } else if (format === 'pkcs8') {
1148
+ // Import private key
1149
+ const keyData = bufferLikeToArrayBuffer(data as BufferLike);
1150
+ keyObject = KeyObject.createKeyObject(
1151
+ 'private',
1152
+ keyData,
1153
+ KFormatType.DER,
1154
+ KeyEncoding.PKCS8,
1155
+ );
1156
+ } else if (format === 'raw') {
1157
+ // Raw format - public key only for Ed keys
1158
+ const keyData = bufferLikeToArrayBuffer(data as BufferLike);
1159
+ const handle =
1160
+ NitroModules.createHybridObject<KeyObjectHandle>('KeyObjectHandle');
1161
+ // For raw Ed keys, we need to create them differently
1162
+ // Raw public keys are just the key bytes
1163
+ handle.init(1, keyData); // 1 = public key type
1164
+ keyObject = new PublicKeyObject(handle);
1165
+ } else if (format === 'jwk') {
1166
+ const jwkData = data as JWK;
1167
+ const handle =
1168
+ NitroModules.createHybridObject<KeyObjectHandle>('KeyObjectHandle');
1169
+ const keyType = handle.initJwk(jwkData);
1170
+ if (keyType === undefined) {
1171
+ throw lazyDOMException('Invalid JWK data', 'DataError');
1172
+ }
1173
+ if (keyType === KeyType.PRIVATE) {
1174
+ keyObject = new PrivateKeyObject(handle);
1175
+ } else {
1176
+ keyObject = new PublicKeyObject(handle);
1177
+ }
1178
+ } else {
1179
+ throw lazyDOMException(
1180
+ `Unsupported format for ${name} import: ${format}`,
1181
+ 'NotSupportedError',
1182
+ );
1183
+ }
1184
+
1185
+ return new CryptoKey(keyObject, { name }, keyUsages, extractable);
1186
+ }
1187
+
1188
+ function pqcImportKeyObject(
1189
+ format: ImportFormat,
1190
+ data: BufferLike,
1191
+ name: string,
1192
+ ): KeyObject {
1193
+ if (format === 'spki') {
1194
+ return KeyObject.createKeyObject(
1195
+ 'public',
1196
+ bufferLikeToArrayBuffer(data),
1197
+ KFormatType.DER,
1198
+ KeyEncoding.SPKI,
1199
+ );
1200
+ } else if (format === 'pkcs8') {
1201
+ return KeyObject.createKeyObject(
1202
+ 'private',
1203
+ bufferLikeToArrayBuffer(data),
1204
+ KFormatType.DER,
1205
+ KeyEncoding.PKCS8,
1206
+ );
1207
+ } else if (format === 'raw') {
1208
+ const handle =
1209
+ NitroModules.createHybridObject<KeyObjectHandle>('KeyObjectHandle');
1210
+ if (!handle.initPqcRaw(name, bufferLikeToArrayBuffer(data), true)) {
1211
+ throw lazyDOMException(
1212
+ `Failed to import ${name} raw public key`,
1213
+ 'DataError',
1214
+ );
1215
+ }
1216
+ return new PublicKeyObject(handle);
1217
+ } else if (format === 'raw-seed') {
1218
+ const handle =
1219
+ NitroModules.createHybridObject<KeyObjectHandle>('KeyObjectHandle');
1220
+ if (!handle.initPqcRaw(name, bufferLikeToArrayBuffer(data), false)) {
1221
+ throw lazyDOMException(`Failed to import ${name} raw seed`, 'DataError');
1222
+ }
1223
+ return new PrivateKeyObject(handle);
1224
+ }
1225
+ throw lazyDOMException(
1226
+ `Unsupported format for ${name} import: ${format}`,
1227
+ 'NotSupportedError',
1228
+ );
1229
+ }
1230
+
1231
+ function mldsaImportKey(
1232
+ format: ImportFormat,
1233
+ data: BufferLike,
1234
+ algorithm: SubtleAlgorithm,
1235
+ extractable: boolean,
1236
+ keyUsages: KeyUsage[],
1237
+ ): CryptoKey {
1238
+ const { name } = algorithm;
1239
+ const isPublicFormat = format === 'spki' || format === 'raw';
1240
+ if (hasAnyNotIn(keyUsages, isPublicFormat ? ['verify'] : ['sign'])) {
1241
+ throw lazyDOMException(
1242
+ `Unsupported key usage for ${name} key`,
1243
+ 'SyntaxError',
1244
+ );
1245
+ }
1246
+ return new CryptoKey(
1247
+ pqcImportKeyObject(format, data, name),
1248
+ { name },
1249
+ keyUsages,
1250
+ extractable,
1251
+ );
1252
+ }
1253
+
1254
+ function mlkemImportKey(
1255
+ format: ImportFormat,
1256
+ data: BufferLike,
1257
+ algorithm: SubtleAlgorithm,
1258
+ extractable: boolean,
1259
+ keyUsages: KeyUsage[],
1260
+ ): CryptoKey {
1261
+ const { name } = algorithm;
1262
+ const isPublicFormat = format === 'spki' || format === 'raw';
1263
+ const allowedUsages: KeyUsage[] = isPublicFormat
1264
+ ? ['encapsulateBits', 'encapsulateKey']
1265
+ : ['decapsulateBits', 'decapsulateKey'];
1266
+ if (hasAnyNotIn(keyUsages, allowedUsages)) {
1267
+ throw lazyDOMException(
1268
+ `Unsupported key usage for ${name} key`,
1269
+ 'SyntaxError',
1270
+ );
1271
+ }
1272
+ return new CryptoKey(
1273
+ pqcImportKeyObject(format, data, name),
1274
+ { name },
1275
+ keyUsages,
1276
+ extractable,
1277
+ );
1278
+ }
1279
+
1280
+ const exportKeySpki = async (
1281
+ key: CryptoKey,
1282
+ ): Promise<ArrayBuffer | unknown> => {
1283
+ switch (key.algorithm.name) {
1284
+ case 'RSASSA-PKCS1-v1_5':
1285
+ // Fall through
1286
+ case 'RSA-PSS':
1287
+ // Fall through
1288
+ case 'RSA-OAEP':
1289
+ if (key.type === 'public') {
1290
+ return rsaExportKey(key, KWebCryptoKeyFormat.kWebCryptoKeyFormatSPKI);
1291
+ }
1292
+ break;
1293
+ case 'ECDSA':
1294
+ // Fall through
1295
+ case 'ECDH':
1296
+ if (key.type === 'public') {
1297
+ return ecExportKey(key, KWebCryptoKeyFormat.kWebCryptoKeyFormatSPKI);
1298
+ }
1299
+ break;
1300
+ case 'Ed25519':
1301
+ // Fall through
1302
+ case 'Ed448':
1303
+ // Fall through
1304
+ case 'X25519':
1305
+ // Fall through
1306
+ case 'X448':
1307
+ if (key.type === 'public') {
1308
+ // Export Ed/X key in SPKI DER format
1309
+ return bufferLikeToArrayBuffer(
1310
+ key.keyObject.handle.exportKey(KFormatType.DER, KeyEncoding.SPKI),
1311
+ );
1312
+ }
1313
+ break;
1314
+ case 'ML-DSA-44':
1315
+ // Fall through
1316
+ case 'ML-DSA-65':
1317
+ // Fall through
1318
+ case 'ML-DSA-87':
1319
+ if (key.type === 'public') {
1320
+ // Export ML-DSA key in SPKI DER format
1321
+ return bufferLikeToArrayBuffer(
1322
+ key.keyObject.handle.exportKey(KFormatType.DER, KeyEncoding.SPKI),
1323
+ );
1324
+ }
1325
+ break;
1326
+ case 'ML-KEM-512':
1327
+ // Fall through
1328
+ case 'ML-KEM-768':
1329
+ // Fall through
1330
+ case 'ML-KEM-1024':
1331
+ if (key.type === 'public') {
1332
+ return bufferLikeToArrayBuffer(
1333
+ key.keyObject.handle.exportKey(KFormatType.DER, KeyEncoding.SPKI),
1334
+ );
1335
+ }
1336
+ break;
1337
+ }
1338
+
1339
+ throw new Error(
1340
+ `Unable to export a spki ${key.algorithm.name} ${key.type} key`,
1341
+ );
1342
+ };
1343
+
1344
+ const exportKeyPkcs8 = async (
1345
+ key: CryptoKey,
1346
+ ): Promise<ArrayBuffer | unknown> => {
1347
+ switch (key.algorithm.name) {
1348
+ case 'RSASSA-PKCS1-v1_5':
1349
+ // Fall through
1350
+ case 'RSA-PSS':
1351
+ // Fall through
1352
+ case 'RSA-OAEP':
1353
+ if (key.type === 'private') {
1354
+ return rsaExportKey(key, KWebCryptoKeyFormat.kWebCryptoKeyFormatPKCS8);
1355
+ }
1356
+ break;
1357
+ case 'ECDSA':
1358
+ // Fall through
1359
+ case 'ECDH':
1360
+ if (key.type === 'private') {
1361
+ return ecExportKey(key, KWebCryptoKeyFormat.kWebCryptoKeyFormatPKCS8);
1362
+ }
1363
+ break;
1364
+ case 'Ed25519':
1365
+ // Fall through
1366
+ case 'Ed448':
1367
+ // Fall through
1368
+ case 'X25519':
1369
+ // Fall through
1370
+ case 'X448':
1371
+ if (key.type === 'private') {
1372
+ // Export Ed/X key in PKCS8 DER format
1373
+ return bufferLikeToArrayBuffer(
1374
+ key.keyObject.handle.exportKey(KFormatType.DER, KeyEncoding.PKCS8),
1375
+ );
1376
+ }
1377
+ break;
1378
+ case 'ML-DSA-44':
1379
+ // Fall through
1380
+ case 'ML-DSA-65':
1381
+ // Fall through
1382
+ case 'ML-DSA-87':
1383
+ if (key.type === 'private') {
1384
+ // Export ML-DSA key in PKCS8 DER format
1385
+ return bufferLikeToArrayBuffer(
1386
+ key.keyObject.handle.exportKey(KFormatType.DER, KeyEncoding.PKCS8),
1387
+ );
1388
+ }
1389
+ break;
1390
+ case 'ML-KEM-512':
1391
+ // Fall through
1392
+ case 'ML-KEM-768':
1393
+ // Fall through
1394
+ case 'ML-KEM-1024':
1395
+ if (key.type === 'private') {
1396
+ return bufferLikeToArrayBuffer(
1397
+ key.keyObject.handle.exportKey(KFormatType.DER, KeyEncoding.PKCS8),
1398
+ );
1399
+ }
1400
+ break;
1401
+ }
1402
+
1403
+ throw new Error(
1404
+ `Unable to export a pkcs8 ${key.algorithm.name} ${key.type} key`,
1405
+ );
1406
+ };
1407
+
1408
+ const exportKeyRaw = (key: CryptoKey): ArrayBuffer | unknown => {
1409
+ switch (key.algorithm.name) {
1410
+ case 'ECDSA':
1411
+ // Fall through
1412
+ case 'ECDH':
1413
+ if (key.type === 'public') {
1414
+ return ecExportKey(key, KWebCryptoKeyFormat.kWebCryptoKeyFormatRaw);
1415
+ }
1416
+ break;
1417
+ case 'Ed25519':
1418
+ // Fall through
1419
+ case 'Ed448':
1420
+ // Fall through
1421
+ case 'X25519':
1422
+ // Fall through
1423
+ case 'X448':
1424
+ if (key.type === 'public') {
1425
+ const exported = key.keyObject.handle.exportKey();
1426
+ return bufferLikeToArrayBuffer(exported);
1427
+ }
1428
+ break;
1429
+ case 'ML-KEM-512':
1430
+ // Fall through
1431
+ case 'ML-KEM-768':
1432
+ // Fall through
1433
+ case 'ML-KEM-1024':
1434
+ // Fall through
1435
+ case 'ML-DSA-44':
1436
+ // Fall through
1437
+ case 'ML-DSA-65':
1438
+ // Fall through
1439
+ case 'ML-DSA-87':
1440
+ if (key.type === 'public') {
1441
+ const exported = key.keyObject.handle.exportKey();
1442
+ return bufferLikeToArrayBuffer(exported);
1443
+ }
1444
+ break;
1445
+ case 'AES-CTR':
1446
+ // Fall through
1447
+ case 'AES-CBC':
1448
+ // Fall through
1449
+ case 'AES-GCM':
1450
+ // Fall through
1451
+ case 'AES-KW':
1452
+ // Fall through
1453
+ case 'AES-OCB':
1454
+ // Fall through
1455
+ case 'ChaCha20-Poly1305':
1456
+ // Fall through
1457
+ case 'HMAC':
1458
+ // Fall through
1459
+ case 'KMAC128':
1460
+ // Fall through
1461
+ case 'KMAC256': {
1462
+ const exported = key.keyObject.export();
1463
+ // Convert Buffer to ArrayBuffer
1464
+ return exported.buffer.slice(
1465
+ exported.byteOffset,
1466
+ exported.byteOffset + exported.byteLength,
1467
+ );
1468
+ }
1469
+ }
1470
+
1471
+ throw lazyDOMException(
1472
+ `Unable to export a raw ${key.algorithm.name} ${key.type} key`,
1473
+ 'InvalidAccessError',
1474
+ );
1475
+ };
1476
+
1477
+ const exportKeyJWK = (key: CryptoKey): ArrayBuffer | unknown => {
1478
+ const jwk = key.keyObject.handle.exportJwk(
1479
+ {
1480
+ key_ops: key.usages,
1481
+ ext: key.extractable,
1482
+ },
1483
+ true,
1484
+ );
1485
+ switch (key.algorithm.name) {
1486
+ case 'RSASSA-PKCS1-v1_5':
1487
+ jwk.alg = normalizeHashName(key.algorithm.hash, HashContext.JwkRsa);
1488
+ return jwk;
1489
+ case 'RSA-PSS':
1490
+ jwk.alg = normalizeHashName(key.algorithm.hash, HashContext.JwkRsaPss);
1491
+ return jwk;
1492
+ case 'RSA-OAEP':
1493
+ jwk.alg = normalizeHashName(key.algorithm.hash, HashContext.JwkRsaOaep);
1494
+ return jwk;
1495
+ case 'HMAC':
1496
+ jwk.alg = normalizeHashName(key.algorithm.hash, HashContext.JwkHmac);
1497
+ return jwk;
1498
+ case 'KMAC128':
1499
+ jwk.alg = 'K128';
1500
+ return jwk;
1501
+ case 'KMAC256':
1502
+ jwk.alg = 'K256';
1503
+ return jwk;
1504
+ case 'ECDSA':
1505
+ // Fall through
1506
+ case 'ECDH':
1507
+ jwk.crv ||= key.algorithm.namedCurve;
1508
+ return jwk;
1509
+ case 'Ed25519':
1510
+ // Fall through
1511
+ case 'Ed448':
1512
+ // Fall through
1513
+ case 'X25519':
1514
+ // Fall through
1515
+ case 'X448':
1516
+ return jwk;
1517
+ case 'AES-CTR':
1518
+ // Fall through
1519
+ case 'AES-CBC':
1520
+ // Fall through
1521
+ case 'AES-GCM':
1522
+ // Fall through
1523
+ case 'AES-KW':
1524
+ // Fall through
1525
+ case 'AES-OCB':
1526
+ // Fall through
1527
+ case 'ChaCha20-Poly1305':
1528
+ if (key.algorithm.length === undefined) {
1529
+ throw lazyDOMException(
1530
+ `Algorithm ${key.algorithm.name} missing required length property`,
1531
+ 'InvalidAccessError',
1532
+ );
1533
+ }
1534
+ jwk.alg = getAlgorithmName(key.algorithm.name, key.algorithm.length);
1535
+ return jwk;
1536
+ default:
1537
+ // Fall through
1538
+ }
1539
+
1540
+ throw lazyDOMException(
1541
+ `JWK export not yet supported: ${key.algorithm.name}`,
1542
+ 'NotSupportedError',
1543
+ );
1544
+ };
1545
+
1546
+ const importGenericSecretKey = async (
1547
+ { name, length }: SubtleAlgorithm,
1548
+ format: ImportFormat,
1549
+ keyData: BufferLike | BinaryLike,
1550
+ extractable: boolean,
1551
+ keyUsages: KeyUsage[],
1552
+ ): Promise<CryptoKey> => {
1553
+ if (extractable) {
1554
+ throw new Error(`${name} keys are not extractable`);
1555
+ }
1556
+ if (hasAnyNotIn(keyUsages, ['deriveKey', 'deriveBits'])) {
1557
+ throw new Error(`Unsupported key usage for a ${name} key`);
1558
+ }
1559
+
1560
+ switch (format) {
1561
+ case 'raw': {
1562
+ if (hasAnyNotIn(keyUsages, ['deriveKey', 'deriveBits'])) {
1563
+ throw new Error(`Unsupported key usage for a ${name} key`);
1564
+ }
1565
+
1566
+ const checkLength =
1567
+ typeof keyData === 'string' || SBuffer.isBuffer(keyData)
1568
+ ? keyData.length * 8
1569
+ : keyData.byteLength * 8;
1570
+
1571
+ if (length !== undefined && length !== checkLength) {
1572
+ throw new Error('Invalid key length');
1573
+ }
1574
+
1575
+ const keyObject = createSecretKey(keyData as BinaryLike);
1576
+ return new CryptoKey(keyObject, { name }, keyUsages, false);
1577
+ }
1578
+ }
1579
+
1580
+ throw new Error(`Unable to import ${name} key with format ${format}`);
1581
+ };
1582
+
1583
+ const hkdfImportKey = async (
1584
+ format: ImportFormat,
1585
+ keyData: BufferLike | BinaryLike,
1586
+ algorithm: SubtleAlgorithm,
1587
+ extractable: boolean,
1588
+ keyUsages: KeyUsage[],
1589
+ ): Promise<CryptoKey> => {
1590
+ const { name } = algorithm;
1591
+ if (hasAnyNotIn(keyUsages, ['deriveKey', 'deriveBits'])) {
1592
+ throw new Error(`Unsupported key usage for a ${name} key`);
1593
+ }
1594
+
1595
+ switch (format) {
1596
+ case 'raw': {
1597
+ const keyObject = createSecretKey(keyData as BinaryLike);
1598
+ return new CryptoKey(keyObject, { name }, keyUsages, extractable);
1599
+ }
1600
+ default:
1601
+ throw new Error(`Unable to import ${name} key with format ${format}`);
1602
+ }
1603
+ };
1604
+
1605
+ const checkCryptoKeyPairUsages = (pair: CryptoKeyPair) => {
1606
+ if (
1607
+ pair.privateKey &&
1608
+ pair.privateKey instanceof CryptoKey &&
1609
+ pair.privateKey.keyUsages &&
1610
+ pair.privateKey.keyUsages.length > 0
1611
+ ) {
1612
+ return;
1613
+ }
1614
+ throw lazyDOMException(
1615
+ 'Usages cannot be empty when creating a key.',
1616
+ 'SyntaxError',
1617
+ );
1618
+ };
1619
+
1620
+ function argon2DeriveBits(
1621
+ algorithm: SubtleAlgorithm,
1622
+ baseKey: CryptoKey,
1623
+ length: number,
1624
+ ): ArrayBuffer {
1625
+ if (length === 0 || length % 8 !== 0) {
1626
+ throw lazyDOMException(
1627
+ 'Invalid Argon2 derived key length',
1628
+ 'OperationError',
1629
+ );
1630
+ }
1631
+ if (length < 32) {
1632
+ throw lazyDOMException(
1633
+ 'Argon2 derived key length must be at least 32 bits',
1634
+ 'OperationError',
1635
+ );
1636
+ }
1637
+
1638
+ const { nonce, parallelism, memory, passes, secretValue, associatedData } =
1639
+ algorithm;
1640
+ const tagLength = length / 8;
1641
+ const message = baseKey.keyObject.export();
1642
+ const algName = algorithm.name.toLowerCase();
1643
+
1644
+ const result = argon2Sync(algName, {
1645
+ message,
1646
+ nonce: nonce ?? new Uint8Array(0),
1647
+ parallelism: parallelism ?? 1,
1648
+ tagLength,
1649
+ memory: memory ?? 65536,
1650
+ passes: passes ?? 3,
1651
+ secret: secretValue,
1652
+ associatedData,
1653
+ version: algorithm.version,
1654
+ });
1655
+
1656
+ return bufferLikeToArrayBuffer(result);
1657
+ }
1658
+
1659
+ // Type guard to check if result is CryptoKeyPair
1660
+ export function isCryptoKeyPair(
1661
+ result: CryptoKey | CryptoKeyPair,
1662
+ ): result is CryptoKeyPair {
1663
+ return 'publicKey' in result && 'privateKey' in result;
1664
+ }
1665
+
1666
+ function hmacSignVerify(
1667
+ key: CryptoKey,
1668
+ data: BufferLike,
1669
+ signature?: BufferLike,
1670
+ ): ArrayBuffer | boolean {
1671
+ // Get hash algorithm from key
1672
+ const hashName = normalizeHashName(key.algorithm.hash);
1673
+
1674
+ // Export the secret key material
1675
+ const keyData = key.keyObject.export();
1676
+
1677
+ // Create HMAC and compute digest
1678
+ const hmac = createHmac(hashName, keyData);
1679
+ hmac.update(bufferLikeToArrayBuffer(data));
1680
+ const computed = hmac.digest();
1681
+
1682
+ if (signature === undefined) {
1683
+ // Sign operation - return the HMAC as ArrayBuffer
1684
+ return computed.buffer.slice(
1685
+ computed.byteOffset,
1686
+ computed.byteOffset + computed.byteLength,
1687
+ );
1688
+ }
1689
+
1690
+ const sigBuffer = bufferLikeToArrayBuffer(signature);
1691
+ const computedBuffer = computed.buffer.slice(
1692
+ computed.byteOffset,
1693
+ computed.byteOffset + computed.byteLength,
1694
+ );
1695
+
1696
+ if (computedBuffer.byteLength !== sigBuffer.byteLength) {
1697
+ return false;
1698
+ }
1699
+
1700
+ return timingSafeEqual(
1701
+ new Uint8Array(computedBuffer),
1702
+ new Uint8Array(sigBuffer),
1703
+ );
1704
+ }
1705
+
1706
+ function rsaSignVerify(
1707
+ key: CryptoKey,
1708
+ data: BufferLike,
1709
+ padding: 'pkcs1' | 'pss',
1710
+ signature?: BufferLike,
1711
+ saltLength?: number,
1712
+ ): ArrayBuffer | boolean {
1713
+ // Get hash algorithm from key
1714
+ const hashName = normalizeHashName(key.algorithm.hash);
1715
+
1716
+ // Determine RSA padding constant
1717
+ const RSA_PKCS1_PADDING = 1;
1718
+ const RSA_PKCS1_PSS_PADDING = 6;
1719
+ const paddingValue =
1720
+ padding === 'pss' ? RSA_PKCS1_PSS_PADDING : RSA_PKCS1_PADDING;
1721
+
1722
+ if (signature === undefined) {
1723
+ // Sign operation
1724
+ const signer = createSign(hashName);
1725
+ signer.update(data);
1726
+ const sig = signer.sign({
1727
+ key: key,
1728
+ padding: paddingValue,
1729
+ saltLength,
1730
+ });
1731
+ return sig.buffer.slice(sig.byteOffset, sig.byteOffset + sig.byteLength);
1732
+ }
1733
+
1734
+ // Verify operation
1735
+ const verifier = createVerify(hashName);
1736
+ verifier.update(data);
1737
+ return verifier.verify(
1738
+ {
1739
+ key: key,
1740
+ padding: paddingValue,
1741
+ saltLength,
1742
+ },
1743
+ signature,
1744
+ );
1745
+ }
1746
+
1747
+ function edSignVerify(
1748
+ key: CryptoKey,
1749
+ data: BufferLike,
1750
+ signature?: BufferLike,
1751
+ ): ArrayBuffer | boolean {
1752
+ const isSign = signature === undefined;
1753
+ const expectedKeyType = isSign ? 'private' : 'public';
1754
+
1755
+ if (key.type !== expectedKeyType) {
1756
+ throw lazyDOMException(
1757
+ `Key must be a ${expectedKeyType} key`,
1758
+ 'InvalidAccessError',
1759
+ );
1760
+ }
1761
+
1762
+ // Get curve type from algorithm name (Ed25519 or Ed448)
1763
+ const algorithmName = key.algorithm.name;
1764
+ const curveType = algorithmName.toLowerCase() as 'ed25519' | 'ed448';
1765
+
1766
+ // Create Ed instance with the curve
1767
+ const ed = new Ed(curveType, {});
1768
+
1769
+ // Export raw key bytes (exportKey with no format returns raw for Ed keys)
1770
+ const rawKey = key.keyObject.handle.exportKey();
1771
+ const dataBuffer = bufferLikeToArrayBuffer(data);
1772
+
1773
+ if (isSign) {
1774
+ // Sign operation - use raw private key
1775
+ const sig = ed.signSync(dataBuffer, rawKey);
1776
+ return sig;
1777
+ } else {
1778
+ // Verify operation - use raw public key
1779
+ const signatureBuffer = bufferLikeToArrayBuffer(signature!);
1780
+ return ed.verifySync(signatureBuffer, dataBuffer, rawKey);
1781
+ }
1782
+ }
1783
+
1784
+ function mldsaSignVerify(
1785
+ key: CryptoKey,
1786
+ data: BufferLike,
1787
+ signature?: BufferLike,
1788
+ ): ArrayBuffer | boolean {
1789
+ const isSign = signature === undefined;
1790
+ const expectedKeyType = isSign ? 'private' : 'public';
1791
+
1792
+ if (key.type !== expectedKeyType) {
1793
+ throw lazyDOMException(
1794
+ `Key must be a ${expectedKeyType} key`,
1795
+ 'InvalidAccessError',
1796
+ );
1797
+ }
1798
+
1799
+ const dataBuffer = bufferLikeToArrayBuffer(data);
1800
+
1801
+ if (isSign) {
1802
+ const signer = createSign('');
1803
+ signer.update(dataBuffer);
1804
+ const sig = signer.sign({ key: key });
1805
+ return sig.buffer.slice(sig.byteOffset, sig.byteOffset + sig.byteLength);
1806
+ } else {
1807
+ const signatureBuffer = bufferLikeToArrayBuffer(signature!);
1808
+ const verifier = createVerify('');
1809
+ verifier.update(dataBuffer);
1810
+ return verifier.verify({ key: key }, signatureBuffer);
1811
+ }
1812
+ }
1813
+
1814
+ const signVerify = (
1815
+ algorithm: SubtleAlgorithm,
1816
+ key: CryptoKey,
1817
+ data: BufferLike,
1818
+ signature?: BufferLike,
1819
+ ): ArrayBuffer | boolean => {
1820
+ const usage: Operation = signature === undefined ? 'sign' : 'verify';
1821
+ algorithm = normalizeAlgorithm(algorithm, usage);
1822
+
1823
+ if (!key.usages.includes(usage) || algorithm.name !== key.algorithm.name) {
1824
+ throw lazyDOMException(
1825
+ `Unable to use this key to ${usage}`,
1826
+ 'InvalidAccessError',
1827
+ );
1828
+ }
1829
+
1830
+ switch (algorithm.name) {
1831
+ case 'ECDSA':
1832
+ return ecdsaSignVerify(key, data, algorithm, signature);
1833
+ case 'HMAC':
1834
+ return hmacSignVerify(key, data, signature);
1835
+ case 'RSASSA-PKCS1-v1_5':
1836
+ return rsaSignVerify(key, data, 'pkcs1', signature);
1837
+ case 'RSA-PSS':
1838
+ return rsaSignVerify(key, data, 'pss', signature, algorithm.saltLength);
1839
+ case 'Ed25519':
1840
+ case 'Ed448':
1841
+ return edSignVerify(key, data, signature);
1842
+ case 'ML-DSA-44':
1843
+ case 'ML-DSA-65':
1844
+ case 'ML-DSA-87':
1845
+ return mldsaSignVerify(key, data, signature);
1846
+ case 'KMAC128':
1847
+ case 'KMAC256':
1848
+ return kmacSignVerify(key, data, algorithm, signature);
1849
+ }
1850
+ throw lazyDOMException(
1851
+ `Unrecognized algorithm name '${algorithm.name}' for '${usage}'`,
1852
+ 'NotSupportedError',
1853
+ );
1854
+ };
1855
+
1856
+ const cipherOrWrap = async (
1857
+ mode: CipherOrWrapMode,
1858
+ algorithm: EncryptDecryptParams,
1859
+ key: CryptoKey,
1860
+ data: ArrayBuffer,
1861
+ op: Operation,
1862
+ ): Promise<ArrayBuffer> => {
1863
+ if (
1864
+ key.algorithm.name !== algorithm.name ||
1865
+ !key.usages.includes(op as KeyUsage)
1866
+ ) {
1867
+ throw lazyDOMException(
1868
+ 'The requested operation is not valid for the provided key',
1869
+ 'InvalidAccessError',
1870
+ );
1871
+ }
1872
+
1873
+ validateMaxBufferLength(data, 'data');
1874
+
1875
+ switch (algorithm.name) {
1876
+ case 'RSA-OAEP':
1877
+ return rsaCipher(mode, key, data, algorithm);
1878
+ case 'AES-CTR':
1879
+ // Fall through
1880
+ case 'AES-CBC':
1881
+ // Fall through
1882
+ case 'AES-GCM':
1883
+ // Fall through
1884
+ case 'AES-OCB':
1885
+ return aesCipher(mode, key, data, algorithm);
1886
+ case 'AES-KW':
1887
+ return aesKwCipher(mode, key, data);
1888
+ case 'ChaCha20-Poly1305':
1889
+ return chaCha20Poly1305Cipher(
1890
+ mode,
1891
+ key,
1892
+ data,
1893
+ algorithm as ChaCha20Poly1305Params,
1894
+ );
1895
+ }
1896
+ };
1897
+
1898
+ const SUPPORTED_ALGORITHMS: Record<string, Set<string>> = {
1899
+ encrypt: new Set([
1900
+ 'RSA-OAEP',
1901
+ 'AES-CTR',
1902
+ 'AES-CBC',
1903
+ 'AES-GCM',
1904
+ 'AES-OCB',
1905
+ 'ChaCha20-Poly1305',
1906
+ ]),
1907
+ decrypt: new Set([
1908
+ 'RSA-OAEP',
1909
+ 'AES-CTR',
1910
+ 'AES-CBC',
1911
+ 'AES-GCM',
1912
+ 'AES-OCB',
1913
+ 'ChaCha20-Poly1305',
1914
+ ]),
1915
+ sign: new Set([
1916
+ 'RSASSA-PKCS1-v1_5',
1917
+ 'RSA-PSS',
1918
+ 'ECDSA',
1919
+ 'HMAC',
1920
+ 'KMAC128',
1921
+ 'KMAC256',
1922
+ 'Ed25519',
1923
+ 'Ed448',
1924
+ 'ML-DSA-44',
1925
+ 'ML-DSA-65',
1926
+ 'ML-DSA-87',
1927
+ ]),
1928
+ verify: new Set([
1929
+ 'RSASSA-PKCS1-v1_5',
1930
+ 'RSA-PSS',
1931
+ 'ECDSA',
1932
+ 'HMAC',
1933
+ 'KMAC128',
1934
+ 'KMAC256',
1935
+ 'Ed25519',
1936
+ 'Ed448',
1937
+ 'ML-DSA-44',
1938
+ 'ML-DSA-65',
1939
+ 'ML-DSA-87',
1940
+ ]),
1941
+ digest: new Set([
1942
+ 'SHA-1',
1943
+ 'SHA-256',
1944
+ 'SHA-384',
1945
+ 'SHA-512',
1946
+ 'SHA3-256',
1947
+ 'SHA3-384',
1948
+ 'SHA3-512',
1949
+ 'cSHAKE128',
1950
+ 'cSHAKE256',
1951
+ ]),
1952
+ generateKey: new Set([
1953
+ 'RSASSA-PKCS1-v1_5',
1954
+ 'RSA-PSS',
1955
+ 'RSA-OAEP',
1956
+ 'ECDSA',
1957
+ 'ECDH',
1958
+ 'Ed25519',
1959
+ 'Ed448',
1960
+ 'X25519',
1961
+ 'X448',
1962
+ 'AES-CTR',
1963
+ 'AES-CBC',
1964
+ 'AES-GCM',
1965
+ 'AES-KW',
1966
+ 'AES-OCB',
1967
+ 'ChaCha20-Poly1305',
1968
+ 'HMAC',
1969
+ 'KMAC128',
1970
+ 'KMAC256',
1971
+ 'ML-DSA-44',
1972
+ 'ML-DSA-65',
1973
+ 'ML-DSA-87',
1974
+ 'ML-KEM-512',
1975
+ 'ML-KEM-768',
1976
+ 'ML-KEM-1024',
1977
+ ]),
1978
+ importKey: new Set([
1979
+ 'RSASSA-PKCS1-v1_5',
1980
+ 'RSA-PSS',
1981
+ 'RSA-OAEP',
1982
+ 'ECDSA',
1983
+ 'ECDH',
1984
+ 'Ed25519',
1985
+ 'Ed448',
1986
+ 'X25519',
1987
+ 'X448',
1988
+ 'AES-CTR',
1989
+ 'AES-CBC',
1990
+ 'AES-GCM',
1991
+ 'AES-KW',
1992
+ 'AES-OCB',
1993
+ 'ChaCha20-Poly1305',
1994
+ 'HMAC',
1995
+ 'KMAC128',
1996
+ 'KMAC256',
1997
+ 'HKDF',
1998
+ 'PBKDF2',
1999
+ 'Argon2d',
2000
+ 'Argon2i',
2001
+ 'Argon2id',
2002
+ 'ML-DSA-44',
2003
+ 'ML-DSA-65',
2004
+ 'ML-DSA-87',
2005
+ 'ML-KEM-512',
2006
+ 'ML-KEM-768',
2007
+ 'ML-KEM-1024',
2008
+ ]),
2009
+ exportKey: new Set([
2010
+ 'RSASSA-PKCS1-v1_5',
2011
+ 'RSA-PSS',
2012
+ 'RSA-OAEP',
2013
+ 'ECDSA',
2014
+ 'ECDH',
2015
+ 'Ed25519',
2016
+ 'Ed448',
2017
+ 'X25519',
2018
+ 'X448',
2019
+ 'AES-CTR',
2020
+ 'AES-CBC',
2021
+ 'AES-GCM',
2022
+ 'AES-KW',
2023
+ 'AES-OCB',
2024
+ 'ChaCha20-Poly1305',
2025
+ 'HMAC',
2026
+ 'KMAC128',
2027
+ 'KMAC256',
2028
+ 'ML-DSA-44',
2029
+ 'ML-DSA-65',
2030
+ 'ML-DSA-87',
2031
+ 'ML-KEM-512',
2032
+ 'ML-KEM-768',
2033
+ 'ML-KEM-1024',
2034
+ ]),
2035
+ deriveBits: new Set([
2036
+ 'PBKDF2',
2037
+ 'HKDF',
2038
+ 'ECDH',
2039
+ 'X25519',
2040
+ 'X448',
2041
+ 'Argon2d',
2042
+ 'Argon2i',
2043
+ 'Argon2id',
2044
+ ]),
2045
+ wrapKey: new Set([
2046
+ 'AES-CTR',
2047
+ 'AES-CBC',
2048
+ 'AES-GCM',
2049
+ 'AES-KW',
2050
+ 'AES-OCB',
2051
+ 'ChaCha20-Poly1305',
2052
+ 'RSA-OAEP',
2053
+ ]),
2054
+ unwrapKey: new Set([
2055
+ 'AES-CTR',
2056
+ 'AES-CBC',
2057
+ 'AES-GCM',
2058
+ 'AES-KW',
2059
+ 'AES-OCB',
2060
+ 'ChaCha20-Poly1305',
2061
+ 'RSA-OAEP',
2062
+ ]),
2063
+ encapsulateBits: new Set(['ML-KEM-512', 'ML-KEM-768', 'ML-KEM-1024']),
2064
+ decapsulateBits: new Set(['ML-KEM-512', 'ML-KEM-768', 'ML-KEM-1024']),
2065
+ encapsulateKey: new Set(['ML-KEM-512', 'ML-KEM-768', 'ML-KEM-1024']),
2066
+ decapsulateKey: new Set(['ML-KEM-512', 'ML-KEM-768', 'ML-KEM-1024']),
2067
+ };
2068
+
2069
+ const ASYMMETRIC_ALGORITHMS = new Set([
2070
+ 'RSASSA-PKCS1-v1_5',
2071
+ 'RSA-PSS',
2072
+ 'RSA-OAEP',
2073
+ 'ECDSA',
2074
+ 'ECDH',
2075
+ 'Ed25519',
2076
+ 'Ed448',
2077
+ 'X25519',
2078
+ 'X448',
2079
+ 'ML-DSA-44',
2080
+ 'ML-DSA-65',
2081
+ 'ML-DSA-87',
2082
+ 'ML-KEM-512',
2083
+ 'ML-KEM-768',
2084
+ 'ML-KEM-1024',
2085
+ ]);
2086
+
2087
+ export class Subtle {
2088
+ static supports(
2089
+ operation: string,
2090
+ algorithm: SubtleAlgorithm | AnyAlgorithm,
2091
+ _lengthOrAdditionalAlgorithm?: unknown,
2092
+ ): boolean {
2093
+ let normalizedAlgorithm: SubtleAlgorithm;
2094
+ try {
2095
+ normalizedAlgorithm = normalizeAlgorithm(
2096
+ algorithm,
2097
+ (operation === 'getPublicKey' ? 'exportKey' : operation) as Operation,
2098
+ );
2099
+ } catch {
2100
+ return false;
2101
+ }
2102
+
2103
+ const name = normalizedAlgorithm.name;
2104
+
2105
+ if (operation === 'getPublicKey') {
2106
+ return ASYMMETRIC_ALGORITHMS.has(name);
2107
+ }
2108
+
2109
+ if (operation === 'deriveKey') {
2110
+ // deriveKey decomposes to deriveBits + importKey of additional algorithm
2111
+ if (!SUPPORTED_ALGORITHMS.deriveBits?.has(name)) return false;
2112
+ if (_lengthOrAdditionalAlgorithm != null) {
2113
+ try {
2114
+ const additionalAlg = normalizeAlgorithm(
2115
+ _lengthOrAdditionalAlgorithm as SubtleAlgorithm | AnyAlgorithm,
2116
+ 'importKey',
2117
+ );
2118
+ return (
2119
+ SUPPORTED_ALGORITHMS.importKey?.has(additionalAlg.name) ?? false
2120
+ );
2121
+ } catch {
2122
+ return false;
2123
+ }
2124
+ }
2125
+ return true;
2126
+ }
2127
+
2128
+ const supported = SUPPORTED_ALGORITHMS[operation];
2129
+ if (!supported) return false;
2130
+ return supported.has(name);
2131
+ }
2132
+
2133
+ async decrypt(
2134
+ algorithm: EncryptDecryptParams,
2135
+ key: CryptoKey,
2136
+ data: BufferLike,
2137
+ ): Promise<ArrayBuffer> {
2138
+ const normalizedAlgorithm = normalizeAlgorithm(algorithm, 'decrypt');
2139
+ return cipherOrWrap(
2140
+ CipherOrWrapMode.kWebCryptoCipherDecrypt,
2141
+ normalizedAlgorithm as EncryptDecryptParams,
2142
+ key,
2143
+ bufferLikeToArrayBuffer(data),
2144
+ 'decrypt',
2145
+ );
2146
+ }
2147
+
2148
+ async digest(
2149
+ algorithm: SubtleAlgorithm | AnyAlgorithm,
2150
+ data: BufferLike,
2151
+ ): Promise<ArrayBuffer> {
2152
+ const normalizedAlgorithm = normalizeAlgorithm(
2153
+ algorithm,
2154
+ 'digest' as Operation,
2155
+ );
2156
+ return asyncDigest(normalizedAlgorithm, data);
2157
+ }
2158
+
2159
+ async deriveBits(
2160
+ algorithm: SubtleAlgorithm,
2161
+ baseKey: CryptoKey,
2162
+ length: number,
2163
+ ): Promise<ArrayBuffer> {
2164
+ // Allow either deriveBits OR deriveKey usage (WebCrypto spec allows both)
2165
+ if (
2166
+ !baseKey.keyUsages.includes('deriveBits') &&
2167
+ !baseKey.keyUsages.includes('deriveKey')
2168
+ ) {
2169
+ throw new Error('baseKey does not have deriveBits or deriveKey usage');
2170
+ }
2171
+ if (baseKey.algorithm.name !== algorithm.name)
2172
+ throw new Error('Key algorithm mismatch');
2173
+ switch (algorithm.name) {
2174
+ case 'PBKDF2':
2175
+ return pbkdf2DeriveBits(algorithm, baseKey, length);
2176
+ case 'X25519':
2177
+ // Fall through
2178
+ case 'X448':
2179
+ return xDeriveBits(algorithm, baseKey, length);
2180
+ case 'ECDH':
2181
+ return ecDeriveBits(algorithm, baseKey, length);
2182
+ case 'HKDF':
2183
+ return hkdfDeriveBits(
2184
+ algorithm as unknown as HkdfAlgorithm,
2185
+ baseKey,
2186
+ length,
2187
+ );
2188
+ case 'Argon2d':
2189
+ case 'Argon2i':
2190
+ case 'Argon2id':
2191
+ return argon2DeriveBits(algorithm, baseKey, length);
2192
+ }
2193
+ throw new Error(
2194
+ `'subtle.deriveBits()' for ${algorithm.name} is not implemented.`,
2195
+ );
2196
+ }
2197
+
2198
+ async deriveKey(
2199
+ algorithm: SubtleAlgorithm,
2200
+ baseKey: CryptoKey,
2201
+ derivedKeyAlgorithm: SubtleAlgorithm,
2202
+ extractable: boolean,
2203
+ keyUsages: KeyUsage[],
2204
+ ): Promise<CryptoKey> {
2205
+ // Validate baseKey usage
2206
+ if (
2207
+ !baseKey.usages.includes('deriveKey') &&
2208
+ !baseKey.usages.includes('deriveBits')
2209
+ ) {
2210
+ throw lazyDOMException(
2211
+ 'baseKey does not have deriveKey or deriveBits usage',
2212
+ 'InvalidAccessError',
2213
+ );
2214
+ }
2215
+
2216
+ // Calculate required key length
2217
+ const length = getKeyLength(derivedKeyAlgorithm);
2218
+
2219
+ // Step 1: Derive bits
2220
+ let derivedBits: ArrayBuffer;
2221
+ if (baseKey.algorithm.name !== algorithm.name)
2222
+ throw new Error('Key algorithm mismatch');
2223
+
2224
+ switch (algorithm.name) {
2225
+ case 'PBKDF2':
2226
+ derivedBits = await pbkdf2DeriveBits(algorithm, baseKey, length);
2227
+ break;
2228
+ case 'X25519':
2229
+ // Fall through
2230
+ case 'X448':
2231
+ derivedBits = await xDeriveBits(algorithm, baseKey, length);
2232
+ break;
2233
+ case 'ECDH':
2234
+ derivedBits = await ecDeriveBits(algorithm, baseKey, length);
2235
+ break;
2236
+ case 'HKDF':
2237
+ derivedBits = hkdfDeriveBits(
2238
+ algorithm as unknown as HkdfAlgorithm,
2239
+ baseKey,
2240
+ length,
2241
+ );
2242
+ break;
2243
+ case 'Argon2d':
2244
+ case 'Argon2i':
2245
+ case 'Argon2id':
2246
+ derivedBits = argon2DeriveBits(algorithm, baseKey, length);
2247
+ break;
2248
+ default:
2249
+ throw new Error(
2250
+ `'subtle.deriveKey()' for ${algorithm.name} is not implemented.`,
2251
+ );
2252
+ }
2253
+
2254
+ // Step 2: Import as key
2255
+ return this.importKey(
2256
+ 'raw',
2257
+ derivedBits,
2258
+ derivedKeyAlgorithm,
2259
+ extractable,
2260
+ keyUsages,
2261
+ );
2262
+ }
2263
+
2264
+ async encrypt(
2265
+ algorithm: EncryptDecryptParams,
2266
+ key: CryptoKey,
2267
+ data: BufferLike,
2268
+ ): Promise<ArrayBuffer> {
2269
+ const normalizedAlgorithm = normalizeAlgorithm(algorithm, 'encrypt');
2270
+ return cipherOrWrap(
2271
+ CipherOrWrapMode.kWebCryptoCipherEncrypt,
2272
+ normalizedAlgorithm as EncryptDecryptParams,
2273
+ key,
2274
+ bufferLikeToArrayBuffer(data),
2275
+ 'encrypt',
2276
+ );
2277
+ }
2278
+
2279
+ async exportKey(
2280
+ format: ImportFormat,
2281
+ key: CryptoKey,
2282
+ ): Promise<ArrayBuffer | JWK> {
2283
+ if (!key.extractable) throw new Error('key is not extractable');
2284
+
2285
+ if (format === 'raw-seed') {
2286
+ const pqcAlgos = [
2287
+ 'ML-KEM-512',
2288
+ 'ML-KEM-768',
2289
+ 'ML-KEM-1024',
2290
+ 'ML-DSA-44',
2291
+ 'ML-DSA-65',
2292
+ 'ML-DSA-87',
2293
+ ];
2294
+ if (!pqcAlgos.includes(key.algorithm.name)) {
2295
+ throw lazyDOMException(
2296
+ 'raw-seed export only supported for PQC keys',
2297
+ 'NotSupportedError',
2298
+ );
2299
+ }
2300
+ if (key.type !== 'private') {
2301
+ throw lazyDOMException(
2302
+ 'raw-seed export requires a private key',
2303
+ 'InvalidAccessError',
2304
+ );
2305
+ }
2306
+ return bufferLikeToArrayBuffer(key.keyObject.handle.exportKey());
2307
+ }
2308
+
2309
+ // Note: 'raw-seed' is handled above; do NOT normalize it here
2310
+ if (format === 'raw-secret' || format === 'raw-public') format = 'raw';
2311
+
2312
+ switch (format) {
2313
+ case 'spki':
2314
+ return (await exportKeySpki(key)) as ArrayBuffer;
2315
+ case 'pkcs8':
2316
+ return (await exportKeyPkcs8(key)) as ArrayBuffer;
2317
+ case 'jwk':
2318
+ return exportKeyJWK(key) as JWK;
2319
+ case 'raw':
2320
+ return exportKeyRaw(key) as ArrayBuffer;
2321
+ }
2322
+ }
2323
+
2324
+ async wrapKey(
2325
+ format: ImportFormat,
2326
+ key: CryptoKey,
2327
+ wrappingKey: CryptoKey,
2328
+ wrapAlgorithm: EncryptDecryptParams,
2329
+ ): Promise<ArrayBuffer> {
2330
+ // Validate wrappingKey usage
2331
+ if (!wrappingKey.usages.includes('wrapKey')) {
2332
+ throw lazyDOMException(
2333
+ 'wrappingKey does not have wrapKey usage',
2334
+ 'InvalidAccessError',
2335
+ );
2336
+ }
2337
+
2338
+ // Step 1: Export the key
2339
+ const exported = await this.exportKey(format, key);
2340
+
2341
+ // Step 2: Convert to ArrayBuffer if JWK
2342
+ let keyData: ArrayBuffer;
2343
+ if (format === 'jwk') {
2344
+ const jwkString = JSON.stringify(exported);
2345
+ const buffer = SBuffer.from(jwkString, 'utf8');
2346
+
2347
+ // For AES-KW, pad to multiple of 8 bytes (accounting for null terminator)
2348
+ if (wrapAlgorithm.name === 'AES-KW') {
2349
+ const length = buffer.length;
2350
+ // Add 1 for null terminator, then pad to multiple of 8
2351
+ const paddedLength = Math.ceil((length + 1) / 8) * 8;
2352
+ const paddedBuffer = SBuffer.alloc(paddedLength);
2353
+ buffer.copy(paddedBuffer);
2354
+ // Null terminator for JSON string (remaining bytes are already zeros from alloc)
2355
+ paddedBuffer.writeUInt8(0, length);
2356
+ keyData = bufferLikeToArrayBuffer(paddedBuffer);
2357
+ } else {
2358
+ keyData = bufferLikeToArrayBuffer(buffer);
2359
+ }
2360
+ } else {
2361
+ keyData = exported as ArrayBuffer;
2362
+ }
2363
+
2364
+ // Step 3: Encrypt the exported key
2365
+ return cipherOrWrap(
2366
+ CipherOrWrapMode.kWebCryptoCipherEncrypt,
2367
+ wrapAlgorithm,
2368
+ wrappingKey,
2369
+ keyData,
2370
+ 'wrapKey',
2371
+ );
2372
+ }
2373
+
2374
+ async unwrapKey(
2375
+ format: ImportFormat,
2376
+ wrappedKey: BufferLike,
2377
+ unwrappingKey: CryptoKey,
2378
+ unwrapAlgorithm: EncryptDecryptParams,
2379
+ unwrappedKeyAlgorithm: SubtleAlgorithm | AnyAlgorithm,
2380
+ extractable: boolean,
2381
+ keyUsages: KeyUsage[],
2382
+ ): Promise<CryptoKey> {
2383
+ // Validate unwrappingKey usage
2384
+ if (!unwrappingKey.usages.includes('unwrapKey')) {
2385
+ throw lazyDOMException(
2386
+ 'unwrappingKey does not have unwrapKey usage',
2387
+ 'InvalidAccessError',
2388
+ );
2389
+ }
2390
+
2391
+ // Step 1: Decrypt the wrapped key
2392
+ const decrypted = await cipherOrWrap(
2393
+ CipherOrWrapMode.kWebCryptoCipherDecrypt,
2394
+ unwrapAlgorithm,
2395
+ unwrappingKey,
2396
+ bufferLikeToArrayBuffer(wrappedKey),
2397
+ 'unwrapKey',
2398
+ );
2399
+
2400
+ // Step 2: Convert to appropriate format
2401
+ let keyData: BufferLike | JWK;
2402
+ if (format === 'jwk') {
2403
+ const buffer = SBuffer.from(decrypted);
2404
+ // For AES-KW, the data may be padded - find the null terminator
2405
+ let jwkString: string;
2406
+ if (unwrapAlgorithm.name === 'AES-KW') {
2407
+ // Find the null terminator (if present) to get the original string
2408
+ const nullIndex = buffer.indexOf(0);
2409
+ if (nullIndex !== -1) {
2410
+ jwkString = buffer.toString('utf8', 0, nullIndex);
2411
+ } else {
2412
+ // No null terminator, try to parse the whole buffer
2413
+ jwkString = buffer.toString('utf8').trim();
2414
+ }
2415
+ } else {
2416
+ jwkString = buffer.toString('utf8');
2417
+ }
2418
+ keyData = JSON.parse(jwkString) as JWK;
2419
+ } else {
2420
+ keyData = decrypted;
2421
+ }
2422
+
2423
+ // Step 3: Import the key
2424
+ return this.importKey(
2425
+ format,
2426
+ keyData,
2427
+ unwrappedKeyAlgorithm,
2428
+ extractable,
2429
+ keyUsages,
2430
+ );
2431
+ }
2432
+
2433
+ async generateKey(
2434
+ algorithm: SubtleAlgorithm,
2435
+ extractable: boolean,
2436
+ keyUsages: KeyUsage[],
2437
+ ): Promise<CryptoKey | CryptoKeyPair> {
2438
+ algorithm = normalizeAlgorithm(algorithm, 'generateKey');
2439
+ let result: CryptoKey | CryptoKeyPair;
2440
+ switch (algorithm.name) {
2441
+ case 'RSASSA-PKCS1-v1_5':
2442
+ // Fall through
2443
+ case 'RSA-PSS':
2444
+ // Fall through
2445
+ case 'RSA-OAEP':
2446
+ result = await rsa_generateKeyPair(algorithm, extractable, keyUsages);
2447
+ break;
2448
+ case 'ECDSA':
2449
+ // Fall through
2450
+ case 'ECDH':
2451
+ result = await ec_generateKeyPair(
2452
+ algorithm.name,
2453
+ algorithm.namedCurve!,
2454
+ extractable,
2455
+ keyUsages,
2456
+ );
2457
+ checkCryptoKeyPairUsages(result as CryptoKeyPair);
2458
+ break;
2459
+ case 'AES-CTR':
2460
+ // Fall through
2461
+ case 'AES-CBC':
2462
+ // Fall through
2463
+ case 'AES-GCM':
2464
+ // Fall through
2465
+ case 'AES-KW':
2466
+ // Fall through
2467
+ case 'AES-OCB':
2468
+ result = await aesGenerateKey(
2469
+ algorithm as AesKeyGenParams,
2470
+ extractable,
2471
+ keyUsages,
2472
+ );
2473
+ break;
2474
+ case 'ChaCha20-Poly1305': {
2475
+ const length = (algorithm as AesKeyGenParams).length ?? 256;
2476
+
2477
+ if (length !== 256) {
2478
+ throw lazyDOMException(
2479
+ 'ChaCha20-Poly1305 only supports 256-bit keys',
2480
+ 'NotSupportedError',
2481
+ );
2482
+ }
2483
+
2484
+ result = await aesGenerateKey(
2485
+ {
2486
+ name: 'ChaCha20-Poly1305',
2487
+ length: 256,
2488
+ } as unknown as AesKeyGenParams,
2489
+ extractable,
2490
+ keyUsages,
2491
+ );
2492
+ break;
2493
+ }
2494
+ case 'HMAC':
2495
+ result = await hmacGenerateKey(algorithm, extractable, keyUsages);
2496
+ break;
2497
+ case 'KMAC128':
2498
+ // Fall through
2499
+ case 'KMAC256':
2500
+ result = await kmacGenerateKey(algorithm, extractable, keyUsages);
2501
+ break;
2502
+ case 'Ed25519':
2503
+ // Fall through
2504
+ case 'Ed448':
2505
+ result = await ed_generateKeyPairWebCrypto(
2506
+ algorithm.name.toLowerCase() as 'ed25519' | 'ed448',
2507
+ extractable,
2508
+ keyUsages,
2509
+ );
2510
+ checkCryptoKeyPairUsages(result as CryptoKeyPair);
2511
+ break;
2512
+ case 'ML-DSA-44':
2513
+ // Fall through
2514
+ case 'ML-DSA-65':
2515
+ // Fall through
2516
+ case 'ML-DSA-87':
2517
+ result = await mldsa_generateKeyPairWebCrypto(
2518
+ algorithm.name as MlDsaVariant,
2519
+ extractable,
2520
+ keyUsages,
2521
+ );
2522
+ checkCryptoKeyPairUsages(result as CryptoKeyPair);
2523
+ break;
2524
+ case 'X25519':
2525
+ // Fall through
2526
+ case 'X448':
2527
+ result = await x_generateKeyPairWebCrypto(
2528
+ algorithm.name.toLowerCase() as 'x25519' | 'x448',
2529
+ extractable,
2530
+ keyUsages,
2531
+ );
2532
+ checkCryptoKeyPairUsages(result as CryptoKeyPair);
2533
+ break;
2534
+ case 'ML-KEM-512':
2535
+ // Fall through
2536
+ case 'ML-KEM-768':
2537
+ // Fall through
2538
+ case 'ML-KEM-1024':
2539
+ result = await mlkem_generateKeyPairWebCrypto(
2540
+ algorithm.name as MlKemVariant,
2541
+ extractable,
2542
+ keyUsages,
2543
+ );
2544
+ checkCryptoKeyPairUsages(result as CryptoKeyPair);
2545
+ break;
2546
+ default:
2547
+ throw new Error(
2548
+ `'subtle.generateKey()' is not implemented for ${algorithm.name}.
2549
+ Unrecognized algorithm name`,
2550
+ );
2551
+ }
2552
+
2553
+ return result;
2554
+ }
2555
+
2556
+ async getPublicKey(
2557
+ key: CryptoKey,
2558
+ keyUsages: KeyUsage[],
2559
+ ): Promise<CryptoKey> {
2560
+ if (key.type === 'secret') {
2561
+ throw lazyDOMException('key must be a private key', 'NotSupportedError');
2562
+ }
2563
+ if (key.type !== 'private') {
2564
+ throw lazyDOMException('key must be a private key', 'InvalidAccessError');
2565
+ }
2566
+
2567
+ const publicKeyObject = createPublicKey(key.keyObject);
2568
+ return publicKeyObject.toCryptoKey(key.algorithm, true, keyUsages);
2569
+ }
2570
+
2571
+ async importKey(
2572
+ format: ImportFormat,
2573
+ data: BufferLike | BinaryLike | JWK,
2574
+ algorithm: SubtleAlgorithm | AnyAlgorithm,
2575
+ extractable: boolean,
2576
+ keyUsages: KeyUsage[],
2577
+ ): Promise<CryptoKey> {
2578
+ // Note: 'raw-seed' is NOT normalized — PQC import functions handle it directly
2579
+ if (format === 'raw-secret' || format === 'raw-public') format = 'raw';
2580
+ const normalizedAlgorithm = normalizeAlgorithm(algorithm, 'importKey');
2581
+ let result: CryptoKey;
2582
+ switch (normalizedAlgorithm.name) {
2583
+ case 'RSASSA-PKCS1-v1_5':
2584
+ // Fall through
2585
+ case 'RSA-PSS':
2586
+ // Fall through
2587
+ case 'RSA-OAEP':
2588
+ result = rsaImportKey(
2589
+ format,
2590
+ data as BufferLike | JWK,
2591
+ normalizedAlgorithm,
2592
+ extractable,
2593
+ keyUsages,
2594
+ );
2595
+ break;
2596
+ case 'ECDSA':
2597
+ // Fall through
2598
+ case 'ECDH':
2599
+ result = ecImportKey(
2600
+ format,
2601
+ data,
2602
+ normalizedAlgorithm,
2603
+ extractable,
2604
+ keyUsages,
2605
+ );
2606
+ break;
2607
+ case 'HMAC':
2608
+ result = await hmacImportKey(
2609
+ normalizedAlgorithm,
2610
+ format,
2611
+ data as BufferLike | JWK,
2612
+ extractable,
2613
+ keyUsages,
2614
+ );
2615
+ break;
2616
+ case 'KMAC128':
2617
+ // Fall through
2618
+ case 'KMAC256':
2619
+ result = await kmacImportKey(
2620
+ normalizedAlgorithm,
2621
+ format,
2622
+ data as BufferLike | JWK,
2623
+ extractable,
2624
+ keyUsages,
2625
+ );
2626
+ break;
2627
+ case 'AES-CTR':
2628
+ // Fall through
2629
+ case 'AES-CBC':
2630
+ // Fall through
2631
+ case 'AES-GCM':
2632
+ // Fall through
2633
+ case 'AES-KW':
2634
+ // Fall through
2635
+ case 'AES-OCB':
2636
+ // Fall through
2637
+ case 'ChaCha20-Poly1305':
2638
+ result = await aesImportKey(
2639
+ normalizedAlgorithm,
2640
+ format,
2641
+ data as BufferLike | JWK,
2642
+ extractable,
2643
+ keyUsages,
2644
+ );
2645
+ break;
2646
+ case 'PBKDF2':
2647
+ case 'Argon2d':
2648
+ case 'Argon2i':
2649
+ case 'Argon2id':
2650
+ result = await importGenericSecretKey(
2651
+ normalizedAlgorithm,
2652
+ format,
2653
+ data as BufferLike | BinaryLike,
2654
+ extractable,
2655
+ keyUsages,
2656
+ );
2657
+ break;
2658
+ case 'HKDF':
2659
+ result = await hkdfImportKey(
2660
+ format,
2661
+ data as BufferLike | BinaryLike,
2662
+ normalizedAlgorithm,
2663
+ extractable,
2664
+ keyUsages,
2665
+ );
2666
+ break;
2667
+ case 'X25519':
2668
+ // Fall through
2669
+ case 'X448':
2670
+ // Fall through
2671
+ case 'Ed25519':
2672
+ // Fall through
2673
+ case 'Ed448':
2674
+ result = edImportKey(
2675
+ format,
2676
+ data as BufferLike | JWK,
2677
+ normalizedAlgorithm,
2678
+ extractable,
2679
+ keyUsages,
2680
+ );
2681
+ break;
2682
+ case 'ML-DSA-44':
2683
+ // Fall through
2684
+ case 'ML-DSA-65':
2685
+ // Fall through
2686
+ case 'ML-DSA-87':
2687
+ result = mldsaImportKey(
2688
+ format,
2689
+ data as BufferLike,
2690
+ normalizedAlgorithm,
2691
+ extractable,
2692
+ keyUsages,
2693
+ );
2694
+ break;
2695
+ case 'ML-KEM-512':
2696
+ // Fall through
2697
+ case 'ML-KEM-768':
2698
+ // Fall through
2699
+ case 'ML-KEM-1024':
2700
+ result = mlkemImportKey(
2701
+ format,
2702
+ data as BufferLike,
2703
+ normalizedAlgorithm,
2704
+ extractable,
2705
+ keyUsages,
2706
+ );
2707
+ break;
2708
+ default:
2709
+ throw new Error(
2710
+ `"subtle.importKey()" is not implemented for ${normalizedAlgorithm.name}`,
2711
+ );
2712
+ }
2713
+
2714
+ if (
2715
+ (result.type === 'secret' || result.type === 'private') &&
2716
+ result.usages.length === 0
2717
+ ) {
2718
+ throw new Error(
2719
+ `Usages cannot be empty when importing a ${result.type} key.`,
2720
+ );
2721
+ }
2722
+
2723
+ return result;
2724
+ }
2725
+
2726
+ async sign(
2727
+ algorithm: SubtleAlgorithm,
2728
+ key: CryptoKey,
2729
+ data: BufferLike,
2730
+ ): Promise<ArrayBuffer> {
2731
+ return signVerify(
2732
+ normalizeAlgorithm(algorithm, 'sign'),
2733
+ key,
2734
+ data,
2735
+ ) as ArrayBuffer;
2736
+ }
2737
+
2738
+ async verify(
2739
+ algorithm: SubtleAlgorithm,
2740
+ key: CryptoKey,
2741
+ signature: BufferLike,
2742
+ data: BufferLike,
2743
+ ): Promise<boolean> {
2744
+ return signVerify(
2745
+ normalizeAlgorithm(algorithm, 'verify'),
2746
+ key,
2747
+ data,
2748
+ signature,
2749
+ ) as boolean;
2750
+ }
2751
+
2752
+ private _encapsulateCore(
2753
+ algorithm: SubtleAlgorithm,
2754
+ key: CryptoKey,
2755
+ ): EncapsulateResult {
2756
+ const normalizedAlgorithm = normalizeAlgorithm(
2757
+ algorithm,
2758
+ 'encapsulateBits' as Operation,
2759
+ );
2760
+
2761
+ if (key.algorithm.name !== normalizedAlgorithm.name) {
2762
+ throw lazyDOMException('Key algorithm mismatch', 'InvalidAccessError');
2763
+ }
2764
+
2765
+ const variant = normalizedAlgorithm.name as MlKemVariant;
2766
+ const mlkem = new MlKem(variant);
2767
+
2768
+ const keyData = key.keyObject.handle.exportKey(
2769
+ KFormatType.DER,
2770
+ KeyEncoding.SPKI,
2771
+ );
2772
+ mlkem.setPublicKey(
2773
+ bufferLikeToArrayBuffer(keyData),
2774
+ KFormatType.DER,
2775
+ KeyEncoding.SPKI,
2776
+ );
2777
+
2778
+ return mlkem.encapsulateSync();
2779
+ }
2780
+
2781
+ private _decapsulateCore(
2782
+ algorithm: SubtleAlgorithm,
2783
+ key: CryptoKey,
2784
+ ciphertext: BufferLike,
2785
+ ): ArrayBuffer {
2786
+ const normalizedAlgorithm = normalizeAlgorithm(
2787
+ algorithm,
2788
+ 'decapsulateBits' as Operation,
2789
+ );
2790
+
2791
+ if (key.algorithm.name !== normalizedAlgorithm.name) {
2792
+ throw lazyDOMException('Key algorithm mismatch', 'InvalidAccessError');
2793
+ }
2794
+
2795
+ const variant = normalizedAlgorithm.name as MlKemVariant;
2796
+ const mlkem = new MlKem(variant);
2797
+
2798
+ const keyData = key.keyObject.handle.exportKey(
2799
+ KFormatType.DER,
2800
+ KeyEncoding.PKCS8,
2801
+ );
2802
+ mlkem.setPrivateKey(
2803
+ bufferLikeToArrayBuffer(keyData),
2804
+ KFormatType.DER,
2805
+ KeyEncoding.PKCS8,
2806
+ );
2807
+
2808
+ return mlkem.decapsulateSync(bufferLikeToArrayBuffer(ciphertext));
2809
+ }
2810
+
2811
+ async encapsulateBits(
2812
+ algorithm: SubtleAlgorithm,
2813
+ key: CryptoKey,
2814
+ ): Promise<EncapsulateResult> {
2815
+ if (!key.usages.includes('encapsulateBits')) {
2816
+ throw lazyDOMException(
2817
+ 'Key does not have encapsulateBits usage',
2818
+ 'InvalidAccessError',
2819
+ );
2820
+ }
2821
+
2822
+ return this._encapsulateCore(algorithm, key);
2823
+ }
2824
+
2825
+ async encapsulateKey(
2826
+ algorithm: SubtleAlgorithm,
2827
+ key: CryptoKey,
2828
+ sharedKeyAlgorithm: SubtleAlgorithm | AnyAlgorithm,
2829
+ extractable: boolean,
2830
+ usages: KeyUsage[],
2831
+ ): Promise<{ key: CryptoKey; ciphertext: ArrayBuffer }> {
2832
+ if (!key.usages.includes('encapsulateKey')) {
2833
+ throw lazyDOMException(
2834
+ 'Key does not have encapsulateKey usage',
2835
+ 'InvalidAccessError',
2836
+ );
2837
+ }
2838
+
2839
+ const { sharedKey, ciphertext } = this._encapsulateCore(algorithm, key);
2840
+ const importedKey = await this.importKey(
2841
+ 'raw',
2842
+ sharedKey,
2843
+ sharedKeyAlgorithm,
2844
+ extractable,
2845
+ usages,
2846
+ );
2847
+
2848
+ return { key: importedKey, ciphertext };
2849
+ }
2850
+
2851
+ async decapsulateBits(
2852
+ algorithm: SubtleAlgorithm,
2853
+ key: CryptoKey,
2854
+ ciphertext: BufferLike,
2855
+ ): Promise<ArrayBuffer> {
2856
+ if (!key.usages.includes('decapsulateBits')) {
2857
+ throw lazyDOMException(
2858
+ 'Key does not have decapsulateBits usage',
2859
+ 'InvalidAccessError',
2860
+ );
2861
+ }
2862
+
2863
+ return this._decapsulateCore(algorithm, key, ciphertext);
2864
+ }
2865
+
2866
+ async decapsulateKey(
2867
+ algorithm: SubtleAlgorithm,
2868
+ key: CryptoKey,
2869
+ ciphertext: BufferLike,
2870
+ sharedKeyAlgorithm: SubtleAlgorithm | AnyAlgorithm,
2871
+ extractable: boolean,
2872
+ usages: KeyUsage[],
2873
+ ): Promise<CryptoKey> {
2874
+ if (!key.usages.includes('decapsulateKey')) {
2875
+ throw lazyDOMException(
2876
+ 'Key does not have decapsulateKey usage',
2877
+ 'InvalidAccessError',
2878
+ );
2879
+ }
2880
+
2881
+ const sharedKey = this._decapsulateCore(algorithm, key, ciphertext);
2882
+ return this.importKey(
2883
+ 'raw',
2884
+ sharedKey,
2885
+ sharedKeyAlgorithm,
2886
+ extractable,
2887
+ usages,
2888
+ );
2889
+ }
2890
+ }
2891
+
2892
+ export const subtle = new Subtle();
2893
+
2894
+ function getKeyLength(algorithm: SubtleAlgorithm): number {
2895
+ const name = algorithm.name;
2896
+
2897
+ switch (name) {
2898
+ case 'AES-CTR':
2899
+ case 'AES-CBC':
2900
+ case 'AES-GCM':
2901
+ case 'AES-KW':
2902
+ case 'AES-OCB':
2903
+ case 'ChaCha20-Poly1305':
2904
+ return (algorithm as AesKeyGenParams).length || 256;
2905
+
2906
+ case 'HMAC': {
2907
+ const hmacAlg = algorithm as { length?: number };
2908
+ return hmacAlg.length || 256;
2909
+ }
2910
+
2911
+ case 'KMAC128':
2912
+ return algorithm.length || 128;
2913
+ case 'KMAC256':
2914
+ return algorithm.length || 256;
2915
+
2916
+ default:
2917
+ throw lazyDOMException(
2918
+ `Cannot determine key length for ${name}`,
2919
+ 'NotSupportedError',
2920
+ );
2921
+ }
2922
+ }