internxt-crypto 1.3.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/asymmetric-crypto.js +3 -4
- package/dist/asymmetric-crypto.js.map +1 -1
- package/dist/asymmetric-crypto.mjs +1 -2
- package/dist/asymmetric-crypto.mjs.map +1 -1
- package/dist/chunk-C13QxCFV.js +50 -0
- package/dist/chunk-CfYAbeIz.mjs +13 -0
- package/dist/constants.js +2 -3
- package/dist/constants.js.map +1 -1
- package/dist/constants.mjs +1 -1
- package/dist/derive-key.js +50 -5
- package/dist/derive-key.js.map +1 -0
- package/dist/derive-key.mjs +46 -2
- package/dist/derive-key.mjs.map +1 -0
- package/dist/{deriveKeysFromPassword-iMHv-tIA.js → derive-password-CbYRDq7V.js} +25 -30
- package/dist/derive-password-CbYRDq7V.js.map +1 -0
- package/dist/{deriveKeysFromPassword-DFzo2OII.mjs → derive-password-PED-YfwE.mjs} +27 -34
- package/dist/derive-password-PED-YfwE.mjs.map +1 -0
- package/dist/derive-password.js +5 -6
- package/dist/derive-password.mjs +2 -3
- package/dist/{emailKeys-BFI-paQq.js → email-crypto-Cr7znO1a.js} +116 -121
- package/dist/email-crypto-Cr7znO1a.js.map +1 -0
- package/dist/{emailKeys-BjIeINfC.mjs → email-crypto-cHDsjSb5.mjs} +7 -12
- package/dist/email-crypto-cHDsjSb5.mjs.map +1 -0
- package/dist/email-crypto.d.mts +1 -1
- package/dist/email-crypto.d.ts +1 -1
- package/dist/email-crypto.js +17 -18
- package/dist/email-crypto.mjs +2 -3
- package/dist/hash.js +3 -4
- package/dist/hash.js.map +1 -1
- package/dist/hash.mjs +1 -2
- package/dist/hash.mjs.map +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +55 -56
- package/dist/index.mjs +7 -8
- package/dist/{emailEncryptionKey-CYvr26FG.mjs → keystore-crypto-C6F-NQdX.mjs} +12 -15
- package/dist/keystore-crypto-C6F-NQdX.mjs.map +1 -0
- package/dist/{emailEncryptionKey-Ba95VuFO.js → keystore-crypto-CFiiGohl.js} +67 -70
- package/dist/keystore-crypto-CFiiGohl.js.map +1 -0
- package/dist/keystore-crypto.d.mts +1 -1
- package/dist/keystore-crypto.d.ts +1 -1
- package/dist/keystore-crypto.js +11 -12
- package/dist/keystore-crypto.mjs +2 -3
- package/dist/post-quantum-crypto.js +3 -4
- package/dist/post-quantum-crypto.js.map +1 -1
- package/dist/post-quantum-crypto.mjs +1 -2
- package/dist/post-quantum-crypto.mjs.map +1 -1
- package/dist/storage-service.js +13 -15
- package/dist/storage-service.js.map +1 -1
- package/dist/storage-service.mjs +2 -4
- package/dist/storage-service.mjs.map +1 -1
- package/dist/symmetric-crypto.js +51 -5
- package/dist/symmetric-crypto.js.map +1 -0
- package/dist/symmetric-crypto.mjs +47 -2
- package/dist/symmetric-crypto.mjs.map +1 -0
- package/dist/types-4P0WII1D.d.ts +49 -0
- package/dist/types-4P0WII1D.d.ts.map +1 -0
- package/dist/types-DAPJQG8U.d.mts +49 -0
- package/dist/types-DAPJQG8U.d.mts.map +1 -0
- package/dist/types.d.mts +2 -49
- package/dist/types.d.ts +2 -49
- package/dist/types.js +2 -3
- package/dist/types.js.map +1 -1
- package/dist/types.mjs +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils.js +127 -14
- package/dist/utils.js.map +1 -0
- package/dist/utils.mjs +113 -2
- package/dist/utils.mjs.map +1 -0
- package/dist/{xwing-iRWVRtNE.js → xwing-7fEqAT7W.js} +18 -19
- package/dist/{xwing-iRWVRtNE.js.map → xwing-7fEqAT7W.js.map} +1 -1
- package/dist/{xwing-CQmQX6hn.mjs → xwing-B34h5e3Z.mjs} +2 -3
- package/dist/{xwing-CQmQX6hn.mjs.map → xwing-B34h5e3Z.mjs.map} +1 -1
- package/package.json +22 -22
- package/dist/aes-B8TA-JKq.mjs +0 -49
- package/dist/aes-B8TA-JKq.mjs.map +0 -1
- package/dist/aes-CuW_SPl-.js +0 -67
- package/dist/aes-CuW_SPl-.js.map +0 -1
- package/dist/chunk-DQk6qfdC.mjs +0 -18
- package/dist/chunk-EbLFQX5m.js +0 -60
- package/dist/deriveKeysFromMnemonic-DB0UHE-y.mjs +0 -49
- package/dist/deriveKeysFromMnemonic-DB0UHE-y.mjs.map +0 -1
- package/dist/deriveKeysFromMnemonic-Dbx7VSBQ.js +0 -67
- package/dist/deriveKeysFromMnemonic-Dbx7VSBQ.js.map +0 -1
- package/dist/deriveKeysFromPassword-DFzo2OII.mjs.map +0 -1
- package/dist/deriveKeysFromPassword-iMHv-tIA.js.map +0 -1
- package/dist/emailEncryptionKey-Ba95VuFO.js.map +0 -1
- package/dist/emailEncryptionKey-CYvr26FG.mjs.map +0 -1
- package/dist/emailKeys-BFI-paQq.js.map +0 -1
- package/dist/emailKeys-BjIeINfC.mjs.map +0 -1
- package/dist/genID-D08K7JPr.mjs +0 -117
- package/dist/genID-D08K7JPr.mjs.map +0 -1
- package/dist/genID-cWOPmspk.js +0 -190
- package/dist/genID-cWOPmspk.js.map +0 -1
- package/dist/types.d.mts.map +0 -1
- package/dist/types.d.ts.map +0 -1
package/dist/hash.mjs
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { blake3 } from "@noble/hashes/blake3.js";
|
|
2
|
-
|
|
3
2
|
//#region src/hash/blake3.ts
|
|
4
3
|
/**
|
|
5
4
|
* Hashes the given array of data
|
|
@@ -77,7 +76,7 @@ function hashDataWithKey(hashKey, data) {
|
|
|
77
76
|
function getBytesFromData(data, bytes) {
|
|
78
77
|
return blake3(data, { dkLen: bytes });
|
|
79
78
|
}
|
|
80
|
-
|
|
81
79
|
//#endregion
|
|
82
80
|
export { getBytesFromData, getBytesFromDataArray, hashData, hashDataArray, hashDataArrayWithKey, hashDataWithKey };
|
|
81
|
+
|
|
83
82
|
//# sourceMappingURL=hash.mjs.map
|
package/dist/hash.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash.mjs","names":[],"sources":["../src/hash/blake3.ts"],"sourcesContent":["import { blake3 } from '@noble/hashes/blake3.js';\n\n/**\n * Hashes the given array of data\n *\n * @param data - The array of data\n * @returns The resulting hash\n */\nexport function hashDataArray(data: Uint8Array[]): Uint8Array {\n try {\n const hasher = blake3.create();\n for (const d of data) {\n hasher.update(d);\n }\n return hasher.digest();\n } catch (error) {\n throw new Error('Failed to compute hash', { cause: error });\n }\n}\n\n/**\n * Hashes the given array of data with the given key\n *\n * @param hashKey - The key for keyed hashing\n * @param data - The array of data\n * @returns The resulting keyed hash\n */\nexport function hashDataArrayWithKey(hashKey: Uint8Array, data: Uint8Array[]): Uint8Array {\n try {\n const hasher = blake3.create({ key: hashKey });\n for (const d of data) {\n hasher.update(d);\n }\n return hasher.digest();\n } catch (error) {\n throw new Error('Failed to compute hash', { cause: error });\n }\n}\n\n/**\n * Hashes the given array of data to the desired byte-length\n *\n * @param data - The array of data\n * @param bytes - The desired output byte-length\n * @returns The resulting hash of the desired byte-length\n */\nexport function getBytesFromDataArray(data: Uint8Array[], bytes: number): Uint8Array {\n try {\n const hasher = blake3.create({ dkLen: bytes });\n for (const chunk of data) {\n hasher.update(chunk);\n }\n return hasher.digest();\n } catch (error) {\n throw new Error('Failed to get bytes from data', { cause: error });\n }\n}\n\n/**\n * Hashes the given data\n *\n * @param data - The data\n * @returns The resulting hash\n */\nexport function hashData(data: Uint8Array): Uint8Array {\n return blake3(data);\n}\n\n/**\n * Hashes the given data with the given key\n *\n * @param hashKey - The key for keyed hashing\n * @param data - The data\n * @returns The resulting keyed hash\n */\nexport function hashDataWithKey(hashKey: Uint8Array, data: Uint8Array): Uint8Array {\n return blake3(data, { key: hashKey });\n}\n\n/**\n * Hashes the given data to the desired byte-length\n *\n * @param data - The data\n * @param bytes - The desired output byte-length\n * @returns The resulting hash of the desired byte-length\n */\nexport function getBytesFromData(data: Uint8Array, bytes: number): Uint8Array {\n return blake3(data, { dkLen: bytes });\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"hash.mjs","names":[],"sources":["../src/hash/blake3.ts"],"sourcesContent":["import { blake3 } from '@noble/hashes/blake3.js';\n\n/**\n * Hashes the given array of data\n *\n * @param data - The array of data\n * @returns The resulting hash\n */\nexport function hashDataArray(data: Uint8Array[]): Uint8Array {\n try {\n const hasher = blake3.create();\n for (const d of data) {\n hasher.update(d);\n }\n return hasher.digest();\n } catch (error) {\n throw new Error('Failed to compute hash', { cause: error });\n }\n}\n\n/**\n * Hashes the given array of data with the given key\n *\n * @param hashKey - The key for keyed hashing\n * @param data - The array of data\n * @returns The resulting keyed hash\n */\nexport function hashDataArrayWithKey(hashKey: Uint8Array, data: Uint8Array[]): Uint8Array {\n try {\n const hasher = blake3.create({ key: hashKey });\n for (const d of data) {\n hasher.update(d);\n }\n return hasher.digest();\n } catch (error) {\n throw new Error('Failed to compute hash', { cause: error });\n }\n}\n\n/**\n * Hashes the given array of data to the desired byte-length\n *\n * @param data - The array of data\n * @param bytes - The desired output byte-length\n * @returns The resulting hash of the desired byte-length\n */\nexport function getBytesFromDataArray(data: Uint8Array[], bytes: number): Uint8Array {\n try {\n const hasher = blake3.create({ dkLen: bytes });\n for (const chunk of data) {\n hasher.update(chunk);\n }\n return hasher.digest();\n } catch (error) {\n throw new Error('Failed to get bytes from data', { cause: error });\n }\n}\n\n/**\n * Hashes the given data\n *\n * @param data - The data\n * @returns The resulting hash\n */\nexport function hashData(data: Uint8Array): Uint8Array {\n return blake3(data);\n}\n\n/**\n * Hashes the given data with the given key\n *\n * @param hashKey - The key for keyed hashing\n * @param data - The data\n * @returns The resulting keyed hash\n */\nexport function hashDataWithKey(hashKey: Uint8Array, data: Uint8Array): Uint8Array {\n return blake3(data, { key: hashKey });\n}\n\n/**\n * Hashes the given data to the desired byte-length\n *\n * @param data - The data\n * @param bytes - The desired output byte-length\n * @returns The resulting hash of the desired byte-length\n */\nexport function getBytesFromData(data: Uint8Array, bytes: number): Uint8Array {\n return blake3(data, { dkLen: bytes });\n}\n"],"mappings":";;;;;;;;AAQA,SAAgB,cAAc,MAAgC;AAC5D,KAAI;EACF,MAAM,SAAS,OAAO,QAAQ;AAC9B,OAAK,MAAM,KAAK,KACd,QAAO,OAAO,EAAE;AAElB,SAAO,OAAO,QAAQ;UACf,OAAO;AACd,QAAM,IAAI,MAAM,0BAA0B,EAAE,OAAO,OAAO,CAAC;;;;;;;;;;AAW/D,SAAgB,qBAAqB,SAAqB,MAAgC;AACxF,KAAI;EACF,MAAM,SAAS,OAAO,OAAO,EAAE,KAAK,SAAS,CAAC;AAC9C,OAAK,MAAM,KAAK,KACd,QAAO,OAAO,EAAE;AAElB,SAAO,OAAO,QAAQ;UACf,OAAO;AACd,QAAM,IAAI,MAAM,0BAA0B,EAAE,OAAO,OAAO,CAAC;;;;;;;;;;AAW/D,SAAgB,sBAAsB,MAAoB,OAA2B;AACnF,KAAI;EACF,MAAM,SAAS,OAAO,OAAO,EAAE,OAAO,OAAO,CAAC;AAC9C,OAAK,MAAM,SAAS,KAClB,QAAO,OAAO,MAAM;AAEtB,SAAO,OAAO,QAAQ;UACf,OAAO;AACd,QAAM,IAAI,MAAM,iCAAiC,EAAE,OAAO,OAAO,CAAC;;;;;;;;;AAUtE,SAAgB,SAAS,MAA8B;AACrD,QAAO,OAAO,KAAK;;;;;;;;;AAUrB,SAAgB,gBAAgB,SAAqB,MAA8B;AACjF,QAAO,OAAO,MAAM,EAAE,KAAK,SAAS,CAAC;;;;;;;;;AAUvC,SAAgB,iBAAiB,MAAkB,OAA2B;AAC5E,QAAO,OAAO,MAAM,EAAE,OAAO,OAAO,CAAC"}
|
package/dist/index.d.mts
CHANGED
|
@@ -2,7 +2,7 @@ import { deriveSecretKey, generateEccKeys } from "./asymmetric-crypto.mjs";
|
|
|
2
2
|
import { AES_KEY_BYTE_LENGTH, ARGON2ID_ITERATIONS, ARGON2ID_MEMORY_SIZE, ARGON2ID_OUTPUT_BYTE_LENGTH, ARGON2ID_PARALLELISM, ARGON2ID_SALT_BYTE_LENGTH, CONTEXT_DATABASE, CONTEXT_DRAFT, CONTEXT_ENC_KEYSTORE, CONTEXT_RECOVERY, CONTEXT_TWO_KEYS, DB_LABEL, DB_VERSION, IV_LEN_BYTES, KYBER768_PUBLIC_KEY_LENGTH, KYBER768_SECRET_KEY_LENGTH, KYBER_SEED_LENGTH, MAX_CACHE_SIZE, MAX_EMAIL_PER_BATCH, XWING_CIPHERTEXT_BYTE_LENGTH, XWING_PUBLIC_KEY_LENGTH, XWING_SECRET_KEY_LENGTH, XWING_SEED_BYTE_LENGTH } from "./constants.mjs";
|
|
3
3
|
import { deriveKeyFromMnemonic, deriveSymmetricKeyFromContext, deriveSymmetricKeyFromTwoKeys } from "./derive-key.mjs";
|
|
4
4
|
import { generateSalt, getKeyFromPassword, getKeyFromPasswordAndSalt } from "./derive-password.mjs";
|
|
5
|
-
import {
|
|
5
|
+
import { a as HybridEncryptedEmail, c as PwdProtectedEmail, i as HybridEncKey, l as PwdProtectedKey, n as EmailBodyEncrypted, o as HybridKeyPair, r as EncryptedKeystore, s as KeystoreType, t as EmailBody, u as RecipientWithPublicKey } from "./types-DAPJQG8U.mjs";
|
|
6
6
|
import { createPwdProtectedEmail, decryptEmailBody, decryptEmailHybrid, decryptPwdProtectedEmail, deriveDatabaseKey, deriveEmailDraftKey, encryptEmailBody, encryptEmailBodyWithKey, encryptEmailHybrid, encryptEmailHybridForMultipleRecipients, generateEmailKeys } from "./email-crypto.mjs";
|
|
7
7
|
import { getBytesFromData, getBytesFromDataArray, hashData, hashDataArray, hashDataArrayWithKey, hashDataWithKey } from "./hash.mjs";
|
|
8
8
|
import { FailedToChangeMnemonicForKeyStore, FailedToCreateKeyStores, FailedToOpenEncryptionKeyStore, FailedToOpenRecoveryKeyStore, InvalidInputKeyStore, changeMnemonicForEncryptionKeystore, createEncryptionAndRecoveryKeystores, openEncryptionKeystore, openRecoveryKeystore } from "./keystore-crypto.mjs";
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { deriveSecretKey, generateEccKeys } from "./asymmetric-crypto.js";
|
|
|
2
2
|
import { AES_KEY_BYTE_LENGTH, ARGON2ID_ITERATIONS, ARGON2ID_MEMORY_SIZE, ARGON2ID_OUTPUT_BYTE_LENGTH, ARGON2ID_PARALLELISM, ARGON2ID_SALT_BYTE_LENGTH, CONTEXT_DATABASE, CONTEXT_DRAFT, CONTEXT_ENC_KEYSTORE, CONTEXT_RECOVERY, CONTEXT_TWO_KEYS, DB_LABEL, DB_VERSION, IV_LEN_BYTES, KYBER768_PUBLIC_KEY_LENGTH, KYBER768_SECRET_KEY_LENGTH, KYBER_SEED_LENGTH, MAX_CACHE_SIZE, MAX_EMAIL_PER_BATCH, XWING_CIPHERTEXT_BYTE_LENGTH, XWING_PUBLIC_KEY_LENGTH, XWING_SECRET_KEY_LENGTH, XWING_SEED_BYTE_LENGTH } from "./constants.js";
|
|
3
3
|
import { deriveKeyFromMnemonic, deriveSymmetricKeyFromContext, deriveSymmetricKeyFromTwoKeys } from "./derive-key.js";
|
|
4
4
|
import { generateSalt, getKeyFromPassword, getKeyFromPasswordAndSalt } from "./derive-password.js";
|
|
5
|
-
import {
|
|
5
|
+
import { a as HybridEncryptedEmail, c as PwdProtectedEmail, i as HybridEncKey, l as PwdProtectedKey, n as EmailBodyEncrypted, o as HybridKeyPair, r as EncryptedKeystore, s as KeystoreType, t as EmailBody, u as RecipientWithPublicKey } from "./types-4P0WII1D.js";
|
|
6
6
|
import { createPwdProtectedEmail, decryptEmailBody, decryptEmailHybrid, decryptPwdProtectedEmail, deriveDatabaseKey, deriveEmailDraftKey, encryptEmailBody, encryptEmailBodyWithKey, encryptEmailHybrid, encryptEmailHybridForMultipleRecipients, generateEmailKeys } from "./email-crypto.js";
|
|
7
7
|
import { getBytesFromData, getBytesFromDataArray, hashData, hashDataArray, hashDataArrayWithKey, hashDataWithKey } from "./hash.js";
|
|
8
8
|
import { FailedToChangeMnemonicForKeyStore, FailedToCreateKeyStores, FailedToOpenEncryptionKeyStore, FailedToOpenRecoveryKeyStore, InvalidInputKeyStore, changeMnemonicForEncryptionKeystore, createEncryptionAndRecoveryKeystores, openEncryptionKeystore, openRecoveryKeystore } from "./keystore-crypto.js";
|
package/dist/index.js
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value:
|
|
2
|
-
const require_asymmetric_crypto = require(
|
|
3
|
-
const require_constants = require(
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const require_hash = require(
|
|
10
|
-
const require_types = require(
|
|
11
|
-
const
|
|
12
|
-
const require_post_quantum_crypto = require(
|
|
13
|
-
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_asymmetric_crypto = require("./asymmetric-crypto.js");
|
|
3
|
+
const require_constants = require("./constants.js");
|
|
4
|
+
const require_utils = require("./utils.js");
|
|
5
|
+
const require_derive_key = require("./derive-key.js");
|
|
6
|
+
const require_derive_password = require("./derive-password-CbYRDq7V.js");
|
|
7
|
+
const require_symmetric_crypto = require("./symmetric-crypto.js");
|
|
8
|
+
const require_email_crypto = require("./email-crypto-Cr7znO1a.js");
|
|
9
|
+
const require_hash = require("./hash.js");
|
|
10
|
+
const require_types = require("./types.js");
|
|
11
|
+
const require_keystore_crypto = require("./keystore-crypto-CFiiGohl.js");
|
|
12
|
+
const require_post_quantum_crypto = require("./post-quantum-crypto.js");
|
|
14
13
|
exports.AES_KEY_BYTE_LENGTH = require_constants.AES_KEY_BYTE_LENGTH;
|
|
15
14
|
exports.ARGON2ID_ITERATIONS = require_constants.ARGON2ID_ITERATIONS;
|
|
16
15
|
exports.ARGON2ID_MEMORY_SIZE = require_constants.ARGON2ID_MEMORY_SIZE;
|
|
@@ -24,68 +23,68 @@ exports.CONTEXT_RECOVERY = require_constants.CONTEXT_RECOVERY;
|
|
|
24
23
|
exports.CONTEXT_TWO_KEYS = require_constants.CONTEXT_TWO_KEYS;
|
|
25
24
|
exports.DB_LABEL = require_constants.DB_LABEL;
|
|
26
25
|
exports.DB_VERSION = require_constants.DB_VERSION;
|
|
27
|
-
exports.FailedToChangeMnemonicForKeyStore =
|
|
28
|
-
exports.FailedToCreateKeyStores =
|
|
29
|
-
exports.FailedToOpenEncryptionKeyStore =
|
|
30
|
-
exports.FailedToOpenRecoveryKeyStore =
|
|
26
|
+
exports.FailedToChangeMnemonicForKeyStore = require_keystore_crypto.FailedToChangeMnemonicForKeyStore;
|
|
27
|
+
exports.FailedToCreateKeyStores = require_keystore_crypto.FailedToCreateKeyStores;
|
|
28
|
+
exports.FailedToOpenEncryptionKeyStore = require_keystore_crypto.FailedToOpenEncryptionKeyStore;
|
|
29
|
+
exports.FailedToOpenRecoveryKeyStore = require_keystore_crypto.FailedToOpenRecoveryKeyStore;
|
|
31
30
|
exports.IV_LEN_BYTES = require_constants.IV_LEN_BYTES;
|
|
32
|
-
exports.InvalidInputKeyStore =
|
|
31
|
+
exports.InvalidInputKeyStore = require_keystore_crypto.InvalidInputKeyStore;
|
|
33
32
|
exports.KYBER768_PUBLIC_KEY_LENGTH = require_constants.KYBER768_PUBLIC_KEY_LENGTH;
|
|
34
33
|
exports.KYBER768_SECRET_KEY_LENGTH = require_constants.KYBER768_SECRET_KEY_LENGTH;
|
|
35
34
|
exports.KYBER_SEED_LENGTH = require_constants.KYBER_SEED_LENGTH;
|
|
36
35
|
exports.KeystoreType = require_types.KeystoreType;
|
|
37
36
|
exports.MAX_CACHE_SIZE = require_constants.MAX_CACHE_SIZE;
|
|
38
37
|
exports.MAX_EMAIL_PER_BATCH = require_constants.MAX_EMAIL_PER_BATCH;
|
|
39
|
-
exports.UTF8ToUint8 =
|
|
38
|
+
exports.UTF8ToUint8 = require_utils.UTF8ToUint8;
|
|
40
39
|
exports.XWING_CIPHERTEXT_BYTE_LENGTH = require_constants.XWING_CIPHERTEXT_BYTE_LENGTH;
|
|
41
40
|
exports.XWING_PUBLIC_KEY_LENGTH = require_constants.XWING_PUBLIC_KEY_LENGTH;
|
|
42
41
|
exports.XWING_SECRET_KEY_LENGTH = require_constants.XWING_SECRET_KEY_LENGTH;
|
|
43
42
|
exports.XWING_SEED_BYTE_LENGTH = require_constants.XWING_SEED_BYTE_LENGTH;
|
|
44
|
-
exports.base64ToUint8Array =
|
|
45
|
-
exports.bytesToMnemonic =
|
|
46
|
-
exports.bytesToUuid =
|
|
47
|
-
exports.changeMnemonicForEncryptionKeystore =
|
|
48
|
-
exports.createEncryptionAndRecoveryKeystores =
|
|
49
|
-
exports.createPwdProtectedEmail =
|
|
43
|
+
exports.base64ToUint8Array = require_utils.base64ToUint8Array;
|
|
44
|
+
exports.bytesToMnemonic = require_utils.bytesToMnemonic;
|
|
45
|
+
exports.bytesToUuid = require_utils.bytesToUuid;
|
|
46
|
+
exports.changeMnemonicForEncryptionKeystore = require_keystore_crypto.changeMnemonicForEncryptionKeystore;
|
|
47
|
+
exports.createEncryptionAndRecoveryKeystores = require_keystore_crypto.createEncryptionAndRecoveryKeystores;
|
|
48
|
+
exports.createPwdProtectedEmail = require_email_crypto.createPwdProtectedEmail;
|
|
50
49
|
exports.decapsulateKyber = require_post_quantum_crypto.decapsulateKyber;
|
|
51
|
-
exports.decryptEmailBody =
|
|
52
|
-
exports.decryptEmailHybrid =
|
|
53
|
-
exports.decryptPwdProtectedEmail =
|
|
54
|
-
exports.decryptSymmetrically =
|
|
55
|
-
exports.deriveDatabaseKey =
|
|
56
|
-
exports.deriveEmailDraftKey =
|
|
57
|
-
exports.deriveKeyFromMnemonic =
|
|
50
|
+
exports.decryptEmailBody = require_email_crypto.decryptEmailBody;
|
|
51
|
+
exports.decryptEmailHybrid = require_email_crypto.decryptEmailHybrid;
|
|
52
|
+
exports.decryptPwdProtectedEmail = require_email_crypto.decryptPwdProtectedEmail;
|
|
53
|
+
exports.decryptSymmetrically = require_symmetric_crypto.decryptSymmetrically;
|
|
54
|
+
exports.deriveDatabaseKey = require_email_crypto.deriveDatabaseKey;
|
|
55
|
+
exports.deriveEmailDraftKey = require_email_crypto.deriveEmailDraftKey;
|
|
56
|
+
exports.deriveKeyFromMnemonic = require_derive_key.deriveKeyFromMnemonic;
|
|
58
57
|
exports.deriveSecretKey = require_asymmetric_crypto.deriveSecretKey;
|
|
59
|
-
exports.deriveSymmetricKeyFromContext =
|
|
60
|
-
exports.deriveSymmetricKeyFromTwoKeys =
|
|
58
|
+
exports.deriveSymmetricKeyFromContext = require_derive_key.deriveSymmetricKeyFromContext;
|
|
59
|
+
exports.deriveSymmetricKeyFromTwoKeys = require_derive_key.deriveSymmetricKeyFromTwoKeys;
|
|
61
60
|
exports.encapsulateKyber = require_post_quantum_crypto.encapsulateKyber;
|
|
62
|
-
exports.encryptEmailBody =
|
|
63
|
-
exports.encryptEmailBodyWithKey =
|
|
64
|
-
exports.encryptEmailHybrid =
|
|
65
|
-
exports.encryptEmailHybridForMultipleRecipients =
|
|
66
|
-
exports.encryptSymmetrically =
|
|
67
|
-
exports.genMnemonic =
|
|
68
|
-
exports.genSymmetricKey =
|
|
61
|
+
exports.encryptEmailBody = require_email_crypto.encryptEmailBody;
|
|
62
|
+
exports.encryptEmailBodyWithKey = require_email_crypto.encryptEmailBodyWithKey;
|
|
63
|
+
exports.encryptEmailHybrid = require_email_crypto.encryptEmailHybrid;
|
|
64
|
+
exports.encryptEmailHybridForMultipleRecipients = require_email_crypto.encryptEmailHybridForMultipleRecipients;
|
|
65
|
+
exports.encryptSymmetrically = require_symmetric_crypto.encryptSymmetrically;
|
|
66
|
+
exports.genMnemonic = require_utils.genMnemonic;
|
|
67
|
+
exports.genSymmetricKey = require_symmetric_crypto.genSymmetricKey;
|
|
69
68
|
exports.generateEccKeys = require_asymmetric_crypto.generateEccKeys;
|
|
70
|
-
exports.generateEmailKeys =
|
|
69
|
+
exports.generateEmailKeys = require_email_crypto.generateEmailKeys;
|
|
71
70
|
exports.generateKyberKeys = require_post_quantum_crypto.generateKyberKeys;
|
|
72
|
-
exports.generateSalt =
|
|
73
|
-
exports.generateUuid =
|
|
71
|
+
exports.generateSalt = require_derive_password.generateSalt;
|
|
72
|
+
exports.generateUuid = require_utils.generateUuid;
|
|
74
73
|
exports.getBytesFromData = require_hash.getBytesFromData;
|
|
75
74
|
exports.getBytesFromDataArray = require_hash.getBytesFromDataArray;
|
|
76
|
-
exports.getKeyFromPassword =
|
|
77
|
-
exports.getKeyFromPasswordAndSalt =
|
|
75
|
+
exports.getKeyFromPassword = require_derive_password.getKeyFromPassword;
|
|
76
|
+
exports.getKeyFromPasswordAndSalt = require_derive_password.getKeyFromPasswordAndSalt;
|
|
78
77
|
exports.hashData = require_hash.hashData;
|
|
79
78
|
exports.hashDataArray = require_hash.hashDataArray;
|
|
80
79
|
exports.hashDataArrayWithKey = require_hash.hashDataArrayWithKey;
|
|
81
80
|
exports.hashDataWithKey = require_hash.hashDataWithKey;
|
|
82
|
-
exports.hexToUint8Array =
|
|
83
|
-
exports.mnemonicToBytes =
|
|
84
|
-
exports.openEncryptionKeystore =
|
|
85
|
-
exports.openRecoveryKeystore =
|
|
86
|
-
exports.uint8ArrayToBase64 =
|
|
87
|
-
exports.uint8ArrayToHex =
|
|
88
|
-
exports.uint8ToUTF8 =
|
|
89
|
-
exports.unwrapKey =
|
|
90
|
-
exports.uuidToBytes =
|
|
91
|
-
exports.wrapKey =
|
|
81
|
+
exports.hexToUint8Array = require_utils.hexToUint8Array;
|
|
82
|
+
exports.mnemonicToBytes = require_utils.mnemonicToBytes;
|
|
83
|
+
exports.openEncryptionKeystore = require_keystore_crypto.openEncryptionKeystore;
|
|
84
|
+
exports.openRecoveryKeystore = require_keystore_crypto.openRecoveryKeystore;
|
|
85
|
+
exports.uint8ArrayToBase64 = require_utils.uint8ArrayToBase64;
|
|
86
|
+
exports.uint8ArrayToHex = require_utils.uint8ArrayToHex;
|
|
87
|
+
exports.uint8ToUTF8 = require_utils.uint8ToUTF8;
|
|
88
|
+
exports.unwrapKey = require_email_crypto.unwrapKey;
|
|
89
|
+
exports.uuidToBytes = require_utils.uuidToBytes;
|
|
90
|
+
exports.wrapKey = require_email_crypto.wrapKey;
|
package/dist/index.mjs
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { deriveSecretKey, generateEccKeys } from "./asymmetric-crypto.mjs";
|
|
2
2
|
import { AES_KEY_BYTE_LENGTH, ARGON2ID_ITERATIONS, ARGON2ID_MEMORY_SIZE, ARGON2ID_OUTPUT_BYTE_LENGTH, ARGON2ID_PARALLELISM, ARGON2ID_SALT_BYTE_LENGTH, CONTEXT_DATABASE, CONTEXT_DRAFT, CONTEXT_ENC_KEYSTORE, CONTEXT_RECOVERY, CONTEXT_TWO_KEYS, DB_LABEL, DB_VERSION, IV_LEN_BYTES, KYBER768_PUBLIC_KEY_LENGTH, KYBER768_SECRET_KEY_LENGTH, KYBER_SEED_LENGTH, MAX_CACHE_SIZE, MAX_EMAIL_PER_BATCH, XWING_CIPHERTEXT_BYTE_LENGTH, XWING_PUBLIC_KEY_LENGTH, XWING_SECRET_KEY_LENGTH, XWING_SEED_BYTE_LENGTH } from "./constants.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { n as getKeyFromPassword, r as getKeyFromPasswordAndSalt, t as generateSalt } from "./
|
|
6
|
-
import {
|
|
7
|
-
import { _ as wrapKey, a as decryptPwdProtectedEmail, c as encryptEmailHybridForMultipleRecipients, d as encryptEmailBody, f as encryptEmailBodyWithKey, g as unwrapKey, i as createPwdProtectedEmail, l as decryptEmailBody, n as deriveEmailDraftKey, o as decryptEmailHybrid, r as generateEmailKeys, s as encryptEmailHybrid, t as deriveDatabaseKey } from "./
|
|
3
|
+
import { UTF8ToUint8, base64ToUint8Array, bytesToMnemonic, bytesToUuid, genMnemonic, generateUuid, hexToUint8Array, mnemonicToBytes, uint8ArrayToBase64, uint8ArrayToHex, uint8ToUTF8, uuidToBytes } from "./utils.mjs";
|
|
4
|
+
import { deriveKeyFromMnemonic, deriveSymmetricKeyFromContext, deriveSymmetricKeyFromTwoKeys } from "./derive-key.mjs";
|
|
5
|
+
import { n as getKeyFromPassword, r as getKeyFromPasswordAndSalt, t as generateSalt } from "./derive-password-PED-YfwE.mjs";
|
|
6
|
+
import { decryptSymmetrically, encryptSymmetrically, genSymmetricKey } from "./symmetric-crypto.mjs";
|
|
7
|
+
import { _ as wrapKey, a as decryptPwdProtectedEmail, c as encryptEmailHybridForMultipleRecipients, d as encryptEmailBody, f as encryptEmailBodyWithKey, g as unwrapKey, i as createPwdProtectedEmail, l as decryptEmailBody, n as deriveEmailDraftKey, o as decryptEmailHybrid, r as generateEmailKeys, s as encryptEmailHybrid, t as deriveDatabaseKey } from "./email-crypto-cHDsjSb5.mjs";
|
|
8
8
|
import { getBytesFromData, getBytesFromDataArray, hashData, hashDataArray, hashDataArrayWithKey, hashDataWithKey } from "./hash.mjs";
|
|
9
9
|
import { KeystoreType } from "./types.mjs";
|
|
10
|
-
import { a as FailedToChangeMnemonicForKeyStore, c as FailedToOpenRecoveryKeyStore, i as openRecoveryKeystore, l as InvalidInputKeyStore, n as createEncryptionAndRecoveryKeystores, o as FailedToCreateKeyStores, r as openEncryptionKeystore, s as FailedToOpenEncryptionKeyStore, t as changeMnemonicForEncryptionKeystore } from "./
|
|
10
|
+
import { a as FailedToChangeMnemonicForKeyStore, c as FailedToOpenRecoveryKeyStore, i as openRecoveryKeystore, l as InvalidInputKeyStore, n as createEncryptionAndRecoveryKeystores, o as FailedToCreateKeyStores, r as openEncryptionKeystore, s as FailedToOpenEncryptionKeyStore, t as changeMnemonicForEncryptionKeystore } from "./keystore-crypto-C6F-NQdX.mjs";
|
|
11
11
|
import { decapsulateKyber, encapsulateKyber, generateKyberKeys } from "./post-quantum-crypto.mjs";
|
|
12
|
-
|
|
13
|
-
export { AES_KEY_BYTE_LENGTH, ARGON2ID_ITERATIONS, ARGON2ID_MEMORY_SIZE, ARGON2ID_OUTPUT_BYTE_LENGTH, ARGON2ID_PARALLELISM, ARGON2ID_SALT_BYTE_LENGTH, CONTEXT_DATABASE, CONTEXT_DRAFT, CONTEXT_ENC_KEYSTORE, CONTEXT_RECOVERY, CONTEXT_TWO_KEYS, DB_LABEL, DB_VERSION, FailedToChangeMnemonicForKeyStore, FailedToCreateKeyStores, FailedToOpenEncryptionKeyStore, FailedToOpenRecoveryKeyStore, IV_LEN_BYTES, InvalidInputKeyStore, KYBER768_PUBLIC_KEY_LENGTH, KYBER768_SECRET_KEY_LENGTH, KYBER_SEED_LENGTH, KeystoreType, MAX_CACHE_SIZE, MAX_EMAIL_PER_BATCH, UTF8ToUint8, XWING_CIPHERTEXT_BYTE_LENGTH, XWING_PUBLIC_KEY_LENGTH, XWING_SECRET_KEY_LENGTH, XWING_SEED_BYTE_LENGTH, base64ToUint8Array, bytesToMnemonic, bytesToUuid, changeMnemonicForEncryptionKeystore, createEncryptionAndRecoveryKeystores, createPwdProtectedEmail, decapsulateKyber, decryptEmailBody, decryptEmailHybrid, decryptPwdProtectedEmail, decryptSymmetrically, deriveDatabaseKey, deriveEmailDraftKey, deriveKeyFromMnemonic, deriveSecretKey, deriveSymmetricKeyFromContext, deriveSymmetricKeyFromTwoKeys, encapsulateKyber, encryptEmailBody, encryptEmailBodyWithKey, encryptEmailHybrid, encryptEmailHybridForMultipleRecipients, encryptSymmetrically, genMnemonic, genSymmetricKey, generateEccKeys, generateEmailKeys, generateKyberKeys, generateSalt, generateUuid, getBytesFromData, getBytesFromDataArray, getKeyFromPassword, getKeyFromPasswordAndSalt, hashData, hashDataArray, hashDataArrayWithKey, hashDataWithKey, hexToUint8Array, mnemonicToBytes, openEncryptionKeystore, openRecoveryKeystore, uint8ArrayToBase64, uint8ArrayToHex, uint8ToUTF8, unwrapKey, uuidToBytes, wrapKey };
|
|
12
|
+
export { AES_KEY_BYTE_LENGTH, ARGON2ID_ITERATIONS, ARGON2ID_MEMORY_SIZE, ARGON2ID_OUTPUT_BYTE_LENGTH, ARGON2ID_PARALLELISM, ARGON2ID_SALT_BYTE_LENGTH, CONTEXT_DATABASE, CONTEXT_DRAFT, CONTEXT_ENC_KEYSTORE, CONTEXT_RECOVERY, CONTEXT_TWO_KEYS, DB_LABEL, DB_VERSION, FailedToChangeMnemonicForKeyStore, FailedToCreateKeyStores, FailedToOpenEncryptionKeyStore, FailedToOpenRecoveryKeyStore, IV_LEN_BYTES, InvalidInputKeyStore, KYBER768_PUBLIC_KEY_LENGTH, KYBER768_SECRET_KEY_LENGTH, KYBER_SEED_LENGTH, KeystoreType, MAX_CACHE_SIZE, MAX_EMAIL_PER_BATCH, UTF8ToUint8, XWING_CIPHERTEXT_BYTE_LENGTH, XWING_PUBLIC_KEY_LENGTH, XWING_SECRET_KEY_LENGTH, XWING_SEED_BYTE_LENGTH, base64ToUint8Array, bytesToMnemonic, bytesToUuid, changeMnemonicForEncryptionKeystore, createEncryptionAndRecoveryKeystores, createPwdProtectedEmail, decapsulateKyber, decryptEmailBody, decryptEmailHybrid, decryptPwdProtectedEmail, decryptSymmetrically, deriveDatabaseKey, deriveEmailDraftKey, deriveKeyFromMnemonic, deriveSecretKey, deriveSymmetricKeyFromContext, deriveSymmetricKeyFromTwoKeys, encapsulateKyber, encryptEmailBody, encryptEmailBodyWithKey, encryptEmailHybrid, encryptEmailHybridForMultipleRecipients, encryptSymmetrically, genMnemonic, genSymmetricKey, generateEccKeys, generateEmailKeys, generateKyberKeys, generateSalt, generateUuid, getBytesFromData, getBytesFromDataArray, getKeyFromPassword, getKeyFromPasswordAndSalt, hashData, hashDataArray, hashDataArrayWithKey, hashDataWithKey, hexToUint8Array, mnemonicToBytes, openEncryptionKeystore, openRecoveryKeystore, uint8ArrayToBase64, uint8ArrayToHex, uint8ToUTF8, unwrapKey, uuidToBytes, wrapKey };
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { CONTEXT_ENC_KEYSTORE, CONTEXT_RECOVERY } from "./constants.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { r as genHybridKeys } from "./xwing-
|
|
6
|
-
import
|
|
7
|
-
|
|
2
|
+
import { UTF8ToUint8, base64ToUint8Array, genMnemonic, uint8ArrayToBase64 } from "./utils.mjs";
|
|
3
|
+
import { deriveKeyFromMnemonic } from "./derive-key.mjs";
|
|
4
|
+
import { decryptSymmetrically, encryptSymmetrically } from "./symmetric-crypto.mjs";
|
|
5
|
+
import { r as genHybridKeys } from "./xwing-B34h5e3Z.mjs";
|
|
6
|
+
import "./types.mjs";
|
|
8
7
|
//#region src/keystore-crypto/core.ts
|
|
9
8
|
/**
|
|
10
9
|
* Encrypts the user's hybrid key using symmetric encryption to get a keystore
|
|
@@ -65,7 +64,6 @@ async function deriveRecoveryKey(recoveryCodes) {
|
|
|
65
64
|
async function deriveEncryptionKeystoreKeyFromMnemonic(mnemonic) {
|
|
66
65
|
return deriveKeyFromMnemonic(mnemonic, CONTEXT_ENC_KEYSTORE);
|
|
67
66
|
}
|
|
68
|
-
|
|
69
67
|
//#endregion
|
|
70
68
|
//#region src/keystore-crypto/errors.ts
|
|
71
69
|
var FailedToCreateKeyStores = class FailedToCreateKeyStores extends Error {
|
|
@@ -98,7 +96,6 @@ var FailedToChangeMnemonicForKeyStore = class FailedToChangeMnemonicForKeyStore
|
|
|
98
96
|
Object.setPrototypeOf(this, FailedToChangeMnemonicForKeyStore.prototype);
|
|
99
97
|
}
|
|
100
98
|
};
|
|
101
|
-
|
|
102
99
|
//#endregion
|
|
103
100
|
//#region src/keystore-crypto/emailEncryptionKey.ts
|
|
104
101
|
/**
|
|
@@ -115,11 +112,11 @@ var FailedToChangeMnemonicForKeyStore = class FailedToChangeMnemonicForKeyStore
|
|
|
115
112
|
async function createEncryptionAndRecoveryKeystores(userEmail, mnemonic) {
|
|
116
113
|
try {
|
|
117
114
|
const keys = genHybridKeys();
|
|
118
|
-
const encryptionKeystore = await encryptKeystoreContent(await deriveEncryptionKeystoreKeyFromMnemonic(mnemonic), keys, userEmail,
|
|
115
|
+
const encryptionKeystore = await encryptKeystoreContent(await deriveEncryptionKeystoreKeyFromMnemonic(mnemonic), keys, userEmail, "Encryption");
|
|
119
116
|
const recoveryCodes = genMnemonic();
|
|
120
117
|
return {
|
|
121
118
|
encryptionKeystore,
|
|
122
|
-
recoveryKeystore: await encryptKeystoreContent(await deriveRecoveryKey(recoveryCodes), keys, userEmail,
|
|
119
|
+
recoveryKeystore: await encryptKeystoreContent(await deriveRecoveryKey(recoveryCodes), keys, userEmail, "Recovery"),
|
|
123
120
|
recoveryCodes,
|
|
124
121
|
keys
|
|
125
122
|
};
|
|
@@ -137,7 +134,7 @@ async function createEncryptionAndRecoveryKeystores(userEmail, mnemonic) {
|
|
|
137
134
|
*/
|
|
138
135
|
async function openEncryptionKeystore(encryptedKeystore, mnemonic) {
|
|
139
136
|
try {
|
|
140
|
-
if (encryptedKeystore.type !==
|
|
137
|
+
if (encryptedKeystore.type !== "Encryption") throw new InvalidInputKeyStore();
|
|
141
138
|
return await decryptKeystoreContent(await deriveEncryptionKeystoreKeyFromMnemonic(mnemonic), encryptedKeystore);
|
|
142
139
|
} catch (error) {
|
|
143
140
|
if (error instanceof InvalidInputKeyStore) throw error;
|
|
@@ -154,7 +151,7 @@ async function openEncryptionKeystore(encryptedKeystore, mnemonic) {
|
|
|
154
151
|
*/
|
|
155
152
|
async function openRecoveryKeystore(recoveryCodes, encryptedKeystore) {
|
|
156
153
|
try {
|
|
157
|
-
if (encryptedKeystore.type !==
|
|
154
|
+
if (encryptedKeystore.type !== "Recovery") throw new InvalidInputKeyStore();
|
|
158
155
|
return await decryptKeystoreContent(await deriveRecoveryKey(recoveryCodes), encryptedKeystore);
|
|
159
156
|
} catch (error) {
|
|
160
157
|
if (error instanceof InvalidInputKeyStore) throw error;
|
|
@@ -174,7 +171,7 @@ async function changeMnemonicForEncryptionKeystore(encryptedKeystore, oldMnemoni
|
|
|
174
171
|
try {
|
|
175
172
|
const keys = await openEncryptionKeystore(encryptedKeystore, oldMnemonic);
|
|
176
173
|
return {
|
|
177
|
-
newKeystore: await encryptKeystoreContent(await deriveEncryptionKeystoreKeyFromMnemonic(newMnemonic), keys, encryptedKeystore.userEmail,
|
|
174
|
+
newKeystore: await encryptKeystoreContent(await deriveEncryptionKeystoreKeyFromMnemonic(newMnemonic), keys, encryptedKeystore.userEmail, "Encryption"),
|
|
178
175
|
keys
|
|
179
176
|
};
|
|
180
177
|
} catch (error) {
|
|
@@ -182,7 +179,7 @@ async function changeMnemonicForEncryptionKeystore(encryptedKeystore, oldMnemoni
|
|
|
182
179
|
throw new FailedToChangeMnemonicForKeyStore(error instanceof Error ? error.message : String(error));
|
|
183
180
|
}
|
|
184
181
|
}
|
|
185
|
-
|
|
186
182
|
//#endregion
|
|
187
183
|
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
|
-
|
|
184
|
+
|
|
185
|
+
//# sourceMappingURL=keystore-crypto-C6F-NQdX.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keystore-crypto-C6F-NQdX.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,10 +1,9 @@
|
|
|
1
|
-
const require_constants = require(
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const require_xwing = require(
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
const require_constants = require("./constants.js");
|
|
2
|
+
const require_utils = require("./utils.js");
|
|
3
|
+
const require_derive_key = require("./derive-key.js");
|
|
4
|
+
const require_symmetric_crypto = require("./symmetric-crypto.js");
|
|
5
|
+
const require_xwing = require("./xwing-7fEqAT7W.js");
|
|
6
|
+
require("./types.js");
|
|
8
7
|
//#region src/keystore-crypto/core.ts
|
|
9
8
|
/**
|
|
10
9
|
* Encrypts the user's hybrid key using symmetric encryption to get a keystore
|
|
@@ -17,13 +16,13 @@ const require_types = require('./types.js');
|
|
|
17
16
|
*/
|
|
18
17
|
async function encryptKeystoreContent(secretKey, keys, userEmail, type) {
|
|
19
18
|
try {
|
|
20
|
-
const publicKey =
|
|
21
|
-
const aux =
|
|
19
|
+
const publicKey = require_utils.uint8ArrayToBase64(keys.publicKey);
|
|
20
|
+
const aux = require_utils.UTF8ToUint8(userEmail + type + publicKey);
|
|
22
21
|
return {
|
|
23
22
|
userEmail,
|
|
24
23
|
type,
|
|
25
24
|
publicKey,
|
|
26
|
-
privateKeyEncrypted:
|
|
25
|
+
privateKeyEncrypted: require_utils.uint8ArrayToBase64(await require_symmetric_crypto.encryptSymmetrically(secretKey, keys.secretKey, aux))
|
|
27
26
|
};
|
|
28
27
|
} catch (error) {
|
|
29
28
|
throw new Error("Failed to encrypt keystore content", { cause: error });
|
|
@@ -38,10 +37,10 @@ async function encryptKeystoreContent(secretKey, keys, userEmail, type) {
|
|
|
38
37
|
*/
|
|
39
38
|
async function decryptKeystoreContent(kesytoreOpeningKey, encryptedKeystore) {
|
|
40
39
|
try {
|
|
41
|
-
const aux =
|
|
40
|
+
const aux = require_utils.UTF8ToUint8(encryptedKeystore.userEmail + encryptedKeystore.type + encryptedKeystore.publicKey);
|
|
42
41
|
return {
|
|
43
|
-
publicKey:
|
|
44
|
-
secretKey: await
|
|
42
|
+
publicKey: require_utils.base64ToUint8Array(encryptedKeystore.publicKey),
|
|
43
|
+
secretKey: await require_symmetric_crypto.decryptSymmetrically(kesytoreOpeningKey, require_utils.base64ToUint8Array(encryptedKeystore.privateKeyEncrypted), aux)
|
|
45
44
|
};
|
|
46
45
|
} catch (error) {
|
|
47
46
|
throw new Error("Failed to decrypt keystore content", { cause: error });
|
|
@@ -54,7 +53,7 @@ async function decryptKeystoreContent(kesytoreOpeningKey, encryptedKeystore) {
|
|
|
54
53
|
* @returns The derived secret key for protecting the recovery keystore
|
|
55
54
|
*/
|
|
56
55
|
async function deriveRecoveryKey(recoveryCodes) {
|
|
57
|
-
return
|
|
56
|
+
return require_derive_key.deriveKeyFromMnemonic(recoveryCodes, require_constants.CONTEXT_RECOVERY);
|
|
58
57
|
}
|
|
59
58
|
/**
|
|
60
59
|
* Derives a secret key for protecting the encryption keystore from user's mnemonic
|
|
@@ -63,9 +62,8 @@ async function deriveRecoveryKey(recoveryCodes) {
|
|
|
63
62
|
* @returns The derived secret key for protecting the encryption keystore
|
|
64
63
|
*/
|
|
65
64
|
async function deriveEncryptionKeystoreKeyFromMnemonic(mnemonic) {
|
|
66
|
-
return
|
|
65
|
+
return require_derive_key.deriveKeyFromMnemonic(mnemonic, require_constants.CONTEXT_ENC_KEYSTORE);
|
|
67
66
|
}
|
|
68
|
-
|
|
69
67
|
//#endregion
|
|
70
68
|
//#region src/keystore-crypto/errors.ts
|
|
71
69
|
var FailedToCreateKeyStores = class FailedToCreateKeyStores extends Error {
|
|
@@ -98,7 +96,6 @@ var FailedToChangeMnemonicForKeyStore = class FailedToChangeMnemonicForKeyStore
|
|
|
98
96
|
Object.setPrototypeOf(this, FailedToChangeMnemonicForKeyStore.prototype);
|
|
99
97
|
}
|
|
100
98
|
};
|
|
101
|
-
|
|
102
99
|
//#endregion
|
|
103
100
|
//#region src/keystore-crypto/emailEncryptionKey.ts
|
|
104
101
|
/**
|
|
@@ -115,11 +112,11 @@ var FailedToChangeMnemonicForKeyStore = class FailedToChangeMnemonicForKeyStore
|
|
|
115
112
|
async function createEncryptionAndRecoveryKeystores(userEmail, mnemonic) {
|
|
116
113
|
try {
|
|
117
114
|
const keys = require_xwing.genHybridKeys();
|
|
118
|
-
const encryptionKeystore = await encryptKeystoreContent(await deriveEncryptionKeystoreKeyFromMnemonic(mnemonic), keys, userEmail,
|
|
119
|
-
const recoveryCodes =
|
|
115
|
+
const encryptionKeystore = await encryptKeystoreContent(await deriveEncryptionKeystoreKeyFromMnemonic(mnemonic), keys, userEmail, "Encryption");
|
|
116
|
+
const recoveryCodes = require_utils.genMnemonic();
|
|
120
117
|
return {
|
|
121
118
|
encryptionKeystore,
|
|
122
|
-
recoveryKeystore: await encryptKeystoreContent(await deriveRecoveryKey(recoveryCodes), keys, userEmail,
|
|
119
|
+
recoveryKeystore: await encryptKeystoreContent(await deriveRecoveryKey(recoveryCodes), keys, userEmail, "Recovery"),
|
|
123
120
|
recoveryCodes,
|
|
124
121
|
keys
|
|
125
122
|
};
|
|
@@ -137,7 +134,7 @@ async function createEncryptionAndRecoveryKeystores(userEmail, mnemonic) {
|
|
|
137
134
|
*/
|
|
138
135
|
async function openEncryptionKeystore(encryptedKeystore, mnemonic) {
|
|
139
136
|
try {
|
|
140
|
-
if (encryptedKeystore.type !==
|
|
137
|
+
if (encryptedKeystore.type !== "Encryption") throw new InvalidInputKeyStore();
|
|
141
138
|
return await decryptKeystoreContent(await deriveEncryptionKeystoreKeyFromMnemonic(mnemonic), encryptedKeystore);
|
|
142
139
|
} catch (error) {
|
|
143
140
|
if (error instanceof InvalidInputKeyStore) throw error;
|
|
@@ -154,7 +151,7 @@ async function openEncryptionKeystore(encryptedKeystore, mnemonic) {
|
|
|
154
151
|
*/
|
|
155
152
|
async function openRecoveryKeystore(recoveryCodes, encryptedKeystore) {
|
|
156
153
|
try {
|
|
157
|
-
if (encryptedKeystore.type !==
|
|
154
|
+
if (encryptedKeystore.type !== "Recovery") throw new InvalidInputKeyStore();
|
|
158
155
|
return await decryptKeystoreContent(await deriveRecoveryKey(recoveryCodes), encryptedKeystore);
|
|
159
156
|
} catch (error) {
|
|
160
157
|
if (error instanceof InvalidInputKeyStore) throw error;
|
|
@@ -174,7 +171,7 @@ async function changeMnemonicForEncryptionKeystore(encryptedKeystore, oldMnemoni
|
|
|
174
171
|
try {
|
|
175
172
|
const keys = await openEncryptionKeystore(encryptedKeystore, oldMnemonic);
|
|
176
173
|
return {
|
|
177
|
-
newKeystore: await encryptKeystoreContent(await deriveEncryptionKeystoreKeyFromMnemonic(newMnemonic), keys, encryptedKeystore.userEmail,
|
|
174
|
+
newKeystore: await encryptKeystoreContent(await deriveEncryptionKeystoreKeyFromMnemonic(newMnemonic), keys, encryptedKeystore.userEmail, "Encryption"),
|
|
178
175
|
keys
|
|
179
176
|
};
|
|
180
177
|
} catch (error) {
|
|
@@ -182,60 +179,60 @@ async function changeMnemonicForEncryptionKeystore(encryptedKeystore, oldMnemoni
|
|
|
182
179
|
throw new FailedToChangeMnemonicForKeyStore(error instanceof Error ? error.message : String(error));
|
|
183
180
|
}
|
|
184
181
|
}
|
|
185
|
-
|
|
186
182
|
//#endregion
|
|
187
|
-
Object.defineProperty(exports,
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
183
|
+
Object.defineProperty(exports, "FailedToChangeMnemonicForKeyStore", {
|
|
184
|
+
enumerable: true,
|
|
185
|
+
get: function() {
|
|
186
|
+
return FailedToChangeMnemonicForKeyStore;
|
|
187
|
+
}
|
|
192
188
|
});
|
|
193
|
-
Object.defineProperty(exports,
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
189
|
+
Object.defineProperty(exports, "FailedToCreateKeyStores", {
|
|
190
|
+
enumerable: true,
|
|
191
|
+
get: function() {
|
|
192
|
+
return FailedToCreateKeyStores;
|
|
193
|
+
}
|
|
198
194
|
});
|
|
199
|
-
Object.defineProperty(exports,
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
195
|
+
Object.defineProperty(exports, "FailedToOpenEncryptionKeyStore", {
|
|
196
|
+
enumerable: true,
|
|
197
|
+
get: function() {
|
|
198
|
+
return FailedToOpenEncryptionKeyStore;
|
|
199
|
+
}
|
|
204
200
|
});
|
|
205
|
-
Object.defineProperty(exports,
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
201
|
+
Object.defineProperty(exports, "FailedToOpenRecoveryKeyStore", {
|
|
202
|
+
enumerable: true,
|
|
203
|
+
get: function() {
|
|
204
|
+
return FailedToOpenRecoveryKeyStore;
|
|
205
|
+
}
|
|
210
206
|
});
|
|
211
|
-
Object.defineProperty(exports,
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
207
|
+
Object.defineProperty(exports, "InvalidInputKeyStore", {
|
|
208
|
+
enumerable: true,
|
|
209
|
+
get: function() {
|
|
210
|
+
return InvalidInputKeyStore;
|
|
211
|
+
}
|
|
216
212
|
});
|
|
217
|
-
Object.defineProperty(exports,
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
213
|
+
Object.defineProperty(exports, "changeMnemonicForEncryptionKeystore", {
|
|
214
|
+
enumerable: true,
|
|
215
|
+
get: function() {
|
|
216
|
+
return changeMnemonicForEncryptionKeystore;
|
|
217
|
+
}
|
|
222
218
|
});
|
|
223
|
-
Object.defineProperty(exports,
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
219
|
+
Object.defineProperty(exports, "createEncryptionAndRecoveryKeystores", {
|
|
220
|
+
enumerable: true,
|
|
221
|
+
get: function() {
|
|
222
|
+
return createEncryptionAndRecoveryKeystores;
|
|
223
|
+
}
|
|
228
224
|
});
|
|
229
|
-
Object.defineProperty(exports,
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
225
|
+
Object.defineProperty(exports, "openEncryptionKeystore", {
|
|
226
|
+
enumerable: true,
|
|
227
|
+
get: function() {
|
|
228
|
+
return openEncryptionKeystore;
|
|
229
|
+
}
|
|
234
230
|
});
|
|
235
|
-
Object.defineProperty(exports,
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
231
|
+
Object.defineProperty(exports, "openRecoveryKeystore", {
|
|
232
|
+
enumerable: true,
|
|
233
|
+
get: function() {
|
|
234
|
+
return openRecoveryKeystore;
|
|
235
|
+
}
|
|
240
236
|
});
|
|
241
|
-
|
|
237
|
+
|
|
238
|
+
//# sourceMappingURL=keystore-crypto-CFiiGohl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keystore-crypto-CFiiGohl.js","names":["uint8ArrayToBase64","UTF8ToUint8","encryptSymmetrically","base64ToUint8Array","decryptSymmetrically","deriveKeyFromMnemonic","CONTEXT_RECOVERY","CONTEXT_ENC_KEYSTORE","genHybridKeys","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":";;;;;;;;;;;;;;;;AAeA,eAAsB,uBACpB,WACA,MACA,WACA,MAC4B;AAC5B,KAAI;EACF,MAAM,YAAYA,cAAAA,mBAAmB,KAAK,UAAU;EAEpD,MAAM,MAAMC,cAAAA,YAAY,YAAY,OAAO,UAAU;AASrD,SAAO;GALL;GACA;GACA;GACA,qBAAqBD,cAAAA,mBAAmB,MANTE,yBAAAA,qBAAqB,WAAW,KAAK,WAAW,IAAI,CAMxB;GAE9C;UACR,OAAO;AACd,QAAM,IAAI,MAAM,sCAAsC,EAAE,OAAO,OAAO,CAAC;;;;;;;;;;AAW3E,eAAsB,uBACpB,oBACA,mBACwB;AACxB,KAAI;EACF,MAAM,MAAMD,cAAAA,YAAY,kBAAkB,YAAY,kBAAkB,OAAO,kBAAkB,UAAU;AAI3G,SAAO;GACL,WAJgBE,cAAAA,mBAAmB,kBAAkB,UAI5C;GACT,WAAA,MAHsBC,yBAAAA,qBAAqB,oBAD1BD,cAAAA,mBAAmB,kBAAkB,oBACmB,EAAE,IAAI;GAIhF;UACM,OAAO;AACd,QAAM,IAAI,MAAM,sCAAsC,EAAE,OAAO,OAAO,CAAC;;;;;;;;;AAU3E,eAAsB,kBAAkB,eAA4C;AAClF,QAAOE,mBAAAA,sBAAsB,eAAeC,kBAAAA,iBAAiB;;;;;;;;AAS/D,eAAsB,wCAAwC,UAAuC;AACnG,QAAOD,mBAAAA,sBAAsB,UAAUE,kBAAAA,qBAAqB;;;;ACjF9D,IAAa,0BAAb,MAAa,gCAAgC,MAAM;CACjD,YAAY,UAAmB;AAC7B,QAAM,yDAAyD,SAAS;AAExE,SAAO,eAAe,MAAM,wBAAwB,UAAU;;;AAIlE,IAAa,uBAAb,MAAa,6BAA6B,MAAM;CAC9C,cAAc;AACZ,QAAM,gBAAgB;AAEtB,SAAO,eAAe,MAAM,qBAAqB,UAAU;;;AAI/D,IAAa,iCAAb,MAAa,uCAAuC,MAAM;CACxD,YAAY,UAAmB;AAC7B,QAAM,yCAAyC,SAAS;AAExD,SAAO,eAAe,MAAM,+BAA+B,UAAU;;;AAIzE,IAAa,+BAAb,MAAa,qCAAqC,MAAM;CACtD,YAAY,UAAmB;AAC7B,QAAM,uCAAuC,SAAS;AAEtD,SAAO,eAAe,MAAM,6BAA6B,UAAU;;;AAIvE,IAAa,oCAAb,MAAa,0CAA0C,MAAM;CAC3D,YAAY,UAAmB;AAC7B,QAAM,mCAAmC,SAAS;AAElD,SAAO,eAAe,MAAM,kCAAkC,UAAU;;;;;;;;;;;;;;;;ACR5E,eAAsB,qCACpB,WACA,UAMC;AACD,KAAI;EACF,MAAM,OAAOC,cAAAA,eAAe;EAG5B,MAAM,qBAAqB,MAAM,uBAAuB,MADhC,wCAAwC,SAAS,EACN,MAAM,WAAA,aAAmC;EAE5G,MAAM,gBAAgBC,cAAAA,aAAa;AAInC,SAAO;GAAE;GAAoB,kBAAA,MAFE,uBAAuB,MAD5B,kBAAkB,cAAc,EACS,MAAM,WAAA,WAAiC;GAE3D;GAAe;GAAM;UAC7D,OAAO;AACd,QAAM,IAAI,wBAAwB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,CAAC;;;;;;;;;;;AAY7F,eAAsB,uBACpB,mBACA,UACwB;AACxB,KAAI;AACF,MAAI,kBAAkB,SAAA,aACpB,OAAM,IAAI,sBAAsB;AAIlC,SAAO,MADY,uBAAuB,MADlB,wCAAwC,SAAS,EACpB,kBAAkB;UAEhE,OAAO;AACd,MAAI,iBAAiB,qBAAsB,OAAM;AACjD,QAAM,IAAI,+BAA+B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,CAAC;;;;;;;;;;;AAYpG,eAAsB,qBACpB,eACA,mBACwB;AACxB,KAAI;AACF,MAAI,kBAAkB,SAAA,WACpB,OAAM,IAAI,sBAAsB;AAIlC,SAAO,MADY,uBAAuB,MADhB,kBAAkB,cAAc,EACH,kBAAkB;UAElE,OAAO;AACd,MAAI,iBAAiB,qBAAsB,OAAM;AACjD,QAAM,IAAI,6BAA6B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,CAAC;;;;;;;;;;;;AAalG,eAAsB,oCACpB,mBACA,aACA,aACkE;AAClE,KAAI;EACF,MAAM,OAAO,MAAM,uBAAuB,mBAAmB,YAAY;AAUzE,SAAO;GAAE,aAAA,MAPiB,uBACxB,MAFsB,wCAAwC,YAAY,EAG1E,MACA,kBAAkB,WAAA,aAEnB;GAEqB;GAAM;UACrB,OAAO;AACd,MAAI,iBAAiB,qBAAsB,OAAM;AACjD,QAAM,IAAI,kCAAkC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,CAAC"}
|