internxt-crypto 0.0.14 → 1.0.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 (144) hide show
  1. package/README.md +44 -72
  2. package/dist/aes-B8TA-JKq.mjs +49 -0
  3. package/dist/aes-B8TA-JKq.mjs.map +1 -0
  4. package/dist/aes-CuW_SPl-.js +67 -0
  5. package/dist/aes-CuW_SPl-.js.map +1 -0
  6. package/dist/asymmetric-crypto.d.mts +8 -31
  7. package/dist/asymmetric-crypto.d.mts.map +1 -1
  8. package/dist/asymmetric-crypto.d.ts +8 -31
  9. package/dist/asymmetric-crypto.d.ts.map +1 -1
  10. package/dist/asymmetric-crypto.js +30 -7
  11. package/dist/asymmetric-crypto.js.map +1 -0
  12. package/dist/asymmetric-crypto.mjs +28 -2
  13. package/dist/asymmetric-crypto.mjs.map +1 -0
  14. package/dist/constants.d.mts +3 -10
  15. package/dist/constants.d.mts.map +1 -1
  16. package/dist/constants.d.ts +3 -10
  17. package/dist/constants.d.ts.map +1 -1
  18. package/dist/constants.js +3 -17
  19. package/dist/constants.js.map +1 -1
  20. package/dist/constants.mjs +3 -10
  21. package/dist/constants.mjs.map +1 -1
  22. package/dist/core-Bj26rNdA.js +227 -0
  23. package/dist/core-Bj26rNdA.js.map +1 -0
  24. package/dist/core-pEGygy6S.mjs +173 -0
  25. package/dist/core-pEGygy6S.mjs.map +1 -0
  26. package/dist/derive-key.d.mts +1 -74
  27. package/dist/derive-key.d.mts.map +1 -1
  28. package/dist/derive-key.d.ts +1 -74
  29. package/dist/derive-key.d.ts.map +1 -1
  30. package/dist/derive-key.js +3 -11
  31. package/dist/derive-key.mjs +2 -2
  32. package/dist/derive-password.d.mts +22 -0
  33. package/dist/derive-password.d.mts.map +1 -0
  34. package/dist/derive-password.d.ts +22 -0
  35. package/dist/derive-password.d.ts.map +1 -0
  36. package/dist/derive-password.js +5 -0
  37. package/dist/derive-password.mjs +3 -0
  38. package/dist/deriveKeysFromKey-C4McqO6_.js +47 -0
  39. package/dist/deriveKeysFromKey-C4McqO6_.js.map +1 -0
  40. package/dist/deriveKeysFromKey-DPU_h7wr.mjs +35 -0
  41. package/dist/deriveKeysFromKey-DPU_h7wr.mjs.map +1 -0
  42. package/dist/{deriveKeysFromPassword-BYaiSGKL.js → deriveKeysFromPassword-C7xAGGsh.js} +5 -172
  43. package/dist/deriveKeysFromPassword-C7xAGGsh.js.map +1 -0
  44. package/dist/{deriveKeysFromPassword-XIwzErlL.mjs → deriveKeysFromPassword-DXgSvTNC.mjs} +6 -125
  45. package/dist/deriveKeysFromPassword-DXgSvTNC.mjs.map +1 -0
  46. package/dist/email-crypto.d.mts +24 -46
  47. package/dist/email-crypto.d.mts.map +1 -1
  48. package/dist/email-crypto.d.ts +24 -46
  49. package/dist/email-crypto.d.ts.map +1 -1
  50. package/dist/email-crypto.js +121 -12
  51. package/dist/email-crypto.js.map +1 -0
  52. package/dist/email-crypto.mjs +115 -2
  53. package/dist/email-crypto.mjs.map +1 -0
  54. package/dist/email-search.d.mts.map +1 -1
  55. package/dist/email-search.d.ts.map +1 -1
  56. package/dist/email-search.js +25 -597
  57. package/dist/email-search.mjs +2 -573
  58. package/dist/{emailEncryptionKey-B9xHw1h_.mjs → emailEncryptionKey-BtSPYd9M.mjs} +22 -45
  59. package/dist/emailEncryptionKey-BtSPYd9M.mjs.map +1 -0
  60. package/dist/{emailEncryptionKey-CQNe5W_T.js → emailEncryptionKey-C4X1Bwy4.js} +22 -45
  61. package/dist/emailEncryptionKey-C4X1Bwy4.js.map +1 -0
  62. package/dist/{genID-3Er5IowC.mjs → genID-D08K7JPr.mjs} +4 -40
  63. package/dist/genID-D08K7JPr.mjs.map +1 -0
  64. package/dist/{genID-YJSl3YhL.js → genID-cWOPmspk.js} +2 -50
  65. package/dist/genID-cWOPmspk.js.map +1 -0
  66. package/dist/hash.d.mts +24 -36
  67. package/dist/hash.d.mts.map +1 -1
  68. package/dist/hash.d.ts +24 -36
  69. package/dist/hash.d.ts.map +1 -1
  70. package/dist/hash.js +88 -10
  71. package/dist/hash.js.map +1 -0
  72. package/dist/hash.mjs +82 -2
  73. package/dist/hash.mjs.map +1 -0
  74. package/dist/index.d.mts +9 -8
  75. package/dist/index.d.mts.map +1 -1
  76. package/dist/index.d.ts +9 -8
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +56 -79
  79. package/dist/index.mjs +13 -11
  80. package/dist/keystore-crypto.d.mts +6 -6
  81. package/dist/keystore-crypto.d.mts.map +1 -1
  82. package/dist/keystore-crypto.d.ts +6 -6
  83. package/dist/keystore-crypto.d.ts.map +1 -1
  84. package/dist/keystore-crypto.js +1 -1
  85. package/dist/keystore-crypto.mjs +1 -1
  86. package/dist/post-quantum-crypto.js +49 -4
  87. package/dist/post-quantum-crypto.js.map +1 -0
  88. package/dist/post-quantum-crypto.mjs +46 -2
  89. package/dist/post-quantum-crypto.mjs.map +1 -0
  90. package/dist/search-B9YM3XAA.mjs +587 -0
  91. package/dist/search-B9YM3XAA.mjs.map +1 -0
  92. package/dist/search-DUTm4-rN.js +731 -0
  93. package/dist/search-DUTm4-rN.js.map +1 -0
  94. package/dist/symmetric-crypto.d.mts +11 -40
  95. package/dist/symmetric-crypto.d.mts.map +1 -1
  96. package/dist/symmetric-crypto.d.ts +11 -40
  97. package/dist/symmetric-crypto.d.ts.map +1 -1
  98. package/dist/symmetric-crypto.js +2 -6
  99. package/dist/symmetric-crypto.mjs +2 -2
  100. package/dist/types.d.mts +13 -40
  101. package/dist/types.d.mts.map +1 -1
  102. package/dist/types.d.ts +13 -40
  103. package/dist/types.d.ts.map +1 -1
  104. package/dist/types.js.map +1 -1
  105. package/dist/types.mjs.map +1 -1
  106. package/dist/utils.d.mts +1 -19
  107. package/dist/utils.d.mts.map +1 -1
  108. package/dist/utils.d.ts +1 -19
  109. package/dist/utils.d.ts.map +1 -1
  110. package/dist/utils.js +1 -3
  111. package/dist/utils.mjs +2 -2
  112. package/dist/xwing-CQmQX6hn.mjs +16 -0
  113. package/dist/xwing-CQmQX6hn.mjs.map +1 -0
  114. package/dist/xwing-iRWVRtNE.js +34 -0
  115. package/dist/xwing-iRWVRtNE.js.map +1 -0
  116. package/package.json +4 -3
  117. package/dist/aes-DCb9dJqb.mjs +0 -161
  118. package/dist/aes-DCb9dJqb.mjs.map +0 -1
  119. package/dist/aes-DQo1MyCz.js +0 -203
  120. package/dist/aes-DQo1MyCz.js.map +0 -1
  121. package/dist/deriveKeysFromPassword-BYaiSGKL.js.map +0 -1
  122. package/dist/deriveKeysFromPassword-XIwzErlL.mjs.map +0 -1
  123. package/dist/email-search.js.map +0 -1
  124. package/dist/email-search.mjs.map +0 -1
  125. package/dist/emailEncryptionKey-B9xHw1h_.mjs.map +0 -1
  126. package/dist/emailEncryptionKey-CQNe5W_T.js.map +0 -1
  127. package/dist/emailKeys-C0KhtfNP.js +0 -572
  128. package/dist/emailKeys-C0KhtfNP.js.map +0 -1
  129. package/dist/emailKeys-D4lp9NRv.mjs +0 -488
  130. package/dist/emailKeys-D4lp9NRv.mjs.map +0 -1
  131. package/dist/genID-3Er5IowC.mjs.map +0 -1
  132. package/dist/genID-YJSl3YhL.js.map +0 -1
  133. package/dist/keys-BfcaiAOv.mjs +0 -90
  134. package/dist/keys-BfcaiAOv.mjs.map +0 -1
  135. package/dist/keys-CinT7kEY.js +0 -125
  136. package/dist/keys-CinT7kEY.js.map +0 -1
  137. package/dist/kyber768-SXnIo-Nw.mjs +0 -47
  138. package/dist/kyber768-SXnIo-Nw.mjs.map +0 -1
  139. package/dist/kyber768-WUVc2fIR.js +0 -65
  140. package/dist/kyber768-WUVc2fIR.js.map +0 -1
  141. package/dist/mac-BMb1F0dN.js +0 -170
  142. package/dist/mac-BMb1F0dN.js.map +0 -1
  143. package/dist/mac-ZpRlx8Fs.mjs +0 -116
  144. package/dist/mac-ZpRlx8Fs.mjs.map +0 -1
@@ -0,0 +1,34 @@
1
+ const require_chunk = require('./chunk-EbLFQX5m.js');
2
+ let _noble_post_quantum_hybrid_js = require("@noble/post-quantum/hybrid.js");
3
+
4
+ //#region src/hybrid-crypto/xwing.ts
5
+ function genHybridKeys(seed) {
6
+ return _noble_post_quantum_hybrid_js.ml_kem768_x25519.keygen(seed);
7
+ }
8
+ function encapsulateHybrid(publicKey) {
9
+ return _noble_post_quantum_hybrid_js.ml_kem768_x25519.encapsulate(publicKey);
10
+ }
11
+ function decapsulateHybrid(cipherText, secretKey) {
12
+ return _noble_post_quantum_hybrid_js.ml_kem768_x25519.decapsulate(cipherText, secretKey);
13
+ }
14
+
15
+ //#endregion
16
+ Object.defineProperty(exports, 'decapsulateHybrid', {
17
+ enumerable: true,
18
+ get: function () {
19
+ return decapsulateHybrid;
20
+ }
21
+ });
22
+ Object.defineProperty(exports, 'encapsulateHybrid', {
23
+ enumerable: true,
24
+ get: function () {
25
+ return encapsulateHybrid;
26
+ }
27
+ });
28
+ Object.defineProperty(exports, 'genHybridKeys', {
29
+ enumerable: true,
30
+ get: function () {
31
+ return genHybridKeys;
32
+ }
33
+ });
34
+ //# sourceMappingURL=xwing-iRWVRtNE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xwing-iRWVRtNE.js","names":["hybridCipher"],"sources":["../src/hybrid-crypto/xwing.ts"],"sourcesContent":["import { ml_kem768_x25519 as hybridCipher } from '@noble/post-quantum/hybrid.js';\nimport { HybridKeyPair } from '../types';\n\nexport function genHybridKeys(seed?: Uint8Array): HybridKeyPair {\n return hybridCipher.keygen(seed);\n}\n\nexport function encapsulateHybrid(publicKey: Uint8Array): { cipherText: Uint8Array; sharedSecret: Uint8Array } {\n return hybridCipher.encapsulate(publicKey);\n}\n\nexport function decapsulateHybrid(cipherText: Uint8Array, secretKey: Uint8Array): Uint8Array {\n return hybridCipher.decapsulate(cipherText, secretKey);\n}\n"],"mappings":";;;;AAGA,SAAgB,cAAc,MAAkC;AAC9D,QAAOA,+CAAa,OAAO,KAAK;;AAGlC,SAAgB,kBAAkB,WAA6E;AAC7G,QAAOA,+CAAa,YAAY,UAAU;;AAG5C,SAAgB,kBAAkB,YAAwB,WAAmC;AAC3F,QAAOA,+CAAa,YAAY,YAAY,UAAU"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "internxt-crypto",
3
- "version": "0.0.14",
3
+ "version": "1.0.1",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "module": "dist/index.js",
@@ -26,7 +26,7 @@
26
26
  "@vitest/browser-playwright": "^4.0.10",
27
27
  "@vitest/coverage-istanbul": "^4.0.10",
28
28
  "@vitest/coverage-v8": "^4.0.18",
29
- "eslint": "^10.0.0",
29
+ "eslint": "^10.0.2",
30
30
  "knip": "^5.84.0",
31
31
  "lint-staged": "^16.1.4",
32
32
  "playwright": "^1.54.1",
@@ -37,6 +37,7 @@
37
37
  },
38
38
  "dependencies": {
39
39
  "@noble/ciphers": "^2.1.1",
40
+ "@noble/curves": "^2.0.1",
40
41
  "@noble/hashes": "^2.0.1",
41
42
  "@noble/post-quantum": "^0.5.2",
42
43
  "@scure/bip39": "^2.0.1",
@@ -53,7 +54,7 @@
53
54
  "require": "./dist/index.js"
54
55
  },
55
56
  "./*": {
56
- "types": "./dist/*.d.ts",
57
+ "types": "./dist/*.d.mts",
57
58
  "import": "./dist/*.mjs",
58
59
  "require": "./dist/*.js"
59
60
  }
@@ -1,161 +0,0 @@
1
- import { AES_ALGORITHM, AES_KEY_BIT_LENGTH, AUX_BYTE_LEN, IV_LEN_BYTES, KEY_FORMAT } from "./constants.mjs";
2
- import { n as getBytesFromData } from "./mac-ZpRlx8Fs.mjs";
3
- import { concatBytes } from "@noble/hashes/utils.js";
4
- import { randomBytes } from "@noble/post-quantum/utils.js";
5
- import { gcm } from "@noble/ciphers/webcrypto.js";
6
-
7
- //#region src/symmetric-crypto/keys.ts
8
- /**
9
- * Converts Uint8Array into CryptoKey
10
- *
11
- * @param keyData - The Uint8Array representation of the symmetric key
12
- * @returns The resulting symmetric CryptoKey.
13
- */
14
- async function importSymmetricCryptoKey(keyData) {
15
- return crypto.subtle.importKey(KEY_FORMAT, new Uint8Array(keyData), {
16
- name: AES_ALGORITHM,
17
- length: AES_KEY_BIT_LENGTH
18
- }, true, ["encrypt", "decrypt"]);
19
- }
20
- /**
21
- * Converts CryptoKey into Uint8Array
22
- *
23
- * @param key - The symmetric CryptoKey
24
- * @returns The resulting Uint8Array.
25
- */
26
- async function exportSymmetricCryptoKey(key) {
27
- try {
28
- const rawKey = await crypto.subtle.exportKey(KEY_FORMAT, key);
29
- return new Uint8Array(rawKey);
30
- } catch (error) {
31
- throw new Error("Failed to export symmetric CryptoKey", { cause: error });
32
- }
33
- }
34
- /**
35
- * Generates symmetric CryptoKey
36
- *
37
- * @returns The generated CryptoKey.
38
- */
39
- async function genSymmetricCryptoKey() {
40
- return crypto.subtle.generateKey({
41
- name: AES_ALGORITHM,
42
- length: AES_KEY_BIT_LENGTH
43
- }, true, ["encrypt", "decrypt"]);
44
- }
45
- /**
46
- * Generates symmetric key as Uint8Array
47
- *
48
- * @returns The generated Uint8Array.
49
- */
50
- function genSymmetricKey() {
51
- return randomBytes(AES_KEY_BIT_LENGTH / 8);
52
- }
53
- /**
54
- * Derives CryptoKey from the given key material
55
- *
56
- * @returns The derived CryptoKey.
57
- */
58
- async function deriveSymmetricCryptoKey(keyMaterial) {
59
- try {
60
- return importSymmetricCryptoKey(getBytesFromData(AES_KEY_BIT_LENGTH / 8, keyMaterial));
61
- } catch (error) {
62
- throw new Error("Failed to derive CryptoKey from the given key material", { cause: error });
63
- }
64
- }
65
-
66
- //#endregion
67
- //#region src/symmetric-crypto/core.ts
68
- /**
69
- * Creates an initialization vector (IV) using RGB-based construction (8.2.2 NIST Special Publication 800-38D)
70
- * Constructs a 128-bits IV from 2 fileds: the random field (at least 96 bits) and the free field (32 bits).
71
- * If free filed is empty, then the entier 128-bit IV is sampled randomly.
72
- *
73
- * @param freeFiled - The string with an unrestricted content. Can be a device identifier, etc.
74
- * @returns The resulting 128-bits initialization vector.
75
- */
76
- function createNISTbasedIV(freeField) {
77
- try {
78
- if (!freeField) return randomBytes(IV_LEN_BYTES);
79
- const iv = new Uint8Array(16);
80
- const randFiled = randomBytes(12);
81
- iv.set(randFiled, 0);
82
- const freeFiledFixedLength = getBytesFromData(4, freeField);
83
- iv.set(freeFiledFixedLength, 12);
84
- return iv;
85
- } catch (error) {
86
- throw new Error("Failed to create IV", { cause: error });
87
- }
88
- }
89
- /**
90
- * Hashes aux string to make it fixed-length
91
- *
92
- * @param aux - The auxilay string of arbitrary length
93
- * @returns The resulting fixed-length auxilary string.
94
- */
95
- async function makeAuxFixedLength(aux) {
96
- return getBytesFromData(AUX_BYTE_LEN, aux);
97
- }
98
- /**
99
- * Symmetrically encrypts message
100
- *
101
- * @param message - The message to encrypt
102
- * @param encryptionKey - The encryption key
103
- * @param iv - The initialization vector
104
- * @param additionalData - The auxilary data
105
- * @returns The resulting ciphertext
106
- */
107
- async function encryptMessage(message, encryptionKey, iv, additionalData) {
108
- return gcm(encryptionKey, iv, additionalData).encrypt(message);
109
- }
110
- /**
111
- * Symmetrically decrypts message
112
- *
113
- * @param ciphertext - The encrypted message
114
- * @param ciphertext - The initialization vector
115
- * @param encryptionKey - The encryption key
116
- * @param additionalData - The auxilary data
117
- * @returns The resulting decrypted message
118
- */
119
- async function decryptMessage(ciphertext, iv, encryptionKey, additionalData) {
120
- return gcm(encryptionKey, iv, additionalData).decrypt(ciphertext);
121
- }
122
-
123
- //#endregion
124
- //#region src/symmetric-crypto/aes.ts
125
- /**
126
- * Symmetrically encrypts the message
127
- *
128
- * @param encryptionKey - The symmetric key used for message encryption
129
- * @param message - The message to encrypt
130
- * @param freeField - The context of the message (required for IV generation)
131
- * @param aux - The auxilary string
132
- * @returns The resulting ciphertext.
133
- */
134
- async function encryptSymmetrically(encryptionKey, message, aux, freeField) {
135
- try {
136
- const iv = createNISTbasedIV(freeField);
137
- return concatBytes(await encryptMessage(message, encryptionKey, iv, await makeAuxFixedLength(aux)), iv);
138
- } catch (error) {
139
- throw new Error("Failed to encrypt symmetrically", { cause: error });
140
- }
141
- }
142
- /**
143
- * Decryps symmetrically encrypted message
144
- *
145
- * @param encryptionKey - The symmetric key used for message encryption
146
- * @param encryptedMessage - The ciphertext
147
- * @param aux - The auxilary string
148
- * @returns The resulting ciphertext.
149
- */
150
- async function decryptSymmetrically(encryptionKey, encryptedMessage, aux) {
151
- try {
152
- const additionalData = await makeAuxFixedLength(aux);
153
- return await decryptMessage(encryptedMessage.slice(0, encryptedMessage.length - IV_LEN_BYTES), encryptedMessage.slice(encryptedMessage.length - IV_LEN_BYTES), encryptionKey, additionalData);
154
- } catch (error) {
155
- throw new Error("Failed to decrypt symmetrically", { cause: error });
156
- }
157
- }
158
-
159
- //#endregion
160
- export { genSymmetricCryptoKey as a, exportSymmetricCryptoKey as i, encryptSymmetrically as n, genSymmetricKey as o, deriveSymmetricCryptoKey as r, importSymmetricCryptoKey as s, decryptSymmetrically as t };
161
- //# sourceMappingURL=aes-DCb9dJqb.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"aes-DCb9dJqb.mjs","names":["aeadCipher"],"sources":["../src/symmetric-crypto/keys.ts","../src/symmetric-crypto/core.ts","../src/symmetric-crypto/aes.ts"],"sourcesContent":["import { AES_ALGORITHM, AES_KEY_BIT_LENGTH, KEY_FORMAT } from '../constants';\nimport { randomBytes } from '@noble/post-quantum/utils.js';\nimport { getBytesFromData } from '../hash';\n\n/**\n * Converts Uint8Array into CryptoKey\n *\n * @param keyData - The Uint8Array representation of the symmetric key\n * @returns The resulting symmetric CryptoKey.\n */\nexport async function importSymmetricCryptoKey(keyData: Uint8Array | ArrayBuffer): Promise<CryptoKey> {\n return crypto.subtle.importKey(\n KEY_FORMAT,\n new Uint8Array(keyData),\n {\n name: AES_ALGORITHM,\n length: AES_KEY_BIT_LENGTH,\n },\n true,\n ['encrypt', 'decrypt'],\n );\n}\n\n/**\n * Converts CryptoKey into Uint8Array\n *\n * @param key - The symmetric CryptoKey\n * @returns The resulting Uint8Array.\n */\nexport async function exportSymmetricCryptoKey(key: CryptoKey): Promise<Uint8Array> {\n try {\n const rawKey = await crypto.subtle.exportKey(KEY_FORMAT, key);\n return new Uint8Array(rawKey);\n } catch (error) {\n throw new Error('Failed to export symmetric CryptoKey', { cause: error });\n }\n}\n\n/**\n * Generates symmetric CryptoKey\n *\n * @returns The generated CryptoKey.\n */\nexport async function genSymmetricCryptoKey(): Promise<CryptoKey> {\n return crypto.subtle.generateKey(\n {\n name: AES_ALGORITHM,\n length: AES_KEY_BIT_LENGTH,\n },\n true,\n ['encrypt', 'decrypt'],\n );\n}\n\n/**\n * Generates symmetric key as Uint8Array\n *\n * @returns The generated Uint8Array.\n */\nexport function genSymmetricKey(): Uint8Array {\n return randomBytes(AES_KEY_BIT_LENGTH / 8);\n}\n\n/**\n * Derives CryptoKey from the given key material\n *\n * @returns The derived CryptoKey.\n */\nexport async function deriveSymmetricCryptoKey(keyMaterial: Uint8Array): Promise<CryptoKey> {\n try {\n const hashBuffer = getBytesFromData(AES_KEY_BIT_LENGTH / 8, keyMaterial);\n return importSymmetricCryptoKey(hashBuffer);\n } catch (error) {\n throw new Error('Failed to derive CryptoKey from the given key material', { cause: error });\n }\n}\n","import { gcm as aeadCipher } from '@noble/ciphers/webcrypto.js';\nimport { randomBytes } from '@noble/post-quantum/utils.js';\nimport { getBytesFromData } from '../hash';\nimport { AUX_BYTE_LEN, IV_LEN_BYTES } from '../constants';\n\n/**\n * Creates an initialization vector (IV) using RGB-based construction (8.2.2 NIST Special Publication 800-38D)\n * Constructs a 128-bits IV from 2 fileds: the random field (at least 96 bits) and the free field (32 bits).\n * If free filed is empty, then the entier 128-bit IV is sampled randomly.\n *\n * @param freeFiled - The string with an unrestricted content. Can be a device identifier, etc.\n * @returns The resulting 128-bits initialization vector.\n */\nexport function createNISTbasedIV(freeField?: Uint8Array): Uint8Array {\n try {\n if (!freeField) {\n return randomBytes(IV_LEN_BYTES);\n }\n\n const iv = new Uint8Array(16);\n\n const randFiled = randomBytes(12);\n iv.set(randFiled, 0);\n\n const freeFiledFixedLength = getBytesFromData(4, freeField);\n iv.set(freeFiledFixedLength, 12);\n\n return iv;\n } catch (error) {\n throw new Error('Failed to create IV', { cause: error });\n }\n}\n\n/**\n * Hashes aux string to make it fixed-length\n *\n * @param aux - The auxilay string of arbitrary length\n * @returns The resulting fixed-length auxilary string.\n */\nexport async function makeAuxFixedLength(aux: Uint8Array): Promise<Uint8Array> {\n return getBytesFromData(AUX_BYTE_LEN, aux);\n}\n\n/**\n * Symmetrically encrypts message\n *\n * @param message - The message to encrypt\n * @param encryptionKey - The encryption key\n * @param iv - The initialization vector\n * @param additionalData - The auxilary data\n * @returns The resulting ciphertext\n */\nexport async function encryptMessage(\n message: Uint8Array,\n encryptionKey: Uint8Array,\n iv: Uint8Array,\n additionalData: Uint8Array,\n): Promise<Uint8Array> {\n return aeadCipher(encryptionKey, iv, additionalData).encrypt(message);\n}\n\n/**\n * Symmetrically decrypts message\n *\n * @param ciphertext - The encrypted message\n * @param ciphertext - The initialization vector\n * @param encryptionKey - The encryption key\n * @param additionalData - The auxilary data\n * @returns The resulting decrypted message\n */\nexport async function decryptMessage(\n ciphertext: Uint8Array,\n iv: Uint8Array,\n encryptionKey: Uint8Array,\n additionalData: Uint8Array,\n): Promise<Uint8Array> {\n return aeadCipher(encryptionKey, iv, additionalData).decrypt(ciphertext);\n}\n","import { createNISTbasedIV, makeAuxFixedLength, encryptMessage, decryptMessage } from './core';\nimport { concatBytes } from '@noble/hashes/utils.js';\nimport { IV_LEN_BYTES } from '../constants';\n\n/**\n * Symmetrically encrypts the message\n *\n * @param encryptionKey - The symmetric key used for message encryption\n * @param message - The message to encrypt\n * @param freeField - The context of the message (required for IV generation)\n * @param aux - The auxilary string\n * @returns The resulting ciphertext.\n */\nexport async function encryptSymmetrically(\n encryptionKey: Uint8Array,\n message: Uint8Array,\n aux: Uint8Array,\n freeField?: Uint8Array,\n): Promise<Uint8Array> {\n try {\n const iv = createNISTbasedIV(freeField);\n const additionalData = await makeAuxFixedLength(aux);\n const ciphertext = await encryptMessage(message, encryptionKey, iv, additionalData);\n return concatBytes(ciphertext, iv);\n } catch (error) {\n throw new Error('Failed to encrypt symmetrically', { cause: error });\n }\n}\n\n/**\n * Decryps symmetrically encrypted message\n *\n * @param encryptionKey - The symmetric key used for message encryption\n * @param encryptedMessage - The ciphertext\n * @param aux - The auxilary string\n * @returns The resulting ciphertext.\n */\nexport async function decryptSymmetrically(\n encryptionKey: Uint8Array,\n encryptedMessage: Uint8Array,\n aux: Uint8Array,\n): Promise<Uint8Array> {\n try {\n const additionalData = await makeAuxFixedLength(aux);\n const ciphertext = encryptedMessage.slice(0, encryptedMessage.length - IV_LEN_BYTES);\n const iv = encryptedMessage.slice(encryptedMessage.length - IV_LEN_BYTES);\n const result = await decryptMessage(ciphertext, iv, encryptionKey, additionalData);\n return result;\n } catch (error) {\n throw new Error('Failed to decrypt symmetrically', { cause: error });\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAUA,eAAsB,yBAAyB,SAAuD;AACpG,QAAO,OAAO,OAAO,UACnB,YACA,IAAI,WAAW,QAAQ,EACvB;EACE,MAAM;EACN,QAAQ;EACT,EACD,MACA,CAAC,WAAW,UAAU,CACvB;;;;;;;;AASH,eAAsB,yBAAyB,KAAqC;AAClF,KAAI;EACF,MAAM,SAAS,MAAM,OAAO,OAAO,UAAU,YAAY,IAAI;AAC7D,SAAO,IAAI,WAAW,OAAO;UACtB,OAAO;AACd,QAAM,IAAI,MAAM,wCAAwC,EAAE,OAAO,OAAO,CAAC;;;;;;;;AAS7E,eAAsB,wBAA4C;AAChE,QAAO,OAAO,OAAO,YACnB;EACE,MAAM;EACN,QAAQ;EACT,EACD,MACA,CAAC,WAAW,UAAU,CACvB;;;;;;;AAQH,SAAgB,kBAA8B;AAC5C,QAAO,YAAY,qBAAqB,EAAE;;;;;;;AAQ5C,eAAsB,yBAAyB,aAA6C;AAC1F,KAAI;AAEF,SAAO,yBADY,iBAAiB,qBAAqB,GAAG,YAAY,CAC7B;UACpC,OAAO;AACd,QAAM,IAAI,MAAM,0DAA0D,EAAE,OAAO,OAAO,CAAC;;;;;;;;;;;;;;AC5D/F,SAAgB,kBAAkB,WAAoC;AACpE,KAAI;AACF,MAAI,CAAC,UACH,QAAO,YAAY,aAAa;EAGlC,MAAM,KAAK,IAAI,WAAW,GAAG;EAE7B,MAAM,YAAY,YAAY,GAAG;AACjC,KAAG,IAAI,WAAW,EAAE;EAEpB,MAAM,uBAAuB,iBAAiB,GAAG,UAAU;AAC3D,KAAG,IAAI,sBAAsB,GAAG;AAEhC,SAAO;UACA,OAAO;AACd,QAAM,IAAI,MAAM,uBAAuB,EAAE,OAAO,OAAO,CAAC;;;;;;;;;AAU5D,eAAsB,mBAAmB,KAAsC;AAC7E,QAAO,iBAAiB,cAAc,IAAI;;;;;;;;;;;AAY5C,eAAsB,eACpB,SACA,eACA,IACA,gBACqB;AACrB,QAAOA,IAAW,eAAe,IAAI,eAAe,CAAC,QAAQ,QAAQ;;;;;;;;;;;AAYvE,eAAsB,eACpB,YACA,IACA,eACA,gBACqB;AACrB,QAAOA,IAAW,eAAe,IAAI,eAAe,CAAC,QAAQ,WAAW;;;;;;;;;;;;;;AC/D1E,eAAsB,qBACpB,eACA,SACA,KACA,WACqB;AACrB,KAAI;EACF,MAAM,KAAK,kBAAkB,UAAU;AAGvC,SAAO,YADY,MAAM,eAAe,SAAS,eAAe,IADzC,MAAM,mBAAmB,IAAI,CAC+B,EACpD,GAAG;UAC3B,OAAO;AACd,QAAM,IAAI,MAAM,mCAAmC,EAAE,OAAO,OAAO,CAAC;;;;;;;;;;;AAYxE,eAAsB,qBACpB,eACA,kBACA,KACqB;AACrB,KAAI;EACF,MAAM,iBAAiB,MAAM,mBAAmB,IAAI;AAIpD,SADe,MAAM,eAFF,iBAAiB,MAAM,GAAG,iBAAiB,SAAS,aAAa,EACzE,iBAAiB,MAAM,iBAAiB,SAAS,aAAa,EACrB,eAAe,eAAe;UAE3E,OAAO;AACd,QAAM,IAAI,MAAM,mCAAmC,EAAE,OAAO,OAAO,CAAC"}
@@ -1,203 +0,0 @@
1
- const require_chunk = require('./chunk-EbLFQX5m.js');
2
- const require_constants = require('./constants.js');
3
- const require_mac = require('./mac-BMb1F0dN.js');
4
- let _noble_hashes_utils_js = require("@noble/hashes/utils.js");
5
- let _noble_post_quantum_utils_js = require("@noble/post-quantum/utils.js");
6
- let _noble_ciphers_webcrypto_js = require("@noble/ciphers/webcrypto.js");
7
-
8
- //#region src/symmetric-crypto/keys.ts
9
- /**
10
- * Converts Uint8Array into CryptoKey
11
- *
12
- * @param keyData - The Uint8Array representation of the symmetric key
13
- * @returns The resulting symmetric CryptoKey.
14
- */
15
- async function importSymmetricCryptoKey(keyData) {
16
- return crypto.subtle.importKey(require_constants.KEY_FORMAT, new Uint8Array(keyData), {
17
- name: require_constants.AES_ALGORITHM,
18
- length: require_constants.AES_KEY_BIT_LENGTH
19
- }, true, ["encrypt", "decrypt"]);
20
- }
21
- /**
22
- * Converts CryptoKey into Uint8Array
23
- *
24
- * @param key - The symmetric CryptoKey
25
- * @returns The resulting Uint8Array.
26
- */
27
- async function exportSymmetricCryptoKey(key) {
28
- try {
29
- const rawKey = await crypto.subtle.exportKey(require_constants.KEY_FORMAT, key);
30
- return new Uint8Array(rawKey);
31
- } catch (error) {
32
- throw new Error("Failed to export symmetric CryptoKey", { cause: error });
33
- }
34
- }
35
- /**
36
- * Generates symmetric CryptoKey
37
- *
38
- * @returns The generated CryptoKey.
39
- */
40
- async function genSymmetricCryptoKey() {
41
- return crypto.subtle.generateKey({
42
- name: require_constants.AES_ALGORITHM,
43
- length: require_constants.AES_KEY_BIT_LENGTH
44
- }, true, ["encrypt", "decrypt"]);
45
- }
46
- /**
47
- * Generates symmetric key as Uint8Array
48
- *
49
- * @returns The generated Uint8Array.
50
- */
51
- function genSymmetricKey() {
52
- return (0, _noble_post_quantum_utils_js.randomBytes)(require_constants.AES_KEY_BIT_LENGTH / 8);
53
- }
54
- /**
55
- * Derives CryptoKey from the given key material
56
- *
57
- * @returns The derived CryptoKey.
58
- */
59
- async function deriveSymmetricCryptoKey(keyMaterial) {
60
- try {
61
- return importSymmetricCryptoKey(require_mac.getBytesFromData(require_constants.AES_KEY_BIT_LENGTH / 8, keyMaterial));
62
- } catch (error) {
63
- throw new Error("Failed to derive CryptoKey from the given key material", { cause: error });
64
- }
65
- }
66
-
67
- //#endregion
68
- //#region src/symmetric-crypto/core.ts
69
- /**
70
- * Creates an initialization vector (IV) using RGB-based construction (8.2.2 NIST Special Publication 800-38D)
71
- * Constructs a 128-bits IV from 2 fileds: the random field (at least 96 bits) and the free field (32 bits).
72
- * If free filed is empty, then the entier 128-bit IV is sampled randomly.
73
- *
74
- * @param freeFiled - The string with an unrestricted content. Can be a device identifier, etc.
75
- * @returns The resulting 128-bits initialization vector.
76
- */
77
- function createNISTbasedIV(freeField) {
78
- try {
79
- if (!freeField) return (0, _noble_post_quantum_utils_js.randomBytes)(require_constants.IV_LEN_BYTES);
80
- const iv = new Uint8Array(16);
81
- const randFiled = (0, _noble_post_quantum_utils_js.randomBytes)(12);
82
- iv.set(randFiled, 0);
83
- const freeFiledFixedLength = require_mac.getBytesFromData(4, freeField);
84
- iv.set(freeFiledFixedLength, 12);
85
- return iv;
86
- } catch (error) {
87
- throw new Error("Failed to create IV", { cause: error });
88
- }
89
- }
90
- /**
91
- * Hashes aux string to make it fixed-length
92
- *
93
- * @param aux - The auxilay string of arbitrary length
94
- * @returns The resulting fixed-length auxilary string.
95
- */
96
- async function makeAuxFixedLength(aux) {
97
- return require_mac.getBytesFromData(require_constants.AUX_BYTE_LEN, aux);
98
- }
99
- /**
100
- * Symmetrically encrypts message
101
- *
102
- * @param message - The message to encrypt
103
- * @param encryptionKey - The encryption key
104
- * @param iv - The initialization vector
105
- * @param additionalData - The auxilary data
106
- * @returns The resulting ciphertext
107
- */
108
- async function encryptMessage(message, encryptionKey, iv, additionalData) {
109
- return (0, _noble_ciphers_webcrypto_js.gcm)(encryptionKey, iv, additionalData).encrypt(message);
110
- }
111
- /**
112
- * Symmetrically decrypts message
113
- *
114
- * @param ciphertext - The encrypted message
115
- * @param ciphertext - The initialization vector
116
- * @param encryptionKey - The encryption key
117
- * @param additionalData - The auxilary data
118
- * @returns The resulting decrypted message
119
- */
120
- async function decryptMessage(ciphertext, iv, encryptionKey, additionalData) {
121
- return (0, _noble_ciphers_webcrypto_js.gcm)(encryptionKey, iv, additionalData).decrypt(ciphertext);
122
- }
123
-
124
- //#endregion
125
- //#region src/symmetric-crypto/aes.ts
126
- /**
127
- * Symmetrically encrypts the message
128
- *
129
- * @param encryptionKey - The symmetric key used for message encryption
130
- * @param message - The message to encrypt
131
- * @param freeField - The context of the message (required for IV generation)
132
- * @param aux - The auxilary string
133
- * @returns The resulting ciphertext.
134
- */
135
- async function encryptSymmetrically(encryptionKey, message, aux, freeField) {
136
- try {
137
- const iv = createNISTbasedIV(freeField);
138
- return (0, _noble_hashes_utils_js.concatBytes)(await encryptMessage(message, encryptionKey, iv, await makeAuxFixedLength(aux)), iv);
139
- } catch (error) {
140
- throw new Error("Failed to encrypt symmetrically", { cause: error });
141
- }
142
- }
143
- /**
144
- * Decryps symmetrically encrypted message
145
- *
146
- * @param encryptionKey - The symmetric key used for message encryption
147
- * @param encryptedMessage - The ciphertext
148
- * @param aux - The auxilary string
149
- * @returns The resulting ciphertext.
150
- */
151
- async function decryptSymmetrically(encryptionKey, encryptedMessage, aux) {
152
- try {
153
- const additionalData = await makeAuxFixedLength(aux);
154
- return await decryptMessage(encryptedMessage.slice(0, encryptedMessage.length - require_constants.IV_LEN_BYTES), encryptedMessage.slice(encryptedMessage.length - require_constants.IV_LEN_BYTES), encryptionKey, additionalData);
155
- } catch (error) {
156
- throw new Error("Failed to decrypt symmetrically", { cause: error });
157
- }
158
- }
159
-
160
- //#endregion
161
- Object.defineProperty(exports, 'decryptSymmetrically', {
162
- enumerable: true,
163
- get: function () {
164
- return decryptSymmetrically;
165
- }
166
- });
167
- Object.defineProperty(exports, 'deriveSymmetricCryptoKey', {
168
- enumerable: true,
169
- get: function () {
170
- return deriveSymmetricCryptoKey;
171
- }
172
- });
173
- Object.defineProperty(exports, 'encryptSymmetrically', {
174
- enumerable: true,
175
- get: function () {
176
- return encryptSymmetrically;
177
- }
178
- });
179
- Object.defineProperty(exports, 'exportSymmetricCryptoKey', {
180
- enumerable: true,
181
- get: function () {
182
- return exportSymmetricCryptoKey;
183
- }
184
- });
185
- Object.defineProperty(exports, 'genSymmetricCryptoKey', {
186
- enumerable: true,
187
- get: function () {
188
- return genSymmetricCryptoKey;
189
- }
190
- });
191
- Object.defineProperty(exports, 'genSymmetricKey', {
192
- enumerable: true,
193
- get: function () {
194
- return genSymmetricKey;
195
- }
196
- });
197
- Object.defineProperty(exports, 'importSymmetricCryptoKey', {
198
- enumerable: true,
199
- get: function () {
200
- return importSymmetricCryptoKey;
201
- }
202
- });
203
- //# sourceMappingURL=aes-DQo1MyCz.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"aes-DQo1MyCz.js","names":["KEY_FORMAT","AES_ALGORITHM","AES_KEY_BIT_LENGTH","getBytesFromData","IV_LEN_BYTES","getBytesFromData","AUX_BYTE_LEN","IV_LEN_BYTES"],"sources":["../src/symmetric-crypto/keys.ts","../src/symmetric-crypto/core.ts","../src/symmetric-crypto/aes.ts"],"sourcesContent":["import { AES_ALGORITHM, AES_KEY_BIT_LENGTH, KEY_FORMAT } from '../constants';\nimport { randomBytes } from '@noble/post-quantum/utils.js';\nimport { getBytesFromData } from '../hash';\n\n/**\n * Converts Uint8Array into CryptoKey\n *\n * @param keyData - The Uint8Array representation of the symmetric key\n * @returns The resulting symmetric CryptoKey.\n */\nexport async function importSymmetricCryptoKey(keyData: Uint8Array | ArrayBuffer): Promise<CryptoKey> {\n return crypto.subtle.importKey(\n KEY_FORMAT,\n new Uint8Array(keyData),\n {\n name: AES_ALGORITHM,\n length: AES_KEY_BIT_LENGTH,\n },\n true,\n ['encrypt', 'decrypt'],\n );\n}\n\n/**\n * Converts CryptoKey into Uint8Array\n *\n * @param key - The symmetric CryptoKey\n * @returns The resulting Uint8Array.\n */\nexport async function exportSymmetricCryptoKey(key: CryptoKey): Promise<Uint8Array> {\n try {\n const rawKey = await crypto.subtle.exportKey(KEY_FORMAT, key);\n return new Uint8Array(rawKey);\n } catch (error) {\n throw new Error('Failed to export symmetric CryptoKey', { cause: error });\n }\n}\n\n/**\n * Generates symmetric CryptoKey\n *\n * @returns The generated CryptoKey.\n */\nexport async function genSymmetricCryptoKey(): Promise<CryptoKey> {\n return crypto.subtle.generateKey(\n {\n name: AES_ALGORITHM,\n length: AES_KEY_BIT_LENGTH,\n },\n true,\n ['encrypt', 'decrypt'],\n );\n}\n\n/**\n * Generates symmetric key as Uint8Array\n *\n * @returns The generated Uint8Array.\n */\nexport function genSymmetricKey(): Uint8Array {\n return randomBytes(AES_KEY_BIT_LENGTH / 8);\n}\n\n/**\n * Derives CryptoKey from the given key material\n *\n * @returns The derived CryptoKey.\n */\nexport async function deriveSymmetricCryptoKey(keyMaterial: Uint8Array): Promise<CryptoKey> {\n try {\n const hashBuffer = getBytesFromData(AES_KEY_BIT_LENGTH / 8, keyMaterial);\n return importSymmetricCryptoKey(hashBuffer);\n } catch (error) {\n throw new Error('Failed to derive CryptoKey from the given key material', { cause: error });\n }\n}\n","import { gcm as aeadCipher } from '@noble/ciphers/webcrypto.js';\nimport { randomBytes } from '@noble/post-quantum/utils.js';\nimport { getBytesFromData } from '../hash';\nimport { AUX_BYTE_LEN, IV_LEN_BYTES } from '../constants';\n\n/**\n * Creates an initialization vector (IV) using RGB-based construction (8.2.2 NIST Special Publication 800-38D)\n * Constructs a 128-bits IV from 2 fileds: the random field (at least 96 bits) and the free field (32 bits).\n * If free filed is empty, then the entier 128-bit IV is sampled randomly.\n *\n * @param freeFiled - The string with an unrestricted content. Can be a device identifier, etc.\n * @returns The resulting 128-bits initialization vector.\n */\nexport function createNISTbasedIV(freeField?: Uint8Array): Uint8Array {\n try {\n if (!freeField) {\n return randomBytes(IV_LEN_BYTES);\n }\n\n const iv = new Uint8Array(16);\n\n const randFiled = randomBytes(12);\n iv.set(randFiled, 0);\n\n const freeFiledFixedLength = getBytesFromData(4, freeField);\n iv.set(freeFiledFixedLength, 12);\n\n return iv;\n } catch (error) {\n throw new Error('Failed to create IV', { cause: error });\n }\n}\n\n/**\n * Hashes aux string to make it fixed-length\n *\n * @param aux - The auxilay string of arbitrary length\n * @returns The resulting fixed-length auxilary string.\n */\nexport async function makeAuxFixedLength(aux: Uint8Array): Promise<Uint8Array> {\n return getBytesFromData(AUX_BYTE_LEN, aux);\n}\n\n/**\n * Symmetrically encrypts message\n *\n * @param message - The message to encrypt\n * @param encryptionKey - The encryption key\n * @param iv - The initialization vector\n * @param additionalData - The auxilary data\n * @returns The resulting ciphertext\n */\nexport async function encryptMessage(\n message: Uint8Array,\n encryptionKey: Uint8Array,\n iv: Uint8Array,\n additionalData: Uint8Array,\n): Promise<Uint8Array> {\n return aeadCipher(encryptionKey, iv, additionalData).encrypt(message);\n}\n\n/**\n * Symmetrically decrypts message\n *\n * @param ciphertext - The encrypted message\n * @param ciphertext - The initialization vector\n * @param encryptionKey - The encryption key\n * @param additionalData - The auxilary data\n * @returns The resulting decrypted message\n */\nexport async function decryptMessage(\n ciphertext: Uint8Array,\n iv: Uint8Array,\n encryptionKey: Uint8Array,\n additionalData: Uint8Array,\n): Promise<Uint8Array> {\n return aeadCipher(encryptionKey, iv, additionalData).decrypt(ciphertext);\n}\n","import { createNISTbasedIV, makeAuxFixedLength, encryptMessage, decryptMessage } from './core';\nimport { concatBytes } from '@noble/hashes/utils.js';\nimport { IV_LEN_BYTES } from '../constants';\n\n/**\n * Symmetrically encrypts the message\n *\n * @param encryptionKey - The symmetric key used for message encryption\n * @param message - The message to encrypt\n * @param freeField - The context of the message (required for IV generation)\n * @param aux - The auxilary string\n * @returns The resulting ciphertext.\n */\nexport async function encryptSymmetrically(\n encryptionKey: Uint8Array,\n message: Uint8Array,\n aux: Uint8Array,\n freeField?: Uint8Array,\n): Promise<Uint8Array> {\n try {\n const iv = createNISTbasedIV(freeField);\n const additionalData = await makeAuxFixedLength(aux);\n const ciphertext = await encryptMessage(message, encryptionKey, iv, additionalData);\n return concatBytes(ciphertext, iv);\n } catch (error) {\n throw new Error('Failed to encrypt symmetrically', { cause: error });\n }\n}\n\n/**\n * Decryps symmetrically encrypted message\n *\n * @param encryptionKey - The symmetric key used for message encryption\n * @param encryptedMessage - The ciphertext\n * @param aux - The auxilary string\n * @returns The resulting ciphertext.\n */\nexport async function decryptSymmetrically(\n encryptionKey: Uint8Array,\n encryptedMessage: Uint8Array,\n aux: Uint8Array,\n): Promise<Uint8Array> {\n try {\n const additionalData = await makeAuxFixedLength(aux);\n const ciphertext = encryptedMessage.slice(0, encryptedMessage.length - IV_LEN_BYTES);\n const iv = encryptedMessage.slice(encryptedMessage.length - IV_LEN_BYTES);\n const result = await decryptMessage(ciphertext, iv, encryptionKey, additionalData);\n return result;\n } catch (error) {\n throw new Error('Failed to decrypt symmetrically', { cause: error });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAUA,eAAsB,yBAAyB,SAAuD;AACpG,QAAO,OAAO,OAAO,UACnBA,8BACA,IAAI,WAAW,QAAQ,EACvB;EACE,MAAMC;EACN,QAAQC;EACT,EACD,MACA,CAAC,WAAW,UAAU,CACvB;;;;;;;;AASH,eAAsB,yBAAyB,KAAqC;AAClF,KAAI;EACF,MAAM,SAAS,MAAM,OAAO,OAAO,UAAUF,8BAAY,IAAI;AAC7D,SAAO,IAAI,WAAW,OAAO;UACtB,OAAO;AACd,QAAM,IAAI,MAAM,wCAAwC,EAAE,OAAO,OAAO,CAAC;;;;;;;;AAS7E,eAAsB,wBAA4C;AAChE,QAAO,OAAO,OAAO,YACnB;EACE,MAAMC;EACN,QAAQC;EACT,EACD,MACA,CAAC,WAAW,UAAU,CACvB;;;;;;;AAQH,SAAgB,kBAA8B;AAC5C,sDAAmBA,uCAAqB,EAAE;;;;;;;AAQ5C,eAAsB,yBAAyB,aAA6C;AAC1F,KAAI;AAEF,SAAO,yBADYC,6BAAiBD,uCAAqB,GAAG,YAAY,CAC7B;UACpC,OAAO;AACd,QAAM,IAAI,MAAM,0DAA0D,EAAE,OAAO,OAAO,CAAC;;;;;;;;;;;;;;AC5D/F,SAAgB,kBAAkB,WAAoC;AACpE,KAAI;AACF,MAAI,CAAC,UACH,sDAAmBE,+BAAa;EAGlC,MAAM,KAAK,IAAI,WAAW,GAAG;EAE7B,MAAM,0DAAwB,GAAG;AACjC,KAAG,IAAI,WAAW,EAAE;EAEpB,MAAM,uBAAuBC,6BAAiB,GAAG,UAAU;AAC3D,KAAG,IAAI,sBAAsB,GAAG;AAEhC,SAAO;UACA,OAAO;AACd,QAAM,IAAI,MAAM,uBAAuB,EAAE,OAAO,OAAO,CAAC;;;;;;;;;AAU5D,eAAsB,mBAAmB,KAAsC;AAC7E,QAAOA,6BAAiBC,gCAAc,IAAI;;;;;;;;;;;AAY5C,eAAsB,eACpB,SACA,eACA,IACA,gBACqB;AACrB,6CAAkB,eAAe,IAAI,eAAe,CAAC,QAAQ,QAAQ;;;;;;;;;;;AAYvE,eAAsB,eACpB,YACA,IACA,eACA,gBACqB;AACrB,6CAAkB,eAAe,IAAI,eAAe,CAAC,QAAQ,WAAW;;;;;;;;;;;;;;AC/D1E,eAAsB,qBACpB,eACA,SACA,KACA,WACqB;AACrB,KAAI;EACF,MAAM,KAAK,kBAAkB,UAAU;AAGvC,iDADmB,MAAM,eAAe,SAAS,eAAe,IADzC,MAAM,mBAAmB,IAAI,CAC+B,EACpD,GAAG;UAC3B,OAAO;AACd,QAAM,IAAI,MAAM,mCAAmC,EAAE,OAAO,OAAO,CAAC;;;;;;;;;;;AAYxE,eAAsB,qBACpB,eACA,kBACA,KACqB;AACrB,KAAI;EACF,MAAM,iBAAiB,MAAM,mBAAmB,IAAI;AAIpD,SADe,MAAM,eAFF,iBAAiB,MAAM,GAAG,iBAAiB,SAASC,+BAAa,EACzE,iBAAiB,MAAM,iBAAiB,SAASA,+BAAa,EACrB,eAAe,eAAe;UAE3E,OAAO;AACd,QAAM,IAAI,MAAM,mCAAmC,EAAE,OAAO,OAAO,CAAC"}