internxt-crypto 1.2.0 → 1.3.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 (100) hide show
  1. package/README.md +4 -4
  2. package/dist/asymmetric-crypto.js +3 -4
  3. package/dist/asymmetric-crypto.js.map +1 -1
  4. package/dist/asymmetric-crypto.mjs +1 -2
  5. package/dist/asymmetric-crypto.mjs.map +1 -1
  6. package/dist/chunk-C13QxCFV.js +50 -0
  7. package/dist/chunk-CfYAbeIz.mjs +13 -0
  8. package/dist/constants.js +2 -3
  9. package/dist/constants.js.map +1 -1
  10. package/dist/constants.mjs +1 -1
  11. package/dist/derive-key.js +50 -5
  12. package/dist/derive-key.js.map +1 -0
  13. package/dist/derive-key.mjs +46 -2
  14. package/dist/derive-key.mjs.map +1 -0
  15. package/dist/{deriveKeysFromPassword-iMHv-tIA.js → derive-password-CbYRDq7V.js} +25 -30
  16. package/dist/derive-password-CbYRDq7V.js.map +1 -0
  17. package/dist/{deriveKeysFromPassword-DFzo2OII.mjs → derive-password-PED-YfwE.mjs} +27 -34
  18. package/dist/derive-password-PED-YfwE.mjs.map +1 -0
  19. package/dist/derive-password.js +5 -6
  20. package/dist/derive-password.mjs +2 -3
  21. package/dist/{emailKeys-BFI-paQq.js → email-crypto-Cr7znO1a.js} +116 -121
  22. package/dist/email-crypto-Cr7znO1a.js.map +1 -0
  23. package/dist/{emailKeys-BjIeINfC.mjs → email-crypto-cHDsjSb5.mjs} +7 -12
  24. package/dist/email-crypto-cHDsjSb5.mjs.map +1 -0
  25. package/dist/email-crypto.d.mts +1 -1
  26. package/dist/email-crypto.d.ts +1 -1
  27. package/dist/email-crypto.js +17 -18
  28. package/dist/email-crypto.mjs +2 -3
  29. package/dist/hash.js +3 -4
  30. package/dist/hash.js.map +1 -1
  31. package/dist/hash.mjs +1 -2
  32. package/dist/hash.mjs.map +1 -1
  33. package/dist/index.d.mts +3 -3
  34. package/dist/index.d.ts +3 -3
  35. package/dist/index.js +55 -55
  36. package/dist/index.mjs +7 -8
  37. package/dist/{emailEncryptionKey-D9sk_WKj.mjs → keystore-crypto-C6F-NQdX.mjs} +48 -64
  38. package/dist/keystore-crypto-C6F-NQdX.mjs.map +1 -0
  39. package/dist/keystore-crypto-CFiiGohl.js +238 -0
  40. package/dist/keystore-crypto-CFiiGohl.js.map +1 -0
  41. package/dist/keystore-crypto.d.mts +18 -19
  42. package/dist/keystore-crypto.d.mts.map +1 -1
  43. package/dist/keystore-crypto.d.ts +18 -19
  44. package/dist/keystore-crypto.d.ts.map +1 -1
  45. package/dist/keystore-crypto.js +11 -11
  46. package/dist/keystore-crypto.mjs +2 -3
  47. package/dist/post-quantum-crypto.js +3 -4
  48. package/dist/post-quantum-crypto.js.map +1 -1
  49. package/dist/post-quantum-crypto.mjs +1 -2
  50. package/dist/post-quantum-crypto.mjs.map +1 -1
  51. package/dist/storage-service.js +13 -15
  52. package/dist/storage-service.js.map +1 -1
  53. package/dist/storage-service.mjs +2 -4
  54. package/dist/storage-service.mjs.map +1 -1
  55. package/dist/symmetric-crypto.js +51 -5
  56. package/dist/symmetric-crypto.js.map +1 -0
  57. package/dist/symmetric-crypto.mjs +47 -2
  58. package/dist/symmetric-crypto.mjs.map +1 -0
  59. package/dist/types-4P0WII1D.d.ts +49 -0
  60. package/dist/types-4P0WII1D.d.ts.map +1 -0
  61. package/dist/types-DAPJQG8U.d.mts +49 -0
  62. package/dist/types-DAPJQG8U.d.mts.map +1 -0
  63. package/dist/types.d.mts +2 -49
  64. package/dist/types.d.ts +2 -49
  65. package/dist/types.js +2 -3
  66. package/dist/types.js.map +1 -1
  67. package/dist/types.mjs +1 -1
  68. package/dist/types.mjs.map +1 -1
  69. package/dist/utils.js +127 -14
  70. package/dist/utils.js.map +1 -0
  71. package/dist/utils.mjs +113 -2
  72. package/dist/utils.mjs.map +1 -0
  73. package/dist/{xwing-iRWVRtNE.js → xwing-7fEqAT7W.js} +18 -19
  74. package/dist/{xwing-iRWVRtNE.js.map → xwing-7fEqAT7W.js.map} +1 -1
  75. package/dist/{xwing-CQmQX6hn.mjs → xwing-B34h5e3Z.mjs} +2 -3
  76. package/dist/{xwing-CQmQX6hn.mjs.map → xwing-B34h5e3Z.mjs.map} +1 -1
  77. package/package.json +22 -22
  78. package/dist/aes-B8TA-JKq.mjs +0 -49
  79. package/dist/aes-B8TA-JKq.mjs.map +0 -1
  80. package/dist/aes-CuW_SPl-.js +0 -67
  81. package/dist/aes-CuW_SPl-.js.map +0 -1
  82. package/dist/chunk-DQk6qfdC.mjs +0 -18
  83. package/dist/chunk-EbLFQX5m.js +0 -60
  84. package/dist/deriveKeysFromMnemonic-DB0UHE-y.mjs +0 -49
  85. package/dist/deriveKeysFromMnemonic-DB0UHE-y.mjs.map +0 -1
  86. package/dist/deriveKeysFromMnemonic-Dbx7VSBQ.js +0 -67
  87. package/dist/deriveKeysFromMnemonic-Dbx7VSBQ.js.map +0 -1
  88. package/dist/deriveKeysFromPassword-DFzo2OII.mjs.map +0 -1
  89. package/dist/deriveKeysFromPassword-iMHv-tIA.js.map +0 -1
  90. package/dist/emailEncryptionKey-Cw-vW_Oq.js +0 -248
  91. package/dist/emailEncryptionKey-Cw-vW_Oq.js.map +0 -1
  92. package/dist/emailEncryptionKey-D9sk_WKj.mjs.map +0 -1
  93. package/dist/emailKeys-BFI-paQq.js.map +0 -1
  94. package/dist/emailKeys-BjIeINfC.mjs.map +0 -1
  95. package/dist/genID-D08K7JPr.mjs +0 -117
  96. package/dist/genID-D08K7JPr.mjs.map +0 -1
  97. package/dist/genID-cWOPmspk.js +0 -190
  98. package/dist/genID-cWOPmspk.js.map +0 -1
  99. package/dist/types.d.mts.map +0 -1
  100. package/dist/types.d.ts.map +0 -1
@@ -1,6 +1,5 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_deriveKeysFromPassword = require('./deriveKeysFromPassword-iMHv-tIA.js');
3
-
4
- exports.generateSalt = require_deriveKeysFromPassword.generateSalt;
5
- exports.getKeyFromPassword = require_deriveKeysFromPassword.getKeyFromPassword;
6
- exports.getKeyFromPasswordAndSalt = require_deriveKeysFromPassword.getKeyFromPasswordAndSalt;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_derive_password = require("./derive-password-CbYRDq7V.js");
3
+ exports.generateSalt = require_derive_password.generateSalt;
4
+ exports.getKeyFromPassword = require_derive_password.getKeyFromPassword;
5
+ exports.getKeyFromPasswordAndSalt = require_derive_password.getKeyFromPasswordAndSalt;
@@ -1,3 +1,2 @@
1
- import { n as getKeyFromPassword, r as getKeyFromPasswordAndSalt, t as generateSalt } from "./deriveKeysFromPassword-DFzo2OII.mjs";
2
-
3
- export { generateSalt, getKeyFromPassword, getKeyFromPasswordAndSalt };
1
+ import { n as getKeyFromPassword, r as getKeyFromPasswordAndSalt, t as generateSalt } from "./derive-password-PED-YfwE.mjs";
2
+ export { generateSalt, getKeyFromPassword, getKeyFromPasswordAndSalt };
@@ -1,12 +1,11 @@
1
- const require_chunk = require('./chunk-EbLFQX5m.js');
2
- const require_constants = require('./constants.js');
3
- const require_genID = require('./genID-cWOPmspk.js');
4
- const require_deriveKeysFromMnemonic = require('./deriveKeysFromMnemonic-Dbx7VSBQ.js');
5
- const require_deriveKeysFromPassword = require('./deriveKeysFromPassword-iMHv-tIA.js');
6
- const require_aes = require('./aes-CuW_SPl-.js');
7
- const require_xwing = require('./xwing-iRWVRtNE.js');
1
+ require("./chunk-C13QxCFV.js");
2
+ const require_constants = require("./constants.js");
3
+ const require_utils = require("./utils.js");
4
+ const require_derive_key = require("./derive-key.js");
5
+ const require_derive_password = require("./derive-password-CbYRDq7V.js");
6
+ const require_symmetric_crypto = require("./symmetric-crypto.js");
7
+ const require_xwing = require("./xwing-7fEqAT7W.js");
8
8
  let _noble_ciphers_aes_js = require("@noble/ciphers/aes.js");
9
-
10
9
  //#region src/key-wrapper/aesWrapper.ts
11
10
  /**
12
11
  * Unwraps the given wrapped key
@@ -28,7 +27,6 @@ async function unwrapKey(encryptedKey, wrappingKey) {
28
27
  async function wrapKey(key, wrappingKey) {
29
28
  return (0, _noble_ciphers_aes_js.aeskw)(wrappingKey).encrypt(key);
30
29
  }
31
-
32
30
  //#endregion
33
31
  //#region src/email-crypto/core.ts
34
32
  /**
@@ -41,7 +39,7 @@ async function wrapKey(key, wrappingKey) {
41
39
  async function encryptEmailBody(body, aux) {
42
40
  try {
43
41
  if (!body.text || !body.subject) throw new Error("Invalid input");
44
- const encryptionKey = require_aes.genSymmetricKey();
42
+ const encryptionKey = require_symmetric_crypto.genSymmetricKey();
45
43
  return {
46
44
  encEmailBody: await encryptEmailBodyWithKey(body, encryptionKey, aux),
47
45
  encryptionKey
@@ -60,17 +58,17 @@ async function encryptEmailBody(body, aux) {
60
58
  */
61
59
  async function encryptEmailBodyWithKey(body, encryptionKey, aux) {
62
60
  try {
63
- const text = require_genID.UTF8ToUint8(body.text);
64
- const subjectEnc = await require_aes.encryptSymmetrically(encryptionKey, require_genID.UTF8ToUint8(body.subject), aux);
61
+ const text = require_utils.UTF8ToUint8(body.text);
62
+ const subjectEnc = await require_symmetric_crypto.encryptSymmetrically(encryptionKey, require_utils.UTF8ToUint8(body.subject), aux);
65
63
  const enc = {
66
- encText: require_genID.uint8ArrayToBase64(await require_aes.encryptSymmetrically(encryptionKey, text, aux)),
67
- encSubject: require_genID.uint8ArrayToBase64(subjectEnc)
64
+ encText: require_utils.uint8ArrayToBase64(await require_symmetric_crypto.encryptSymmetrically(encryptionKey, text, aux)),
65
+ encSubject: require_utils.uint8ArrayToBase64(subjectEnc)
68
66
  };
69
67
  if (body.attachments) {
70
68
  const promises = body.attachments.map((attachment) => {
71
- return require_aes.encryptSymmetrically(encryptionKey, require_genID.UTF8ToUint8(attachment), aux);
69
+ return require_symmetric_crypto.encryptSymmetrically(encryptionKey, require_utils.UTF8ToUint8(attachment), aux);
72
70
  });
73
- enc.encAttachments = (await Promise.all(promises))?.map(require_genID.uint8ArrayToBase64);
71
+ enc.encAttachments = (await Promise.all(promises))?.map(require_utils.uint8ArrayToBase64);
74
72
  }
75
73
  return enc;
76
74
  } catch (error) {
@@ -87,14 +85,14 @@ async function encryptEmailBodyWithKey(body, encryptionKey, aux) {
87
85
  */
88
86
  async function decryptEmailBody(encEmailBody, encryptionKey, aux) {
89
87
  try {
90
- const subject = require_genID.uint8ToUTF8(await require_aes.decryptSymmetrically(encryptionKey, require_genID.base64ToUint8Array(encEmailBody.encSubject), aux));
88
+ const subject = require_utils.uint8ToUTF8(await require_symmetric_crypto.decryptSymmetrically(encryptionKey, require_utils.base64ToUint8Array(encEmailBody.encSubject), aux));
91
89
  const body = {
92
- text: require_genID.uint8ToUTF8(await require_aes.decryptSymmetrically(encryptionKey, require_genID.base64ToUint8Array(encEmailBody.encText), aux)),
90
+ text: require_utils.uint8ToUTF8(await require_symmetric_crypto.decryptSymmetrically(encryptionKey, require_utils.base64ToUint8Array(encEmailBody.encText), aux)),
93
91
  subject
94
92
  };
95
93
  if (encEmailBody.encAttachments) {
96
- const promises = (encEmailBody.encAttachments?.map(require_genID.base64ToUint8Array))?.map((encAtt) => require_aes.decryptSymmetrically(encryptionKey, encAtt, aux));
97
- body.attachments = (await Promise.all(promises))?.map((att) => require_genID.uint8ToUTF8(att));
94
+ const promises = (encEmailBody.encAttachments?.map(require_utils.base64ToUint8Array))?.map((encAtt) => require_symmetric_crypto.decryptSymmetrically(encryptionKey, encAtt, aux));
95
+ body.attachments = (await Promise.all(promises))?.map((att) => require_utils.uint8ToUTF8(att));
98
96
  }
99
97
  return body;
100
98
  } catch (error) {
@@ -112,8 +110,8 @@ async function encryptKeysHybrid(emailEncryptionKey, recipient) {
112
110
  try {
113
111
  const { cipherText, sharedSecret } = require_xwing.encapsulateHybrid(recipient.publicHybridKey);
114
112
  return {
115
- encryptedKey: require_genID.uint8ArrayToBase64(await wrapKey(emailEncryptionKey, sharedSecret)),
116
- hybridCiphertext: require_genID.uint8ArrayToBase64(cipherText),
113
+ encryptedKey: require_utils.uint8ArrayToBase64(await wrapKey(emailEncryptionKey, sharedSecret)),
114
+ hybridCiphertext: require_utils.uint8ArrayToBase64(cipherText),
117
115
  encryptedForEmail: recipient.email
118
116
  };
119
117
  } catch (error) {
@@ -129,8 +127,8 @@ async function encryptKeysHybrid(emailEncryptionKey, recipient) {
129
127
  */
130
128
  async function decryptKeysHybrid(encryptedKey, recipientPrivateKey) {
131
129
  try {
132
- const kyberCiphertext = require_genID.base64ToUint8Array(encryptedKey.hybridCiphertext);
133
- return await unwrapKey(require_genID.base64ToUint8Array(encryptedKey.encryptedKey), require_xwing.decapsulateHybrid(kyberCiphertext, recipientPrivateKey));
130
+ const kyberCiphertext = require_utils.base64ToUint8Array(encryptedKey.hybridCiphertext);
131
+ return await unwrapKey(require_utils.base64ToUint8Array(encryptedKey.encryptedKey), require_xwing.decapsulateHybrid(kyberCiphertext, recipientPrivateKey));
134
132
  } catch (error) {
135
133
  throw new Error("Failed to decrypt email key encrypted via hybrid encryption", { cause: error });
136
134
  }
@@ -144,11 +142,11 @@ async function decryptKeysHybrid(encryptedKey, recipientPrivateKey) {
144
142
  */
145
143
  async function passwordProtectKey(emailEncryptionKey, password) {
146
144
  try {
147
- const { key, salt } = await require_deriveKeysFromPassword.getKeyFromPassword(password);
145
+ const { key, salt } = await require_derive_password.getKeyFromPassword(password);
148
146
  const encryptedKey = await wrapKey(emailEncryptionKey, key);
149
- const saltStr = require_genID.uint8ArrayToBase64(salt);
147
+ const saltStr = require_utils.uint8ArrayToBase64(salt);
150
148
  return {
151
- encryptedKey: require_genID.uint8ArrayToBase64(encryptedKey),
149
+ encryptedKey: require_utils.uint8ArrayToBase64(encryptedKey),
152
150
  salt: saltStr
153
151
  };
154
152
  } catch (error) {
@@ -164,13 +162,12 @@ async function passwordProtectKey(emailEncryptionKey, password) {
164
162
  */
165
163
  async function removePasswordProtection(emailEncryptionKey, password) {
166
164
  try {
167
- const salt = require_genID.base64ToUint8Array(emailEncryptionKey.salt);
168
- return await unwrapKey(require_genID.base64ToUint8Array(emailEncryptionKey.encryptedKey), await require_deriveKeysFromPassword.getKeyFromPasswordAndSalt(password, salt));
165
+ const salt = require_utils.base64ToUint8Array(emailEncryptionKey.salt);
166
+ return await unwrapKey(require_utils.base64ToUint8Array(emailEncryptionKey.encryptedKey), await require_derive_password.getKeyFromPasswordAndSalt(password, salt));
169
167
  } catch (error) {
170
168
  throw new Error("Failed to remove password-protection from email key", { cause: error });
171
169
  }
172
170
  }
173
-
174
171
  //#endregion
175
172
  //#region src/email-crypto/hybridEncyptedEmail.ts
176
173
  /**
@@ -232,7 +229,6 @@ async function decryptEmailHybrid(encEmailBody, recipientPrivateHybridKeys, aux)
232
229
  throw new Error("Failed to decrypt email with hybrid encryption", { cause: error });
233
230
  }
234
231
  }
235
-
236
232
  //#endregion
237
233
  //#region src/email-crypto/pwdProtectedEmail.ts
238
234
  /**
@@ -270,7 +266,6 @@ async function decryptPwdProtectedEmail(encryptedEmail, password, aux) {
270
266
  throw new Error("Failed to decrypt password-protect email", { cause: error });
271
267
  }
272
268
  }
273
-
274
269
  //#endregion
275
270
  //#region src/email-crypto/emailKeys.ts
276
271
  /**
@@ -288,7 +283,7 @@ async function generateEmailKeys() {
288
283
  * @returns The symmetric key for protecting database
289
284
  */
290
285
  const deriveDatabaseKey = async (mnemonic) => {
291
- return require_deriveKeysFromMnemonic.deriveKeyFromMnemonic(mnemonic, require_constants.CONTEXT_DATABASE);
286
+ return require_derive_key.deriveKeyFromMnemonic(mnemonic, require_constants.CONTEXT_DATABASE);
292
287
  };
293
288
  /**
294
289
  * Derives email draft encryption key for the given user
@@ -297,110 +292,110 @@ const deriveDatabaseKey = async (mnemonic) => {
297
292
  * @returns The symmetric key for protecting email drafts
298
293
  */
299
294
  const deriveEmailDraftKey = async (mnemonic) => {
300
- return require_deriveKeysFromMnemonic.deriveKeyFromMnemonic(mnemonic, require_constants.CONTEXT_DRAFT);
295
+ return require_derive_key.deriveKeyFromMnemonic(mnemonic, require_constants.CONTEXT_DRAFT);
301
296
  };
302
-
303
297
  //#endregion
304
- Object.defineProperty(exports, 'createPwdProtectedEmail', {
305
- enumerable: true,
306
- get: function () {
307
- return createPwdProtectedEmail;
308
- }
298
+ Object.defineProperty(exports, "createPwdProtectedEmail", {
299
+ enumerable: true,
300
+ get: function() {
301
+ return createPwdProtectedEmail;
302
+ }
309
303
  });
310
- Object.defineProperty(exports, 'decryptEmailBody', {
311
- enumerable: true,
312
- get: function () {
313
- return decryptEmailBody;
314
- }
304
+ Object.defineProperty(exports, "decryptEmailBody", {
305
+ enumerable: true,
306
+ get: function() {
307
+ return decryptEmailBody;
308
+ }
315
309
  });
316
- Object.defineProperty(exports, 'decryptEmailHybrid', {
317
- enumerable: true,
318
- get: function () {
319
- return decryptEmailHybrid;
320
- }
310
+ Object.defineProperty(exports, "decryptEmailHybrid", {
311
+ enumerable: true,
312
+ get: function() {
313
+ return decryptEmailHybrid;
314
+ }
321
315
  });
322
- Object.defineProperty(exports, 'decryptKeysHybrid', {
323
- enumerable: true,
324
- get: function () {
325
- return decryptKeysHybrid;
326
- }
316
+ Object.defineProperty(exports, "decryptKeysHybrid", {
317
+ enumerable: true,
318
+ get: function() {
319
+ return decryptKeysHybrid;
320
+ }
327
321
  });
328
- Object.defineProperty(exports, 'decryptPwdProtectedEmail', {
329
- enumerable: true,
330
- get: function () {
331
- return decryptPwdProtectedEmail;
332
- }
322
+ Object.defineProperty(exports, "decryptPwdProtectedEmail", {
323
+ enumerable: true,
324
+ get: function() {
325
+ return decryptPwdProtectedEmail;
326
+ }
333
327
  });
334
- Object.defineProperty(exports, 'deriveDatabaseKey', {
335
- enumerable: true,
336
- get: function () {
337
- return deriveDatabaseKey;
338
- }
328
+ Object.defineProperty(exports, "deriveDatabaseKey", {
329
+ enumerable: true,
330
+ get: function() {
331
+ return deriveDatabaseKey;
332
+ }
339
333
  });
340
- Object.defineProperty(exports, 'deriveEmailDraftKey', {
341
- enumerable: true,
342
- get: function () {
343
- return deriveEmailDraftKey;
344
- }
334
+ Object.defineProperty(exports, "deriveEmailDraftKey", {
335
+ enumerable: true,
336
+ get: function() {
337
+ return deriveEmailDraftKey;
338
+ }
345
339
  });
346
- Object.defineProperty(exports, 'encryptEmailBody', {
347
- enumerable: true,
348
- get: function () {
349
- return encryptEmailBody;
350
- }
340
+ Object.defineProperty(exports, "encryptEmailBody", {
341
+ enumerable: true,
342
+ get: function() {
343
+ return encryptEmailBody;
344
+ }
351
345
  });
352
- Object.defineProperty(exports, 'encryptEmailBodyWithKey', {
353
- enumerable: true,
354
- get: function () {
355
- return encryptEmailBodyWithKey;
356
- }
346
+ Object.defineProperty(exports, "encryptEmailBodyWithKey", {
347
+ enumerable: true,
348
+ get: function() {
349
+ return encryptEmailBodyWithKey;
350
+ }
357
351
  });
358
- Object.defineProperty(exports, 'encryptEmailHybrid', {
359
- enumerable: true,
360
- get: function () {
361
- return encryptEmailHybrid;
362
- }
352
+ Object.defineProperty(exports, "encryptEmailHybrid", {
353
+ enumerable: true,
354
+ get: function() {
355
+ return encryptEmailHybrid;
356
+ }
363
357
  });
364
- Object.defineProperty(exports, 'encryptEmailHybridForMultipleRecipients', {
365
- enumerable: true,
366
- get: function () {
367
- return encryptEmailHybridForMultipleRecipients;
368
- }
358
+ Object.defineProperty(exports, "encryptEmailHybridForMultipleRecipients", {
359
+ enumerable: true,
360
+ get: function() {
361
+ return encryptEmailHybridForMultipleRecipients;
362
+ }
369
363
  });
370
- Object.defineProperty(exports, 'encryptKeysHybrid', {
371
- enumerable: true,
372
- get: function () {
373
- return encryptKeysHybrid;
374
- }
364
+ Object.defineProperty(exports, "encryptKeysHybrid", {
365
+ enumerable: true,
366
+ get: function() {
367
+ return encryptKeysHybrid;
368
+ }
375
369
  });
376
- Object.defineProperty(exports, 'generateEmailKeys', {
377
- enumerable: true,
378
- get: function () {
379
- return generateEmailKeys;
380
- }
370
+ Object.defineProperty(exports, "generateEmailKeys", {
371
+ enumerable: true,
372
+ get: function() {
373
+ return generateEmailKeys;
374
+ }
381
375
  });
382
- Object.defineProperty(exports, 'passwordProtectKey', {
383
- enumerable: true,
384
- get: function () {
385
- return passwordProtectKey;
386
- }
376
+ Object.defineProperty(exports, "passwordProtectKey", {
377
+ enumerable: true,
378
+ get: function() {
379
+ return passwordProtectKey;
380
+ }
387
381
  });
388
- Object.defineProperty(exports, 'removePasswordProtection', {
389
- enumerable: true,
390
- get: function () {
391
- return removePasswordProtection;
392
- }
382
+ Object.defineProperty(exports, "removePasswordProtection", {
383
+ enumerable: true,
384
+ get: function() {
385
+ return removePasswordProtection;
386
+ }
393
387
  });
394
- Object.defineProperty(exports, 'unwrapKey', {
395
- enumerable: true,
396
- get: function () {
397
- return unwrapKey;
398
- }
388
+ Object.defineProperty(exports, "unwrapKey", {
389
+ enumerable: true,
390
+ get: function() {
391
+ return unwrapKey;
392
+ }
399
393
  });
400
- Object.defineProperty(exports, 'wrapKey', {
401
- enumerable: true,
402
- get: function () {
403
- return wrapKey;
404
- }
394
+ Object.defineProperty(exports, "wrapKey", {
395
+ enumerable: true,
396
+ get: function() {
397
+ return wrapKey;
398
+ }
405
399
  });
406
- //# sourceMappingURL=emailKeys-BFI-paQq.js.map
400
+
401
+ //# sourceMappingURL=email-crypto-Cr7znO1a.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-crypto-Cr7znO1a.js","names":["genSymmetricKey","UTF8ToUint8","encryptSymmetrically","uint8ArrayToBase64","uint8ToUTF8","decryptSymmetrically","base64ToUint8Array","encapsulateHybrid","decapsulateHybrid","getKeyFromPassword","getKeyFromPasswordAndSalt","genHybridKeys","deriveKeyFromMnemonic","CONTEXT_DATABASE","CONTEXT_DRAFT"],"sources":["../src/key-wrapper/aesWrapper.ts","../src/email-crypto/core.ts","../src/email-crypto/hybridEncyptedEmail.ts","../src/email-crypto/pwdProtectedEmail.ts","../src/email-crypto/emailKeys.ts"],"sourcesContent":["import { aeskw } from '@noble/ciphers/aes.js';\n\n/**\n * Unwraps the given wrapped key\n *\n * @param encryptedKey - The wrapped key\n * @param wrappingKey - The secret key used for unwrapping\n * @returns The resulting key\n */\nexport async function unwrapKey(encryptedKey: Uint8Array, wrappingKey: Uint8Array): Promise<Uint8Array> {\n return aeskw(wrappingKey).decrypt(encryptedKey);\n}\n\n/**\n * Wraps the given key\n *\n * @param key - The key to be wrapped\n * @param wrappingKey - The secret key used for wrapping\n * @returns The resulting ciphertext\n */\nexport async function wrapKey(key: Uint8Array, wrappingKey: Uint8Array): Promise<Uint8Array> {\n return aeskw(wrappingKey).encrypt(key);\n}\n","import { HybridEncKey, PwdProtectedKey, EmailBody, EmailBodyEncrypted, RecipientWithPublicKey } from '../types';\nimport { encryptSymmetrically, decryptSymmetrically, genSymmetricKey } from '../symmetric-crypto';\nimport { encapsulateHybrid, decapsulateHybrid } from '../hybrid-crypto';\nimport { wrapKey, unwrapKey } from '../key-wrapper';\nimport { getKeyFromPassword, getKeyFromPasswordAndSalt } from '../derive-password';\nimport { UTF8ToUint8, base64ToUint8Array, uint8ArrayToBase64, uint8ToUTF8 } from '../utils';\n\n/**\n * Symmetrically encrypts email body.\n *\n * @param body - The email body to encrypt.\n * @param aux - An optional auxilary sting for AEAD (e.g., email ID or timestamp).\n * @returns The resulting encrypted email body and symmetric key used for encryption\n */\nexport async function encryptEmailBody(\n body: EmailBody,\n aux?: Uint8Array,\n): Promise<{\n encEmailBody: EmailBodyEncrypted;\n encryptionKey: Uint8Array;\n}> {\n try {\n if (!body.text || !body.subject) {\n throw new Error('Invalid input');\n }\n const encryptionKey = genSymmetricKey();\n const encEmailBody = await encryptEmailBodyWithKey(body, encryptionKey, aux);\n\n return { encEmailBody, encryptionKey };\n } catch (error) {\n throw new Error('Failed to symmetrically encrypt email body', { cause: error });\n }\n}\n\n/**\n * Symmetrically encrypts email body with the given key.\n *\n * @param body - The email body to encrypt.\n * @param encryptionKey - The symmetric key to encrypt the email.\n * @param aux - An optional auxilary sting for AEAD (e.g., email ID or timestamp).\n * @returns The resulting encrypted email body and symmetric key used for encryption\n */\nexport async function encryptEmailBodyWithKey(\n body: EmailBody,\n encryptionKey: Uint8Array,\n aux?: Uint8Array,\n): Promise<EmailBodyEncrypted> {\n try {\n const text = UTF8ToUint8(body.text);\n const subject = UTF8ToUint8(body.subject);\n const subjectEnc = await encryptSymmetrically(encryptionKey, subject, aux);\n const encryptedText = await encryptSymmetrically(encryptionKey, text, aux);\n const encText = uint8ArrayToBase64(encryptedText);\n const encSubject = uint8ArrayToBase64(subjectEnc);\n const enc: EmailBodyEncrypted = { encText, encSubject };\n\n if (body.attachments) {\n const promises = body.attachments.map((attachment) => {\n const binaryAttachment = UTF8ToUint8(attachment);\n return encryptSymmetrically(encryptionKey, binaryAttachment, aux);\n });\n const encryptedAttachments = await Promise.all(promises);\n enc.encAttachments = encryptedAttachments?.map(uint8ArrayToBase64);\n }\n\n return enc;\n } catch (error) {\n throw new Error('Failed to encrypt email body', { cause: error });\n }\n}\n\n/**\n * Decrypts symmetrically encrypted email body.\n *\n * @param encEmailBody - The email body to decrypt.\n * @param encryptionKey - The symmetric key to decrypt the email.\n * @param aux - An optional auxilary sting for AEAD (e.g., email ID or timestamp).\n * @returns The resulting decrypted email body\n */\nexport async function decryptEmailBody(\n encEmailBody: EmailBodyEncrypted,\n encryptionKey: Uint8Array,\n aux?: Uint8Array,\n): Promise<EmailBody> {\n try {\n const encSubject = base64ToUint8Array(encEmailBody.encSubject);\n const subjectArray = await decryptSymmetrically(encryptionKey, encSubject, aux);\n const subject = uint8ToUTF8(subjectArray);\n const encText = base64ToUint8Array(encEmailBody.encText);\n const textArray = await decryptSymmetrically(encryptionKey, encText, aux);\n const text = uint8ToUTF8(textArray);\n const body: EmailBody = { text, subject };\n\n if (encEmailBody.encAttachments) {\n const encAttachments = encEmailBody.encAttachments?.map(base64ToUint8Array);\n const promises = encAttachments?.map((encAtt) => decryptSymmetrically(encryptionKey, encAtt, aux));\n const decryptedAttachments = await Promise.all(promises);\n body.attachments = decryptedAttachments?.map((att) => uint8ToUTF8(att));\n }\n\n return body;\n } catch (error) {\n throw new Error('Failed to symmetrically decrypt email body', { cause: error });\n }\n}\n\n/**\n * Encrypts the email symmetric key using hybrid encryption.\n *\n * @param emailEncryptionKey - The symmetric key used for email encryption.\n * @param recipient - The recipient with a public hybrid key.\n * @returns The encrypted email symmetric key\n */\nexport async function encryptKeysHybrid(\n emailEncryptionKey: Uint8Array,\n recipient: RecipientWithPublicKey,\n): Promise<HybridEncKey> {\n try {\n const { cipherText, sharedSecret } = encapsulateHybrid(recipient.publicHybridKey);\n const encryptedKey = await wrapKey(emailEncryptionKey, sharedSecret);\n const encryptedKeyBase64 = uint8ArrayToBase64(encryptedKey);\n const kyberCiphertextBase64 = uint8ArrayToBase64(cipherText);\n\n return {\n encryptedKey: encryptedKeyBase64,\n hybridCiphertext: kyberCiphertextBase64,\n encryptedForEmail: recipient.email,\n };\n } catch (error) {\n throw new Error('Failed to encrypt email key using hybrid encryption', { cause: error });\n }\n}\n\n/**\n * Decrypts the email symmetric key encrypted via hybrid encryption.\n *\n * @param encryptedKey - The encrypted email key.\n * @param recipientPrivateKey - The private key of the recipient.\n * @returns The email encryption key\n */\nexport async function decryptKeysHybrid(\n encryptedKey: HybridEncKey,\n recipientPrivateKey: Uint8Array,\n): Promise<Uint8Array> {\n try {\n const kyberCiphertext = base64ToUint8Array(encryptedKey.hybridCiphertext);\n const encKey = base64ToUint8Array(encryptedKey.encryptedKey);\n const sharedSecret = decapsulateHybrid(kyberCiphertext, recipientPrivateKey);\n const encryptionKey = await unwrapKey(encKey, sharedSecret);\n return encryptionKey;\n } catch (error) {\n throw new Error('Failed to decrypt email key encrypted via hybrid encryption', { cause: error });\n }\n}\n\n/**\n * Password-protects the email symmetric key.\n *\n * @param emailEncryptionKey - The symmetric key used for email encryption.\n * @param password - The secret password for key protection.\n * @returns The password-protected email symmetric key\n */\nexport async function passwordProtectKey(emailEncryptionKey: Uint8Array, password: string): Promise<PwdProtectedKey> {\n try {\n const { key, salt } = await getKeyFromPassword(password);\n const encryptedKey = await wrapKey(emailEncryptionKey, key);\n const saltStr = uint8ArrayToBase64(salt);\n const encryptedKeyStr = uint8ArrayToBase64(encryptedKey);\n return { encryptedKey: encryptedKeyStr, salt: saltStr };\n } catch (error) {\n throw new Error('Failed to password-protect email key', { cause: error });\n }\n}\n\n/**\n * Removes passoword-protection and exposes the email symmetric key.\n *\n * @param emailEncryptionKey - The password-protected email key.\n * @param password - The secret password for key protection.\n * @returns The email encryption key\n */\nexport async function removePasswordProtection(\n emailEncryptionKey: PwdProtectedKey,\n password: string,\n): Promise<Uint8Array> {\n try {\n const salt = base64ToUint8Array(emailEncryptionKey.salt);\n const encryptedKey = base64ToUint8Array(emailEncryptionKey.encryptedKey);\n const key = await getKeyFromPasswordAndSalt(password, salt);\n const encryptionKey = await unwrapKey(encryptedKey, key);\n return encryptionKey;\n } catch (error) {\n throw new Error('Failed to remove password-protection from email key', { cause: error });\n }\n}\n","import { HybridEncryptedEmail, EmailBody, RecipientWithPublicKey } from '../types';\nimport { decryptEmailBody, encryptKeysHybrid, decryptKeysHybrid, encryptEmailBody } from './core';\n\n/**\n * Encrypts the email body using hybrid encryption.\n *\n * @param body - The email body to encrypt.\n * @param recipientPublicKeys - The public keys of the recipient.\n * @param aux - An optional auxilary sting for AEAD (e.g., email ID or timestamp).\n * @returns The encrypted email body\n */\nexport async function encryptEmailHybrid(\n body: EmailBody,\n recipient: RecipientWithPublicKey,\n aux?: Uint8Array,\n): Promise<HybridEncryptedEmail> {\n try {\n const { encryptionKey, encEmailBody } = await encryptEmailBody(body, aux);\n const encryptedKey = await encryptKeysHybrid(encryptionKey, recipient);\n return { encEmailBody, encryptedKey };\n } catch (error) {\n throw new Error('Failed to encrypt email body with hybrid encryption', { cause: error });\n }\n}\n\n/**\n * Encrypts the email body using hybrid encryption for multiple recipients.\n *\n * @param body - The email body to encrypt for multiple recipients.\n * @param recipients - The recipients with corresponding public keys.\n * @param aux - An optional auxilary sting for AEAD (e.g., email ID or timestamp).\n * @returns The set of encrypted email bodies\n */\nexport async function encryptEmailHybridForMultipleRecipients(\n body: EmailBody,\n recipients: RecipientWithPublicKey[],\n aux?: Uint8Array,\n): Promise<HybridEncryptedEmail[]> {\n try {\n const { encryptionKey, encEmailBody } = await encryptEmailBody(body, aux);\n\n const encryptedEmails: HybridEncryptedEmail[] = [];\n for (const recipient of recipients) {\n const encryptedKey = await encryptKeysHybrid(encryptionKey, recipient);\n encryptedEmails.push({\n encEmailBody: encEmailBody,\n encryptedKey,\n });\n }\n return encryptedEmails;\n } catch (error) {\n throw new Error('Failed to encrypt email to multiple recipients with hybrid encryption', { cause: error });\n }\n}\n\n/**\n * Decrypts the email using hybrid encryption.\n *\n * @param encEmailBody - The encrypted email.\n * @param recipientPrivateHybridKeys - The private key of the recipient.\n * @param aux - An optional auxilary sting for AEAD (e.g., email ID or timestamp).\n * @returns The decrypted email body\n */\nexport async function decryptEmailHybrid(\n encEmailBody: HybridEncryptedEmail,\n recipientPrivateHybridKeys: Uint8Array,\n aux?: Uint8Array,\n): Promise<EmailBody> {\n try {\n const encryptionKey = await decryptKeysHybrid(encEmailBody.encryptedKey, recipientPrivateHybridKeys);\n const body = await decryptEmailBody(encEmailBody.encEmailBody, encryptionKey, aux);\n return body;\n } catch (error) {\n throw new Error('Failed to decrypt email with hybrid encryption', { cause: error });\n }\n}\n","import { PwdProtectedEmail, EmailBody } from '../types';\nimport { decryptEmailBody, passwordProtectKey, removePasswordProtection, encryptEmailBody } from './core';\n\n/**\n * Creates a password-protected email.\n *\n * @param email - The email to password-protect\n * @param password - The secret password shared among recipients\n * @param aux - An optional auxilary sting for AEAD (e.g., email ID or timestamp).\n * @returns The password-protected email\n */\nexport async function createPwdProtectedEmail(\n emailBody: EmailBody,\n password: string,\n aux?: Uint8Array,\n): Promise<PwdProtectedEmail> {\n try {\n const { encryptionKey, encEmailBody } = await encryptEmailBody(emailBody, aux);\n const encryptedKey = await passwordProtectKey(encryptionKey, password);\n\n return { encEmailBody, encryptedKey };\n } catch (error) {\n throw new Error('Failed to password-protect email', { cause: error });\n }\n}\n\n/**\n * Opens a password-protected email.\n *\n * @param encryptedEmail - The encrypted email\n * @param password - The secret password shared among recipients.\n * @param aux - An optional auxilary sting for AEAD (e.g., email ID or timestamp).\n * @returns The decrypted email body\n */\nexport async function decryptPwdProtectedEmail(\n encryptedEmail: PwdProtectedEmail,\n password: string,\n aux?: Uint8Array,\n): Promise<EmailBody> {\n try {\n const encryptionKey = await removePasswordProtection(encryptedEmail.encryptedKey, password);\n const body = await decryptEmailBody(encryptedEmail.encEmailBody, encryptionKey, aux);\n return body;\n } catch (error) {\n throw new Error('Failed to decrypt password-protect email', { cause: error });\n }\n}\n","import { genHybridKeys } from '../hybrid-crypto';\nimport { HybridKeyPair } from '../types';\nimport { deriveKeyFromMnemonic } from '../derive-key';\nimport { CONTEXT_DATABASE, CONTEXT_DRAFT } from '../constants';\n\n/**\n * Generates public and private keys for email encryption.\n *\n * @returns The user's private and public keys\n */\nexport async function generateEmailKeys(): Promise<HybridKeyPair> {\n return genHybridKeys();\n}\n\n/**\n * Derives database encryption key for the given user\n *\n * @param mnemonic - The user's mnemonic (machine-generated with secure PRNG)\n * @returns The symmetric key for protecting database\n */\nexport const deriveDatabaseKey = async (mnemonic: string): Promise<Uint8Array> => {\n return deriveKeyFromMnemonic(mnemonic, CONTEXT_DATABASE);\n};\n\n/**\n * Derives email draft encryption key for the given user\n *\n * @param mnemonic - The user's mnemonic (machine-generated with secure PRNG)\n * @returns The symmetric key for protecting email drafts\n */\nexport const deriveEmailDraftKey = async (mnemonic: string): Promise<Uint8Array> => {\n return deriveKeyFromMnemonic(mnemonic, CONTEXT_DRAFT);\n};\n"],"mappings":"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"}
@@ -1,11 +1,10 @@
1
1
  import { CONTEXT_DATABASE, CONTEXT_DRAFT } from "./constants.mjs";
2
- import { c as base64ToUint8Array, f as uint8ToUTF8, s as UTF8ToUint8, u as uint8ArrayToBase64 } from "./genID-D08K7JPr.mjs";
3
- import { t as deriveKeyFromMnemonic } from "./deriveKeysFromMnemonic-DB0UHE-y.mjs";
4
- import { n as getKeyFromPassword, r as getKeyFromPasswordAndSalt } from "./deriveKeysFromPassword-DFzo2OII.mjs";
5
- import { n as encryptSymmetrically, r as genSymmetricKey, t as decryptSymmetrically } from "./aes-B8TA-JKq.mjs";
6
- import { n as encapsulateHybrid, r as genHybridKeys, t as decapsulateHybrid } from "./xwing-CQmQX6hn.mjs";
2
+ import { UTF8ToUint8, base64ToUint8Array, uint8ArrayToBase64, uint8ToUTF8 } from "./utils.mjs";
3
+ import { deriveKeyFromMnemonic } from "./derive-key.mjs";
4
+ import { n as getKeyFromPassword, r as getKeyFromPasswordAndSalt } from "./derive-password-PED-YfwE.mjs";
5
+ import { decryptSymmetrically, encryptSymmetrically, genSymmetricKey } from "./symmetric-crypto.mjs";
6
+ import { n as encapsulateHybrid, r as genHybridKeys, t as decapsulateHybrid } from "./xwing-B34h5e3Z.mjs";
7
7
  import { aeskw } from "@noble/ciphers/aes.js";
8
-
9
8
  //#region src/key-wrapper/aesWrapper.ts
10
9
  /**
11
10
  * Unwraps the given wrapped key
@@ -27,7 +26,6 @@ async function unwrapKey(encryptedKey, wrappingKey) {
27
26
  async function wrapKey(key, wrappingKey) {
28
27
  return aeskw(wrappingKey).encrypt(key);
29
28
  }
30
-
31
29
  //#endregion
32
30
  //#region src/email-crypto/core.ts
33
31
  /**
@@ -169,7 +167,6 @@ async function removePasswordProtection(emailEncryptionKey, password) {
169
167
  throw new Error("Failed to remove password-protection from email key", { cause: error });
170
168
  }
171
169
  }
172
-
173
170
  //#endregion
174
171
  //#region src/email-crypto/hybridEncyptedEmail.ts
175
172
  /**
@@ -231,7 +228,6 @@ async function decryptEmailHybrid(encEmailBody, recipientPrivateHybridKeys, aux)
231
228
  throw new Error("Failed to decrypt email with hybrid encryption", { cause: error });
232
229
  }
233
230
  }
234
-
235
231
  //#endregion
236
232
  //#region src/email-crypto/pwdProtectedEmail.ts
237
233
  /**
@@ -269,7 +265,6 @@ async function decryptPwdProtectedEmail(encryptedEmail, password, aux) {
269
265
  throw new Error("Failed to decrypt password-protect email", { cause: error });
270
266
  }
271
267
  }
272
-
273
268
  //#endregion
274
269
  //#region src/email-crypto/emailKeys.ts
275
270
  /**
@@ -298,7 +293,7 @@ const deriveDatabaseKey = async (mnemonic) => {
298
293
  const deriveEmailDraftKey = async (mnemonic) => {
299
294
  return deriveKeyFromMnemonic(mnemonic, CONTEXT_DRAFT);
300
295
  };
301
-
302
296
  //#endregion
303
297
  export { wrapKey as _, decryptPwdProtectedEmail as a, encryptEmailHybridForMultipleRecipients as c, encryptEmailBody as d, encryptEmailBodyWithKey as f, unwrapKey as g, removePasswordProtection as h, createPwdProtectedEmail as i, decryptEmailBody as l, passwordProtectKey as m, deriveEmailDraftKey as n, decryptEmailHybrid as o, encryptKeysHybrid as p, generateEmailKeys as r, encryptEmailHybrid as s, deriveDatabaseKey as t, decryptKeysHybrid as u };
304
- //# sourceMappingURL=emailKeys-BjIeINfC.mjs.map
298
+
299
+ //# sourceMappingURL=email-crypto-cHDsjSb5.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-crypto-cHDsjSb5.mjs","names":[],"sources":["../src/key-wrapper/aesWrapper.ts","../src/email-crypto/core.ts","../src/email-crypto/hybridEncyptedEmail.ts","../src/email-crypto/pwdProtectedEmail.ts","../src/email-crypto/emailKeys.ts"],"sourcesContent":["import { aeskw } from '@noble/ciphers/aes.js';\n\n/**\n * Unwraps the given wrapped key\n *\n * @param encryptedKey - The wrapped key\n * @param wrappingKey - The secret key used for unwrapping\n * @returns The resulting key\n */\nexport async function unwrapKey(encryptedKey: Uint8Array, wrappingKey: Uint8Array): Promise<Uint8Array> {\n return aeskw(wrappingKey).decrypt(encryptedKey);\n}\n\n/**\n * Wraps the given key\n *\n * @param key - The key to be wrapped\n * @param wrappingKey - The secret key used for wrapping\n * @returns The resulting ciphertext\n */\nexport async function wrapKey(key: Uint8Array, wrappingKey: Uint8Array): Promise<Uint8Array> {\n return aeskw(wrappingKey).encrypt(key);\n}\n","import { HybridEncKey, PwdProtectedKey, EmailBody, EmailBodyEncrypted, RecipientWithPublicKey } from '../types';\nimport { encryptSymmetrically, decryptSymmetrically, genSymmetricKey } from '../symmetric-crypto';\nimport { encapsulateHybrid, decapsulateHybrid } from '../hybrid-crypto';\nimport { wrapKey, unwrapKey } from '../key-wrapper';\nimport { getKeyFromPassword, getKeyFromPasswordAndSalt } from '../derive-password';\nimport { UTF8ToUint8, base64ToUint8Array, uint8ArrayToBase64, uint8ToUTF8 } from '../utils';\n\n/**\n * Symmetrically encrypts email body.\n *\n * @param body - The email body to encrypt.\n * @param aux - An optional auxilary sting for AEAD (e.g., email ID or timestamp).\n * @returns The resulting encrypted email body and symmetric key used for encryption\n */\nexport async function encryptEmailBody(\n body: EmailBody,\n aux?: Uint8Array,\n): Promise<{\n encEmailBody: EmailBodyEncrypted;\n encryptionKey: Uint8Array;\n}> {\n try {\n if (!body.text || !body.subject) {\n throw new Error('Invalid input');\n }\n const encryptionKey = genSymmetricKey();\n const encEmailBody = await encryptEmailBodyWithKey(body, encryptionKey, aux);\n\n return { encEmailBody, encryptionKey };\n } catch (error) {\n throw new Error('Failed to symmetrically encrypt email body', { cause: error });\n }\n}\n\n/**\n * Symmetrically encrypts email body with the given key.\n *\n * @param body - The email body to encrypt.\n * @param encryptionKey - The symmetric key to encrypt the email.\n * @param aux - An optional auxilary sting for AEAD (e.g., email ID or timestamp).\n * @returns The resulting encrypted email body and symmetric key used for encryption\n */\nexport async function encryptEmailBodyWithKey(\n body: EmailBody,\n encryptionKey: Uint8Array,\n aux?: Uint8Array,\n): Promise<EmailBodyEncrypted> {\n try {\n const text = UTF8ToUint8(body.text);\n const subject = UTF8ToUint8(body.subject);\n const subjectEnc = await encryptSymmetrically(encryptionKey, subject, aux);\n const encryptedText = await encryptSymmetrically(encryptionKey, text, aux);\n const encText = uint8ArrayToBase64(encryptedText);\n const encSubject = uint8ArrayToBase64(subjectEnc);\n const enc: EmailBodyEncrypted = { encText, encSubject };\n\n if (body.attachments) {\n const promises = body.attachments.map((attachment) => {\n const binaryAttachment = UTF8ToUint8(attachment);\n return encryptSymmetrically(encryptionKey, binaryAttachment, aux);\n });\n const encryptedAttachments = await Promise.all(promises);\n enc.encAttachments = encryptedAttachments?.map(uint8ArrayToBase64);\n }\n\n return enc;\n } catch (error) {\n throw new Error('Failed to encrypt email body', { cause: error });\n }\n}\n\n/**\n * Decrypts symmetrically encrypted email body.\n *\n * @param encEmailBody - The email body to decrypt.\n * @param encryptionKey - The symmetric key to decrypt the email.\n * @param aux - An optional auxilary sting for AEAD (e.g., email ID or timestamp).\n * @returns The resulting decrypted email body\n */\nexport async function decryptEmailBody(\n encEmailBody: EmailBodyEncrypted,\n encryptionKey: Uint8Array,\n aux?: Uint8Array,\n): Promise<EmailBody> {\n try {\n const encSubject = base64ToUint8Array(encEmailBody.encSubject);\n const subjectArray = await decryptSymmetrically(encryptionKey, encSubject, aux);\n const subject = uint8ToUTF8(subjectArray);\n const encText = base64ToUint8Array(encEmailBody.encText);\n const textArray = await decryptSymmetrically(encryptionKey, encText, aux);\n const text = uint8ToUTF8(textArray);\n const body: EmailBody = { text, subject };\n\n if (encEmailBody.encAttachments) {\n const encAttachments = encEmailBody.encAttachments?.map(base64ToUint8Array);\n const promises = encAttachments?.map((encAtt) => decryptSymmetrically(encryptionKey, encAtt, aux));\n const decryptedAttachments = await Promise.all(promises);\n body.attachments = decryptedAttachments?.map((att) => uint8ToUTF8(att));\n }\n\n return body;\n } catch (error) {\n throw new Error('Failed to symmetrically decrypt email body', { cause: error });\n }\n}\n\n/**\n * Encrypts the email symmetric key using hybrid encryption.\n *\n * @param emailEncryptionKey - The symmetric key used for email encryption.\n * @param recipient - The recipient with a public hybrid key.\n * @returns The encrypted email symmetric key\n */\nexport async function encryptKeysHybrid(\n emailEncryptionKey: Uint8Array,\n recipient: RecipientWithPublicKey,\n): Promise<HybridEncKey> {\n try {\n const { cipherText, sharedSecret } = encapsulateHybrid(recipient.publicHybridKey);\n const encryptedKey = await wrapKey(emailEncryptionKey, sharedSecret);\n const encryptedKeyBase64 = uint8ArrayToBase64(encryptedKey);\n const kyberCiphertextBase64 = uint8ArrayToBase64(cipherText);\n\n return {\n encryptedKey: encryptedKeyBase64,\n hybridCiphertext: kyberCiphertextBase64,\n encryptedForEmail: recipient.email,\n };\n } catch (error) {\n throw new Error('Failed to encrypt email key using hybrid encryption', { cause: error });\n }\n}\n\n/**\n * Decrypts the email symmetric key encrypted via hybrid encryption.\n *\n * @param encryptedKey - The encrypted email key.\n * @param recipientPrivateKey - The private key of the recipient.\n * @returns The email encryption key\n */\nexport async function decryptKeysHybrid(\n encryptedKey: HybridEncKey,\n recipientPrivateKey: Uint8Array,\n): Promise<Uint8Array> {\n try {\n const kyberCiphertext = base64ToUint8Array(encryptedKey.hybridCiphertext);\n const encKey = base64ToUint8Array(encryptedKey.encryptedKey);\n const sharedSecret = decapsulateHybrid(kyberCiphertext, recipientPrivateKey);\n const encryptionKey = await unwrapKey(encKey, sharedSecret);\n return encryptionKey;\n } catch (error) {\n throw new Error('Failed to decrypt email key encrypted via hybrid encryption', { cause: error });\n }\n}\n\n/**\n * Password-protects the email symmetric key.\n *\n * @param emailEncryptionKey - The symmetric key used for email encryption.\n * @param password - The secret password for key protection.\n * @returns The password-protected email symmetric key\n */\nexport async function passwordProtectKey(emailEncryptionKey: Uint8Array, password: string): Promise<PwdProtectedKey> {\n try {\n const { key, salt } = await getKeyFromPassword(password);\n const encryptedKey = await wrapKey(emailEncryptionKey, key);\n const saltStr = uint8ArrayToBase64(salt);\n const encryptedKeyStr = uint8ArrayToBase64(encryptedKey);\n return { encryptedKey: encryptedKeyStr, salt: saltStr };\n } catch (error) {\n throw new Error('Failed to password-protect email key', { cause: error });\n }\n}\n\n/**\n * Removes passoword-protection and exposes the email symmetric key.\n *\n * @param emailEncryptionKey - The password-protected email key.\n * @param password - The secret password for key protection.\n * @returns The email encryption key\n */\nexport async function removePasswordProtection(\n emailEncryptionKey: PwdProtectedKey,\n password: string,\n): Promise<Uint8Array> {\n try {\n const salt = base64ToUint8Array(emailEncryptionKey.salt);\n const encryptedKey = base64ToUint8Array(emailEncryptionKey.encryptedKey);\n const key = await getKeyFromPasswordAndSalt(password, salt);\n const encryptionKey = await unwrapKey(encryptedKey, key);\n return encryptionKey;\n } catch (error) {\n throw new Error('Failed to remove password-protection from email key', { cause: error });\n }\n}\n","import { HybridEncryptedEmail, EmailBody, RecipientWithPublicKey } from '../types';\nimport { decryptEmailBody, encryptKeysHybrid, decryptKeysHybrid, encryptEmailBody } from './core';\n\n/**\n * Encrypts the email body using hybrid encryption.\n *\n * @param body - The email body to encrypt.\n * @param recipientPublicKeys - The public keys of the recipient.\n * @param aux - An optional auxilary sting for AEAD (e.g., email ID or timestamp).\n * @returns The encrypted email body\n */\nexport async function encryptEmailHybrid(\n body: EmailBody,\n recipient: RecipientWithPublicKey,\n aux?: Uint8Array,\n): Promise<HybridEncryptedEmail> {\n try {\n const { encryptionKey, encEmailBody } = await encryptEmailBody(body, aux);\n const encryptedKey = await encryptKeysHybrid(encryptionKey, recipient);\n return { encEmailBody, encryptedKey };\n } catch (error) {\n throw new Error('Failed to encrypt email body with hybrid encryption', { cause: error });\n }\n}\n\n/**\n * Encrypts the email body using hybrid encryption for multiple recipients.\n *\n * @param body - The email body to encrypt for multiple recipients.\n * @param recipients - The recipients with corresponding public keys.\n * @param aux - An optional auxilary sting for AEAD (e.g., email ID or timestamp).\n * @returns The set of encrypted email bodies\n */\nexport async function encryptEmailHybridForMultipleRecipients(\n body: EmailBody,\n recipients: RecipientWithPublicKey[],\n aux?: Uint8Array,\n): Promise<HybridEncryptedEmail[]> {\n try {\n const { encryptionKey, encEmailBody } = await encryptEmailBody(body, aux);\n\n const encryptedEmails: HybridEncryptedEmail[] = [];\n for (const recipient of recipients) {\n const encryptedKey = await encryptKeysHybrid(encryptionKey, recipient);\n encryptedEmails.push({\n encEmailBody: encEmailBody,\n encryptedKey,\n });\n }\n return encryptedEmails;\n } catch (error) {\n throw new Error('Failed to encrypt email to multiple recipients with hybrid encryption', { cause: error });\n }\n}\n\n/**\n * Decrypts the email using hybrid encryption.\n *\n * @param encEmailBody - The encrypted email.\n * @param recipientPrivateHybridKeys - The private key of the recipient.\n * @param aux - An optional auxilary sting for AEAD (e.g., email ID or timestamp).\n * @returns The decrypted email body\n */\nexport async function decryptEmailHybrid(\n encEmailBody: HybridEncryptedEmail,\n recipientPrivateHybridKeys: Uint8Array,\n aux?: Uint8Array,\n): Promise<EmailBody> {\n try {\n const encryptionKey = await decryptKeysHybrid(encEmailBody.encryptedKey, recipientPrivateHybridKeys);\n const body = await decryptEmailBody(encEmailBody.encEmailBody, encryptionKey, aux);\n return body;\n } catch (error) {\n throw new Error('Failed to decrypt email with hybrid encryption', { cause: error });\n }\n}\n","import { PwdProtectedEmail, EmailBody } from '../types';\nimport { decryptEmailBody, passwordProtectKey, removePasswordProtection, encryptEmailBody } from './core';\n\n/**\n * Creates a password-protected email.\n *\n * @param email - The email to password-protect\n * @param password - The secret password shared among recipients\n * @param aux - An optional auxilary sting for AEAD (e.g., email ID or timestamp).\n * @returns The password-protected email\n */\nexport async function createPwdProtectedEmail(\n emailBody: EmailBody,\n password: string,\n aux?: Uint8Array,\n): Promise<PwdProtectedEmail> {\n try {\n const { encryptionKey, encEmailBody } = await encryptEmailBody(emailBody, aux);\n const encryptedKey = await passwordProtectKey(encryptionKey, password);\n\n return { encEmailBody, encryptedKey };\n } catch (error) {\n throw new Error('Failed to password-protect email', { cause: error });\n }\n}\n\n/**\n * Opens a password-protected email.\n *\n * @param encryptedEmail - The encrypted email\n * @param password - The secret password shared among recipients.\n * @param aux - An optional auxilary sting for AEAD (e.g., email ID or timestamp).\n * @returns The decrypted email body\n */\nexport async function decryptPwdProtectedEmail(\n encryptedEmail: PwdProtectedEmail,\n password: string,\n aux?: Uint8Array,\n): Promise<EmailBody> {\n try {\n const encryptionKey = await removePasswordProtection(encryptedEmail.encryptedKey, password);\n const body = await decryptEmailBody(encryptedEmail.encEmailBody, encryptionKey, aux);\n return body;\n } catch (error) {\n throw new Error('Failed to decrypt password-protect email', { cause: error });\n }\n}\n","import { genHybridKeys } from '../hybrid-crypto';\nimport { HybridKeyPair } from '../types';\nimport { deriveKeyFromMnemonic } from '../derive-key';\nimport { CONTEXT_DATABASE, CONTEXT_DRAFT } from '../constants';\n\n/**\n * Generates public and private keys for email encryption.\n *\n * @returns The user's private and public keys\n */\nexport async function generateEmailKeys(): Promise<HybridKeyPair> {\n return genHybridKeys();\n}\n\n/**\n * Derives database encryption key for the given user\n *\n * @param mnemonic - The user's mnemonic (machine-generated with secure PRNG)\n * @returns The symmetric key for protecting database\n */\nexport const deriveDatabaseKey = async (mnemonic: string): Promise<Uint8Array> => {\n return deriveKeyFromMnemonic(mnemonic, CONTEXT_DATABASE);\n};\n\n/**\n * Derives email draft encryption key for the given user\n *\n * @param mnemonic - The user's mnemonic (machine-generated with secure PRNG)\n * @returns The symmetric key for protecting email drafts\n */\nexport const deriveEmailDraftKey = async (mnemonic: string): Promise<Uint8Array> => {\n return deriveKeyFromMnemonic(mnemonic, CONTEXT_DRAFT);\n};\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { EmailBody, EmailBodyEncrypted, HybridEncKey, HybridEncryptedEmail, HybridKeyPair, PwdProtectedEmail, PwdProtectedKey, RecipientWithPublicKey } from "./types.mjs";
1
+ import { a as HybridEncryptedEmail, c as PwdProtectedEmail, i as HybridEncKey, l as PwdProtectedKey, n as EmailBodyEncrypted, o as HybridKeyPair, t as EmailBody, u as RecipientWithPublicKey } from "./types-DAPJQG8U.mjs";
2
2
 
3
3
  //#region src/email-crypto/hybridEncyptedEmail.d.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { EmailBody, EmailBodyEncrypted, HybridEncKey, HybridEncryptedEmail, HybridKeyPair, PwdProtectedEmail, PwdProtectedKey, RecipientWithPublicKey } from "./types.js";
1
+ import { a as HybridEncryptedEmail, c as PwdProtectedEmail, i as HybridEncKey, l as PwdProtectedKey, n as EmailBodyEncrypted, o as HybridKeyPair, t as EmailBody, u as RecipientWithPublicKey } from "./types-4P0WII1D.js";
2
2
 
3
3
  //#region src/email-crypto/hybridEncyptedEmail.d.ts
4
4
  /**
@@ -1,18 +1,17 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_emailKeys = require('./emailKeys-BFI-paQq.js');
3
-
4
- exports.createPwdProtectedEmail = require_emailKeys.createPwdProtectedEmail;
5
- exports.decryptEmailBody = require_emailKeys.decryptEmailBody;
6
- exports.decryptEmailHybrid = require_emailKeys.decryptEmailHybrid;
7
- exports.decryptKeysHybrid = require_emailKeys.decryptKeysHybrid;
8
- exports.decryptPwdProtectedEmail = require_emailKeys.decryptPwdProtectedEmail;
9
- exports.deriveDatabaseKey = require_emailKeys.deriveDatabaseKey;
10
- exports.deriveEmailDraftKey = require_emailKeys.deriveEmailDraftKey;
11
- exports.encryptEmailBody = require_emailKeys.encryptEmailBody;
12
- exports.encryptEmailBodyWithKey = require_emailKeys.encryptEmailBodyWithKey;
13
- exports.encryptEmailHybrid = require_emailKeys.encryptEmailHybrid;
14
- exports.encryptEmailHybridForMultipleRecipients = require_emailKeys.encryptEmailHybridForMultipleRecipients;
15
- exports.encryptKeysHybrid = require_emailKeys.encryptKeysHybrid;
16
- exports.generateEmailKeys = require_emailKeys.generateEmailKeys;
17
- exports.passwordProtectKey = require_emailKeys.passwordProtectKey;
18
- exports.removePasswordProtection = require_emailKeys.removePasswordProtection;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_email_crypto = require("./email-crypto-Cr7znO1a.js");
3
+ exports.createPwdProtectedEmail = require_email_crypto.createPwdProtectedEmail;
4
+ exports.decryptEmailBody = require_email_crypto.decryptEmailBody;
5
+ exports.decryptEmailHybrid = require_email_crypto.decryptEmailHybrid;
6
+ exports.decryptKeysHybrid = require_email_crypto.decryptKeysHybrid;
7
+ exports.decryptPwdProtectedEmail = require_email_crypto.decryptPwdProtectedEmail;
8
+ exports.deriveDatabaseKey = require_email_crypto.deriveDatabaseKey;
9
+ exports.deriveEmailDraftKey = require_email_crypto.deriveEmailDraftKey;
10
+ exports.encryptEmailBody = require_email_crypto.encryptEmailBody;
11
+ exports.encryptEmailBodyWithKey = require_email_crypto.encryptEmailBodyWithKey;
12
+ exports.encryptEmailHybrid = require_email_crypto.encryptEmailHybrid;
13
+ exports.encryptEmailHybridForMultipleRecipients = require_email_crypto.encryptEmailHybridForMultipleRecipients;
14
+ exports.encryptKeysHybrid = require_email_crypto.encryptKeysHybrid;
15
+ exports.generateEmailKeys = require_email_crypto.generateEmailKeys;
16
+ exports.passwordProtectKey = require_email_crypto.passwordProtectKey;
17
+ exports.removePasswordProtection = require_email_crypto.removePasswordProtection;
@@ -1,3 +1,2 @@
1
- import { a as decryptPwdProtectedEmail, c as encryptEmailHybridForMultipleRecipients, d as encryptEmailBody, f as encryptEmailBodyWithKey, h as removePasswordProtection, i as createPwdProtectedEmail, l as decryptEmailBody, m as passwordProtectKey, n as deriveEmailDraftKey, o as decryptEmailHybrid, p as encryptKeysHybrid, r as generateEmailKeys, s as encryptEmailHybrid, t as deriveDatabaseKey, u as decryptKeysHybrid } from "./emailKeys-BjIeINfC.mjs";
2
-
3
- export { createPwdProtectedEmail, decryptEmailBody, decryptEmailHybrid, decryptKeysHybrid, decryptPwdProtectedEmail, deriveDatabaseKey, deriveEmailDraftKey, encryptEmailBody, encryptEmailBodyWithKey, encryptEmailHybrid, encryptEmailHybridForMultipleRecipients, encryptKeysHybrid, generateEmailKeys, passwordProtectKey, removePasswordProtection };
1
+ import { a as decryptPwdProtectedEmail, c as encryptEmailHybridForMultipleRecipients, d as encryptEmailBody, f as encryptEmailBodyWithKey, h as removePasswordProtection, i as createPwdProtectedEmail, l as decryptEmailBody, m as passwordProtectKey, n as deriveEmailDraftKey, o as decryptEmailHybrid, p as encryptKeysHybrid, r as generateEmailKeys, s as encryptEmailHybrid, t as deriveDatabaseKey, u as decryptKeysHybrid } from "./email-crypto-cHDsjSb5.mjs";
2
+ export { createPwdProtectedEmail, decryptEmailBody, decryptEmailHybrid, decryptKeysHybrid, decryptPwdProtectedEmail, deriveDatabaseKey, deriveEmailDraftKey, encryptEmailBody, encryptEmailBodyWithKey, encryptEmailHybrid, encryptEmailHybridForMultipleRecipients, encryptKeysHybrid, generateEmailKeys, passwordProtectKey, removePasswordProtection };
package/dist/hash.js CHANGED
@@ -1,7 +1,6 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_chunk = require('./chunk-EbLFQX5m.js');
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ require("./chunk-C13QxCFV.js");
3
3
  let _noble_hashes_blake3_js = require("@noble/hashes/blake3.js");
4
-
5
4
  //#region src/hash/blake3.ts
6
5
  /**
7
6
  * Hashes the given array of data
@@ -79,7 +78,6 @@ function hashDataWithKey(hashKey, data) {
79
78
  function getBytesFromData(data, bytes) {
80
79
  return (0, _noble_hashes_blake3_js.blake3)(data, { dkLen: bytes });
81
80
  }
82
-
83
81
  //#endregion
84
82
  exports.getBytesFromData = getBytesFromData;
85
83
  exports.getBytesFromDataArray = getBytesFromDataArray;
@@ -87,4 +85,5 @@ exports.hashData = hashData;
87
85
  exports.hashDataArray = hashDataArray;
88
86
  exports.hashDataArrayWithKey = hashDataArrayWithKey;
89
87
  exports.hashDataWithKey = hashDataWithKey;
88
+
90
89
  //# sourceMappingURL=hash.js.map
package/dist/hash.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hash.js","names":["blake3"],"sources":["../src/hash/blake3.ts"],"sourcesContent":["import { blake3 } from '@noble/hashes/blake3.js';\n\n/**\n * Hashes the given array of data\n *\n * @param data - The array of data\n * @returns The resulting hash\n */\nexport function hashDataArray(data: Uint8Array[]): Uint8Array {\n try {\n const hasher = blake3.create();\n for (const d of data) {\n hasher.update(d);\n }\n return hasher.digest();\n } catch (error) {\n throw new Error('Failed to compute hash', { cause: error });\n }\n}\n\n/**\n * Hashes the given array of data with the given key\n *\n * @param hashKey - The key for keyed hashing\n * @param data - The array of data\n * @returns The resulting keyed hash\n */\nexport function hashDataArrayWithKey(hashKey: Uint8Array, data: Uint8Array[]): Uint8Array {\n try {\n const hasher = blake3.create({ key: hashKey });\n for (const d of data) {\n hasher.update(d);\n }\n return hasher.digest();\n } catch (error) {\n throw new Error('Failed to compute hash', { cause: error });\n }\n}\n\n/**\n * Hashes the given array of data to the desired byte-length\n *\n * @param data - The array of data\n * @param bytes - The desired output byte-length\n * @returns The resulting hash of the desired byte-length\n */\nexport function getBytesFromDataArray(data: Uint8Array[], bytes: number): Uint8Array {\n try {\n const hasher = blake3.create({ dkLen: bytes });\n for (const chunk of data) {\n hasher.update(chunk);\n }\n return hasher.digest();\n } catch (error) {\n throw new Error('Failed to get bytes from data', { cause: error });\n }\n}\n\n/**\n * Hashes the given data\n *\n * @param data - The data\n * @returns The resulting hash\n */\nexport function hashData(data: Uint8Array): Uint8Array {\n return blake3(data);\n}\n\n/**\n * Hashes the given data with the given key\n *\n * @param hashKey - The key for keyed hashing\n * @param data - The data\n * @returns The resulting keyed hash\n */\nexport function hashDataWithKey(hashKey: Uint8Array, data: Uint8Array): Uint8Array {\n return blake3(data, { key: hashKey });\n}\n\n/**\n * Hashes the given data to the desired byte-length\n *\n * @param data - The data\n * @param bytes - The desired output byte-length\n * @returns The resulting hash of the desired byte-length\n */\nexport function getBytesFromData(data: Uint8Array, bytes: number): Uint8Array {\n return blake3(data, { dkLen: bytes });\n}\n"],"mappings":";;;;;;;;;;;AAQA,SAAgB,cAAc,MAAgC;AAC5D,KAAI;EACF,MAAM,SAASA,+BAAO,QAAQ;AAC9B,OAAK,MAAM,KAAK,KACd,QAAO,OAAO,EAAE;AAElB,SAAO,OAAO,QAAQ;UACf,OAAO;AACd,QAAM,IAAI,MAAM,0BAA0B,EAAE,OAAO,OAAO,CAAC;;;;;;;;;;AAW/D,SAAgB,qBAAqB,SAAqB,MAAgC;AACxF,KAAI;EACF,MAAM,SAASA,+BAAO,OAAO,EAAE,KAAK,SAAS,CAAC;AAC9C,OAAK,MAAM,KAAK,KACd,QAAO,OAAO,EAAE;AAElB,SAAO,OAAO,QAAQ;UACf,OAAO;AACd,QAAM,IAAI,MAAM,0BAA0B,EAAE,OAAO,OAAO,CAAC;;;;;;;;;;AAW/D,SAAgB,sBAAsB,MAAoB,OAA2B;AACnF,KAAI;EACF,MAAM,SAASA,+BAAO,OAAO,EAAE,OAAO,OAAO,CAAC;AAC9C,OAAK,MAAM,SAAS,KAClB,QAAO,OAAO,MAAM;AAEtB,SAAO,OAAO,QAAQ;UACf,OAAO;AACd,QAAM,IAAI,MAAM,iCAAiC,EAAE,OAAO,OAAO,CAAC;;;;;;;;;AAUtE,SAAgB,SAAS,MAA8B;AACrD,4CAAc,KAAK;;;;;;;;;AAUrB,SAAgB,gBAAgB,SAAqB,MAA8B;AACjF,4CAAc,MAAM,EAAE,KAAK,SAAS,CAAC;;;;;;;;;AAUvC,SAAgB,iBAAiB,MAAkB,OAA2B;AAC5E,4CAAc,MAAM,EAAE,OAAO,OAAO,CAAC"}
1
+ {"version":3,"file":"hash.js","names":["blake3"],"sources":["../src/hash/blake3.ts"],"sourcesContent":["import { blake3 } from '@noble/hashes/blake3.js';\n\n/**\n * Hashes the given array of data\n *\n * @param data - The array of data\n * @returns The resulting hash\n */\nexport function hashDataArray(data: Uint8Array[]): Uint8Array {\n try {\n const hasher = blake3.create();\n for (const d of data) {\n hasher.update(d);\n }\n return hasher.digest();\n } catch (error) {\n throw new Error('Failed to compute hash', { cause: error });\n }\n}\n\n/**\n * Hashes the given array of data with the given key\n *\n * @param hashKey - The key for keyed hashing\n * @param data - The array of data\n * @returns The resulting keyed hash\n */\nexport function hashDataArrayWithKey(hashKey: Uint8Array, data: Uint8Array[]): Uint8Array {\n try {\n const hasher = blake3.create({ key: hashKey });\n for (const d of data) {\n hasher.update(d);\n }\n return hasher.digest();\n } catch (error) {\n throw new Error('Failed to compute hash', { cause: error });\n }\n}\n\n/**\n * Hashes the given array of data to the desired byte-length\n *\n * @param data - The array of data\n * @param bytes - The desired output byte-length\n * @returns The resulting hash of the desired byte-length\n */\nexport function getBytesFromDataArray(data: Uint8Array[], bytes: number): Uint8Array {\n try {\n const hasher = blake3.create({ dkLen: bytes });\n for (const chunk of data) {\n hasher.update(chunk);\n }\n return hasher.digest();\n } catch (error) {\n throw new Error('Failed to get bytes from data', { cause: error });\n }\n}\n\n/**\n * Hashes the given data\n *\n * @param data - The data\n * @returns The resulting hash\n */\nexport function hashData(data: Uint8Array): Uint8Array {\n return blake3(data);\n}\n\n/**\n * Hashes the given data with the given key\n *\n * @param hashKey - The key for keyed hashing\n * @param data - The data\n * @returns The resulting keyed hash\n */\nexport function hashDataWithKey(hashKey: Uint8Array, data: Uint8Array): Uint8Array {\n return blake3(data, { key: hashKey });\n}\n\n/**\n * Hashes the given data to the desired byte-length\n *\n * @param data - The data\n * @param bytes - The desired output byte-length\n * @returns The resulting hash of the desired byte-length\n */\nexport function getBytesFromData(data: Uint8Array, bytes: number): Uint8Array {\n return blake3(data, { dkLen: bytes });\n}\n"],"mappings":";;;;;;;;;;AAQA,SAAgB,cAAc,MAAgC;AAC5D,KAAI;EACF,MAAM,SAASA,wBAAAA,OAAO,QAAQ;AAC9B,OAAK,MAAM,KAAK,KACd,QAAO,OAAO,EAAE;AAElB,SAAO,OAAO,QAAQ;UACf,OAAO;AACd,QAAM,IAAI,MAAM,0BAA0B,EAAE,OAAO,OAAO,CAAC;;;;;;;;;;AAW/D,SAAgB,qBAAqB,SAAqB,MAAgC;AACxF,KAAI;EACF,MAAM,SAASA,wBAAAA,OAAO,OAAO,EAAE,KAAK,SAAS,CAAC;AAC9C,OAAK,MAAM,KAAK,KACd,QAAO,OAAO,EAAE;AAElB,SAAO,OAAO,QAAQ;UACf,OAAO;AACd,QAAM,IAAI,MAAM,0BAA0B,EAAE,OAAO,OAAO,CAAC;;;;;;;;;;AAW/D,SAAgB,sBAAsB,MAAoB,OAA2B;AACnF,KAAI;EACF,MAAM,SAASA,wBAAAA,OAAO,OAAO,EAAE,OAAO,OAAO,CAAC;AAC9C,OAAK,MAAM,SAAS,KAClB,QAAO,OAAO,MAAM;AAEtB,SAAO,OAAO,QAAQ;UACf,OAAO;AACd,QAAM,IAAI,MAAM,iCAAiC,EAAE,OAAO,OAAO,CAAC;;;;;;;;;AAUtE,SAAgB,SAAS,MAA8B;AACrD,SAAA,GAAA,wBAAA,QAAc,KAAK;;;;;;;;;AAUrB,SAAgB,gBAAgB,SAAqB,MAA8B;AACjF,SAAA,GAAA,wBAAA,QAAc,MAAM,EAAE,KAAK,SAAS,CAAC;;;;;;;;;AAUvC,SAAgB,iBAAiB,MAAkB,OAA2B;AAC5E,SAAA,GAAA,wBAAA,QAAc,MAAM,EAAE,OAAO,OAAO,CAAC"}