internxt-crypto 1.6.0 → 1.6.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 (145) hide show
  1. package/dist/asymmetric-crypto.d.mts.map +1 -1
  2. package/dist/asymmetric-crypto.d.ts.map +1 -1
  3. package/dist/asymmetric-crypto.js +12 -2
  4. package/dist/asymmetric-crypto.js.map +1 -1
  5. package/dist/asymmetric-crypto.mjs +12 -2
  6. package/dist/asymmetric-crypto.mjs.map +1 -1
  7. package/dist/{email-crypto-v_-nFOl2.mjs → email-crypto-CoRbTphp.mjs} +54 -43
  8. package/dist/email-crypto-CoRbTphp.mjs.map +1 -0
  9. package/dist/{email-crypto-CLlLUgA6.js → email-crypto-DJb-I1wm.js} +71 -42
  10. package/dist/email-crypto-DJb-I1wm.js.map +1 -0
  11. package/dist/email-crypto.d.mts +17 -1
  12. package/dist/email-crypto.d.mts.map +1 -1
  13. package/dist/email-crypto.d.ts +17 -1
  14. package/dist/email-crypto.d.ts.map +1 -1
  15. package/dist/email-crypto.js +4 -1
  16. package/dist/email-crypto.mjs +2 -2
  17. package/dist/index.d.mts +2 -2
  18. package/dist/index.d.ts +2 -2
  19. package/dist/index.js +2 -1
  20. package/dist/index.mjs +2 -2
  21. package/dist/react-native/asymmetric-crypto.d.mts +21 -0
  22. package/dist/react-native/asymmetric-crypto.d.mts.map +1 -0
  23. package/dist/react-native/asymmetric-crypto.d.ts +21 -0
  24. package/dist/react-native/asymmetric-crypto.d.ts.map +1 -0
  25. package/dist/react-native/asymmetric-crypto.js +31 -0
  26. package/dist/react-native/asymmetric-crypto.js.map +1 -0
  27. package/dist/react-native/asymmetric-crypto.mjs +28 -0
  28. package/dist/react-native/asymmetric-crypto.mjs.map +1 -0
  29. package/dist/react-native/chunk-CfYAbeIz.mjs +13 -0
  30. package/dist/react-native/chunk-DskHE4z1.js +43 -0
  31. package/dist/react-native/constants.d.mts +27 -0
  32. package/dist/react-native/constants.d.mts.map +1 -0
  33. package/dist/react-native/constants.d.ts +27 -0
  34. package/dist/react-native/constants.d.ts.map +1 -0
  35. package/dist/react-native/constants.js +51 -0
  36. package/dist/react-native/constants.js.map +1 -0
  37. package/dist/react-native/constants.mjs +28 -0
  38. package/dist/react-native/constants.mjs.map +1 -0
  39. package/dist/react-native/derive-key.d.mts +32 -0
  40. package/dist/react-native/derive-key.d.mts.map +1 -0
  41. package/dist/react-native/derive-key.d.ts +32 -0
  42. package/dist/react-native/derive-key.d.ts.map +1 -0
  43. package/dist/react-native/derive-key.js +51 -0
  44. package/dist/react-native/derive-key.js.map +1 -0
  45. package/dist/react-native/derive-key.mjs +47 -0
  46. package/dist/react-native/derive-key.mjs.map +1 -0
  47. package/dist/react-native/derive-password-Bb3R3nyh.mjs +68 -0
  48. package/dist/react-native/derive-password-Bb3R3nyh.mjs.map +1 -0
  49. package/dist/react-native/derive-password-DIPrE8Mz.js +86 -0
  50. package/dist/react-native/derive-password-DIPrE8Mz.js.map +1 -0
  51. package/dist/react-native/derive-password.d.mts +28 -0
  52. package/dist/react-native/derive-password.d.mts.map +1 -0
  53. package/dist/react-native/derive-password.d.ts +28 -0
  54. package/dist/react-native/derive-password.d.ts.map +1 -0
  55. package/dist/react-native/derive-password.js +5 -0
  56. package/dist/react-native/derive-password.mjs +2 -0
  57. package/dist/react-native/email-crypto-C3ka3aAj.js +700 -0
  58. package/dist/react-native/email-crypto-C3ka3aAj.js.map +1 -0
  59. package/dist/react-native/email-crypto-CDM4iPK8.mjs +490 -0
  60. package/dist/react-native/email-crypto-CDM4iPK8.mjs.map +1 -0
  61. package/dist/react-native/email-crypto.d.mts +253 -0
  62. package/dist/react-native/email-crypto.d.mts.map +1 -0
  63. package/dist/react-native/email-crypto.d.ts +253 -0
  64. package/dist/react-native/email-crypto.d.ts.map +1 -0
  65. package/dist/react-native/email-crypto.js +35 -0
  66. package/dist/react-native/email-crypto.mjs +2 -0
  67. package/dist/react-native/hash.d.mts +50 -0
  68. package/dist/react-native/hash.d.mts.map +1 -0
  69. package/dist/react-native/hash.d.ts +50 -0
  70. package/dist/react-native/hash.d.ts.map +1 -0
  71. package/dist/react-native/hash.js +89 -0
  72. package/dist/react-native/hash.js.map +1 -0
  73. package/dist/react-native/hash.mjs +82 -0
  74. package/dist/react-native/hash.mjs.map +1 -0
  75. package/dist/react-native/index.d.mts +32 -0
  76. package/dist/react-native/index.d.mts.map +1 -0
  77. package/dist/react-native/index.d.ts +32 -0
  78. package/dist/react-native/index.d.ts.map +1 -0
  79. package/dist/react-native/index.js +106 -0
  80. package/dist/react-native/index.mjs +12 -0
  81. package/dist/react-native/keystore-crypto-BXPEVvzq.js +238 -0
  82. package/dist/react-native/keystore-crypto-BXPEVvzq.js.map +1 -0
  83. package/dist/react-native/keystore-crypto-C6F-NQdX.mjs +185 -0
  84. package/dist/react-native/keystore-crypto-C6F-NQdX.mjs.map +1 -0
  85. package/dist/react-native/keystore-crypto.d.mts +71 -0
  86. package/dist/react-native/keystore-crypto.d.mts.map +1 -0
  87. package/dist/react-native/keystore-crypto.d.ts +71 -0
  88. package/dist/react-native/keystore-crypto.d.ts.map +1 -0
  89. package/dist/react-native/keystore-crypto.js +11 -0
  90. package/dist/react-native/keystore-crypto.mjs +2 -0
  91. package/dist/react-native/post-quantum-crypto.d.mts +32 -0
  92. package/dist/react-native/post-quantum-crypto.d.mts.map +1 -0
  93. package/dist/react-native/post-quantum-crypto.d.ts +32 -0
  94. package/dist/react-native/post-quantum-crypto.d.ts.map +1 -0
  95. package/dist/react-native/post-quantum-crypto.js +50 -0
  96. package/dist/react-native/post-quantum-crypto.js.map +1 -0
  97. package/dist/react-native/post-quantum-crypto.mjs +46 -0
  98. package/dist/react-native/post-quantum-crypto.mjs.map +1 -0
  99. package/dist/react-native/storage-service.d.mts +47 -0
  100. package/dist/react-native/storage-service.d.mts.map +1 -0
  101. package/dist/react-native/storage-service.d.ts +47 -0
  102. package/dist/react-native/storage-service.d.ts.map +1 -0
  103. package/dist/react-native/storage-service.js +66 -0
  104. package/dist/react-native/storage-service.js.map +1 -0
  105. package/dist/react-native/storage-service.mjs +54 -0
  106. package/dist/react-native/storage-service.mjs.map +1 -0
  107. package/dist/react-native/symmetric-crypto.d.mts +28 -0
  108. package/dist/react-native/symmetric-crypto.d.mts.map +1 -0
  109. package/dist/react-native/symmetric-crypto.d.ts +28 -0
  110. package/dist/react-native/symmetric-crypto.d.ts.map +1 -0
  111. package/dist/react-native/symmetric-crypto.js +52 -0
  112. package/dist/react-native/symmetric-crypto.js.map +1 -0
  113. package/dist/react-native/symmetric-crypto.mjs +48 -0
  114. package/dist/react-native/symmetric-crypto.mjs.map +1 -0
  115. package/dist/react-native/types-D1R4_m5r.d.mts +55 -0
  116. package/dist/react-native/types-D1R4_m5r.d.mts.map +1 -0
  117. package/dist/react-native/types-Y0wL7HUH.d.ts +55 -0
  118. package/dist/react-native/types-Y0wL7HUH.d.ts.map +1 -0
  119. package/dist/react-native/types.d.mts +2 -0
  120. package/dist/react-native/types.d.ts +2 -0
  121. package/dist/react-native/types.js +11 -0
  122. package/dist/react-native/types.js.map +1 -0
  123. package/dist/react-native/types.mjs +10 -0
  124. package/dist/react-native/types.mjs.map +1 -0
  125. package/dist/react-native/utils.d.mts +78 -0
  126. package/dist/react-native/utils.d.mts.map +1 -0
  127. package/dist/react-native/utils.d.ts +78 -0
  128. package/dist/react-native/utils.d.ts.map +1 -0
  129. package/dist/react-native/utils.js +123 -0
  130. package/dist/react-native/utils.js.map +1 -0
  131. package/dist/react-native/utils.mjs +109 -0
  132. package/dist/react-native/utils.mjs.map +1 -0
  133. package/dist/react-native/xwing-B34h5e3Z.mjs +15 -0
  134. package/dist/react-native/xwing-B34h5e3Z.mjs.map +1 -0
  135. package/dist/react-native/xwing-CSdiyHAt.js +33 -0
  136. package/dist/react-native/xwing-CSdiyHAt.js.map +1 -0
  137. package/dist/utils.d.mts.map +1 -1
  138. package/dist/utils.d.ts.map +1 -1
  139. package/dist/utils.js +3 -8
  140. package/dist/utils.js.map +1 -1
  141. package/dist/utils.mjs +3 -8
  142. package/dist/utils.mjs.map +1 -1
  143. package/package.json +4 -1
  144. package/dist/email-crypto-CLlLUgA6.js.map +0 -1
  145. package/dist/email-crypto-v_-nFOl2.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"asymmetric-crypto.d.mts","names":[],"sources":["../src/asymmetric-crypto/ellipticCurve.ts"],"mappings":";;AASA;;;;;;iBAAsB,eAAA,CAAgB,cAAA,EAAgB,UAAA,EAAY,YAAA,EAAc,UAAA,GAAa,OAAA,CAAQ,UAAA;;;;;;iBAa/E,eAAA,CAAA,GAAmB,OAAA;EAAU,SAAA,EAAW,UAAA;EAAY,SAAA,EAAW,UAAA;AAAA"}
1
+ {"version":3,"file":"asymmetric-crypto.d.mts","names":[],"sources":["../src/asymmetric-crypto/ellipticCurve.ts"],"mappings":";;AAcA;;;;;;iBAAsB,eAAA,CAAgB,cAAA,EAAgB,UAAA,EAAY,YAAA,EAAc,UAAA,GAAa,OAAA,CAAQ,UAAA;;;;;;iBAe/E,eAAA,CAAA,GAAmB,OAAA;EAAU,SAAA,EAAW,UAAA;EAAY,SAAA,EAAW,UAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"asymmetric-crypto.d.ts","names":[],"sources":["../src/asymmetric-crypto/ellipticCurve.ts"],"mappings":";;AASA;;;;;;iBAAsB,eAAA,CAAgB,cAAA,EAAgB,UAAA,EAAY,YAAA,EAAc,UAAA,GAAa,OAAA,CAAQ,UAAA;;;;;;iBAa/E,eAAA,CAAA,GAAmB,OAAA;EAAU,SAAA,EAAW,UAAA;EAAY,SAAA,EAAW,UAAA;AAAA"}
1
+ {"version":3,"file":"asymmetric-crypto.d.ts","names":[],"sources":["../src/asymmetric-crypto/ellipticCurve.ts"],"mappings":";;AAcA;;;;;;iBAAsB,eAAA,CAAgB,cAAA,EAAgB,UAAA,EAAY,YAAA,EAAc,UAAA,GAAa,OAAA,CAAQ,UAAA;;;;;;iBAe/E,eAAA,CAAA,GAAmB,OAAA;EAAU,SAAA,EAAW,UAAA;EAAY,SAAA,EAAW,UAAA;AAAA"}
@@ -2,6 +2,10 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  require("./chunk-C13QxCFV.js");
3
3
  let _noble_curves_webcrypto_js = require("@noble/curves/webcrypto.js");
4
4
  //#region src/asymmetric-crypto/ellipticCurve.ts
5
+ function asBytes(result) {
6
+ if (result instanceof Uint8Array) return result;
7
+ throw new Error("Expected raw key bytes, got JWK");
8
+ }
5
9
  /**
6
10
  * Derives secret key from the other user's public key and own private key
7
11
  *
@@ -11,7 +15,9 @@ let _noble_curves_webcrypto_js = require("@noble/curves/webcrypto.js");
11
15
  */
12
16
  async function deriveSecretKey(aliceSecretKey, bobPublicKey) {
13
17
  try {
14
- return await _noble_curves_webcrypto_js.x25519.getSharedSecret(aliceSecretKey, bobPublicKey);
18
+ const spkiPublic = asBytes(await _noble_curves_webcrypto_js.x25519.utils.convertPublicKey(bobPublicKey, "raw", "spki"));
19
+ const pkcs8Secret = asBytes(await _noble_curves_webcrypto_js.x25519.utils.convertSecretKey(aliceSecretKey, "raw", "pkcs8"));
20
+ return await _noble_curves_webcrypto_js.x25519.getSharedSecret(pkcs8Secret, spkiPublic);
15
21
  } catch (error) {
16
22
  throw new Error("Failed to derive elliptic curve secret key", { cause: error });
17
23
  }
@@ -22,7 +28,11 @@ async function deriveSecretKey(aliceSecretKey, bobPublicKey) {
22
28
  * @returns The generated key pair
23
29
  */
24
30
  async function generateEccKeys() {
25
- return _noble_curves_webcrypto_js.x25519.keygen();
31
+ const { secretKey, publicKey } = await _noble_curves_webcrypto_js.x25519.keygen();
32
+ return {
33
+ secretKey: asBytes(await _noble_curves_webcrypto_js.x25519.utils.convertSecretKey(secretKey, "pkcs8", "raw")),
34
+ publicKey: asBytes(await _noble_curves_webcrypto_js.x25519.utils.convertPublicKey(publicKey, "spki", "raw"))
35
+ };
26
36
  }
27
37
  //#endregion
28
38
  exports.deriveSecretKey = deriveSecretKey;
@@ -1 +1 @@
1
- {"version":3,"file":"asymmetric-crypto.js","names":["x25519"],"sources":["../src/asymmetric-crypto/ellipticCurve.ts"],"sourcesContent":["import { x25519 } from '@noble/curves/webcrypto.js';\n\n/**\n * Derives secret key from the other user's public key and own private key\n *\n * @param aliceSecretKey - The secret key of the user deriving the shared secret key\n * @param bobPublicKey - The public key of the other user\n * @returns The derived secret key bits\n */\nexport async function deriveSecretKey(aliceSecretKey: Uint8Array, bobPublicKey: Uint8Array): Promise<Uint8Array> {\n try {\n return await x25519.getSharedSecret(aliceSecretKey, bobPublicKey);\n } catch (error) {\n throw new Error('Failed to derive elliptic curve secret key', { cause: error });\n }\n}\n\n/**\n * Generates elliptic curve key pair\n *\n * @returns The generated key pair\n */\nexport async function generateEccKeys(): Promise<{ secretKey: Uint8Array; publicKey: Uint8Array }> {\n return x25519.keygen();\n}\n"],"mappings":";;;;;;;;;;;AASA,eAAsB,gBAAgB,gBAA4B,cAA+C;AAC/G,KAAI;AACF,SAAO,MAAMA,2BAAAA,OAAO,gBAAgB,gBAAgB,aAAa;UAC1D,OAAO;AACd,QAAM,IAAI,MAAM,8CAA8C,EAAE,OAAO,OAAO,CAAC;;;;;;;;AASnF,eAAsB,kBAA6E;AACjG,QAAOA,2BAAAA,OAAO,QAAQ"}
1
+ {"version":3,"file":"asymmetric-crypto.js","names":["x25519"],"sources":["../src/asymmetric-crypto/ellipticCurve.ts"],"sourcesContent":["import { x25519 } from '@noble/curves/webcrypto.js';\n\nfunction asBytes(result: unknown): Uint8Array {\n if (result instanceof Uint8Array) return result;\n throw new Error('Expected raw key bytes, got JWK');\n}\n\n/**\n * Derives secret key from the other user's public key and own private key\n *\n * @param aliceSecretKey - The secret key of the user deriving the shared secret key\n * @param bobPublicKey - The public key of the other user\n * @returns The derived secret key bits\n */\nexport async function deriveSecretKey(aliceSecretKey: Uint8Array, bobPublicKey: Uint8Array): Promise<Uint8Array> {\n try {\n const spkiPublic = asBytes(await x25519.utils.convertPublicKey(bobPublicKey, 'raw', 'spki'));\n const pkcs8Secret = asBytes(await x25519.utils.convertSecretKey(aliceSecretKey, 'raw', 'pkcs8'));\n return await x25519.getSharedSecret(pkcs8Secret, spkiPublic);\n } catch (error) {\n throw new Error('Failed to derive elliptic curve secret key', { cause: error });\n }\n}\n\n/**\n * Generates elliptic curve key pair\n *\n * @returns The generated key pair\n */\nexport async function generateEccKeys(): Promise<{ secretKey: Uint8Array; publicKey: Uint8Array }> {\n const { secretKey, publicKey } = await x25519.keygen();\n return {\n secretKey: asBytes(await x25519.utils.convertSecretKey(secretKey, 'pkcs8', 'raw')),\n publicKey: asBytes(await x25519.utils.convertPublicKey(publicKey, 'spki', 'raw')),\n };\n}\n"],"mappings":";;;;AAEA,SAAS,QAAQ,QAA6B;AAC5C,KAAI,kBAAkB,WAAY,QAAO;AACzC,OAAM,IAAI,MAAM,kCAAkC;;;;;;;;;AAUpD,eAAsB,gBAAgB,gBAA4B,cAA+C;AAC/G,KAAI;EACF,MAAM,aAAa,QAAQ,MAAMA,2BAAAA,OAAO,MAAM,iBAAiB,cAAc,OAAO,OAAO,CAAC;EAC5F,MAAM,cAAc,QAAQ,MAAMA,2BAAAA,OAAO,MAAM,iBAAiB,gBAAgB,OAAO,QAAQ,CAAC;AAChG,SAAO,MAAMA,2BAAAA,OAAO,gBAAgB,aAAa,WAAW;UACrD,OAAO;AACd,QAAM,IAAI,MAAM,8CAA8C,EAAE,OAAO,OAAO,CAAC;;;;;;;;AASnF,eAAsB,kBAA6E;CACjG,MAAM,EAAE,WAAW,cAAc,MAAMA,2BAAAA,OAAO,QAAQ;AACtD,QAAO;EACL,WAAW,QAAQ,MAAMA,2BAAAA,OAAO,MAAM,iBAAiB,WAAW,SAAS,MAAM,CAAC;EAClF,WAAW,QAAQ,MAAMA,2BAAAA,OAAO,MAAM,iBAAiB,WAAW,QAAQ,MAAM,CAAC;EAClF"}
@@ -1,5 +1,9 @@
1
1
  import { x25519 } from "@noble/curves/webcrypto.js";
2
2
  //#region src/asymmetric-crypto/ellipticCurve.ts
3
+ function asBytes(result) {
4
+ if (result instanceof Uint8Array) return result;
5
+ throw new Error("Expected raw key bytes, got JWK");
6
+ }
3
7
  /**
4
8
  * Derives secret key from the other user's public key and own private key
5
9
  *
@@ -9,7 +13,9 @@ import { x25519 } from "@noble/curves/webcrypto.js";
9
13
  */
10
14
  async function deriveSecretKey(aliceSecretKey, bobPublicKey) {
11
15
  try {
12
- return await x25519.getSharedSecret(aliceSecretKey, bobPublicKey);
16
+ const spkiPublic = asBytes(await x25519.utils.convertPublicKey(bobPublicKey, "raw", "spki"));
17
+ const pkcs8Secret = asBytes(await x25519.utils.convertSecretKey(aliceSecretKey, "raw", "pkcs8"));
18
+ return await x25519.getSharedSecret(pkcs8Secret, spkiPublic);
13
19
  } catch (error) {
14
20
  throw new Error("Failed to derive elliptic curve secret key", { cause: error });
15
21
  }
@@ -20,7 +26,11 @@ async function deriveSecretKey(aliceSecretKey, bobPublicKey) {
20
26
  * @returns The generated key pair
21
27
  */
22
28
  async function generateEccKeys() {
23
- return x25519.keygen();
29
+ const { secretKey, publicKey } = await x25519.keygen();
30
+ return {
31
+ secretKey: asBytes(await x25519.utils.convertSecretKey(secretKey, "pkcs8", "raw")),
32
+ publicKey: asBytes(await x25519.utils.convertPublicKey(publicKey, "spki", "raw"))
33
+ };
24
34
  }
25
35
  //#endregion
26
36
  export { deriveSecretKey, generateEccKeys };
@@ -1 +1 @@
1
- {"version":3,"file":"asymmetric-crypto.mjs","names":[],"sources":["../src/asymmetric-crypto/ellipticCurve.ts"],"sourcesContent":["import { x25519 } from '@noble/curves/webcrypto.js';\n\n/**\n * Derives secret key from the other user's public key and own private key\n *\n * @param aliceSecretKey - The secret key of the user deriving the shared secret key\n * @param bobPublicKey - The public key of the other user\n * @returns The derived secret key bits\n */\nexport async function deriveSecretKey(aliceSecretKey: Uint8Array, bobPublicKey: Uint8Array): Promise<Uint8Array> {\n try {\n return await x25519.getSharedSecret(aliceSecretKey, bobPublicKey);\n } catch (error) {\n throw new Error('Failed to derive elliptic curve secret key', { cause: error });\n }\n}\n\n/**\n * Generates elliptic curve key pair\n *\n * @returns The generated key pair\n */\nexport async function generateEccKeys(): Promise<{ secretKey: Uint8Array; publicKey: Uint8Array }> {\n return x25519.keygen();\n}\n"],"mappings":";;;;;;;;;AASA,eAAsB,gBAAgB,gBAA4B,cAA+C;AAC/G,KAAI;AACF,SAAO,MAAM,OAAO,gBAAgB,gBAAgB,aAAa;UAC1D,OAAO;AACd,QAAM,IAAI,MAAM,8CAA8C,EAAE,OAAO,OAAO,CAAC;;;;;;;;AASnF,eAAsB,kBAA6E;AACjG,QAAO,OAAO,QAAQ"}
1
+ {"version":3,"file":"asymmetric-crypto.mjs","names":[],"sources":["../src/asymmetric-crypto/ellipticCurve.ts"],"sourcesContent":["import { x25519 } from '@noble/curves/webcrypto.js';\n\nfunction asBytes(result: unknown): Uint8Array {\n if (result instanceof Uint8Array) return result;\n throw new Error('Expected raw key bytes, got JWK');\n}\n\n/**\n * Derives secret key from the other user's public key and own private key\n *\n * @param aliceSecretKey - The secret key of the user deriving the shared secret key\n * @param bobPublicKey - The public key of the other user\n * @returns The derived secret key bits\n */\nexport async function deriveSecretKey(aliceSecretKey: Uint8Array, bobPublicKey: Uint8Array): Promise<Uint8Array> {\n try {\n const spkiPublic = asBytes(await x25519.utils.convertPublicKey(bobPublicKey, 'raw', 'spki'));\n const pkcs8Secret = asBytes(await x25519.utils.convertSecretKey(aliceSecretKey, 'raw', 'pkcs8'));\n return await x25519.getSharedSecret(pkcs8Secret, spkiPublic);\n } catch (error) {\n throw new Error('Failed to derive elliptic curve secret key', { cause: error });\n }\n}\n\n/**\n * Generates elliptic curve key pair\n *\n * @returns The generated key pair\n */\nexport async function generateEccKeys(): Promise<{ secretKey: Uint8Array; publicKey: Uint8Array }> {\n const { secretKey, publicKey } = await x25519.keygen();\n return {\n secretKey: asBytes(await x25519.utils.convertSecretKey(secretKey, 'pkcs8', 'raw')),\n publicKey: asBytes(await x25519.utils.convertPublicKey(publicKey, 'spki', 'raw')),\n };\n}\n"],"mappings":";;AAEA,SAAS,QAAQ,QAA6B;AAC5C,KAAI,kBAAkB,WAAY,QAAO;AACzC,OAAM,IAAI,MAAM,kCAAkC;;;;;;;;;AAUpD,eAAsB,gBAAgB,gBAA4B,cAA+C;AAC/G,KAAI;EACF,MAAM,aAAa,QAAQ,MAAM,OAAO,MAAM,iBAAiB,cAAc,OAAO,OAAO,CAAC;EAC5F,MAAM,cAAc,QAAQ,MAAM,OAAO,MAAM,iBAAiB,gBAAgB,OAAO,QAAQ,CAAC;AAChG,SAAO,MAAM,OAAO,gBAAgB,aAAa,WAAW;UACrD,OAAO;AACd,QAAM,IAAI,MAAM,8CAA8C,EAAE,OAAO,OAAO,CAAC;;;;;;;;AASnF,eAAsB,kBAA6E;CACjG,MAAM,EAAE,WAAW,cAAc,MAAM,OAAO,QAAQ;AACtD,QAAO;EACL,WAAW,QAAQ,MAAM,OAAO,MAAM,iBAAiB,WAAW,SAAS,MAAM,CAAC;EAClF,WAAW,QAAQ,MAAM,OAAO,MAAM,iBAAiB,WAAW,QAAQ,MAAM,CAAC;EAClF"}
@@ -31,54 +31,70 @@ async function wrapKey(key, wrappingKey) {
31
31
  var FailedToEncryptEmail = class FailedToEncryptEmail extends Error {
32
32
  constructor(errorMsg) {
33
33
  super("Failed to encrypt email: " + errorMsg);
34
+ this.name = this.constructor.name;
34
35
  Object.setPrototypeOf(this, FailedToEncryptEmail.prototype);
35
36
  }
36
37
  };
37
38
  var EmailSymmetricEncryptionError = class EmailSymmetricEncryptionError extends Error {
38
39
  constructor(errorMsg) {
39
40
  super("Failed to symmetrically encrypt email: " + errorMsg);
41
+ this.name = this.constructor.name;
40
42
  Object.setPrototypeOf(this, EmailSymmetricEncryptionError.prototype);
41
43
  }
42
44
  };
43
45
  var EmailSymmetricDecryptionError = class EmailSymmetricDecryptionError extends Error {
44
46
  constructor(errorMsg) {
45
47
  super("Failed to symmetrically decrypt email: " + errorMsg);
48
+ this.name = this.constructor.name;
46
49
  Object.setPrototypeOf(this, EmailSymmetricDecryptionError.prototype);
47
50
  }
48
51
  };
52
+ var EmailPreviewSymmetricDecryptionError = class EmailPreviewSymmetricDecryptionError extends Error {
53
+ constructor(errorMsg) {
54
+ super("Failed to symmetrically decrypt email preview: " + errorMsg);
55
+ this.name = this.constructor.name;
56
+ Object.setPrototypeOf(this, EmailPreviewSymmetricDecryptionError.prototype);
57
+ }
58
+ };
49
59
  var EmailHybridEncryptionError = class EmailHybridEncryptionError extends Error {
50
60
  constructor(errorMsg) {
51
61
  super("Failed to hybridly encrypt the key: " + errorMsg);
62
+ this.name = this.constructor.name;
52
63
  Object.setPrototypeOf(this, EmailHybridEncryptionError.prototype);
53
64
  }
54
65
  };
55
66
  var EmailHybridDecryptionError = class EmailHybridDecryptionError extends Error {
56
67
  constructor(errorMsg) {
57
68
  super("Failed to hybridly decrypt the key: " + errorMsg);
69
+ this.name = this.constructor.name;
58
70
  Object.setPrototypeOf(this, EmailHybridDecryptionError.prototype);
59
71
  }
60
72
  };
61
73
  var EmailPasswordProtectError = class EmailPasswordProtectError extends Error {
62
74
  constructor(errorMsg) {
63
75
  super("Failed to password-protect the key: " + errorMsg);
76
+ this.name = this.constructor.name;
64
77
  Object.setPrototypeOf(this, EmailPasswordProtectError.prototype);
65
78
  }
66
79
  };
67
80
  var EmailPasswordOpenError = class EmailPasswordOpenError extends Error {
68
81
  constructor(errorMsg) {
69
82
  super("Failed to open password-protected key: " + errorMsg);
83
+ this.name = this.constructor.name;
70
84
  Object.setPrototypeOf(this, EmailPasswordOpenError.prototype);
71
85
  }
72
86
  };
73
87
  var InvalidInputEmail = class InvalidInputEmail extends Error {
74
88
  constructor() {
75
89
  super("Invalid input");
90
+ this.name = this.constructor.name;
76
91
  Object.setPrototypeOf(this, InvalidInputEmail.prototype);
77
92
  }
78
93
  };
79
94
  var FailedToDecryptEmail = class FailedToDecryptEmail extends Error {
80
95
  constructor(errorMsg) {
81
96
  super("Failed to decrypt email: " + errorMsg);
97
+ this.name = this.constructor.name;
82
98
  Object.setPrototypeOf(this, FailedToDecryptEmail.prototype);
83
99
  }
84
100
  };
@@ -125,6 +141,21 @@ async function encryptEmailWithKey(email, encryptionKey, aux) {
125
141
  }
126
142
  }
127
143
  /**
144
+ * Decrypts symmetrically encrypted email preview.
145
+ *
146
+ * @param encEmailPreview - The email preview to decrypt.
147
+ * @param encryptionKey - The symmetric key to decrypt the email.
148
+ * @param aux - An optional auxilary sting for AEAD (e.g., email ID or timestamp).
149
+ * @returns The resulting decrypted email
150
+ */
151
+ async function decryptPreview(encEmailPreview, encryptionKey, aux) {
152
+ try {
153
+ return uint8ToUTF8(await decryptSymmetrically(encryptionKey, base64ToUint8Array(encEmailPreview), aux));
154
+ } catch (error) {
155
+ throw new EmailPreviewSymmetricDecryptionError(error instanceof Error ? error.message : String(error));
156
+ }
157
+ }
158
+ /**
128
159
  * Decrypts symmetrically encrypted email.
129
160
  *
130
161
  * @param encEmail - The email to decrypt.
@@ -223,19 +254,12 @@ async function removePasswordProtection(emailEncryptionKey, password) {
223
254
  * @returns The set of encrypted keys (one per user) and encrypted email
224
255
  */
225
256
  async function encryptEmailHybridForMultipleRecipients(email, recipients, aux) {
226
- try {
227
- if (!recipients || recipients.length === 0) throw new InvalidInputEmail();
228
- const { encryptionKey, encEmail } = await encryptEmail(email, aux);
229
- return {
230
- encryptedKeys: await Promise.all(recipients.map((recipient) => encryptKeysHybrid(encryptionKey, recipient))),
231
- encEmail
232
- };
233
- } catch (error) {
234
- if (error instanceof InvalidInputEmail) throw error;
235
- if (error instanceof EmailSymmetricEncryptionError) throw error;
236
- if (error instanceof EmailHybridEncryptionError) throw error;
237
- throw new FailedToEncryptEmail(error instanceof Error ? error.message : String(error));
238
- }
257
+ if (!recipients || recipients.length === 0) throw new InvalidInputEmail();
258
+ const { encryptionKey, encEmail } = await encryptEmail(email, aux);
259
+ return {
260
+ encryptedKeys: await Promise.all(recipients.map((recipient) => encryptKeysHybrid(encryptionKey, recipient))),
261
+ encEmail
262
+ };
239
263
  }
240
264
  /**
241
265
  * Decrypts the email using hybrid encryption.
@@ -247,13 +271,14 @@ async function encryptEmailHybridForMultipleRecipients(email, recipients, aux) {
247
271
  * @returns The decrypted email
248
272
  */
249
273
  async function decryptEmailHybrid(encEmail, encryptedKey, recipientPrivateHybridKeys, aux) {
250
- try {
251
- return await decryptEmail(encEmail, await decryptKeysHybrid(encryptedKey, recipientPrivateHybridKeys), aux);
252
- } catch (error) {
253
- if (error instanceof EmailHybridDecryptionError) throw error;
254
- if (error instanceof EmailSymmetricDecryptionError) throw error;
255
- throw new FailedToDecryptEmail(error instanceof Error ? error.message : String(error));
256
- }
274
+ return await decryptEmail(encEmail, await decryptKeysHybrid(encryptedKey, recipientPrivateHybridKeys), aux);
275
+ }
276
+ async function decryptEmailPreviewHybrid(encPreview, encryptedKey, recipientPrivateHybridKeys, aux) {
277
+ const encryptionKey = await decryptKeysHybrid(encryptedKey, recipientPrivateHybridKeys);
278
+ return {
279
+ preview: await decryptPreview(encPreview, encryptionKey, aux),
280
+ encryptionKey
281
+ };
257
282
  }
258
283
  //#endregion
259
284
  //#region src/email-crypto/pwdProtectedEmail.ts
@@ -369,19 +394,12 @@ async function decryptEmailAndSubject(encEmail, encryptionKey, aux) {
369
394
  * @returns The set of encrypted keys and encrypted email and subject
370
395
  */
371
396
  async function encryptEmailAndSubjectHybridForMultipleRecipients(email, recipients, aux) {
372
- try {
373
- if (!recipients || recipients.length === 0) throw new InvalidInputEmail();
374
- const { encryptionKey, encEmail } = await encryptEmailAndSubject(email, aux);
375
- return {
376
- encEmail,
377
- encryptedKeys: await Promise.all(recipients.map((recipient) => encryptKeysHybrid(encryptionKey, recipient)))
378
- };
379
- } catch (error) {
380
- if (error instanceof InvalidInputEmail) throw error;
381
- if (error instanceof EmailSymmetricEncryptionError) throw error;
382
- if (error instanceof EmailHybridEncryptionError) throw error;
383
- throw new FailedToEncryptEmail(error instanceof Error ? error.message : String(error));
384
- }
397
+ if (!recipients || recipients.length === 0) throw new InvalidInputEmail();
398
+ const { encryptionKey, encEmail } = await encryptEmailAndSubject(email, aux);
399
+ return {
400
+ encEmail,
401
+ encryptedKeys: await Promise.all(recipients.map((recipient) => encryptKeysHybrid(encryptionKey, recipient)))
402
+ };
385
403
  }
386
404
  /**
387
405
  * Decrypts the email and its subject using hybrid encryption.
@@ -393,14 +411,7 @@ async function encryptEmailAndSubjectHybridForMultipleRecipients(email, recipien
393
411
  * @returns The decrypted email and subject
394
412
  */
395
413
  async function decryptEmailAndSubjectHybrid(encEmail, encryptedKey, recipientPrivateHybridKeys, aux) {
396
- try {
397
- return await decryptEmailAndSubject(encEmail, await decryptKeysHybrid(encryptedKey, recipientPrivateHybridKeys), aux);
398
- } catch (error) {
399
- if (error instanceof InvalidInputEmail) throw error;
400
- if (error instanceof EmailHybridDecryptionError) throw error;
401
- if (error instanceof EmailSymmetricDecryptionError) throw error;
402
- throw new FailedToDecryptEmail(error instanceof Error ? error.message : String(error));
403
- }
414
+ return await decryptEmailAndSubject(encEmail, await decryptKeysHybrid(encryptedKey, recipientPrivateHybridKeys), aux);
404
415
  }
405
416
  //#endregion
406
417
  //#region src/email-crypto/pwdProtectedEmailAndSubject.ts
@@ -474,6 +485,6 @@ const deriveEmailDraftKey = async (mnemonic) => {
474
485
  return deriveKeyFromMnemonic(mnemonic, CONTEXT_DRAFT);
475
486
  };
476
487
  //#endregion
477
- export { InvalidInputEmail as A, EmailHybridEncryptionError as C, EmailSymmetricEncryptionError as D, EmailSymmetricDecryptionError as E, wrapKey as M, FailedToDecryptEmail as O, EmailHybridDecryptionError as S, EmailPasswordProtectError as T, encryptEmail as _, decryptPwdProtectedEmailAndSubject as a, passwordProtectKey as b, decryptEmailAndSubject as c, createPwdProtectedEmail as d, decryptPwdProtectedEmail as f, decryptKeysHybrid as g, decryptEmail as h, createPwdProtectedEmailAndSubject as i, unwrapKey as j, FailedToEncryptEmail as k, encryptEmailAndSubject as l, encryptEmailHybridForMultipleRecipients as m, deriveEmailDraftKey as n, decryptEmailAndSubjectHybrid as o, decryptEmailHybrid as p, generateEmailKeys as r, encryptEmailAndSubjectHybridForMultipleRecipients as s, deriveDatabaseKey as t, encryptEmailAndSubjectWithKey as u, encryptEmailWithKey as v, EmailPasswordOpenError as w, removePasswordProtection as x, encryptKeysHybrid as y };
488
+ export { EmailSymmetricEncryptionError as A, removePasswordProtection as C, EmailPasswordProtectError as D, EmailPasswordOpenError as E, wrapKey as F, FailedToEncryptEmail as M, InvalidInputEmail as N, EmailPreviewSymmetricDecryptionError as O, unwrapKey as P, passwordProtectKey as S, EmailHybridEncryptionError as T, decryptKeysHybrid as _, decryptPwdProtectedEmailAndSubject as a, encryptEmailWithKey as b, decryptEmailAndSubject as c, createPwdProtectedEmail as d, decryptPwdProtectedEmail as f, decryptEmail as g, encryptEmailHybridForMultipleRecipients as h, createPwdProtectedEmailAndSubject as i, FailedToDecryptEmail as j, EmailSymmetricDecryptionError as k, encryptEmailAndSubject as l, decryptEmailPreviewHybrid as m, deriveEmailDraftKey as n, decryptEmailAndSubjectHybrid as o, decryptEmailHybrid as p, generateEmailKeys as r, encryptEmailAndSubjectHybridForMultipleRecipients as s, deriveDatabaseKey as t, encryptEmailAndSubjectWithKey as u, decryptPreview as v, EmailHybridDecryptionError as w, encryptKeysHybrid as x, encryptEmail as y };
478
489
 
479
- //# sourceMappingURL=email-crypto-v_-nFOl2.mjs.map
490
+ //# sourceMappingURL=email-crypto-CoRbTphp.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-crypto-CoRbTphp.mjs","names":[],"sources":["../src/key-wrapper/aesWrapper.ts","../src/email-crypto/errors.ts","../src/email-crypto/core.ts","../src/email-crypto/hybridEncyptedEmail.ts","../src/email-crypto/pwdProtectedEmail.ts","../src/email-crypto/coreSubject.ts","../src/email-crypto/hybridEncryptedEmailAndSubject.ts","../src/email-crypto/pwdProtectedEmailAndSubject.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","export class FailedToEncryptEmail extends Error {\n constructor(errorMsg?: string) {\n super('Failed to encrypt email: ' + errorMsg);\n\n this.name = this.constructor.name;\n Object.setPrototypeOf(this, FailedToEncryptEmail.prototype);\n }\n}\n\nexport class EmailSymmetricEncryptionError extends Error {\n constructor(errorMsg?: string) {\n super('Failed to symmetrically encrypt email: ' + errorMsg);\n\n this.name = this.constructor.name;\n Object.setPrototypeOf(this, EmailSymmetricEncryptionError.prototype);\n }\n}\n\nexport class EmailSymmetricDecryptionError extends Error {\n constructor(errorMsg?: string) {\n super('Failed to symmetrically decrypt email: ' + errorMsg);\n\n this.name = this.constructor.name;\n Object.setPrototypeOf(this, EmailSymmetricDecryptionError.prototype);\n }\n}\n\nexport class EmailPreviewSymmetricDecryptionError extends Error {\n constructor(errorMsg?: string) {\n super('Failed to symmetrically decrypt email preview: ' + errorMsg);\n\n this.name = this.constructor.name;\n Object.setPrototypeOf(this, EmailPreviewSymmetricDecryptionError.prototype);\n }\n}\n\nexport class EmailHybridEncryptionError extends Error {\n constructor(errorMsg?: string) {\n super('Failed to hybridly encrypt the key: ' + errorMsg);\n\n this.name = this.constructor.name;\n Object.setPrototypeOf(this, EmailHybridEncryptionError.prototype);\n }\n}\n\nexport class EmailHybridDecryptionError extends Error {\n constructor(errorMsg?: string) {\n super('Failed to hybridly decrypt the key: ' + errorMsg);\n\n this.name = this.constructor.name;\n Object.setPrototypeOf(this, EmailHybridDecryptionError.prototype);\n }\n}\n\nexport class EmailPasswordProtectError extends Error {\n constructor(errorMsg?: string) {\n super('Failed to password-protect the key: ' + errorMsg);\n\n this.name = this.constructor.name;\n Object.setPrototypeOf(this, EmailPasswordProtectError.prototype);\n }\n}\n\nexport class EmailPasswordOpenError extends Error {\n constructor(errorMsg?: string) {\n super('Failed to open password-protected key: ' + errorMsg);\n\n this.name = this.constructor.name;\n Object.setPrototypeOf(this, EmailPasswordOpenError.prototype);\n }\n}\n\nexport class InvalidInputEmail extends Error {\n constructor() {\n super('Invalid input');\n\n this.name = this.constructor.name;\n Object.setPrototypeOf(this, InvalidInputEmail.prototype);\n }\n}\n\nexport class FailedToDecryptEmail extends Error {\n constructor(errorMsg?: string) {\n super('Failed to decrypt email: ' + errorMsg);\n\n this.name = this.constructor.name;\n Object.setPrototypeOf(this, FailedToDecryptEmail.prototype);\n }\n}\n","import { HybridEncKey, PwdProtectedKey, Email, RecipientWithPublicKey, EmailEncrypted } 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';\nimport {\n EmailHybridDecryptionError,\n EmailHybridEncryptionError,\n InvalidInputEmail,\n EmailSymmetricDecryptionError,\n EmailSymmetricEncryptionError,\n EmailPasswordOpenError,\n EmailPasswordProtectError,\n EmailPreviewSymmetricDecryptionError,\n} from './errors';\n\n/**\n * Symmetrically encrypts email.\n *\n * @param email - The email to encrypt.\n * @param aux - An optional auxilary sting for AEAD (e.g., email ID or timestamp).\n * @returns The resulting encrypted email and symmetric key used for encryption\n */\nexport async function encryptEmail(\n email: Email,\n aux?: Uint8Array,\n): Promise<{\n encEmail: EmailEncrypted;\n encryptionKey: Uint8Array;\n}> {\n if (!email.text) {\n throw new InvalidInputEmail();\n }\n try {\n const encryptionKey = genSymmetricKey();\n const encEmail = await encryptEmailWithKey(email, encryptionKey, aux);\n\n return { encEmail, encryptionKey };\n } catch (error) {\n throw new EmailSymmetricEncryptionError(error instanceof Error ? error.message : String(error));\n }\n}\n\n/**\n * Symmetrically encrypts email with the given key.\n *\n * @param email - The email 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 and symmetric key used for encryption\n */\nexport async function encryptEmailWithKey(\n email: Email,\n encryptionKey: Uint8Array,\n aux?: Uint8Array,\n): Promise<EmailEncrypted> {\n try {\n const text = UTF8ToUint8(email.text);\n const preview = UTF8ToUint8(email.preview);\n\n const encryptedText = await encryptSymmetrically(encryptionKey, text, aux);\n const encText = uint8ArrayToBase64(encryptedText);\n\n const encryptedPreview = await encryptSymmetrically(encryptionKey, preview, aux);\n const encPreview = uint8ArrayToBase64(encryptedPreview);\n\n const encryptedAttachmentsSessionKey = await encryptSymmetrically(encryptionKey, email.attachmentsSessionKey, aux);\n const encAttachmentsSessionKey = uint8ArrayToBase64(encryptedAttachmentsSessionKey);\n\n return { encText, encPreview, encAttachmentsSessionKey };\n } catch (error) {\n throw new EmailSymmetricEncryptionError(error instanceof Error ? error.message : String(error));\n }\n}\n\n/**\n * Decrypts symmetrically encrypted email preview.\n *\n * @param encEmailPreview - The email preview 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\n */\nexport async function decryptPreview(\n encEmailPreview: string,\n encryptionKey: Uint8Array,\n aux?: Uint8Array,\n): Promise<string> {\n try {\n const encPreview = base64ToUint8Array(encEmailPreview);\n const previewArray = await decryptSymmetrically(encryptionKey, encPreview, aux);\n const preview = uint8ToUTF8(previewArray);\n\n return preview;\n } catch (error) {\n throw new EmailPreviewSymmetricDecryptionError(error instanceof Error ? error.message : String(error));\n }\n}\n\n/**\n * Decrypts symmetrically encrypted email.\n *\n * @param encEmail - The email 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\n */\nexport async function decryptEmail(\n encEmail: EmailEncrypted,\n encryptionKey: Uint8Array,\n aux?: Uint8Array,\n): Promise<Email> {\n try {\n const encText = base64ToUint8Array(encEmail.encText);\n const textArray = await decryptSymmetrically(encryptionKey, encText, aux);\n const text = uint8ToUTF8(textArray);\n\n const encPreview = base64ToUint8Array(encEmail.encPreview);\n const previewArray = await decryptSymmetrically(encryptionKey, encPreview, aux);\n const preview = uint8ToUTF8(previewArray);\n\n const encAttachementSessionKey = base64ToUint8Array(encEmail.encAttachmentsSessionKey);\n const attachmentsSessionKey = await decryptSymmetrically(encryptionKey, encAttachementSessionKey, aux);\n\n return { text, preview, attachmentsSessionKey };\n } catch (error) {\n throw new EmailSymmetricDecryptionError(error instanceof Error ? error.message : String(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 EmailHybridEncryptionError(error instanceof Error ? error.message : String(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 EmailHybridDecryptionError(error instanceof Error ? error.message : String(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 EmailPasswordProtectError(error instanceof Error ? error.message : String(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 EmailPasswordOpenError(error instanceof Error ? error.message : String(error));\n }\n}\n","import { Email, RecipientWithPublicKey, HybridEncKey, EmailEncrypted } from '../types';\nimport { decryptEmail, decryptPreview, encryptKeysHybrid, decryptKeysHybrid, encryptEmail } from './core';\nimport { InvalidInputEmail } from './errors';\n\n/**\n * Encrypts the email using hybrid encryption for multiple recipients.\n *\n * @param email - The email 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 keys (one per user) and encrypted email\n */\nexport async function encryptEmailHybridForMultipleRecipients(\n email: Email,\n recipients: RecipientWithPublicKey[],\n aux?: Uint8Array,\n): Promise<{ encryptedKeys: HybridEncKey[]; encEmail: EmailEncrypted }> {\n if (!recipients || recipients.length === 0) {\n throw new InvalidInputEmail();\n }\n const { encryptionKey, encEmail } = await encryptEmail(email, aux);\n\n const encryptedKeys = await Promise.all(recipients.map((recipient) => encryptKeysHybrid(encryptionKey, recipient)));\n\n return { encryptedKeys, encEmail };\n}\n\n/**\n * Decrypts the email using hybrid encryption.\n *\n * @param encEmail - The encrypted email.\n * @param encryptedKey - The encrypted key for this recipient.\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\n */\nexport async function decryptEmailHybrid(\n encEmail: EmailEncrypted,\n encryptedKey: HybridEncKey,\n recipientPrivateHybridKeys: Uint8Array,\n aux?: Uint8Array,\n): Promise<Email> {\n const encryptionKey = await decryptKeysHybrid(encryptedKey, recipientPrivateHybridKeys);\n return await decryptEmail(encEmail, encryptionKey, aux);\n}\n\nexport async function decryptEmailPreviewHybrid(\n encPreview: string,\n encryptedKey: HybridEncKey,\n recipientPrivateHybridKeys: Uint8Array,\n aux?: Uint8Array,\n): Promise<{ preview: string; encryptionKey: Uint8Array }> {\n const encryptionKey = await decryptKeysHybrid(encryptedKey, recipientPrivateHybridKeys);\n const preview = await decryptPreview(encPreview, encryptionKey, aux);\n return { preview, encryptionKey };\n}\n","import { PwdProtectedEmail, Email } from '../types';\nimport { decryptEmail, passwordProtectKey, removePasswordProtection, encryptEmail } from './core';\nimport {\n EmailSymmetricEncryptionError,\n FailedToDecryptEmail,\n FailedToEncryptEmail,\n EmailPasswordProtectError,\n EmailSymmetricDecryptionError,\n EmailPasswordOpenError,\n InvalidInputEmail,\n} from './errors';\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 email: Email,\n password: string,\n aux?: Uint8Array,\n): Promise<PwdProtectedEmail> {\n try {\n const { encryptionKey, encEmail } = await encryptEmail(email, aux);\n const encryptedKey = await passwordProtectKey(encryptionKey, password);\n\n return { encEmail, encryptedKey };\n } catch (error) {\n if (error instanceof InvalidInputEmail) throw error;\n if (error instanceof EmailSymmetricEncryptionError) throw error;\n if (error instanceof EmailPasswordProtectError) throw error;\n throw new FailedToEncryptEmail(error instanceof Error ? error.message : String(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\n */\nexport async function decryptPwdProtectedEmail(\n encryptedEmail: PwdProtectedEmail,\n password: string,\n aux?: Uint8Array,\n): Promise<Email> {\n if (!encryptedEmail?.encEmail || !encryptedEmail?.encryptedKey) {\n throw new InvalidInputEmail();\n }\n try {\n const encryptionKey = await removePasswordProtection(encryptedEmail.encryptedKey, password);\n return await decryptEmail(encryptedEmail.encEmail, encryptionKey, aux);\n } catch (error) {\n if (error instanceof EmailPasswordOpenError) throw error;\n if (error instanceof EmailSymmetricDecryptionError) throw error;\n throw new FailedToDecryptEmail(error instanceof Error ? error.message : String(error));\n }\n}\n","import { EmailAndSubject, EmailAndSubjectEncrypted } from '../types';\nimport { encryptSymmetrically, decryptSymmetrically, genSymmetricKey } from '../symmetric-crypto';\nimport { encryptEmailWithKey, decryptEmail } from './core';\nimport { UTF8ToUint8, base64ToUint8Array, uint8ArrayToBase64, uint8ToUTF8 } from '../utils';\nimport { InvalidInputEmail, EmailSymmetricDecryptionError, EmailSymmetricEncryptionError } from './errors';\n\n/**\n * Symmetrically encrypts email and subject.\n *\n * @param email - The email and subject to encrypt.\n * @param aux - An optional auxilary sting for AEAD (e.g., email ID or timestamp).\n * @returns The resulting encrypted email and symmetric key used for encryption\n */\nexport async function encryptEmailAndSubject(\n email: EmailAndSubject,\n aux?: Uint8Array,\n): Promise<{\n encEmail: EmailAndSubjectEncrypted;\n encryptionKey: Uint8Array;\n}> {\n if (!email.text || !email.subject) {\n throw new InvalidInputEmail();\n }\n try {\n const encryptionKey = genSymmetricKey();\n const encEmail = await encryptEmailAndSubjectWithKey(email, encryptionKey, aux);\n\n return { encEmail, encryptionKey };\n } catch (error) {\n throw new EmailSymmetricEncryptionError(error instanceof Error ? error.message : String(error));\n }\n}\n\n/**\n * Symmetrically encrypts email and subject with the given key.\n *\n * @param email - The email and subject 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 and symmetric key used for encryption\n */\nexport async function encryptEmailAndSubjectWithKey(\n email: EmailAndSubject,\n encryptionKey: Uint8Array,\n aux?: Uint8Array,\n): Promise<EmailAndSubjectEncrypted> {\n try {\n const enc = await encryptEmailWithKey(email, encryptionKey, aux);\n const subject = UTF8ToUint8(email.subject);\n const subjectEnc = await encryptSymmetrically(encryptionKey, subject, aux);\n const encSubject = uint8ArrayToBase64(subjectEnc);\n\n return { ...enc, encSubject };\n } catch (error) {\n throw new EmailSymmetricEncryptionError(error instanceof Error ? error.message : String(error));\n }\n}\n\n/**\n * Decrypts symmetrically encrypted email and email subject.\n *\n * @param encEmail - The encrypted email and subject 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 and subject\n */\nexport async function decryptEmailAndSubject(\n encEmail: EmailAndSubjectEncrypted,\n encryptionKey: Uint8Array,\n aux?: Uint8Array,\n): Promise<EmailAndSubject> {\n try {\n const encSubject = base64ToUint8Array(encEmail.encSubject);\n const subjectArray = await decryptSymmetrically(encryptionKey, encSubject, aux);\n const subject = uint8ToUTF8(subjectArray);\n const email = await decryptEmail(encEmail, encryptionKey, aux);\n\n return { ...email, subject };\n } catch (error) {\n throw new EmailSymmetricDecryptionError(error instanceof Error ? error.message : String(error));\n }\n}\n","import { RecipientWithPublicKey, EmailAndSubject, EmailAndSubjectEncrypted, HybridEncKey } from '../types';\nimport { encryptKeysHybrid, decryptKeysHybrid } from './core';\nimport { encryptEmailAndSubject, decryptEmailAndSubject } from './coreSubject';\nimport {\n InvalidInputEmail,\n} from './errors';\n\n/**\n * Encrypts the email and its subject using hybrid encryption for multiple recipients.\n *\n * @param email - The email and subject 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 keys and encrypted email and subject\n */\nexport async function encryptEmailAndSubjectHybridForMultipleRecipients(\n email: EmailAndSubject,\n recipients: RecipientWithPublicKey[],\n aux?: Uint8Array,\n): Promise<{ encryptedKeys: HybridEncKey[]; encEmail: EmailAndSubjectEncrypted }> {\n if (!recipients || recipients.length === 0) {\n throw new InvalidInputEmail();\n }\n const { encryptionKey, encEmail } = await encryptEmailAndSubject(email, aux);\n\n const encryptedKeys = await Promise.all(recipients.map((recipient) => encryptKeysHybrid(encryptionKey, recipient)));\n\n return { encEmail, encryptedKeys };\n}\n\n/**\n * Decrypts the email and its subject using hybrid encryption.\n *\n * @param encEmail - The encrypted email and subject.\n * @param encryptedKey - The encrypted key for this recipient.\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 and subject\n */\nexport async function decryptEmailAndSubjectHybrid(\n encEmail: EmailAndSubjectEncrypted,\n encryptedKey: HybridEncKey,\n recipientPrivateHybridKeys: Uint8Array,\n aux?: Uint8Array,\n): Promise<EmailAndSubject> {\n const encryptionKey = await decryptKeysHybrid(encryptedKey, recipientPrivateHybridKeys);\n return await decryptEmailAndSubject(encEmail, encryptionKey, aux);\n}\n","import { EmailAndSubject, PwdProtectedEmailAndSubject } from '../types';\nimport { passwordProtectKey, removePasswordProtection } from './core';\nimport { encryptEmailAndSubject, decryptEmailAndSubject } from './coreSubject';\nimport {\n FailedToDecryptEmail,\n FailedToEncryptEmail,\n InvalidInputEmail,\n EmailPasswordOpenError,\n EmailPasswordProtectError,\n EmailSymmetricDecryptionError,\n EmailSymmetricEncryptionError,\n} from './errors';\n\n/**\n * Creates a password-protected email and subject.\n *\n * @param email - The email and subject 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 createPwdProtectedEmailAndSubject(\n email: EmailAndSubject,\n password: string,\n aux?: Uint8Array,\n): Promise<PwdProtectedEmailAndSubject> {\n try {\n const { encryptionKey, encEmail } = await encryptEmailAndSubject(email, aux);\n const encryptedKey = await passwordProtectKey(encryptionKey, password);\n\n return { encEmail, encryptedKey };\n } catch (error) {\n if (error instanceof InvalidInputEmail) throw error;\n if (error instanceof EmailSymmetricEncryptionError) throw error;\n if (error instanceof EmailPasswordProtectError) throw error;\n throw new FailedToEncryptEmail(error instanceof Error ? error.message : String(error));\n }\n}\n\n/**\n * Opens a password-protected email and subject.\n *\n * @param encryptedEmail - The encrypted email and subject\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 and subject\n */\nexport async function decryptPwdProtectedEmailAndSubject(\n encryptedEmail: PwdProtectedEmailAndSubject,\n password: string,\n aux?: Uint8Array,\n): Promise<EmailAndSubject> {\n if (!encryptedEmail?.encEmail || !encryptedEmail?.encryptedKey) {\n throw new InvalidInputEmail();\n }\n try {\n const encryptionKey = await removePasswordProtection(encryptedEmail.encryptedKey, password);\n return await decryptEmailAndSubject(encryptedEmail.encEmail, encryptionKey, aux);\n } catch (error) {\n if (error instanceof EmailPasswordOpenError) throw error;\n if (error instanceof EmailSymmetricDecryptionError) throw error;\n throw new FailedToDecryptEmail(error instanceof Error ? error.message : String(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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"}
@@ -32,54 +32,70 @@ async function wrapKey(key, wrappingKey) {
32
32
  var FailedToEncryptEmail = class FailedToEncryptEmail extends Error {
33
33
  constructor(errorMsg) {
34
34
  super("Failed to encrypt email: " + errorMsg);
35
+ this.name = this.constructor.name;
35
36
  Object.setPrototypeOf(this, FailedToEncryptEmail.prototype);
36
37
  }
37
38
  };
38
39
  var EmailSymmetricEncryptionError = class EmailSymmetricEncryptionError extends Error {
39
40
  constructor(errorMsg) {
40
41
  super("Failed to symmetrically encrypt email: " + errorMsg);
42
+ this.name = this.constructor.name;
41
43
  Object.setPrototypeOf(this, EmailSymmetricEncryptionError.prototype);
42
44
  }
43
45
  };
44
46
  var EmailSymmetricDecryptionError = class EmailSymmetricDecryptionError extends Error {
45
47
  constructor(errorMsg) {
46
48
  super("Failed to symmetrically decrypt email: " + errorMsg);
49
+ this.name = this.constructor.name;
47
50
  Object.setPrototypeOf(this, EmailSymmetricDecryptionError.prototype);
48
51
  }
49
52
  };
53
+ var EmailPreviewSymmetricDecryptionError = class EmailPreviewSymmetricDecryptionError extends Error {
54
+ constructor(errorMsg) {
55
+ super("Failed to symmetrically decrypt email preview: " + errorMsg);
56
+ this.name = this.constructor.name;
57
+ Object.setPrototypeOf(this, EmailPreviewSymmetricDecryptionError.prototype);
58
+ }
59
+ };
50
60
  var EmailHybridEncryptionError = class EmailHybridEncryptionError extends Error {
51
61
  constructor(errorMsg) {
52
62
  super("Failed to hybridly encrypt the key: " + errorMsg);
63
+ this.name = this.constructor.name;
53
64
  Object.setPrototypeOf(this, EmailHybridEncryptionError.prototype);
54
65
  }
55
66
  };
56
67
  var EmailHybridDecryptionError = class EmailHybridDecryptionError extends Error {
57
68
  constructor(errorMsg) {
58
69
  super("Failed to hybridly decrypt the key: " + errorMsg);
70
+ this.name = this.constructor.name;
59
71
  Object.setPrototypeOf(this, EmailHybridDecryptionError.prototype);
60
72
  }
61
73
  };
62
74
  var EmailPasswordProtectError = class EmailPasswordProtectError extends Error {
63
75
  constructor(errorMsg) {
64
76
  super("Failed to password-protect the key: " + errorMsg);
77
+ this.name = this.constructor.name;
65
78
  Object.setPrototypeOf(this, EmailPasswordProtectError.prototype);
66
79
  }
67
80
  };
68
81
  var EmailPasswordOpenError = class EmailPasswordOpenError extends Error {
69
82
  constructor(errorMsg) {
70
83
  super("Failed to open password-protected key: " + errorMsg);
84
+ this.name = this.constructor.name;
71
85
  Object.setPrototypeOf(this, EmailPasswordOpenError.prototype);
72
86
  }
73
87
  };
74
88
  var InvalidInputEmail = class InvalidInputEmail extends Error {
75
89
  constructor() {
76
90
  super("Invalid input");
91
+ this.name = this.constructor.name;
77
92
  Object.setPrototypeOf(this, InvalidInputEmail.prototype);
78
93
  }
79
94
  };
80
95
  var FailedToDecryptEmail = class FailedToDecryptEmail extends Error {
81
96
  constructor(errorMsg) {
82
97
  super("Failed to decrypt email: " + errorMsg);
98
+ this.name = this.constructor.name;
83
99
  Object.setPrototypeOf(this, FailedToDecryptEmail.prototype);
84
100
  }
85
101
  };
@@ -126,6 +142,21 @@ async function encryptEmailWithKey(email, encryptionKey, aux) {
126
142
  }
127
143
  }
128
144
  /**
145
+ * Decrypts symmetrically encrypted email preview.
146
+ *
147
+ * @param encEmailPreview - The email preview to decrypt.
148
+ * @param encryptionKey - The symmetric key to decrypt the email.
149
+ * @param aux - An optional auxilary sting for AEAD (e.g., email ID or timestamp).
150
+ * @returns The resulting decrypted email
151
+ */
152
+ async function decryptPreview(encEmailPreview, encryptionKey, aux) {
153
+ try {
154
+ return require_utils.uint8ToUTF8(await require_symmetric_crypto.decryptSymmetrically(encryptionKey, require_utils.base64ToUint8Array(encEmailPreview), aux));
155
+ } catch (error) {
156
+ throw new EmailPreviewSymmetricDecryptionError(error instanceof Error ? error.message : String(error));
157
+ }
158
+ }
159
+ /**
129
160
  * Decrypts symmetrically encrypted email.
130
161
  *
131
162
  * @param encEmail - The email to decrypt.
@@ -224,19 +255,12 @@ async function removePasswordProtection(emailEncryptionKey, password) {
224
255
  * @returns The set of encrypted keys (one per user) and encrypted email
225
256
  */
226
257
  async function encryptEmailHybridForMultipleRecipients(email, recipients, aux) {
227
- try {
228
- if (!recipients || recipients.length === 0) throw new InvalidInputEmail();
229
- const { encryptionKey, encEmail } = await encryptEmail(email, aux);
230
- return {
231
- encryptedKeys: await Promise.all(recipients.map((recipient) => encryptKeysHybrid(encryptionKey, recipient))),
232
- encEmail
233
- };
234
- } catch (error) {
235
- if (error instanceof InvalidInputEmail) throw error;
236
- if (error instanceof EmailSymmetricEncryptionError) throw error;
237
- if (error instanceof EmailHybridEncryptionError) throw error;
238
- throw new FailedToEncryptEmail(error instanceof Error ? error.message : String(error));
239
- }
258
+ if (!recipients || recipients.length === 0) throw new InvalidInputEmail();
259
+ const { encryptionKey, encEmail } = await encryptEmail(email, aux);
260
+ return {
261
+ encryptedKeys: await Promise.all(recipients.map((recipient) => encryptKeysHybrid(encryptionKey, recipient))),
262
+ encEmail
263
+ };
240
264
  }
241
265
  /**
242
266
  * Decrypts the email using hybrid encryption.
@@ -248,13 +272,14 @@ async function encryptEmailHybridForMultipleRecipients(email, recipients, aux) {
248
272
  * @returns The decrypted email
249
273
  */
250
274
  async function decryptEmailHybrid(encEmail, encryptedKey, recipientPrivateHybridKeys, aux) {
251
- try {
252
- return await decryptEmail(encEmail, await decryptKeysHybrid(encryptedKey, recipientPrivateHybridKeys), aux);
253
- } catch (error) {
254
- if (error instanceof EmailHybridDecryptionError) throw error;
255
- if (error instanceof EmailSymmetricDecryptionError) throw error;
256
- throw new FailedToDecryptEmail(error instanceof Error ? error.message : String(error));
257
- }
275
+ return await decryptEmail(encEmail, await decryptKeysHybrid(encryptedKey, recipientPrivateHybridKeys), aux);
276
+ }
277
+ async function decryptEmailPreviewHybrid(encPreview, encryptedKey, recipientPrivateHybridKeys, aux) {
278
+ const encryptionKey = await decryptKeysHybrid(encryptedKey, recipientPrivateHybridKeys);
279
+ return {
280
+ preview: await decryptPreview(encPreview, encryptionKey, aux),
281
+ encryptionKey
282
+ };
258
283
  }
259
284
  //#endregion
260
285
  //#region src/email-crypto/pwdProtectedEmail.ts
@@ -370,19 +395,12 @@ async function decryptEmailAndSubject(encEmail, encryptionKey, aux) {
370
395
  * @returns The set of encrypted keys and encrypted email and subject
371
396
  */
372
397
  async function encryptEmailAndSubjectHybridForMultipleRecipients(email, recipients, aux) {
373
- try {
374
- if (!recipients || recipients.length === 0) throw new InvalidInputEmail();
375
- const { encryptionKey, encEmail } = await encryptEmailAndSubject(email, aux);
376
- return {
377
- encEmail,
378
- encryptedKeys: await Promise.all(recipients.map((recipient) => encryptKeysHybrid(encryptionKey, recipient)))
379
- };
380
- } catch (error) {
381
- if (error instanceof InvalidInputEmail) throw error;
382
- if (error instanceof EmailSymmetricEncryptionError) throw error;
383
- if (error instanceof EmailHybridEncryptionError) throw error;
384
- throw new FailedToEncryptEmail(error instanceof Error ? error.message : String(error));
385
- }
398
+ if (!recipients || recipients.length === 0) throw new InvalidInputEmail();
399
+ const { encryptionKey, encEmail } = await encryptEmailAndSubject(email, aux);
400
+ return {
401
+ encEmail,
402
+ encryptedKeys: await Promise.all(recipients.map((recipient) => encryptKeysHybrid(encryptionKey, recipient)))
403
+ };
386
404
  }
387
405
  /**
388
406
  * Decrypts the email and its subject using hybrid encryption.
@@ -394,14 +412,7 @@ async function encryptEmailAndSubjectHybridForMultipleRecipients(email, recipien
394
412
  * @returns The decrypted email and subject
395
413
  */
396
414
  async function decryptEmailAndSubjectHybrid(encEmail, encryptedKey, recipientPrivateHybridKeys, aux) {
397
- try {
398
- return await decryptEmailAndSubject(encEmail, await decryptKeysHybrid(encryptedKey, recipientPrivateHybridKeys), aux);
399
- } catch (error) {
400
- if (error instanceof InvalidInputEmail) throw error;
401
- if (error instanceof EmailHybridDecryptionError) throw error;
402
- if (error instanceof EmailSymmetricDecryptionError) throw error;
403
- throw new FailedToDecryptEmail(error instanceof Error ? error.message : String(error));
404
- }
415
+ return await decryptEmailAndSubject(encEmail, await decryptKeysHybrid(encryptedKey, recipientPrivateHybridKeys), aux);
405
416
  }
406
417
  //#endregion
407
418
  //#region src/email-crypto/pwdProtectedEmailAndSubject.ts
@@ -499,6 +510,12 @@ Object.defineProperty(exports, "EmailPasswordProtectError", {
499
510
  return EmailPasswordProtectError;
500
511
  }
501
512
  });
513
+ Object.defineProperty(exports, "EmailPreviewSymmetricDecryptionError", {
514
+ enumerable: true,
515
+ get: function() {
516
+ return EmailPreviewSymmetricDecryptionError;
517
+ }
518
+ });
502
519
  Object.defineProperty(exports, "EmailSymmetricDecryptionError", {
503
520
  enumerable: true,
504
521
  get: function() {
@@ -565,12 +582,24 @@ Object.defineProperty(exports, "decryptEmailHybrid", {
565
582
  return decryptEmailHybrid;
566
583
  }
567
584
  });
585
+ Object.defineProperty(exports, "decryptEmailPreviewHybrid", {
586
+ enumerable: true,
587
+ get: function() {
588
+ return decryptEmailPreviewHybrid;
589
+ }
590
+ });
568
591
  Object.defineProperty(exports, "decryptKeysHybrid", {
569
592
  enumerable: true,
570
593
  get: function() {
571
594
  return decryptKeysHybrid;
572
595
  }
573
596
  });
597
+ Object.defineProperty(exports, "decryptPreview", {
598
+ enumerable: true,
599
+ get: function() {
600
+ return decryptPreview;
601
+ }
602
+ });
574
603
  Object.defineProperty(exports, "decryptPwdProtectedEmail", {
575
604
  enumerable: true,
576
605
  get: function() {
@@ -668,4 +697,4 @@ Object.defineProperty(exports, "wrapKey", {
668
697
  }
669
698
  });
670
699
 
671
- //# sourceMappingURL=email-crypto-CLlLUgA6.js.map
700
+ //# sourceMappingURL=email-crypto-DJb-I1wm.js.map