internxt-crypto 1.1.1 → 1.3.0
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.
- package/README.md +10 -6
- package/dist/constants.d.mts +4 -3
- package/dist/constants.d.mts.map +1 -1
- package/dist/constants.d.ts +4 -3
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +6 -4
- package/dist/constants.js.map +1 -1
- package/dist/constants.mjs +4 -3
- package/dist/constants.mjs.map +1 -1
- package/dist/derive-key.d.mts +8 -4
- package/dist/derive-key.d.mts.map +1 -1
- package/dist/derive-key.d.ts +8 -4
- package/dist/derive-key.d.ts.map +1 -1
- package/dist/derive-key.js +4 -4
- package/dist/derive-key.mjs +2 -2
- package/dist/derive-password.d.mts +7 -1
- package/dist/derive-password.d.mts.map +1 -1
- package/dist/derive-password.d.ts +7 -1
- package/dist/derive-password.d.ts.map +1 -1
- package/dist/derive-password.js +2 -1
- package/dist/derive-password.mjs +2 -2
- package/dist/deriveKeysFromMnemonic-DB0UHE-y.mjs +49 -0
- package/dist/deriveKeysFromMnemonic-DB0UHE-y.mjs.map +1 -0
- package/dist/{deriveKeysFromKey-GTRMuxDj.js → deriveKeysFromMnemonic-Dbx7VSBQ.js} +14 -9
- package/dist/deriveKeysFromMnemonic-Dbx7VSBQ.js.map +1 -0
- package/dist/{deriveKeysFromPassword-DXgSvTNC.mjs → deriveKeysFromPassword-DFzo2OII.mjs} +7 -7
- package/dist/{deriveKeysFromPassword-DXgSvTNC.mjs.map → deriveKeysFromPassword-DFzo2OII.mjs.map} +1 -1
- package/dist/{deriveKeysFromPassword-C7xAGGsh.js → deriveKeysFromPassword-iMHv-tIA.js} +12 -6
- package/dist/{deriveKeysFromPassword-C7xAGGsh.js.map → deriveKeysFromPassword-iMHv-tIA.js.map} +1 -1
- package/dist/email-crypto.d.mts +15 -1
- package/dist/email-crypto.d.mts.map +1 -1
- package/dist/email-crypto.d.ts +15 -1
- package/dist/email-crypto.d.ts.map +1 -1
- package/dist/email-crypto.js +3 -1
- package/dist/email-crypto.mjs +2 -2
- package/dist/emailEncryptionKey-Ba95VuFO.js +241 -0
- package/dist/emailEncryptionKey-Ba95VuFO.js.map +1 -0
- package/dist/emailEncryptionKey-CYvr26FG.mjs +188 -0
- package/dist/emailEncryptionKey-CYvr26FG.mjs.map +1 -0
- package/dist/{emailKeys-DWvKANTZ.js → emailKeys-BFI-paQq.js} +34 -2
- package/dist/emailKeys-BFI-paQq.js.map +1 -0
- package/dist/{emailKeys-nzn7U7HQ.mjs → emailKeys-BjIeINfC.mjs} +23 -3
- package/dist/{emailKeys-nzn7U7HQ.mjs.map → emailKeys-BjIeINfC.mjs.map} +1 -1
- package/dist/index.d.mts +6 -6
- package/dist/index.d.ts +6 -6
- package/dist/index.js +19 -9
- package/dist/index.mjs +6 -6
- package/dist/keystore-crypto.d.mts +41 -7
- package/dist/keystore-crypto.d.mts.map +1 -1
- package/dist/keystore-crypto.d.ts +41 -7
- package/dist/keystore-crypto.d.ts.map +1 -1
- package/dist/keystore-crypto.js +7 -1
- package/dist/keystore-crypto.mjs +2 -2
- package/package.json +1 -1
- package/dist/deriveKeysFromKey-CseBjg0n.mjs +0 -44
- package/dist/deriveKeysFromKey-CseBjg0n.mjs.map +0 -1
- package/dist/deriveKeysFromKey-GTRMuxDj.js.map +0 -1
- package/dist/emailEncryptionKey-F_YuJu1H.js +0 -144
- package/dist/emailEncryptionKey-F_YuJu1H.js.map +0 -1
- package/dist/emailEncryptionKey-kIsseFo6.mjs +0 -127
- package/dist/emailEncryptionKey-kIsseFo6.mjs.map +0 -1
- package/dist/emailKeys-DWvKANTZ.js.map +0 -1
package/dist/email-crypto.d.mts
CHANGED
|
@@ -56,6 +56,20 @@ declare function decryptPwdProtectedEmail(encryptedEmail: PwdProtectedEmail, pas
|
|
|
56
56
|
* @returns The user's private and public keys
|
|
57
57
|
*/
|
|
58
58
|
declare function generateEmailKeys(): Promise<HybridKeyPair>;
|
|
59
|
+
/**
|
|
60
|
+
* Derives database encryption key for the given user
|
|
61
|
+
*
|
|
62
|
+
* @param mnemonic - The user's mnemonic (machine-generated with secure PRNG)
|
|
63
|
+
* @returns The symmetric key for protecting database
|
|
64
|
+
*/
|
|
65
|
+
declare const deriveDatabaseKey: (mnemonic: string) => Promise<Uint8Array>;
|
|
66
|
+
/**
|
|
67
|
+
* Derives email draft encryption key for the given user
|
|
68
|
+
*
|
|
69
|
+
* @param mnemonic - The user's mnemonic (machine-generated with secure PRNG)
|
|
70
|
+
* @returns The symmetric key for protecting email drafts
|
|
71
|
+
*/
|
|
72
|
+
declare const deriveEmailDraftKey: (mnemonic: string) => Promise<Uint8Array>;
|
|
59
73
|
//#endregion
|
|
60
74
|
//#region src/email-crypto/core.d.ts
|
|
61
75
|
/**
|
|
@@ -120,5 +134,5 @@ declare function passwordProtectKey(emailEncryptionKey: Uint8Array, password: st
|
|
|
120
134
|
*/
|
|
121
135
|
declare function removePasswordProtection(emailEncryptionKey: PwdProtectedKey, password: string): Promise<Uint8Array>;
|
|
122
136
|
//#endregion
|
|
123
|
-
export { createPwdProtectedEmail, decryptEmailBody, decryptEmailHybrid, decryptKeysHybrid, decryptPwdProtectedEmail, encryptEmailBody, encryptEmailBodyWithKey, encryptEmailHybrid, encryptEmailHybridForMultipleRecipients, encryptKeysHybrid, generateEmailKeys, passwordProtectKey, removePasswordProtection };
|
|
137
|
+
export { createPwdProtectedEmail, decryptEmailBody, decryptEmailHybrid, decryptKeysHybrid, decryptPwdProtectedEmail, deriveDatabaseKey, deriveEmailDraftKey, encryptEmailBody, encryptEmailBodyWithKey, encryptEmailHybrid, encryptEmailHybridForMultipleRecipients, encryptKeysHybrid, generateEmailKeys, passwordProtectKey, removePasswordProtection };
|
|
124
138
|
//# sourceMappingURL=email-crypto.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-crypto.d.mts","names":[],"sources":["../src/email-crypto/hybridEncyptedEmail.ts","../src/email-crypto/pwdProtectedEmail.ts","../src/email-crypto/emailKeys.ts","../src/email-crypto/core.ts"],"mappings":";;;;;AAWA;;;;;;iBAAsB,kBAAA,CACpB,IAAA,EAAM,SAAA,EACN,SAAA,EAAW,sBAAA,EACX,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,oBAAA;;;;;;;;;iBAkBW,uCAAA,CACpB,IAAA,EAAM,SAAA,EACN,UAAA,EAAY,sBAAA,IACZ,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,oBAAA;;;;;AAJX;;;;iBA8BsB,kBAAA,CACpB,YAAA,EAAc,oBAAA,EACd,0BAAA,EAA4B,UAAA,EAC5B,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,SAAA;;;;;AAxDX;;;;;;iBCAsB,uBAAA,CACpB,SAAA,EAAW,SAAA,EACX,QAAA,UACA,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,iBAAA;;;;;;;;;iBAmBW,wBAAA,CACpB,cAAA,EAAgB,iBAAA,EAChB,QAAA,UACA,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,SAAA;;;;;AD3BX;;;
|
|
1
|
+
{"version":3,"file":"email-crypto.d.mts","names":[],"sources":["../src/email-crypto/hybridEncyptedEmail.ts","../src/email-crypto/pwdProtectedEmail.ts","../src/email-crypto/emailKeys.ts","../src/email-crypto/core.ts"],"mappings":";;;;;AAWA;;;;;;iBAAsB,kBAAA,CACpB,IAAA,EAAM,SAAA,EACN,SAAA,EAAW,sBAAA,EACX,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,oBAAA;;;;;;;;;iBAkBW,uCAAA,CACpB,IAAA,EAAM,SAAA,EACN,UAAA,EAAY,sBAAA,IACZ,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,oBAAA;;;;;AAJX;;;;iBA8BsB,kBAAA,CACpB,YAAA,EAAc,oBAAA,EACd,0BAAA,EAA4B,UAAA,EAC5B,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,SAAA;;;;;AAxDX;;;;;;iBCAsB,uBAAA,CACpB,SAAA,EAAW,SAAA,EACX,QAAA,UACA,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,iBAAA;;;;;;;;;iBAmBW,wBAAA,CACpB,cAAA,EAAgB,iBAAA,EAChB,QAAA,UACA,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,SAAA;;;;;AD3BX;;;iBEDsB,iBAAA,CAAA,GAAqB,OAAA,CAAQ,aAAA;;;;;;;cAUtC,iBAAA,GAA2B,QAAA,aAAmB,OAAA,CAAQ,UAAA;;;;;;;cAUtD,mBAAA,GAA6B,QAAA,aAAmB,OAAA,CAAQ,UAAA;;;;;AFnBrE;;;;;iBGGsB,gBAAA,CACpB,IAAA,EAAM,SAAA,EACN,GAAA,GAAM,UAAA,GACL,OAAA;EACD,YAAA,EAAc,kBAAA;EACd,aAAA,EAAe,UAAA;AAAA;;;;;;;;;iBAuBK,uBAAA,CACpB,IAAA,EAAM,SAAA,EACN,aAAA,EAAe,UAAA,EACf,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,kBAAA;;;AHbX;;;;;;iBG8CsB,gBAAA,CACpB,YAAA,EAAc,kBAAA,EACd,aAAA,EAAe,UAAA,EACf,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,SAAA;;;;;;;;iBA8BW,iBAAA,CACpB,kBAAA,EAAoB,UAAA,EACpB,SAAA,EAAW,sBAAA,GACV,OAAA,CAAQ,YAAA;;;;;;AHrDX;;iBG6EsB,iBAAA,CACpB,YAAA,EAAc,YAAA,EACd,mBAAA,EAAqB,UAAA,GACpB,OAAA,CAAQ,UAAA;;;;;;;;iBAmBW,kBAAA,CAAmB,kBAAA,EAAoB,UAAA,EAAY,QAAA,WAAmB,OAAA,CAAQ,eAAA;;;;;;;;iBAmB9E,wBAAA,CACpB,kBAAA,EAAoB,eAAA,EACpB,QAAA,WACC,OAAA,CAAQ,UAAA"}
|
package/dist/email-crypto.d.ts
CHANGED
|
@@ -56,6 +56,20 @@ declare function decryptPwdProtectedEmail(encryptedEmail: PwdProtectedEmail, pas
|
|
|
56
56
|
* @returns The user's private and public keys
|
|
57
57
|
*/
|
|
58
58
|
declare function generateEmailKeys(): Promise<HybridKeyPair>;
|
|
59
|
+
/**
|
|
60
|
+
* Derives database encryption key for the given user
|
|
61
|
+
*
|
|
62
|
+
* @param mnemonic - The user's mnemonic (machine-generated with secure PRNG)
|
|
63
|
+
* @returns The symmetric key for protecting database
|
|
64
|
+
*/
|
|
65
|
+
declare const deriveDatabaseKey: (mnemonic: string) => Promise<Uint8Array>;
|
|
66
|
+
/**
|
|
67
|
+
* Derives email draft encryption key for the given user
|
|
68
|
+
*
|
|
69
|
+
* @param mnemonic - The user's mnemonic (machine-generated with secure PRNG)
|
|
70
|
+
* @returns The symmetric key for protecting email drafts
|
|
71
|
+
*/
|
|
72
|
+
declare const deriveEmailDraftKey: (mnemonic: string) => Promise<Uint8Array>;
|
|
59
73
|
//#endregion
|
|
60
74
|
//#region src/email-crypto/core.d.ts
|
|
61
75
|
/**
|
|
@@ -120,5 +134,5 @@ declare function passwordProtectKey(emailEncryptionKey: Uint8Array, password: st
|
|
|
120
134
|
*/
|
|
121
135
|
declare function removePasswordProtection(emailEncryptionKey: PwdProtectedKey, password: string): Promise<Uint8Array>;
|
|
122
136
|
//#endregion
|
|
123
|
-
export { createPwdProtectedEmail, decryptEmailBody, decryptEmailHybrid, decryptKeysHybrid, decryptPwdProtectedEmail, encryptEmailBody, encryptEmailBodyWithKey, encryptEmailHybrid, encryptEmailHybridForMultipleRecipients, encryptKeysHybrid, generateEmailKeys, passwordProtectKey, removePasswordProtection };
|
|
137
|
+
export { createPwdProtectedEmail, decryptEmailBody, decryptEmailHybrid, decryptKeysHybrid, decryptPwdProtectedEmail, deriveDatabaseKey, deriveEmailDraftKey, encryptEmailBody, encryptEmailBodyWithKey, encryptEmailHybrid, encryptEmailHybridForMultipleRecipients, encryptKeysHybrid, generateEmailKeys, passwordProtectKey, removePasswordProtection };
|
|
124
138
|
//# sourceMappingURL=email-crypto.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-crypto.d.ts","names":[],"sources":["../src/email-crypto/hybridEncyptedEmail.ts","../src/email-crypto/pwdProtectedEmail.ts","../src/email-crypto/emailKeys.ts","../src/email-crypto/core.ts"],"mappings":";;;;;AAWA;;;;;;iBAAsB,kBAAA,CACpB,IAAA,EAAM,SAAA,EACN,SAAA,EAAW,sBAAA,EACX,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,oBAAA;;;;;;;;;iBAkBW,uCAAA,CACpB,IAAA,EAAM,SAAA,EACN,UAAA,EAAY,sBAAA,IACZ,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,oBAAA;;;;;AAJX;;;;iBA8BsB,kBAAA,CACpB,YAAA,EAAc,oBAAA,EACd,0BAAA,EAA4B,UAAA,EAC5B,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,SAAA;;;;;AAxDX;;;;;;iBCAsB,uBAAA,CACpB,SAAA,EAAW,SAAA,EACX,QAAA,UACA,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,iBAAA;;;;;;;;;iBAmBW,wBAAA,CACpB,cAAA,EAAgB,iBAAA,EAChB,QAAA,UACA,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,SAAA;;;;;AD3BX;;;
|
|
1
|
+
{"version":3,"file":"email-crypto.d.ts","names":[],"sources":["../src/email-crypto/hybridEncyptedEmail.ts","../src/email-crypto/pwdProtectedEmail.ts","../src/email-crypto/emailKeys.ts","../src/email-crypto/core.ts"],"mappings":";;;;;AAWA;;;;;;iBAAsB,kBAAA,CACpB,IAAA,EAAM,SAAA,EACN,SAAA,EAAW,sBAAA,EACX,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,oBAAA;;;;;;;;;iBAkBW,uCAAA,CACpB,IAAA,EAAM,SAAA,EACN,UAAA,EAAY,sBAAA,IACZ,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,oBAAA;;;;;AAJX;;;;iBA8BsB,kBAAA,CACpB,YAAA,EAAc,oBAAA,EACd,0BAAA,EAA4B,UAAA,EAC5B,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,SAAA;;;;;AAxDX;;;;;;iBCAsB,uBAAA,CACpB,SAAA,EAAW,SAAA,EACX,QAAA,UACA,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,iBAAA;;;;;;;;;iBAmBW,wBAAA,CACpB,cAAA,EAAgB,iBAAA,EAChB,QAAA,UACA,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,SAAA;;;;;AD3BX;;;iBEDsB,iBAAA,CAAA,GAAqB,OAAA,CAAQ,aAAA;;;;;;;cAUtC,iBAAA,GAA2B,QAAA,aAAmB,OAAA,CAAQ,UAAA;;;;;;;cAUtD,mBAAA,GAA6B,QAAA,aAAmB,OAAA,CAAQ,UAAA;;;;;AFnBrE;;;;;iBGGsB,gBAAA,CACpB,IAAA,EAAM,SAAA,EACN,GAAA,GAAM,UAAA,GACL,OAAA;EACD,YAAA,EAAc,kBAAA;EACd,aAAA,EAAe,UAAA;AAAA;;;;;;;;;iBAuBK,uBAAA,CACpB,IAAA,EAAM,SAAA,EACN,aAAA,EAAe,UAAA,EACf,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,kBAAA;;;AHbX;;;;;;iBG8CsB,gBAAA,CACpB,YAAA,EAAc,kBAAA,EACd,aAAA,EAAe,UAAA,EACf,GAAA,GAAM,UAAA,GACL,OAAA,CAAQ,SAAA;;;;;;;;iBA8BW,iBAAA,CACpB,kBAAA,EAAoB,UAAA,EACpB,SAAA,EAAW,sBAAA,GACV,OAAA,CAAQ,YAAA;;;;;;AHrDX;;iBG6EsB,iBAAA,CACpB,YAAA,EAAc,YAAA,EACd,mBAAA,EAAqB,UAAA,GACpB,OAAA,CAAQ,UAAA;;;;;;;;iBAmBW,kBAAA,CAAmB,kBAAA,EAAoB,UAAA,EAAY,QAAA,WAAmB,OAAA,CAAQ,eAAA;;;;;;;;iBAmB9E,wBAAA,CACpB,kBAAA,EAAoB,eAAA,EACpB,QAAA,WACC,OAAA,CAAQ,UAAA"}
|
package/dist/email-crypto.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_emailKeys = require('./emailKeys-
|
|
2
|
+
const require_emailKeys = require('./emailKeys-BFI-paQq.js');
|
|
3
3
|
|
|
4
4
|
exports.createPwdProtectedEmail = require_emailKeys.createPwdProtectedEmail;
|
|
5
5
|
exports.decryptEmailBody = require_emailKeys.decryptEmailBody;
|
|
6
6
|
exports.decryptEmailHybrid = require_emailKeys.decryptEmailHybrid;
|
|
7
7
|
exports.decryptKeysHybrid = require_emailKeys.decryptKeysHybrid;
|
|
8
8
|
exports.decryptPwdProtectedEmail = require_emailKeys.decryptPwdProtectedEmail;
|
|
9
|
+
exports.deriveDatabaseKey = require_emailKeys.deriveDatabaseKey;
|
|
10
|
+
exports.deriveEmailDraftKey = require_emailKeys.deriveEmailDraftKey;
|
|
9
11
|
exports.encryptEmailBody = require_emailKeys.encryptEmailBody;
|
|
10
12
|
exports.encryptEmailBodyWithKey = require_emailKeys.encryptEmailBodyWithKey;
|
|
11
13
|
exports.encryptEmailHybrid = require_emailKeys.encryptEmailHybrid;
|
package/dist/email-crypto.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { a as
|
|
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
2
|
|
|
3
|
-
export { createPwdProtectedEmail, decryptEmailBody, decryptEmailHybrid, decryptKeysHybrid, decryptPwdProtectedEmail, encryptEmailBody, encryptEmailBodyWithKey, encryptEmailHybrid, encryptEmailHybridForMultipleRecipients, encryptKeysHybrid, generateEmailKeys, passwordProtectKey, removePasswordProtection };
|
|
3
|
+
export { createPwdProtectedEmail, decryptEmailBody, decryptEmailHybrid, decryptKeysHybrid, decryptPwdProtectedEmail, deriveDatabaseKey, deriveEmailDraftKey, encryptEmailBody, encryptEmailBodyWithKey, encryptEmailHybrid, encryptEmailHybridForMultipleRecipients, encryptKeysHybrid, generateEmailKeys, passwordProtectKey, removePasswordProtection };
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
const require_constants = require('./constants.js');
|
|
2
|
+
const require_genID = require('./genID-cWOPmspk.js');
|
|
3
|
+
const require_deriveKeysFromMnemonic = require('./deriveKeysFromMnemonic-Dbx7VSBQ.js');
|
|
4
|
+
const require_aes = require('./aes-CuW_SPl-.js');
|
|
5
|
+
const require_xwing = require('./xwing-iRWVRtNE.js');
|
|
6
|
+
const require_types = require('./types.js');
|
|
7
|
+
|
|
8
|
+
//#region src/keystore-crypto/core.ts
|
|
9
|
+
/**
|
|
10
|
+
* Encrypts the user's hybrid key using symmetric encryption to get a keystore
|
|
11
|
+
*
|
|
12
|
+
* @param secretKey - The symmetric key to encrypt the keystore content
|
|
13
|
+
* @param key - The hybrid key pair
|
|
14
|
+
* @param userEmail - The email of the user
|
|
15
|
+
* @param type - The keystore type
|
|
16
|
+
* @returns The encrypted keystore
|
|
17
|
+
*/
|
|
18
|
+
async function encryptKeystoreContent(secretKey, keys, userEmail, type) {
|
|
19
|
+
try {
|
|
20
|
+
const publicKey = require_genID.uint8ArrayToBase64(keys.publicKey);
|
|
21
|
+
const aux = require_genID.UTF8ToUint8(userEmail + type + publicKey);
|
|
22
|
+
return {
|
|
23
|
+
userEmail,
|
|
24
|
+
type,
|
|
25
|
+
publicKey,
|
|
26
|
+
privateKeyEncrypted: require_genID.uint8ArrayToBase64(await require_aes.encryptSymmetrically(secretKey, keys.secretKey, aux))
|
|
27
|
+
};
|
|
28
|
+
} catch (error) {
|
|
29
|
+
throw new Error("Failed to encrypt keystore content", { cause: error });
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Decrypts the keystore content using symmetric encryption
|
|
34
|
+
*
|
|
35
|
+
* @param kesytoreOpeningKey - The symmetric key to decrypt the keystore content
|
|
36
|
+
* @param encryptedKeys - The encrypted keystore content
|
|
37
|
+
* @returns The decrypted hybrid key pair contained in the keystore
|
|
38
|
+
*/
|
|
39
|
+
async function decryptKeystoreContent(kesytoreOpeningKey, encryptedKeystore) {
|
|
40
|
+
try {
|
|
41
|
+
const aux = require_genID.UTF8ToUint8(encryptedKeystore.userEmail + encryptedKeystore.type + encryptedKeystore.publicKey);
|
|
42
|
+
return {
|
|
43
|
+
publicKey: require_genID.base64ToUint8Array(encryptedKeystore.publicKey),
|
|
44
|
+
secretKey: await require_aes.decryptSymmetrically(kesytoreOpeningKey, require_genID.base64ToUint8Array(encryptedKeystore.privateKeyEncrypted), aux)
|
|
45
|
+
};
|
|
46
|
+
} catch (error) {
|
|
47
|
+
throw new Error("Failed to decrypt keystore content", { cause: error });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Derives a secret key for protecting the recovery keystore
|
|
52
|
+
*
|
|
53
|
+
* @param recoveryCodes - The recovery codes (machine-generated with secure PRNG)
|
|
54
|
+
* @returns The derived secret key for protecting the recovery keystore
|
|
55
|
+
*/
|
|
56
|
+
async function deriveRecoveryKey(recoveryCodes) {
|
|
57
|
+
return require_deriveKeysFromMnemonic.deriveKeyFromMnemonic(recoveryCodes, require_constants.CONTEXT_RECOVERY);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Derives a secret key for protecting the encryption keystore from user's mnemonic
|
|
61
|
+
*
|
|
62
|
+
* @param mnemonic - The user's mnemonic (machine-generated with secure PRNG)
|
|
63
|
+
* @returns The derived secret key for protecting the encryption keystore
|
|
64
|
+
*/
|
|
65
|
+
async function deriveEncryptionKeystoreKeyFromMnemonic(mnemonic) {
|
|
66
|
+
return require_deriveKeysFromMnemonic.deriveKeyFromMnemonic(mnemonic, require_constants.CONTEXT_ENC_KEYSTORE);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
//#endregion
|
|
70
|
+
//#region src/keystore-crypto/errors.ts
|
|
71
|
+
var FailedToCreateKeyStores = class FailedToCreateKeyStores extends Error {
|
|
72
|
+
constructor(errorMsg) {
|
|
73
|
+
super("Failed to create encryption and recovery keystores: " + errorMsg);
|
|
74
|
+
Object.setPrototypeOf(this, FailedToCreateKeyStores.prototype);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
var InvalidInputKeyStore = class InvalidInputKeyStore extends Error {
|
|
78
|
+
constructor() {
|
|
79
|
+
super("Invalid input");
|
|
80
|
+
Object.setPrototypeOf(this, InvalidInputKeyStore.prototype);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
var FailedToOpenEncryptionKeyStore = class FailedToOpenEncryptionKeyStore extends Error {
|
|
84
|
+
constructor(errorMsg) {
|
|
85
|
+
super("Failed to open encryption keystore: " + errorMsg);
|
|
86
|
+
Object.setPrototypeOf(this, FailedToOpenEncryptionKeyStore.prototype);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
var FailedToOpenRecoveryKeyStore = class FailedToOpenRecoveryKeyStore extends Error {
|
|
90
|
+
constructor(errorMsg) {
|
|
91
|
+
super("Failed to open recovery keystore: " + errorMsg);
|
|
92
|
+
Object.setPrototypeOf(this, FailedToOpenRecoveryKeyStore.prototype);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
var FailedToChangeMnemonicForKeyStore = class FailedToChangeMnemonicForKeyStore extends Error {
|
|
96
|
+
constructor(errorMsg) {
|
|
97
|
+
super("Error while fetching message: " + errorMsg);
|
|
98
|
+
Object.setPrototypeOf(this, FailedToChangeMnemonicForKeyStore.prototype);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
//#endregion
|
|
103
|
+
//#region src/keystore-crypto/emailEncryptionKey.ts
|
|
104
|
+
/**
|
|
105
|
+
* Generates hybrid keys and creates encrypted main and recovery keystores
|
|
106
|
+
* The main keystore encryption key is derived from the user's mnemonic
|
|
107
|
+
* The recovery keystore encryption key is derived from the recovery codes
|
|
108
|
+
*
|
|
109
|
+
* @param userEmail - The user's email
|
|
110
|
+
* @param mnemonic - The user's mnemonic
|
|
111
|
+
* @returns The encryption keys
|
|
112
|
+
*
|
|
113
|
+
* @returns The encryption and recovery keystores, recovery codes and hybrid keys
|
|
114
|
+
*/
|
|
115
|
+
async function createEncryptionAndRecoveryKeystores(userEmail, mnemonic) {
|
|
116
|
+
try {
|
|
117
|
+
const keys = require_xwing.genHybridKeys();
|
|
118
|
+
const encryptionKeystore = await encryptKeystoreContent(await deriveEncryptionKeystoreKeyFromMnemonic(mnemonic), keys, userEmail, require_types.KeystoreType.ENCRYPTION);
|
|
119
|
+
const recoveryCodes = require_genID.genMnemonic();
|
|
120
|
+
return {
|
|
121
|
+
encryptionKeystore,
|
|
122
|
+
recoveryKeystore: await encryptKeystoreContent(await deriveRecoveryKey(recoveryCodes), keys, userEmail, require_types.KeystoreType.RECOVERY),
|
|
123
|
+
recoveryCodes,
|
|
124
|
+
keys
|
|
125
|
+
};
|
|
126
|
+
} catch (error) {
|
|
127
|
+
throw new FailedToCreateKeyStores(error instanceof Error ? error.message : String(error));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Opens the encryption keystore and returns the email encryption keys
|
|
132
|
+
* The decryption key is derived from the user mnemonic
|
|
133
|
+
*
|
|
134
|
+
* @param encryptedKeystore - The encrypted keystore containing encryption keys
|
|
135
|
+
* @param mnemonic - The user's mnemonic
|
|
136
|
+
* @returns The encryption keys
|
|
137
|
+
*/
|
|
138
|
+
async function openEncryptionKeystore(encryptedKeystore, mnemonic) {
|
|
139
|
+
try {
|
|
140
|
+
if (encryptedKeystore.type !== require_types.KeystoreType.ENCRYPTION) throw new InvalidInputKeyStore();
|
|
141
|
+
return await decryptKeystoreContent(await deriveEncryptionKeystoreKeyFromMnemonic(mnemonic), encryptedKeystore);
|
|
142
|
+
} catch (error) {
|
|
143
|
+
if (error instanceof InvalidInputKeyStore) throw error;
|
|
144
|
+
throw new FailedToOpenEncryptionKeyStore(error instanceof Error ? error.message : String(error));
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Opens the recovery keystore and returns the email encryption keys
|
|
149
|
+
* The decryption key is derived from the recovery codes (machine-generated mnemonic)
|
|
150
|
+
*
|
|
151
|
+
* @param recoveryCodes - The user's recovery codes
|
|
152
|
+
* @param encryptedKeystore - The encrypted keystore containing encryption keys
|
|
153
|
+
* @returns The encryption keys
|
|
154
|
+
*/
|
|
155
|
+
async function openRecoveryKeystore(recoveryCodes, encryptedKeystore) {
|
|
156
|
+
try {
|
|
157
|
+
if (encryptedKeystore.type !== require_types.KeystoreType.RECOVERY) throw new InvalidInputKeyStore();
|
|
158
|
+
return await decryptKeystoreContent(await deriveRecoveryKey(recoveryCodes), encryptedKeystore);
|
|
159
|
+
} catch (error) {
|
|
160
|
+
if (error instanceof InvalidInputKeyStore) throw error;
|
|
161
|
+
throw new FailedToOpenRecoveryKeyStore(error instanceof Error ? error.message : String(error));
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Re-encrypts the encryption keystore with a new mnemonic
|
|
166
|
+
* The decryption key is derived from the user mnemonic
|
|
167
|
+
*
|
|
168
|
+
* @param encryptedKeystore - The encrypted keystore containing encryption keys
|
|
169
|
+
* @param oldMnemonic - The user's old mnemonic
|
|
170
|
+
* @param newMnemonic - The user's new mnemonic
|
|
171
|
+
* @returns The keys and new re-encrypted keystore
|
|
172
|
+
*/
|
|
173
|
+
async function changeMnemonicForEncryptionKeystore(encryptedKeystore, oldMnemonic, newMnemonic) {
|
|
174
|
+
try {
|
|
175
|
+
const keys = await openEncryptionKeystore(encryptedKeystore, oldMnemonic);
|
|
176
|
+
return {
|
|
177
|
+
newKeystore: await encryptKeystoreContent(await deriveEncryptionKeystoreKeyFromMnemonic(newMnemonic), keys, encryptedKeystore.userEmail, require_types.KeystoreType.ENCRYPTION),
|
|
178
|
+
keys
|
|
179
|
+
};
|
|
180
|
+
} catch (error) {
|
|
181
|
+
if (error instanceof InvalidInputKeyStore) throw error;
|
|
182
|
+
throw new FailedToChangeMnemonicForKeyStore(error instanceof Error ? error.message : String(error));
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
//#endregion
|
|
187
|
+
Object.defineProperty(exports, 'FailedToChangeMnemonicForKeyStore', {
|
|
188
|
+
enumerable: true,
|
|
189
|
+
get: function () {
|
|
190
|
+
return FailedToChangeMnemonicForKeyStore;
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
Object.defineProperty(exports, 'FailedToCreateKeyStores', {
|
|
194
|
+
enumerable: true,
|
|
195
|
+
get: function () {
|
|
196
|
+
return FailedToCreateKeyStores;
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
Object.defineProperty(exports, 'FailedToOpenEncryptionKeyStore', {
|
|
200
|
+
enumerable: true,
|
|
201
|
+
get: function () {
|
|
202
|
+
return FailedToOpenEncryptionKeyStore;
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
Object.defineProperty(exports, 'FailedToOpenRecoveryKeyStore', {
|
|
206
|
+
enumerable: true,
|
|
207
|
+
get: function () {
|
|
208
|
+
return FailedToOpenRecoveryKeyStore;
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
Object.defineProperty(exports, 'InvalidInputKeyStore', {
|
|
212
|
+
enumerable: true,
|
|
213
|
+
get: function () {
|
|
214
|
+
return InvalidInputKeyStore;
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
Object.defineProperty(exports, 'changeMnemonicForEncryptionKeystore', {
|
|
218
|
+
enumerable: true,
|
|
219
|
+
get: function () {
|
|
220
|
+
return changeMnemonicForEncryptionKeystore;
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
Object.defineProperty(exports, 'createEncryptionAndRecoveryKeystores', {
|
|
224
|
+
enumerable: true,
|
|
225
|
+
get: function () {
|
|
226
|
+
return createEncryptionAndRecoveryKeystores;
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
Object.defineProperty(exports, 'openEncryptionKeystore', {
|
|
230
|
+
enumerable: true,
|
|
231
|
+
get: function () {
|
|
232
|
+
return openEncryptionKeystore;
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
Object.defineProperty(exports, 'openRecoveryKeystore', {
|
|
236
|
+
enumerable: true,
|
|
237
|
+
get: function () {
|
|
238
|
+
return openRecoveryKeystore;
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
//# sourceMappingURL=emailEncryptionKey-Ba95VuFO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emailEncryptionKey-Ba95VuFO.js","names":["uint8ArrayToBase64","UTF8ToUint8","encryptSymmetrically","base64ToUint8Array","decryptSymmetrically","deriveKeyFromMnemonic","CONTEXT_RECOVERY","CONTEXT_ENC_KEYSTORE","genHybridKeys","KeystoreType","genMnemonic"],"sources":["../src/keystore-crypto/core.ts","../src/keystore-crypto/errors.ts","../src/keystore-crypto/emailEncryptionKey.ts"],"sourcesContent":["import { encryptSymmetrically, decryptSymmetrically } from '../symmetric-crypto';\nimport { base64ToUint8Array, uint8ArrayToBase64, UTF8ToUint8 } from '../utils';\nimport { deriveKeyFromMnemonic } from '../derive-key';\nimport { CONTEXT_ENC_KEYSTORE, CONTEXT_RECOVERY } from '../constants';\nimport { EncryptedKeystore, HybridKeyPair, KeystoreType } from '../types';\n\n/**\n * Encrypts the user's hybrid key using symmetric encryption to get a keystore\n *\n * @param secretKey - The symmetric key to encrypt the keystore content\n * @param key - The hybrid key pair\n * @param userEmail - The email of the user\n * @param type - The keystore type\n * @returns The encrypted keystore\n */\nexport async function encryptKeystoreContent(\n secretKey: Uint8Array,\n keys: HybridKeyPair,\n userEmail: string,\n type: KeystoreType,\n): Promise<EncryptedKeystore> {\n try {\n const publicKey = uint8ArrayToBase64(keys.publicKey);\n\n const aux = UTF8ToUint8(userEmail + type + publicKey);\n const secretKeyEncrypted = await encryptSymmetrically(secretKey, keys.secretKey, aux);\n\n const keystore: EncryptedKeystore = {\n userEmail,\n type,\n publicKey,\n privateKeyEncrypted: uint8ArrayToBase64(secretKeyEncrypted),\n };\n return keystore;\n } catch (error) {\n throw new Error('Failed to encrypt keystore content', { cause: error });\n }\n}\n\n/**\n * Decrypts the keystore content using symmetric encryption\n *\n * @param kesytoreOpeningKey - The symmetric key to decrypt the keystore content\n * @param encryptedKeys - The encrypted keystore content\n * @returns The decrypted hybrid key pair contained in the keystore\n */\nexport async function decryptKeystoreContent(\n kesytoreOpeningKey: Uint8Array,\n encryptedKeystore: EncryptedKeystore,\n): Promise<HybridKeyPair> {\n try {\n const aux = UTF8ToUint8(encryptedKeystore.userEmail + encryptedKeystore.type + encryptedKeystore.publicKey);\n const publicKey = base64ToUint8Array(encryptedKeystore.publicKey);\n const ciphertext = base64ToUint8Array(encryptedKeystore.privateKeyEncrypted);\n const secretKey = await decryptSymmetrically(kesytoreOpeningKey, ciphertext, aux);\n return {\n publicKey,\n secretKey,\n };\n } catch (error) {\n throw new Error('Failed to decrypt keystore content', { cause: error });\n }\n}\n\n/**\n * Derives a secret key for protecting the recovery keystore\n *\n * @param recoveryCodes - The recovery codes (machine-generated with secure PRNG)\n * @returns The derived secret key for protecting the recovery keystore\n */\nexport async function deriveRecoveryKey(recoveryCodes: string): Promise<Uint8Array> {\n return deriveKeyFromMnemonic(recoveryCodes, CONTEXT_RECOVERY);\n}\n\n/**\n * Derives a secret key for protecting the encryption keystore from user's mnemonic\n *\n * @param mnemonic - The user's mnemonic (machine-generated with secure PRNG)\n * @returns The derived secret key for protecting the encryption keystore\n */\nexport async function deriveEncryptionKeystoreKeyFromMnemonic(mnemonic: string): Promise<Uint8Array> {\n return deriveKeyFromMnemonic(mnemonic, CONTEXT_ENC_KEYSTORE);\n}\n","export class FailedToCreateKeyStores extends Error {\n constructor(errorMsg?: string) {\n super('Failed to create encryption and recovery keystores: ' + errorMsg);\n\n Object.setPrototypeOf(this, FailedToCreateKeyStores.prototype);\n }\n}\n\nexport class InvalidInputKeyStore extends Error {\n constructor() {\n super('Invalid input');\n\n Object.setPrototypeOf(this, InvalidInputKeyStore.prototype);\n }\n}\n\nexport class FailedToOpenEncryptionKeyStore extends Error {\n constructor(errorMsg?: string) {\n super('Failed to open encryption keystore: ' + errorMsg);\n\n Object.setPrototypeOf(this, FailedToOpenEncryptionKeyStore.prototype);\n }\n}\n\nexport class FailedToOpenRecoveryKeyStore extends Error {\n constructor(errorMsg?: string) {\n super('Failed to open recovery keystore: ' + errorMsg);\n\n Object.setPrototypeOf(this, FailedToOpenRecoveryKeyStore.prototype);\n }\n}\n\nexport class FailedToChangeMnemonicForKeyStore extends Error {\n constructor(errorMsg?: string) {\n super('Error while fetching message: ' + errorMsg);\n\n Object.setPrototypeOf(this, FailedToChangeMnemonicForKeyStore.prototype);\n }\n}\n","import { EncryptedKeystore, KeystoreType, HybridKeyPair } from '../types';\nimport { genMnemonic } from '../utils';\nimport {\n encryptKeystoreContent,\n decryptKeystoreContent,\n deriveEncryptionKeystoreKeyFromMnemonic,\n deriveRecoveryKey,\n} from './core';\nimport { genHybridKeys } from '../hybrid-crypto';\nimport {\n FailedToOpenEncryptionKeyStore,\n FailedToCreateKeyStores,\n FailedToOpenRecoveryKeyStore,\n FailedToChangeMnemonicForKeyStore,\n InvalidInputKeyStore,\n} from './errors';\n\n/**\n * Generates hybrid keys and creates encrypted main and recovery keystores\n * The main keystore encryption key is derived from the user's mnemonic\n * The recovery keystore encryption key is derived from the recovery codes\n *\n * @param userEmail - The user's email\n * @param mnemonic - The user's mnemonic\n * @returns The encryption keys\n *\n * @returns The encryption and recovery keystores, recovery codes and hybrid keys\n */\nexport async function createEncryptionAndRecoveryKeystores(\n userEmail: string,\n mnemonic: string,\n): Promise<{\n encryptionKeystore: EncryptedKeystore;\n recoveryKeystore: EncryptedKeystore;\n recoveryCodes: string;\n keys: HybridKeyPair;\n}> {\n try {\n const keys = genHybridKeys();\n\n const secretKey = await deriveEncryptionKeystoreKeyFromMnemonic(mnemonic);\n const encryptionKeystore = await encryptKeystoreContent(secretKey, keys, userEmail, KeystoreType.ENCRYPTION);\n\n const recoveryCodes = genMnemonic();\n const recoveryKey = await deriveRecoveryKey(recoveryCodes);\n const recoveryKeystore = await encryptKeystoreContent(recoveryKey, keys, userEmail, KeystoreType.RECOVERY);\n\n return { encryptionKeystore, recoveryKeystore, recoveryCodes, keys };\n } catch (error) {\n throw new FailedToCreateKeyStores(error instanceof Error ? error.message : String(error));\n }\n}\n\n/**\n * Opens the encryption keystore and returns the email encryption keys\n * The decryption key is derived from the user mnemonic\n *\n * @param encryptedKeystore - The encrypted keystore containing encryption keys\n * @param mnemonic - The user's mnemonic\n * @returns The encryption keys\n */\nexport async function openEncryptionKeystore(\n encryptedKeystore: EncryptedKeystore,\n mnemonic: string,\n): Promise<HybridKeyPair> {\n try {\n if (encryptedKeystore.type !== KeystoreType.ENCRYPTION) {\n throw new InvalidInputKeyStore();\n }\n const secretKey = await deriveEncryptionKeystoreKeyFromMnemonic(mnemonic);\n const keys = await decryptKeystoreContent(secretKey, encryptedKeystore);\n return keys;\n } catch (error) {\n if (error instanceof InvalidInputKeyStore) throw error;\n throw new FailedToOpenEncryptionKeyStore(error instanceof Error ? error.message : String(error));\n }\n}\n\n/**\n * Opens the recovery keystore and returns the email encryption keys\n * The decryption key is derived from the recovery codes (machine-generated mnemonic)\n *\n * @param recoveryCodes - The user's recovery codes\n * @param encryptedKeystore - The encrypted keystore containing encryption keys\n * @returns The encryption keys\n */\nexport async function openRecoveryKeystore(\n recoveryCodes: string,\n encryptedKeystore: EncryptedKeystore,\n): Promise<HybridKeyPair> {\n try {\n if (encryptedKeystore.type !== KeystoreType.RECOVERY) {\n throw new InvalidInputKeyStore();\n }\n const recoveryKey = await deriveRecoveryKey(recoveryCodes);\n const keys = await decryptKeystoreContent(recoveryKey, encryptedKeystore);\n return keys;\n } catch (error) {\n if (error instanceof InvalidInputKeyStore) throw error;\n throw new FailedToOpenRecoveryKeyStore(error instanceof Error ? error.message : String(error));\n }\n}\n\n/**\n * Re-encrypts the encryption keystore with a new mnemonic\n * The decryption key is derived from the user mnemonic\n *\n * @param encryptedKeystore - The encrypted keystore containing encryption keys\n * @param oldMnemonic - The user's old mnemonic\n * @param newMnemonic - The user's new mnemonic\n * @returns The keys and new re-encrypted keystore\n */\nexport async function changeMnemonicForEncryptionKeystore(\n encryptedKeystore: EncryptedKeystore,\n oldMnemonic: string,\n newMnemonic: string,\n): Promise<{ keys: HybridKeyPair; newKeystore: EncryptedKeystore }> {\n try {\n const keys = await openEncryptionKeystore(encryptedKeystore, oldMnemonic);\n\n const secretKey = await deriveEncryptionKeystoreKeyFromMnemonic(newMnemonic);\n const newKeystore = await encryptKeystoreContent(\n secretKey,\n keys,\n encryptedKeystore.userEmail,\n KeystoreType.ENCRYPTION,\n );\n\n return { newKeystore, keys };\n } catch (error) {\n if (error instanceof InvalidInputKeyStore) throw error;\n throw new FailedToChangeMnemonicForKeyStore(error instanceof Error ? error.message : String(error));\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { CONTEXT_ENC_KEYSTORE, CONTEXT_RECOVERY } from "./constants.mjs";
|
|
2
|
+
import { a as genMnemonic, c as base64ToUint8Array, s as UTF8ToUint8, u as uint8ArrayToBase64 } from "./genID-D08K7JPr.mjs";
|
|
3
|
+
import { t as deriveKeyFromMnemonic } from "./deriveKeysFromMnemonic-DB0UHE-y.mjs";
|
|
4
|
+
import { n as encryptSymmetrically, t as decryptSymmetrically } from "./aes-B8TA-JKq.mjs";
|
|
5
|
+
import { r as genHybridKeys } from "./xwing-CQmQX6hn.mjs";
|
|
6
|
+
import { KeystoreType } from "./types.mjs";
|
|
7
|
+
|
|
8
|
+
//#region src/keystore-crypto/core.ts
|
|
9
|
+
/**
|
|
10
|
+
* Encrypts the user's hybrid key using symmetric encryption to get a keystore
|
|
11
|
+
*
|
|
12
|
+
* @param secretKey - The symmetric key to encrypt the keystore content
|
|
13
|
+
* @param key - The hybrid key pair
|
|
14
|
+
* @param userEmail - The email of the user
|
|
15
|
+
* @param type - The keystore type
|
|
16
|
+
* @returns The encrypted keystore
|
|
17
|
+
*/
|
|
18
|
+
async function encryptKeystoreContent(secretKey, keys, userEmail, type) {
|
|
19
|
+
try {
|
|
20
|
+
const publicKey = uint8ArrayToBase64(keys.publicKey);
|
|
21
|
+
const aux = UTF8ToUint8(userEmail + type + publicKey);
|
|
22
|
+
return {
|
|
23
|
+
userEmail,
|
|
24
|
+
type,
|
|
25
|
+
publicKey,
|
|
26
|
+
privateKeyEncrypted: uint8ArrayToBase64(await encryptSymmetrically(secretKey, keys.secretKey, aux))
|
|
27
|
+
};
|
|
28
|
+
} catch (error) {
|
|
29
|
+
throw new Error("Failed to encrypt keystore content", { cause: error });
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Decrypts the keystore content using symmetric encryption
|
|
34
|
+
*
|
|
35
|
+
* @param kesytoreOpeningKey - The symmetric key to decrypt the keystore content
|
|
36
|
+
* @param encryptedKeys - The encrypted keystore content
|
|
37
|
+
* @returns The decrypted hybrid key pair contained in the keystore
|
|
38
|
+
*/
|
|
39
|
+
async function decryptKeystoreContent(kesytoreOpeningKey, encryptedKeystore) {
|
|
40
|
+
try {
|
|
41
|
+
const aux = UTF8ToUint8(encryptedKeystore.userEmail + encryptedKeystore.type + encryptedKeystore.publicKey);
|
|
42
|
+
return {
|
|
43
|
+
publicKey: base64ToUint8Array(encryptedKeystore.publicKey),
|
|
44
|
+
secretKey: await decryptSymmetrically(kesytoreOpeningKey, base64ToUint8Array(encryptedKeystore.privateKeyEncrypted), aux)
|
|
45
|
+
};
|
|
46
|
+
} catch (error) {
|
|
47
|
+
throw new Error("Failed to decrypt keystore content", { cause: error });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Derives a secret key for protecting the recovery keystore
|
|
52
|
+
*
|
|
53
|
+
* @param recoveryCodes - The recovery codes (machine-generated with secure PRNG)
|
|
54
|
+
* @returns The derived secret key for protecting the recovery keystore
|
|
55
|
+
*/
|
|
56
|
+
async function deriveRecoveryKey(recoveryCodes) {
|
|
57
|
+
return deriveKeyFromMnemonic(recoveryCodes, CONTEXT_RECOVERY);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Derives a secret key for protecting the encryption keystore from user's mnemonic
|
|
61
|
+
*
|
|
62
|
+
* @param mnemonic - The user's mnemonic (machine-generated with secure PRNG)
|
|
63
|
+
* @returns The derived secret key for protecting the encryption keystore
|
|
64
|
+
*/
|
|
65
|
+
async function deriveEncryptionKeystoreKeyFromMnemonic(mnemonic) {
|
|
66
|
+
return deriveKeyFromMnemonic(mnemonic, CONTEXT_ENC_KEYSTORE);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
//#endregion
|
|
70
|
+
//#region src/keystore-crypto/errors.ts
|
|
71
|
+
var FailedToCreateKeyStores = class FailedToCreateKeyStores extends Error {
|
|
72
|
+
constructor(errorMsg) {
|
|
73
|
+
super("Failed to create encryption and recovery keystores: " + errorMsg);
|
|
74
|
+
Object.setPrototypeOf(this, FailedToCreateKeyStores.prototype);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
var InvalidInputKeyStore = class InvalidInputKeyStore extends Error {
|
|
78
|
+
constructor() {
|
|
79
|
+
super("Invalid input");
|
|
80
|
+
Object.setPrototypeOf(this, InvalidInputKeyStore.prototype);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
var FailedToOpenEncryptionKeyStore = class FailedToOpenEncryptionKeyStore extends Error {
|
|
84
|
+
constructor(errorMsg) {
|
|
85
|
+
super("Failed to open encryption keystore: " + errorMsg);
|
|
86
|
+
Object.setPrototypeOf(this, FailedToOpenEncryptionKeyStore.prototype);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
var FailedToOpenRecoveryKeyStore = class FailedToOpenRecoveryKeyStore extends Error {
|
|
90
|
+
constructor(errorMsg) {
|
|
91
|
+
super("Failed to open recovery keystore: " + errorMsg);
|
|
92
|
+
Object.setPrototypeOf(this, FailedToOpenRecoveryKeyStore.prototype);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
var FailedToChangeMnemonicForKeyStore = class FailedToChangeMnemonicForKeyStore extends Error {
|
|
96
|
+
constructor(errorMsg) {
|
|
97
|
+
super("Error while fetching message: " + errorMsg);
|
|
98
|
+
Object.setPrototypeOf(this, FailedToChangeMnemonicForKeyStore.prototype);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
//#endregion
|
|
103
|
+
//#region src/keystore-crypto/emailEncryptionKey.ts
|
|
104
|
+
/**
|
|
105
|
+
* Generates hybrid keys and creates encrypted main and recovery keystores
|
|
106
|
+
* The main keystore encryption key is derived from the user's mnemonic
|
|
107
|
+
* The recovery keystore encryption key is derived from the recovery codes
|
|
108
|
+
*
|
|
109
|
+
* @param userEmail - The user's email
|
|
110
|
+
* @param mnemonic - The user's mnemonic
|
|
111
|
+
* @returns The encryption keys
|
|
112
|
+
*
|
|
113
|
+
* @returns The encryption and recovery keystores, recovery codes and hybrid keys
|
|
114
|
+
*/
|
|
115
|
+
async function createEncryptionAndRecoveryKeystores(userEmail, mnemonic) {
|
|
116
|
+
try {
|
|
117
|
+
const keys = genHybridKeys();
|
|
118
|
+
const encryptionKeystore = await encryptKeystoreContent(await deriveEncryptionKeystoreKeyFromMnemonic(mnemonic), keys, userEmail, KeystoreType.ENCRYPTION);
|
|
119
|
+
const recoveryCodes = genMnemonic();
|
|
120
|
+
return {
|
|
121
|
+
encryptionKeystore,
|
|
122
|
+
recoveryKeystore: await encryptKeystoreContent(await deriveRecoveryKey(recoveryCodes), keys, userEmail, KeystoreType.RECOVERY),
|
|
123
|
+
recoveryCodes,
|
|
124
|
+
keys
|
|
125
|
+
};
|
|
126
|
+
} catch (error) {
|
|
127
|
+
throw new FailedToCreateKeyStores(error instanceof Error ? error.message : String(error));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Opens the encryption keystore and returns the email encryption keys
|
|
132
|
+
* The decryption key is derived from the user mnemonic
|
|
133
|
+
*
|
|
134
|
+
* @param encryptedKeystore - The encrypted keystore containing encryption keys
|
|
135
|
+
* @param mnemonic - The user's mnemonic
|
|
136
|
+
* @returns The encryption keys
|
|
137
|
+
*/
|
|
138
|
+
async function openEncryptionKeystore(encryptedKeystore, mnemonic) {
|
|
139
|
+
try {
|
|
140
|
+
if (encryptedKeystore.type !== KeystoreType.ENCRYPTION) throw new InvalidInputKeyStore();
|
|
141
|
+
return await decryptKeystoreContent(await deriveEncryptionKeystoreKeyFromMnemonic(mnemonic), encryptedKeystore);
|
|
142
|
+
} catch (error) {
|
|
143
|
+
if (error instanceof InvalidInputKeyStore) throw error;
|
|
144
|
+
throw new FailedToOpenEncryptionKeyStore(error instanceof Error ? error.message : String(error));
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Opens the recovery keystore and returns the email encryption keys
|
|
149
|
+
* The decryption key is derived from the recovery codes (machine-generated mnemonic)
|
|
150
|
+
*
|
|
151
|
+
* @param recoveryCodes - The user's recovery codes
|
|
152
|
+
* @param encryptedKeystore - The encrypted keystore containing encryption keys
|
|
153
|
+
* @returns The encryption keys
|
|
154
|
+
*/
|
|
155
|
+
async function openRecoveryKeystore(recoveryCodes, encryptedKeystore) {
|
|
156
|
+
try {
|
|
157
|
+
if (encryptedKeystore.type !== KeystoreType.RECOVERY) throw new InvalidInputKeyStore();
|
|
158
|
+
return await decryptKeystoreContent(await deriveRecoveryKey(recoveryCodes), encryptedKeystore);
|
|
159
|
+
} catch (error) {
|
|
160
|
+
if (error instanceof InvalidInputKeyStore) throw error;
|
|
161
|
+
throw new FailedToOpenRecoveryKeyStore(error instanceof Error ? error.message : String(error));
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Re-encrypts the encryption keystore with a new mnemonic
|
|
166
|
+
* The decryption key is derived from the user mnemonic
|
|
167
|
+
*
|
|
168
|
+
* @param encryptedKeystore - The encrypted keystore containing encryption keys
|
|
169
|
+
* @param oldMnemonic - The user's old mnemonic
|
|
170
|
+
* @param newMnemonic - The user's new mnemonic
|
|
171
|
+
* @returns The keys and new re-encrypted keystore
|
|
172
|
+
*/
|
|
173
|
+
async function changeMnemonicForEncryptionKeystore(encryptedKeystore, oldMnemonic, newMnemonic) {
|
|
174
|
+
try {
|
|
175
|
+
const keys = await openEncryptionKeystore(encryptedKeystore, oldMnemonic);
|
|
176
|
+
return {
|
|
177
|
+
newKeystore: await encryptKeystoreContent(await deriveEncryptionKeystoreKeyFromMnemonic(newMnemonic), keys, encryptedKeystore.userEmail, KeystoreType.ENCRYPTION),
|
|
178
|
+
keys
|
|
179
|
+
};
|
|
180
|
+
} catch (error) {
|
|
181
|
+
if (error instanceof InvalidInputKeyStore) throw error;
|
|
182
|
+
throw new FailedToChangeMnemonicForKeyStore(error instanceof Error ? error.message : String(error));
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
//#endregion
|
|
187
|
+
export { FailedToChangeMnemonicForKeyStore as a, FailedToOpenRecoveryKeyStore as c, openRecoveryKeystore as i, InvalidInputKeyStore as l, createEncryptionAndRecoveryKeystores as n, FailedToCreateKeyStores as o, openEncryptionKeystore as r, FailedToOpenEncryptionKeyStore as s, changeMnemonicForEncryptionKeystore as t };
|
|
188
|
+
//# sourceMappingURL=emailEncryptionKey-CYvr26FG.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emailEncryptionKey-CYvr26FG.mjs","names":[],"sources":["../src/keystore-crypto/core.ts","../src/keystore-crypto/errors.ts","../src/keystore-crypto/emailEncryptionKey.ts"],"sourcesContent":["import { encryptSymmetrically, decryptSymmetrically } from '../symmetric-crypto';\nimport { base64ToUint8Array, uint8ArrayToBase64, UTF8ToUint8 } from '../utils';\nimport { deriveKeyFromMnemonic } from '../derive-key';\nimport { CONTEXT_ENC_KEYSTORE, CONTEXT_RECOVERY } from '../constants';\nimport { EncryptedKeystore, HybridKeyPair, KeystoreType } from '../types';\n\n/**\n * Encrypts the user's hybrid key using symmetric encryption to get a keystore\n *\n * @param secretKey - The symmetric key to encrypt the keystore content\n * @param key - The hybrid key pair\n * @param userEmail - The email of the user\n * @param type - The keystore type\n * @returns The encrypted keystore\n */\nexport async function encryptKeystoreContent(\n secretKey: Uint8Array,\n keys: HybridKeyPair,\n userEmail: string,\n type: KeystoreType,\n): Promise<EncryptedKeystore> {\n try {\n const publicKey = uint8ArrayToBase64(keys.publicKey);\n\n const aux = UTF8ToUint8(userEmail + type + publicKey);\n const secretKeyEncrypted = await encryptSymmetrically(secretKey, keys.secretKey, aux);\n\n const keystore: EncryptedKeystore = {\n userEmail,\n type,\n publicKey,\n privateKeyEncrypted: uint8ArrayToBase64(secretKeyEncrypted),\n };\n return keystore;\n } catch (error) {\n throw new Error('Failed to encrypt keystore content', { cause: error });\n }\n}\n\n/**\n * Decrypts the keystore content using symmetric encryption\n *\n * @param kesytoreOpeningKey - The symmetric key to decrypt the keystore content\n * @param encryptedKeys - The encrypted keystore content\n * @returns The decrypted hybrid key pair contained in the keystore\n */\nexport async function decryptKeystoreContent(\n kesytoreOpeningKey: Uint8Array,\n encryptedKeystore: EncryptedKeystore,\n): Promise<HybridKeyPair> {\n try {\n const aux = UTF8ToUint8(encryptedKeystore.userEmail + encryptedKeystore.type + encryptedKeystore.publicKey);\n const publicKey = base64ToUint8Array(encryptedKeystore.publicKey);\n const ciphertext = base64ToUint8Array(encryptedKeystore.privateKeyEncrypted);\n const secretKey = await decryptSymmetrically(kesytoreOpeningKey, ciphertext, aux);\n return {\n publicKey,\n secretKey,\n };\n } catch (error) {\n throw new Error('Failed to decrypt keystore content', { cause: error });\n }\n}\n\n/**\n * Derives a secret key for protecting the recovery keystore\n *\n * @param recoveryCodes - The recovery codes (machine-generated with secure PRNG)\n * @returns The derived secret key for protecting the recovery keystore\n */\nexport async function deriveRecoveryKey(recoveryCodes: string): Promise<Uint8Array> {\n return deriveKeyFromMnemonic(recoveryCodes, CONTEXT_RECOVERY);\n}\n\n/**\n * Derives a secret key for protecting the encryption keystore from user's mnemonic\n *\n * @param mnemonic - The user's mnemonic (machine-generated with secure PRNG)\n * @returns The derived secret key for protecting the encryption keystore\n */\nexport async function deriveEncryptionKeystoreKeyFromMnemonic(mnemonic: string): Promise<Uint8Array> {\n return deriveKeyFromMnemonic(mnemonic, CONTEXT_ENC_KEYSTORE);\n}\n","export class FailedToCreateKeyStores extends Error {\n constructor(errorMsg?: string) {\n super('Failed to create encryption and recovery keystores: ' + errorMsg);\n\n Object.setPrototypeOf(this, FailedToCreateKeyStores.prototype);\n }\n}\n\nexport class InvalidInputKeyStore extends Error {\n constructor() {\n super('Invalid input');\n\n Object.setPrototypeOf(this, InvalidInputKeyStore.prototype);\n }\n}\n\nexport class FailedToOpenEncryptionKeyStore extends Error {\n constructor(errorMsg?: string) {\n super('Failed to open encryption keystore: ' + errorMsg);\n\n Object.setPrototypeOf(this, FailedToOpenEncryptionKeyStore.prototype);\n }\n}\n\nexport class FailedToOpenRecoveryKeyStore extends Error {\n constructor(errorMsg?: string) {\n super('Failed to open recovery keystore: ' + errorMsg);\n\n Object.setPrototypeOf(this, FailedToOpenRecoveryKeyStore.prototype);\n }\n}\n\nexport class FailedToChangeMnemonicForKeyStore extends Error {\n constructor(errorMsg?: string) {\n super('Error while fetching message: ' + errorMsg);\n\n Object.setPrototypeOf(this, FailedToChangeMnemonicForKeyStore.prototype);\n }\n}\n","import { EncryptedKeystore, KeystoreType, HybridKeyPair } from '../types';\nimport { genMnemonic } from '../utils';\nimport {\n encryptKeystoreContent,\n decryptKeystoreContent,\n deriveEncryptionKeystoreKeyFromMnemonic,\n deriveRecoveryKey,\n} from './core';\nimport { genHybridKeys } from '../hybrid-crypto';\nimport {\n FailedToOpenEncryptionKeyStore,\n FailedToCreateKeyStores,\n FailedToOpenRecoveryKeyStore,\n FailedToChangeMnemonicForKeyStore,\n InvalidInputKeyStore,\n} from './errors';\n\n/**\n * Generates hybrid keys and creates encrypted main and recovery keystores\n * The main keystore encryption key is derived from the user's mnemonic\n * The recovery keystore encryption key is derived from the recovery codes\n *\n * @param userEmail - The user's email\n * @param mnemonic - The user's mnemonic\n * @returns The encryption keys\n *\n * @returns The encryption and recovery keystores, recovery codes and hybrid keys\n */\nexport async function createEncryptionAndRecoveryKeystores(\n userEmail: string,\n mnemonic: string,\n): Promise<{\n encryptionKeystore: EncryptedKeystore;\n recoveryKeystore: EncryptedKeystore;\n recoveryCodes: string;\n keys: HybridKeyPair;\n}> {\n try {\n const keys = genHybridKeys();\n\n const secretKey = await deriveEncryptionKeystoreKeyFromMnemonic(mnemonic);\n const encryptionKeystore = await encryptKeystoreContent(secretKey, keys, userEmail, KeystoreType.ENCRYPTION);\n\n const recoveryCodes = genMnemonic();\n const recoveryKey = await deriveRecoveryKey(recoveryCodes);\n const recoveryKeystore = await encryptKeystoreContent(recoveryKey, keys, userEmail, KeystoreType.RECOVERY);\n\n return { encryptionKeystore, recoveryKeystore, recoveryCodes, keys };\n } catch (error) {\n throw new FailedToCreateKeyStores(error instanceof Error ? error.message : String(error));\n }\n}\n\n/**\n * Opens the encryption keystore and returns the email encryption keys\n * The decryption key is derived from the user mnemonic\n *\n * @param encryptedKeystore - The encrypted keystore containing encryption keys\n * @param mnemonic - The user's mnemonic\n * @returns The encryption keys\n */\nexport async function openEncryptionKeystore(\n encryptedKeystore: EncryptedKeystore,\n mnemonic: string,\n): Promise<HybridKeyPair> {\n try {\n if (encryptedKeystore.type !== KeystoreType.ENCRYPTION) {\n throw new InvalidInputKeyStore();\n }\n const secretKey = await deriveEncryptionKeystoreKeyFromMnemonic(mnemonic);\n const keys = await decryptKeystoreContent(secretKey, encryptedKeystore);\n return keys;\n } catch (error) {\n if (error instanceof InvalidInputKeyStore) throw error;\n throw new FailedToOpenEncryptionKeyStore(error instanceof Error ? error.message : String(error));\n }\n}\n\n/**\n * Opens the recovery keystore and returns the email encryption keys\n * The decryption key is derived from the recovery codes (machine-generated mnemonic)\n *\n * @param recoveryCodes - The user's recovery codes\n * @param encryptedKeystore - The encrypted keystore containing encryption keys\n * @returns The encryption keys\n */\nexport async function openRecoveryKeystore(\n recoveryCodes: string,\n encryptedKeystore: EncryptedKeystore,\n): Promise<HybridKeyPair> {\n try {\n if (encryptedKeystore.type !== KeystoreType.RECOVERY) {\n throw new InvalidInputKeyStore();\n }\n const recoveryKey = await deriveRecoveryKey(recoveryCodes);\n const keys = await decryptKeystoreContent(recoveryKey, encryptedKeystore);\n return keys;\n } catch (error) {\n if (error instanceof InvalidInputKeyStore) throw error;\n throw new FailedToOpenRecoveryKeyStore(error instanceof Error ? error.message : String(error));\n }\n}\n\n/**\n * Re-encrypts the encryption keystore with a new mnemonic\n * The decryption key is derived from the user mnemonic\n *\n * @param encryptedKeystore - The encrypted keystore containing encryption keys\n * @param oldMnemonic - The user's old mnemonic\n * @param newMnemonic - The user's new mnemonic\n * @returns The keys and new re-encrypted keystore\n */\nexport async function changeMnemonicForEncryptionKeystore(\n encryptedKeystore: EncryptedKeystore,\n oldMnemonic: string,\n newMnemonic: string,\n): Promise<{ keys: HybridKeyPair; newKeystore: EncryptedKeystore }> {\n try {\n const keys = await openEncryptionKeystore(encryptedKeystore, oldMnemonic);\n\n const secretKey = await deriveEncryptionKeystoreKeyFromMnemonic(newMnemonic);\n const newKeystore = await encryptKeystoreContent(\n secretKey,\n keys,\n encryptedKeystore.userEmail,\n KeystoreType.ENCRYPTION,\n );\n\n return { newKeystore, keys };\n } catch (error) {\n if (error instanceof InvalidInputKeyStore) throw error;\n throw new FailedToChangeMnemonicForKeyStore(error instanceof Error ? error.message : String(error));\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
const require_chunk = require('./chunk-EbLFQX5m.js');
|
|
2
|
+
const require_constants = require('./constants.js');
|
|
2
3
|
const require_genID = require('./genID-cWOPmspk.js');
|
|
3
|
-
const
|
|
4
|
+
const require_deriveKeysFromMnemonic = require('./deriveKeysFromMnemonic-Dbx7VSBQ.js');
|
|
5
|
+
const require_deriveKeysFromPassword = require('./deriveKeysFromPassword-iMHv-tIA.js');
|
|
4
6
|
const require_aes = require('./aes-CuW_SPl-.js');
|
|
5
7
|
const require_xwing = require('./xwing-iRWVRtNE.js');
|
|
6
8
|
let _noble_ciphers_aes_js = require("@noble/ciphers/aes.js");
|
|
@@ -279,6 +281,24 @@ async function decryptPwdProtectedEmail(encryptedEmail, password, aux) {
|
|
|
279
281
|
async function generateEmailKeys() {
|
|
280
282
|
return require_xwing.genHybridKeys();
|
|
281
283
|
}
|
|
284
|
+
/**
|
|
285
|
+
* Derives database encryption key for the given user
|
|
286
|
+
*
|
|
287
|
+
* @param mnemonic - The user's mnemonic (machine-generated with secure PRNG)
|
|
288
|
+
* @returns The symmetric key for protecting database
|
|
289
|
+
*/
|
|
290
|
+
const deriveDatabaseKey = async (mnemonic) => {
|
|
291
|
+
return require_deriveKeysFromMnemonic.deriveKeyFromMnemonic(mnemonic, require_constants.CONTEXT_DATABASE);
|
|
292
|
+
};
|
|
293
|
+
/**
|
|
294
|
+
* Derives email draft encryption key for the given user
|
|
295
|
+
*
|
|
296
|
+
* @param mnemonic - The user's mnemonic (machine-generated with secure PRNG)
|
|
297
|
+
* @returns The symmetric key for protecting email drafts
|
|
298
|
+
*/
|
|
299
|
+
const deriveEmailDraftKey = async (mnemonic) => {
|
|
300
|
+
return require_deriveKeysFromMnemonic.deriveKeyFromMnemonic(mnemonic, require_constants.CONTEXT_DRAFT);
|
|
301
|
+
};
|
|
282
302
|
|
|
283
303
|
//#endregion
|
|
284
304
|
Object.defineProperty(exports, 'createPwdProtectedEmail', {
|
|
@@ -311,6 +331,18 @@ Object.defineProperty(exports, 'decryptPwdProtectedEmail', {
|
|
|
311
331
|
return decryptPwdProtectedEmail;
|
|
312
332
|
}
|
|
313
333
|
});
|
|
334
|
+
Object.defineProperty(exports, 'deriveDatabaseKey', {
|
|
335
|
+
enumerable: true,
|
|
336
|
+
get: function () {
|
|
337
|
+
return deriveDatabaseKey;
|
|
338
|
+
}
|
|
339
|
+
});
|
|
340
|
+
Object.defineProperty(exports, 'deriveEmailDraftKey', {
|
|
341
|
+
enumerable: true,
|
|
342
|
+
get: function () {
|
|
343
|
+
return deriveEmailDraftKey;
|
|
344
|
+
}
|
|
345
|
+
});
|
|
314
346
|
Object.defineProperty(exports, 'encryptEmailBody', {
|
|
315
347
|
enumerable: true,
|
|
316
348
|
get: function () {
|
|
@@ -371,4 +403,4 @@ Object.defineProperty(exports, 'wrapKey', {
|
|
|
371
403
|
return wrapKey;
|
|
372
404
|
}
|
|
373
405
|
});
|
|
374
|
-
//# sourceMappingURL=emailKeys-
|
|
406
|
+
//# sourceMappingURL=emailKeys-BFI-paQq.js.map
|