internxt-crypto 0.0.10-alpha → 0.0.13

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 (158) hide show
  1. package/README.md +3 -4
  2. package/dist/aes-DSDxP8uF.mjs +184 -0
  3. package/dist/aes-DSDxP8uF.mjs.map +1 -0
  4. package/dist/aes-bOrKZuUC.js +226 -0
  5. package/dist/aes-bOrKZuUC.js.map +1 -0
  6. package/dist/asymmetric-crypto.d.mts +5 -2
  7. package/dist/asymmetric-crypto.d.mts.map +1 -0
  8. package/dist/asymmetric-crypto.d.ts +5 -2
  9. package/dist/asymmetric-crypto.d.ts.map +1 -0
  10. package/dist/asymmetric-crypto.js +9 -92
  11. package/dist/asymmetric-crypto.mjs +2 -84
  12. package/dist/chunk-DQk6qfdC.mjs +18 -0
  13. package/dist/chunk-EbLFQX5m.js +60 -0
  14. package/dist/constants.d.mts +5 -11
  15. package/dist/constants.d.mts.map +1 -0
  16. package/dist/constants.d.ts +5 -11
  17. package/dist/constants.d.ts.map +1 -0
  18. package/dist/constants.js +33 -49
  19. package/dist/constants.js.map +1 -1
  20. package/dist/constants.mjs +32 -40
  21. package/dist/constants.mjs.map +1 -1
  22. package/dist/derive-key.d.mts +11 -8
  23. package/dist/derive-key.d.mts.map +1 -0
  24. package/dist/derive-key.d.ts +11 -8
  25. package/dist/derive-key.d.ts.map +1 -0
  26. package/dist/derive-key.js +13 -795
  27. package/dist/derive-key.mjs +2 -783
  28. package/dist/deriveKeysFromPassword-DJRWZ8Rw.mjs +735 -0
  29. package/dist/deriveKeysFromPassword-DJRWZ8Rw.mjs.map +1 -0
  30. package/dist/deriveKeysFromPassword-Ko7NxkHM.js +2492 -0
  31. package/dist/deriveKeysFromPassword-Ko7NxkHM.js.map +1 -0
  32. package/dist/email-crypto.d.mts +55 -78
  33. package/dist/email-crypto.d.mts.map +1 -0
  34. package/dist/email-crypto.d.ts +55 -78
  35. package/dist/email-crypto.d.ts.map +1 -0
  36. package/dist/email-crypto.js +13 -1409
  37. package/dist/email-crypto.mjs +2 -1380
  38. package/dist/email-search.d.mts +36 -32
  39. package/dist/email-search.d.mts.map +1 -0
  40. package/dist/email-search.d.ts +36 -32
  41. package/dist/email-search.d.ts.map +1 -0
  42. package/dist/email-search.js +534 -540
  43. package/dist/email-search.js.map +1 -1
  44. package/dist/email-search.mjs +532 -538
  45. package/dist/email-search.mjs.map +1 -1
  46. package/dist/emailEncryptionKey-27mIHh18.mjs +150 -0
  47. package/dist/emailEncryptionKey-27mIHh18.mjs.map +1 -0
  48. package/dist/emailEncryptionKey-DbaDAdoW.js +167 -0
  49. package/dist/emailEncryptionKey-DbaDAdoW.js.map +1 -0
  50. package/dist/emailKeys-BJGdkLrg.js +593 -0
  51. package/dist/emailKeys-BJGdkLrg.js.map +1 -0
  52. package/dist/emailKeys-Fp9WR3wl.mjs +509 -0
  53. package/dist/emailKeys-Fp9WR3wl.mjs.map +1 -0
  54. package/dist/genID-3Er5IowC.mjs +153 -0
  55. package/dist/genID-3Er5IowC.mjs.map +1 -0
  56. package/dist/genID-YJSl3YhL.js +238 -0
  57. package/dist/genID-YJSl3YhL.js.map +1 -0
  58. package/dist/hash.d.mts +18 -15
  59. package/dist/hash.d.mts.map +1 -0
  60. package/dist/hash.d.ts +18 -15
  61. package/dist/hash.d.ts.map +1 -0
  62. package/dist/hash.js +12 -95
  63. package/dist/hash.mjs +2 -84
  64. package/dist/index.d.mts +15 -18
  65. package/dist/index.d.mts.map +1 -0
  66. package/dist/index.d.ts +15 -18
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +125 -2698
  69. package/dist/index.mjs +13 -2538
  70. package/dist/keys-BfcaiAOv.mjs +90 -0
  71. package/dist/keys-BfcaiAOv.mjs.map +1 -0
  72. package/dist/keys-CinT7kEY.js +125 -0
  73. package/dist/keys-CinT7kEY.js.map +1 -0
  74. package/dist/keystore-crypto.d.mts +17 -46
  75. package/dist/keystore-crypto.d.mts.map +1 -0
  76. package/dist/keystore-crypto.d.ts +17 -46
  77. package/dist/keystore-crypto.d.ts.map +1 -0
  78. package/dist/keystore-crypto.js +5 -529
  79. package/dist/keystore-crypto.mjs +2 -500
  80. package/dist/kyber1024-PpwE1rki.mjs +144 -0
  81. package/dist/kyber1024-PpwE1rki.mjs.map +1 -0
  82. package/dist/kyber1024-jeKS8CXf.js +173 -0
  83. package/dist/kyber1024-jeKS8CXf.js.map +1 -0
  84. package/dist/{kyber768-B87rMQ7u.d.mts → kyber768-DGBB_RS7.d.ts} +8 -6
  85. package/dist/kyber768-DGBB_RS7.d.ts.map +1 -0
  86. package/dist/{kyber768-B87rMQ7u.d.ts → kyber768-DzIcGg1i.d.mts} +8 -6
  87. package/dist/kyber768-DzIcGg1i.d.mts.map +1 -0
  88. package/dist/mac-BMb1F0dN.js +170 -0
  89. package/dist/mac-BMb1F0dN.js.map +1 -0
  90. package/dist/mac-ZpRlx8Fs.mjs +116 -0
  91. package/dist/mac-ZpRlx8Fs.mjs.map +1 -0
  92. package/dist/post-quantum-crypto.d.mts +23 -27
  93. package/dist/post-quantum-crypto.d.mts.map +1 -0
  94. package/dist/post-quantum-crypto.d.ts +23 -27
  95. package/dist/post-quantum-crypto.d.ts.map +1 -0
  96. package/dist/post-quantum-crypto.js +14 -92
  97. package/dist/post-quantum-crypto.mjs +2 -89
  98. package/dist/storage-service.d.mts +28 -34
  99. package/dist/storage-service.d.mts.map +1 -0
  100. package/dist/storage-service.d.ts +28 -34
  101. package/dist/storage-service.d.ts.map +1 -0
  102. package/dist/storage-service.js +51 -53
  103. package/dist/storage-service.js.map +1 -1
  104. package/dist/storage-service.mjs +40 -51
  105. package/dist/storage-service.mjs.map +1 -1
  106. package/dist/symmetric-crypto.d.mts +8 -7
  107. package/dist/symmetric-crypto.d.mts.map +1 -0
  108. package/dist/symmetric-crypto.d.ts +8 -7
  109. package/dist/symmetric-crypto.d.ts.map +1 -0
  110. package/dist/symmetric-crypto.js +10 -142
  111. package/dist/symmetric-crypto.mjs +2 -133
  112. package/dist/types.d.mts +71 -69
  113. package/dist/types.d.mts.map +1 -0
  114. package/dist/types.d.ts +71 -69
  115. package/dist/types.d.ts.map +1 -0
  116. package/dist/types.js +8 -10
  117. package/dist/types.js.map +1 -1
  118. package/dist/types.mjs +7 -9
  119. package/dist/types.mjs.map +1 -1
  120. package/dist/utils.d.mts +34 -78
  121. package/dist/utils.d.mts.map +1 -0
  122. package/dist/utils.d.ts +34 -78
  123. package/dist/utils.d.ts.map +1 -0
  124. package/dist/utils.js +17 -313
  125. package/dist/utils.mjs +2 -272
  126. package/package.json +21 -87
  127. package/dist/asymmetric-crypto.js.map +0 -1
  128. package/dist/asymmetric-crypto.mjs.map +0 -1
  129. package/dist/derive-key.js.map +0 -1
  130. package/dist/derive-key.mjs.map +0 -1
  131. package/dist/email-crypto.js.map +0 -1
  132. package/dist/email-crypto.mjs.map +0 -1
  133. package/dist/email-service.d.mts +0 -38
  134. package/dist/email-service.d.ts +0 -38
  135. package/dist/email-service.js +0 -154
  136. package/dist/email-service.js.map +0 -1
  137. package/dist/email-service.mjs +0 -147
  138. package/dist/email-service.mjs.map +0 -1
  139. package/dist/hash.js.map +0 -1
  140. package/dist/hash.mjs.map +0 -1
  141. package/dist/index.js.map +0 -1
  142. package/dist/index.mjs.map +0 -1
  143. package/dist/keystore-crypto.js.map +0 -1
  144. package/dist/keystore-crypto.mjs.map +0 -1
  145. package/dist/keystore-service.d.mts +0 -82
  146. package/dist/keystore-service.d.ts +0 -82
  147. package/dist/keystore-service.js +0 -349
  148. package/dist/keystore-service.js.map +0 -1
  149. package/dist/keystore-service.mjs +0 -342
  150. package/dist/keystore-service.mjs.map +0 -1
  151. package/dist/post-quantum-crypto.js.map +0 -1
  152. package/dist/post-quantum-crypto.mjs.map +0 -1
  153. package/dist/symmetric-crypto.js.map +0 -1
  154. package/dist/symmetric-crypto.mjs.map +0 -1
  155. package/dist/utils-BDaK_d6T.d.ts +0 -114
  156. package/dist/utils-v34IRTIx.d.mts +0 -114
  157. package/dist/utils.js.map +0 -1
  158. package/dist/utils.mjs.map +0 -1
package/README.md CHANGED
@@ -73,7 +73,6 @@ import {
73
73
  keystoreService,
74
74
  deriveKey,
75
75
  hash,
76
- SymmetricCiphertext
77
76
  } from 'internxt-crypto';
78
77
 
79
78
  // Asymmetric encryption
@@ -87,7 +86,7 @@ expect(resultAlice).toStrictEqual(resultBob);
87
86
  const data = utils.UTF8ToUint8('Sensitive information to encrypt'); // convert to Uint8Array
88
87
  const additionalData = 'Additional non-secret data';
89
88
  const key = await symmetric.genSymmetricCryptoKey(); // CryptoKey
90
- const ciphertext: SymmetricCiphertext = await symmetric.encryptSymmetrically(key, data, additionalData);
89
+ const ciphertext: Uint8Array = await symmetric.encryptSymmetrically(key, data, additionalData);
91
90
  const plainText = await symmetric.decryptSymmetrically(encryptionKey, ciphertext, additionalData);
92
91
  expect(data).toStrictEqual(plainText);
93
92
 
@@ -143,11 +142,11 @@ const emailParams: EmailPublicParameters = {
143
142
  subject: 'email subject',
144
143
  sender: userAlice,
145
144
  recipient: userBob,
146
- replyToEmailID: 2,
145
+ replyToEmailID: generateUuid(),
147
146
  };
148
147
 
149
148
  const email: Email = {
150
- id: 'email id',
149
+ id: generateUuid(),
151
150
  params: emailParams,
152
151
  body: emailBody,
153
152
  };
@@ -0,0 +1,184 @@
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
+
6
+ //#region src/symmetric-crypto/keys.ts
7
+ /**
8
+ * Converts Uint8Array into CryptoKey
9
+ *
10
+ * @param keyData - The Uint8Array representation of the symmetric key
11
+ * @returns The resulting symmetric CryptoKey.
12
+ */
13
+ async function importSymmetricCryptoKey(keyData) {
14
+ return crypto.subtle.importKey(KEY_FORMAT, new Uint8Array(keyData), {
15
+ name: AES_ALGORITHM,
16
+ length: AES_KEY_BIT_LENGTH
17
+ }, true, ["encrypt", "decrypt"]);
18
+ }
19
+ /**
20
+ * Converts CryptoKey into Uint8Array
21
+ *
22
+ * @param key - The symmetric CryptoKey
23
+ * @returns The resulting Uint8Array.
24
+ */
25
+ async function exportSymmetricCryptoKey(key) {
26
+ try {
27
+ const rawKey = await crypto.subtle.exportKey(KEY_FORMAT, key);
28
+ return new Uint8Array(rawKey);
29
+ } catch (error) {
30
+ throw new Error("Failed to export symmetric CryptoKey", { cause: error });
31
+ }
32
+ }
33
+ /**
34
+ * Generates symmetric CryptoKey
35
+ *
36
+ * @returns The generated CryptoKey.
37
+ */
38
+ async function genSymmetricCryptoKey() {
39
+ return crypto.subtle.generateKey({
40
+ name: AES_ALGORITHM,
41
+ length: AES_KEY_BIT_LENGTH
42
+ }, true, ["encrypt", "decrypt"]);
43
+ }
44
+ /**
45
+ * Generates symmetric key as Uint8Array
46
+ *
47
+ * @returns The generated Uint8Array.
48
+ */
49
+ function genSymmetricKey() {
50
+ try {
51
+ const key = new Uint8Array(AES_KEY_BIT_LENGTH / 8);
52
+ crypto.getRandomValues(key);
53
+ return key;
54
+ } catch (error) {
55
+ throw new Error("Failed to generate symmetric key", { cause: error });
56
+ }
57
+ }
58
+ /**
59
+ * Derives CryptoKey from the given key material
60
+ *
61
+ * @returns The derived CryptoKey.
62
+ */
63
+ async function deriveSymmetricCryptoKey(keyMaterial) {
64
+ try {
65
+ return importSymmetricCryptoKey(getBytesFromData(AES_KEY_BIT_LENGTH / 8, keyMaterial));
66
+ } catch (error) {
67
+ throw new Error("Failed to derive CryptoKey from the given key material", { cause: error });
68
+ }
69
+ }
70
+
71
+ //#endregion
72
+ //#region src/symmetric-crypto/core.ts
73
+ /**
74
+ * Creates an initialization vector (IV) using RGB-based construction (8.2.2 NIST Special Publication 800-38D)
75
+ * Constructs a 128-bits IV from 2 fileds: the random field (at least 96 bits) and the free field (32 bits).
76
+ * If free filed is empty, then the entier 128-bit IV is sampled randomly.
77
+ *
78
+ * @param freeFiled - The string with an unrestricted content. Can be a device identifier, etc.
79
+ * @returns The resulting 128-bits initialization vector.
80
+ */
81
+ function createNISTbasedIV(freeField) {
82
+ try {
83
+ if (!freeField) return randomBytes(IV_LEN_BYTES);
84
+ const iv = new Uint8Array(16);
85
+ const randFiled = randomBytes(12);
86
+ iv.set(randFiled, 0);
87
+ const freeFiledFixedLength = getBytesFromData(4, freeField);
88
+ iv.set(freeFiledFixedLength, 12);
89
+ return iv;
90
+ } catch (error) {
91
+ throw new Error("Failed to create IV", { cause: error });
92
+ }
93
+ }
94
+ /**
95
+ * Hashes aux string to make it fixed-length
96
+ *
97
+ * @param aux - The auxilay string of arbitrary length
98
+ * @returns The resulting fixed-length auxilary string.
99
+ */
100
+ async function makeAuxFixedLength(aux) {
101
+ return getBytesFromData(AUX_BYTE_LEN, aux);
102
+ }
103
+ /**
104
+ * Symmetrically encrypts message
105
+ *
106
+ * @param message - The message to encrypt
107
+ * @param encryptionKey - The encryption key
108
+ * @param iv - The initialization vector
109
+ * @param additionalData - The auxilary data
110
+ * @returns The resulting ciphertext
111
+ */
112
+ async function encryptMessage(message, encryptionKey, iv, additionalData) {
113
+ try {
114
+ const encrypted = await crypto.subtle.encrypt({
115
+ name: AES_ALGORITHM,
116
+ iv,
117
+ additionalData
118
+ }, encryptionKey, message);
119
+ return new Uint8Array(encrypted);
120
+ } catch (error) {
121
+ throw new Error("Failed to encrypt symmetrically", { cause: error });
122
+ }
123
+ }
124
+ /**
125
+ * Symmetrically decrypts message
126
+ *
127
+ * @param ciphertext - The encrypted message
128
+ * @param ciphertext - The initialization vector
129
+ * @param encryptionKey - The encryption key
130
+ * @param additionalData - The auxilary data
131
+ * @returns The resulting decrypted message
132
+ */
133
+ async function decryptMessage(ciphertext, iv, encryptionKey, additionalData) {
134
+ try {
135
+ const decrypted = await crypto.subtle.decrypt({
136
+ name: AES_ALGORITHM,
137
+ iv,
138
+ additionalData
139
+ }, encryptionKey, ciphertext);
140
+ return new Uint8Array(decrypted);
141
+ } catch (error) {
142
+ throw new Error("Failed to decrypt symmetrically", { cause: error });
143
+ }
144
+ }
145
+
146
+ //#endregion
147
+ //#region src/symmetric-crypto/aes.ts
148
+ /**
149
+ * Symmetrically encrypts the message
150
+ *
151
+ * @param encryptionKey - The symmetric CryptoKey used for message encryption
152
+ * @param message - The message to encrypt
153
+ * @param freeField - The context of the message (required for IV generation)
154
+ * @param aux - The auxilary string
155
+ * @returns The resulting ciphertext.
156
+ */
157
+ async function encryptSymmetrically(encryptionKey, message, aux, freeField) {
158
+ try {
159
+ const iv = createNISTbasedIV(freeField);
160
+ return concatBytes(await encryptMessage(message, encryptionKey, iv, await makeAuxFixedLength(aux)), iv);
161
+ } catch (error) {
162
+ throw new Error("Failed to encrypt symmetrically", { cause: error });
163
+ }
164
+ }
165
+ /**
166
+ * Decryps symmetrically encrypted message
167
+ *
168
+ * @param encryptionKey - The symmetric CryptoKey used for message encryption
169
+ * @param encryptedMessage - The ciphertext
170
+ * @param aux - The auxilary string
171
+ * @returns The resulting ciphertext.
172
+ */
173
+ async function decryptSymmetrically(encryptionKey, encryptedMessage, aux) {
174
+ try {
175
+ const additionalData = await makeAuxFixedLength(aux);
176
+ return await decryptMessage(encryptedMessage.slice(0, encryptedMessage.length - IV_LEN_BYTES), encryptedMessage.slice(encryptedMessage.length - IV_LEN_BYTES), encryptionKey, additionalData);
177
+ } catch (error) {
178
+ throw new Error("Failed to decrypt symmetrically", { cause: error });
179
+ }
180
+ }
181
+
182
+ //#endregion
183
+ export { genSymmetricCryptoKey as a, exportSymmetricCryptoKey as i, encryptSymmetrically as n, genSymmetricKey as o, deriveSymmetricCryptoKey as r, importSymmetricCryptoKey as s, decryptSymmetrically as t };
184
+ //# sourceMappingURL=aes-DSDxP8uF.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aes-DSDxP8uF.mjs","names":[],"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 { 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 try {\n const key = new Uint8Array(AES_KEY_BIT_LENGTH / 8);\n crypto.getRandomValues(key);\n return key;\n } catch (error) {\n throw new Error('Failed to generate symmetric key', { cause: error });\n }\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 { randomBytes } from '@noble/post-quantum/utils.js';\nimport { getBytesFromData } from '../hash';\nimport { AUX_BYTE_LEN, AES_ALGORITHM, 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: CryptoKey,\n iv: Uint8Array,\n additionalData: Uint8Array,\n): Promise<Uint8Array> {\n try {\n const encrypted = await crypto.subtle.encrypt(\n { name: AES_ALGORITHM, iv: iv as BufferSource, additionalData: additionalData as BufferSource },\n encryptionKey,\n message as BufferSource,\n );\n return new Uint8Array(encrypted);\n } catch (error) {\n throw new Error('Failed to encrypt symmetrically', { cause: error });\n }\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: CryptoKey,\n additionalData: Uint8Array,\n): Promise<Uint8Array> {\n try {\n const decrypted = await crypto.subtle.decrypt(\n { name: AES_ALGORITHM, iv: iv as BufferSource, additionalData: additionalData as BufferSource },\n encryptionKey,\n ciphertext as BufferSource,\n );\n return new Uint8Array(decrypted);\n } catch (error) {\n throw new Error('Failed to decrypt symmetrically', { cause: error });\n }\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 CryptoKey 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: CryptoKey,\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 CryptoKey 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: CryptoKey,\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":"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"}
@@ -0,0 +1,226 @@
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
+
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(require_constants.KEY_FORMAT, new Uint8Array(keyData), {
16
+ name: require_constants.AES_ALGORITHM,
17
+ length: require_constants.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(require_constants.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: require_constants.AES_ALGORITHM,
42
+ length: require_constants.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
+ try {
52
+ const key = new Uint8Array(require_constants.AES_KEY_BIT_LENGTH / 8);
53
+ crypto.getRandomValues(key);
54
+ return key;
55
+ } catch (error) {
56
+ throw new Error("Failed to generate symmetric key", { cause: error });
57
+ }
58
+ }
59
+ /**
60
+ * Derives CryptoKey from the given key material
61
+ *
62
+ * @returns The derived CryptoKey.
63
+ */
64
+ async function deriveSymmetricCryptoKey(keyMaterial) {
65
+ try {
66
+ return importSymmetricCryptoKey(require_mac.getBytesFromData(require_constants.AES_KEY_BIT_LENGTH / 8, keyMaterial));
67
+ } catch (error) {
68
+ throw new Error("Failed to derive CryptoKey from the given key material", { cause: error });
69
+ }
70
+ }
71
+
72
+ //#endregion
73
+ //#region src/symmetric-crypto/core.ts
74
+ /**
75
+ * Creates an initialization vector (IV) using RGB-based construction (8.2.2 NIST Special Publication 800-38D)
76
+ * Constructs a 128-bits IV from 2 fileds: the random field (at least 96 bits) and the free field (32 bits).
77
+ * If free filed is empty, then the entier 128-bit IV is sampled randomly.
78
+ *
79
+ * @param freeFiled - The string with an unrestricted content. Can be a device identifier, etc.
80
+ * @returns The resulting 128-bits initialization vector.
81
+ */
82
+ function createNISTbasedIV(freeField) {
83
+ try {
84
+ if (!freeField) return (0, _noble_post_quantum_utils_js.randomBytes)(require_constants.IV_LEN_BYTES);
85
+ const iv = new Uint8Array(16);
86
+ const randFiled = (0, _noble_post_quantum_utils_js.randomBytes)(12);
87
+ iv.set(randFiled, 0);
88
+ const freeFiledFixedLength = require_mac.getBytesFromData(4, freeField);
89
+ iv.set(freeFiledFixedLength, 12);
90
+ return iv;
91
+ } catch (error) {
92
+ throw new Error("Failed to create IV", { cause: error });
93
+ }
94
+ }
95
+ /**
96
+ * Hashes aux string to make it fixed-length
97
+ *
98
+ * @param aux - The auxilay string of arbitrary length
99
+ * @returns The resulting fixed-length auxilary string.
100
+ */
101
+ async function makeAuxFixedLength(aux) {
102
+ return require_mac.getBytesFromData(require_constants.AUX_BYTE_LEN, aux);
103
+ }
104
+ /**
105
+ * Symmetrically encrypts message
106
+ *
107
+ * @param message - The message to encrypt
108
+ * @param encryptionKey - The encryption key
109
+ * @param iv - The initialization vector
110
+ * @param additionalData - The auxilary data
111
+ * @returns The resulting ciphertext
112
+ */
113
+ async function encryptMessage(message, encryptionKey, iv, additionalData) {
114
+ try {
115
+ const encrypted = await crypto.subtle.encrypt({
116
+ name: require_constants.AES_ALGORITHM,
117
+ iv,
118
+ additionalData
119
+ }, encryptionKey, message);
120
+ return new Uint8Array(encrypted);
121
+ } catch (error) {
122
+ throw new Error("Failed to encrypt symmetrically", { cause: error });
123
+ }
124
+ }
125
+ /**
126
+ * Symmetrically decrypts message
127
+ *
128
+ * @param ciphertext - The encrypted message
129
+ * @param ciphertext - The initialization vector
130
+ * @param encryptionKey - The encryption key
131
+ * @param additionalData - The auxilary data
132
+ * @returns The resulting decrypted message
133
+ */
134
+ async function decryptMessage(ciphertext, iv, encryptionKey, additionalData) {
135
+ try {
136
+ const decrypted = await crypto.subtle.decrypt({
137
+ name: require_constants.AES_ALGORITHM,
138
+ iv,
139
+ additionalData
140
+ }, encryptionKey, ciphertext);
141
+ return new Uint8Array(decrypted);
142
+ } catch (error) {
143
+ throw new Error("Failed to decrypt symmetrically", { cause: error });
144
+ }
145
+ }
146
+
147
+ //#endregion
148
+ //#region src/symmetric-crypto/aes.ts
149
+ /**
150
+ * Symmetrically encrypts the message
151
+ *
152
+ * @param encryptionKey - The symmetric CryptoKey used for message encryption
153
+ * @param message - The message to encrypt
154
+ * @param freeField - The context of the message (required for IV generation)
155
+ * @param aux - The auxilary string
156
+ * @returns The resulting ciphertext.
157
+ */
158
+ async function encryptSymmetrically(encryptionKey, message, aux, freeField) {
159
+ try {
160
+ const iv = createNISTbasedIV(freeField);
161
+ return (0, _noble_hashes_utils_js.concatBytes)(await encryptMessage(message, encryptionKey, iv, await makeAuxFixedLength(aux)), iv);
162
+ } catch (error) {
163
+ throw new Error("Failed to encrypt symmetrically", { cause: error });
164
+ }
165
+ }
166
+ /**
167
+ * Decryps symmetrically encrypted message
168
+ *
169
+ * @param encryptionKey - The symmetric CryptoKey used for message encryption
170
+ * @param encryptedMessage - The ciphertext
171
+ * @param aux - The auxilary string
172
+ * @returns The resulting ciphertext.
173
+ */
174
+ async function decryptSymmetrically(encryptionKey, encryptedMessage, aux) {
175
+ try {
176
+ const additionalData = await makeAuxFixedLength(aux);
177
+ return await decryptMessage(encryptedMessage.slice(0, encryptedMessage.length - require_constants.IV_LEN_BYTES), encryptedMessage.slice(encryptedMessage.length - require_constants.IV_LEN_BYTES), encryptionKey, additionalData);
178
+ } catch (error) {
179
+ throw new Error("Failed to decrypt symmetrically", { cause: error });
180
+ }
181
+ }
182
+
183
+ //#endregion
184
+ Object.defineProperty(exports, 'decryptSymmetrically', {
185
+ enumerable: true,
186
+ get: function () {
187
+ return decryptSymmetrically;
188
+ }
189
+ });
190
+ Object.defineProperty(exports, 'deriveSymmetricCryptoKey', {
191
+ enumerable: true,
192
+ get: function () {
193
+ return deriveSymmetricCryptoKey;
194
+ }
195
+ });
196
+ Object.defineProperty(exports, 'encryptSymmetrically', {
197
+ enumerable: true,
198
+ get: function () {
199
+ return encryptSymmetrically;
200
+ }
201
+ });
202
+ Object.defineProperty(exports, 'exportSymmetricCryptoKey', {
203
+ enumerable: true,
204
+ get: function () {
205
+ return exportSymmetricCryptoKey;
206
+ }
207
+ });
208
+ Object.defineProperty(exports, 'genSymmetricCryptoKey', {
209
+ enumerable: true,
210
+ get: function () {
211
+ return genSymmetricCryptoKey;
212
+ }
213
+ });
214
+ Object.defineProperty(exports, 'genSymmetricKey', {
215
+ enumerable: true,
216
+ get: function () {
217
+ return genSymmetricKey;
218
+ }
219
+ });
220
+ Object.defineProperty(exports, 'importSymmetricCryptoKey', {
221
+ enumerable: true,
222
+ get: function () {
223
+ return importSymmetricCryptoKey;
224
+ }
225
+ });
226
+ //# sourceMappingURL=aes-bOrKZuUC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aes-bOrKZuUC.js","names":["KEY_FORMAT","AES_ALGORITHM","AES_KEY_BIT_LENGTH","getBytesFromData","IV_LEN_BYTES","getBytesFromData","AUX_BYTE_LEN","AES_ALGORITHM","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 { 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 try {\n const key = new Uint8Array(AES_KEY_BIT_LENGTH / 8);\n crypto.getRandomValues(key);\n return key;\n } catch (error) {\n throw new Error('Failed to generate symmetric key', { cause: error });\n }\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 { randomBytes } from '@noble/post-quantum/utils.js';\nimport { getBytesFromData } from '../hash';\nimport { AUX_BYTE_LEN, AES_ALGORITHM, 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: CryptoKey,\n iv: Uint8Array,\n additionalData: Uint8Array,\n): Promise<Uint8Array> {\n try {\n const encrypted = await crypto.subtle.encrypt(\n { name: AES_ALGORITHM, iv: iv as BufferSource, additionalData: additionalData as BufferSource },\n encryptionKey,\n message as BufferSource,\n );\n return new Uint8Array(encrypted);\n } catch (error) {\n throw new Error('Failed to encrypt symmetrically', { cause: error });\n }\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: CryptoKey,\n additionalData: Uint8Array,\n): Promise<Uint8Array> {\n try {\n const decrypted = await crypto.subtle.decrypt(\n { name: AES_ALGORITHM, iv: iv as BufferSource, additionalData: additionalData as BufferSource },\n encryptionKey,\n ciphertext as BufferSource,\n );\n return new Uint8Array(decrypted);\n } catch (error) {\n throw new Error('Failed to decrypt symmetrically', { cause: error });\n }\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 CryptoKey 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: CryptoKey,\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 CryptoKey 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: CryptoKey,\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":"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"}
@@ -1,3 +1,4 @@
1
+ //#region src/asymmetric-crypto/ellipticCurve.d.ts
1
2
  /**
2
3
  * Derives secret key from the other user's public key and own private key
3
4
  *
@@ -6,7 +7,8 @@
6
7
  * @returns The derived secret key bits
7
8
  */
8
9
  declare function deriveSecretKey(otherUserPublicKey: CryptoKey, ownPrivateKey: CryptoKey): Promise<Uint8Array>;
9
-
10
+ //#endregion
11
+ //#region src/asymmetric-crypto/keys.d.ts
10
12
  /**
11
13
  * Generates elliptic curve key pair
12
14
  *
@@ -37,5 +39,6 @@ declare function exportPrivateKey(key: CryptoKey): Promise<Uint8Array>;
37
39
  * @returns The CryptoKey representation of the private key
38
40
  */
39
41
  declare function importPrivateKey(pkcs8KeyData: Uint8Array): Promise<CryptoKey>;
40
-
42
+ //#endregion
41
43
  export { deriveSecretKey, exportPrivateKey, exportPublicKey, generateEccKeys, importPrivateKey, importPublicKey };
44
+ //# sourceMappingURL=asymmetric-crypto.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asymmetric-crypto.d.mts","names":[],"sources":["../src/asymmetric-crypto/ellipticCurve.ts","../src/asymmetric-crypto/keys.ts"],"mappings":";;AASA;;;;;;iBAAsB,eAAA,CAAgB,kBAAA,EAAoB,SAAA,EAAW,aAAA,EAAe,SAAA,GAAY,OAAA,CAAQ,UAAA;;;;AAAxG;;;;iBCFsB,eAAA,CAAA,GAAmB,OAAA,CAAQ,aAAA;;;;;;iBAmB3B,eAAA,CAAgB,GAAA,EAAK,SAAA,GAAY,OAAA,CAAQ,UAAA;;;;;;iBAczC,eAAA,CAAgB,WAAA,EAAa,UAAA,GAAa,OAAA,CAAQ,SAAA;;;;AAjCxE;;iBAsDsB,gBAAA,CAAiB,GAAA,EAAK,SAAA,GAAY,OAAA,CAAQ,UAAA;;;AAnChE;;;iBAiDsB,gBAAA,CAAiB,YAAA,EAAc,UAAA,GAAa,OAAA,CAAQ,SAAA"}
@@ -1,3 +1,4 @@
1
+ //#region src/asymmetric-crypto/ellipticCurve.d.ts
1
2
  /**
2
3
  * Derives secret key from the other user's public key and own private key
3
4
  *
@@ -6,7 +7,8 @@
6
7
  * @returns The derived secret key bits
7
8
  */
8
9
  declare function deriveSecretKey(otherUserPublicKey: CryptoKey, ownPrivateKey: CryptoKey): Promise<Uint8Array>;
9
-
10
+ //#endregion
11
+ //#region src/asymmetric-crypto/keys.d.ts
10
12
  /**
11
13
  * Generates elliptic curve key pair
12
14
  *
@@ -37,5 +39,6 @@ declare function exportPrivateKey(key: CryptoKey): Promise<Uint8Array>;
37
39
  * @returns The CryptoKey representation of the private key
38
40
  */
39
41
  declare function importPrivateKey(pkcs8KeyData: Uint8Array): Promise<CryptoKey>;
40
-
42
+ //#endregion
41
43
  export { deriveSecretKey, exportPrivateKey, exportPublicKey, generateEccKeys, importPrivateKey, importPublicKey };
44
+ //# sourceMappingURL=asymmetric-crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asymmetric-crypto.d.ts","names":[],"sources":["../src/asymmetric-crypto/ellipticCurve.ts","../src/asymmetric-crypto/keys.ts"],"mappings":";;AASA;;;;;;iBAAsB,eAAA,CAAgB,kBAAA,EAAoB,SAAA,EAAW,aAAA,EAAe,SAAA,GAAY,OAAA,CAAQ,UAAA;;;;AAAxG;;;;iBCFsB,eAAA,CAAA,GAAmB,OAAA,CAAQ,aAAA;;;;;;iBAmB3B,eAAA,CAAgB,GAAA,EAAK,SAAA,GAAY,OAAA,CAAQ,UAAA;;;;;;iBAczC,eAAA,CAAgB,WAAA,EAAa,UAAA,GAAa,OAAA,CAAQ,SAAA;;;;AAjCxE;;iBAsDsB,gBAAA,CAAiB,GAAA,EAAK,SAAA,GAAY,OAAA,CAAQ,UAAA;;;AAnChE;;;iBAiDsB,gBAAA,CAAiB,YAAA,EAAc,UAAA,GAAa,OAAA,CAAQ,SAAA"}
@@ -1,92 +1,9 @@
1
- 'use strict';
2
-
3
- // src/constants.ts
4
- var AES_KEY_BIT_LENGTH = 256;
5
- var ECC_ALGORITHM = "X25519";
6
-
7
- // src/asymmetric-crypto/ellipticCurve.ts
8
- async function deriveSecretKey(otherUserPublicKey, ownPrivateKey) {
9
- try {
10
- const result = await crypto.subtle.deriveBits(
11
- {
12
- name: ECC_ALGORITHM,
13
- public: otherUserPublicKey
14
- },
15
- ownPrivateKey,
16
- AES_KEY_BIT_LENGTH
17
- );
18
- return new Uint8Array(result);
19
- } catch (error) {
20
- throw new Error("Failed to derive elliptic curve secret key", { cause: error });
21
- }
22
- }
23
-
24
- // src/asymmetric-crypto/keys.ts
25
- async function generateEccKeys() {
26
- try {
27
- return await crypto.subtle.generateKey(
28
- {
29
- name: ECC_ALGORITHM
30
- },
31
- true,
32
- ["deriveBits"]
33
- );
34
- } catch (error) {
35
- throw new Error("Failed to generate elliptic curve key pair", { cause: error });
36
- }
37
- }
38
- async function exportPublicKey(key) {
39
- try {
40
- const result = await crypto.subtle.exportKey("spki", key);
41
- return new Uint8Array(result);
42
- } catch (error) {
43
- throw new Error("Failed to export public key", { cause: error });
44
- }
45
- }
46
- async function importPublicKey(spkiKeyData) {
47
- try {
48
- return await crypto.subtle.importKey(
49
- "spki",
50
- spkiKeyData,
51
- {
52
- name: ECC_ALGORITHM
53
- },
54
- true,
55
- []
56
- );
57
- } catch (error) {
58
- throw new Error("Failed to import public key", { cause: error });
59
- }
60
- }
61
- async function exportPrivateKey(key) {
62
- try {
63
- const result = await crypto.subtle.exportKey("pkcs8", key);
64
- return new Uint8Array(result);
65
- } catch (error) {
66
- throw new Error("Failed to export private key", { cause: error });
67
- }
68
- }
69
- async function importPrivateKey(pkcs8KeyData) {
70
- try {
71
- return await crypto.subtle.importKey(
72
- "pkcs8",
73
- pkcs8KeyData,
74
- {
75
- name: ECC_ALGORITHM
76
- },
77
- true,
78
- ["deriveBits"]
79
- );
80
- } catch (error) {
81
- throw new Error("Failed to import private key", { cause: error });
82
- }
83
- }
84
-
85
- exports.deriveSecretKey = deriveSecretKey;
86
- exports.exportPrivateKey = exportPrivateKey;
87
- exports.exportPublicKey = exportPublicKey;
88
- exports.generateEccKeys = generateEccKeys;
89
- exports.importPrivateKey = importPrivateKey;
90
- exports.importPublicKey = importPublicKey;
91
- //# sourceMappingURL=asymmetric-crypto.js.map
92
- //# sourceMappingURL=asymmetric-crypto.js.map
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_keys = require('./keys-CinT7kEY.js');
3
+
4
+ exports.deriveSecretKey = require_keys.deriveSecretKey;
5
+ exports.exportPrivateKey = require_keys.exportPrivateKey;
6
+ exports.exportPublicKey = require_keys.exportPublicKey;
7
+ exports.generateEccKeys = require_keys.generateEccKeys;
8
+ exports.importPrivateKey = require_keys.importPrivateKey;
9
+ exports.importPublicKey = require_keys.importPublicKey;