@haskou/value-objects 2.8.0 → 2.9.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 +28 -19
- package/dist/errors/InvalidEncryptedPrivateKeyFormatError.d.ts +5 -0
- package/dist/errors/InvalidEncryptedPrivateKeyFormatError.d.ts.map +1 -0
- package/dist/errors/InvalidEncryptedPrivateKeyFormatError.js +11 -0
- package/dist/errors/InvalidEncryptedPrivateKeyFormatError.js.map +1 -0
- package/dist/errors/InvalidPasswordError.d.ts +5 -0
- package/dist/errors/InvalidPasswordError.d.ts.map +1 -0
- package/dist/errors/InvalidPasswordError.js +11 -0
- package/dist/errors/InvalidPasswordError.js.map +1 -0
- package/dist/errors/index.d.ts +2 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +2 -0
- package/dist/errors/index.js.map +1 -1
- package/dist/patterns/Assert.d.ts +1 -1
- package/dist/patterns/Assert.d.ts.map +1 -1
- package/dist/value-objects/Password.d.ts +8 -0
- package/dist/value-objects/Password.d.ts.map +1 -0
- package/dist/value-objects/Password.js +28 -0
- package/dist/value-objects/Password.js.map +1 -0
- package/dist/value-objects/crypto/CryptoAdapter.d.ts +3 -2
- package/dist/value-objects/crypto/CryptoAdapter.d.ts.map +1 -1
- package/dist/value-objects/crypto/CryptoAdapter.js +9 -4
- package/dist/value-objects/crypto/CryptoAdapter.js.map +1 -1
- package/dist/value-objects/crypto/EncryptedKeyPair.d.ts +4 -4
- package/dist/value-objects/crypto/EncryptedKeyPair.d.ts.map +1 -1
- package/dist/value-objects/crypto/EncryptedKeyPair.js.map +1 -1
- package/dist/value-objects/crypto/EncryptedPayload.d.ts.map +1 -1
- package/dist/value-objects/crypto/EncryptedPayload.js +5 -0
- package/dist/value-objects/crypto/EncryptedPayload.js.map +1 -1
- package/dist/value-objects/crypto/EncryptedPrivateKey.d.ts +3 -2
- package/dist/value-objects/crypto/EncryptedPrivateKey.d.ts.map +1 -1
- package/dist/value-objects/crypto/EncryptedPrivateKey.js +6 -4
- package/dist/value-objects/crypto/EncryptedPrivateKey.js.map +1 -1
- package/dist/value-objects/crypto/KeyPair.d.ts +2 -2
- package/dist/value-objects/crypto/KeyPair.d.ts.map +1 -1
- package/dist/value-objects/crypto/KeyPair.js +1 -1
- package/dist/value-objects/crypto/KeyPair.js.map +1 -1
- package/dist/value-objects/crypto/PrivateKey.d.ts +6 -3
- package/dist/value-objects/crypto/PrivateKey.d.ts.map +1 -1
- package/dist/value-objects/crypto/PrivateKey.js +43 -31
- package/dist/value-objects/crypto/PrivateKey.js.map +1 -1
- package/dist/value-objects/crypto/PublicKey.d.ts +3 -0
- package/dist/value-objects/crypto/PublicKey.d.ts.map +1 -1
- package/dist/value-objects/crypto/PublicKey.js +9 -2
- package/dist/value-objects/crypto/PublicKey.js.map +1 -1
- package/dist/value-objects/crypto/StrictBase64.d.ts +15 -0
- package/dist/value-objects/crypto/StrictBase64.d.ts.map +1 -0
- package/dist/value-objects/crypto/StrictBase64.js +36 -0
- package/dist/value-objects/crypto/StrictBase64.js.map +1 -0
- package/dist/value-objects/crypto/SymmetricKey.d.ts +14 -5
- package/dist/value-objects/crypto/SymmetricKey.d.ts.map +1 -1
- package/dist/value-objects/crypto/SymmetricKey.js +53 -18
- package/dist/value-objects/crypto/SymmetricKey.js.map +1 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyLegacy.d.ts +2 -2
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyLegacy.d.ts.map +1 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyLegacy.js.map +1 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.d.ts +4 -3
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.d.ts.map +1 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.js +6 -3
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.js.map +1 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV3.d.ts +24 -0
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV3.d.ts.map +1 -0
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV3.js +105 -0
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV3.js.map +1 -0
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyVersion.d.ts +2 -2
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyVersion.d.ts.map +1 -1
- package/dist/value-objects/index.d.ts +1 -0
- package/dist/value-objects/index.d.ts.map +1 -1
- package/dist/value-objects/index.js +1 -0
- package/dist/value-objects/index.js.map +1 -1
- package/dist/value-objects/time/DayOfWeek.d.ts.map +1 -1
- package/dist/value-objects/time/DayOfWeek.js +2 -3
- package/dist/value-objects/time/DayOfWeek.js.map +1 -1
- package/package.json +1 -1
|
@@ -11,31 +11,29 @@ const CryptoAdapter_1 = require("./CryptoAdapter");
|
|
|
11
11
|
const Key_1 = require("./Key");
|
|
12
12
|
const PublicKey_1 = require("./PublicKey");
|
|
13
13
|
const Signature_1 = require("./Signature");
|
|
14
|
+
const StrictBase64_1 = require("./StrictBase64");
|
|
14
15
|
class PrivateKey extends Key_1.Key {
|
|
15
16
|
static LENGTH = 119;
|
|
16
|
-
static
|
|
17
|
+
static LEGACY_ENCRYPTED_PAYLOAD_PARTS = 4;
|
|
18
|
+
static OWASP_ENCRYPTED_PAYLOAD_PARTS = 6;
|
|
17
19
|
static EPHEMERAL_PUBLIC_KEY_LENGTH = 32;
|
|
18
20
|
static IV_LENGTH = 12;
|
|
19
21
|
static TAG_LENGTH = 16;
|
|
20
22
|
static MAX_CIPHERTEXT_LENGTH = 1024 * 1024;
|
|
21
|
-
static
|
|
23
|
+
static PAYLOAD_ALGORITHM = 'x25519-hkdf-sha256-aes-256-gcm';
|
|
24
|
+
static PAYLOAD_VERSION = 'v2';
|
|
22
25
|
static PATTERN = /^-----BEGIN PRIVATE KEY-----\n[A-Za-z0-9+/=]+\n-----END PRIVATE KEY-----\n$/;
|
|
23
|
-
static
|
|
24
|
-
|
|
25
|
-
return (value.length / 4) * 3 - padding;
|
|
26
|
-
}
|
|
27
|
-
static ensureIsBase64(value, encryptedPayload, options = { allowEmpty: false }) {
|
|
28
|
-
(0, patterns_1.assert)((options.allowEmpty || value.length > 0) &&
|
|
29
|
-
value.length % 4 === 0 &&
|
|
30
|
-
PrivateKey.BASE64_PATTERN.test(value), new InvalidFormatError_1.InvalidFormatError(encryptedPayload.valueOf()));
|
|
26
|
+
static ensureIsBase64(value, encryptedPayload, options) {
|
|
27
|
+
StrictBase64_1.StrictBase64.ensure(value, new InvalidFormatError_1.InvalidFormatError(encryptedPayload.valueOf()), options);
|
|
31
28
|
}
|
|
32
29
|
static ensureBase64DecodedLength(value, encryptedPayload, length) {
|
|
33
|
-
|
|
34
|
-
(0, patterns_1.assert)(PrivateKey.getBase64DecodedLength(value) === length, new InvalidFormatError_1.InvalidFormatError(encryptedPayload.valueOf()));
|
|
30
|
+
StrictBase64_1.StrictBase64.ensureDecodedLength(value, new InvalidFormatError_1.InvalidFormatError(encryptedPayload.valueOf()), length);
|
|
35
31
|
}
|
|
36
32
|
static decodeBase64(value, encryptedPayload) {
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
return StrictBase64_1.StrictBase64.decode(value, new InvalidFormatError_1.InvalidFormatError(encryptedPayload.valueOf()));
|
|
34
|
+
}
|
|
35
|
+
static getPayloadAad() {
|
|
36
|
+
return buffer_1.Buffer.from([PrivateKey.PAYLOAD_VERSION, PrivateKey.PAYLOAD_ALGORITHM].join('.'));
|
|
39
37
|
}
|
|
40
38
|
static fromPEM(pem) {
|
|
41
39
|
return new PrivateKey(pem.valueOf());
|
|
@@ -54,6 +52,26 @@ class PrivateKey extends Key_1.Key {
|
|
|
54
52
|
(0, patterns_1.assert)(value.length === PrivateKey.LENGTH, new InvalidLengthError_1.InvalidLengthError(value, PrivateKey.LENGTH));
|
|
55
53
|
(0, patterns_1.assert)(PrivateKey.PATTERN.test(value), new InvalidFormatError_1.InvalidFormatError(value));
|
|
56
54
|
}
|
|
55
|
+
decryptPayload(encryptedPayload, ephPubB64, ivB64, cipherTextB64, tagB64, options) {
|
|
56
|
+
PrivateKey.ensureIsBase64(cipherTextB64, encryptedPayload, {
|
|
57
|
+
allowEmpty: true,
|
|
58
|
+
});
|
|
59
|
+
const cipherTextLength = StrictBase64_1.StrictBase64.getDecodedLength(cipherTextB64);
|
|
60
|
+
(0, patterns_1.assert)(cipherTextLength <= PrivateKey.MAX_CIPHERTEXT_LENGTH, new InvalidLengthError_1.InvalidLengthError(cipherTextLength, PrivateKey.MAX_CIPHERTEXT_LENGTH));
|
|
61
|
+
PrivateKey.ensureBase64DecodedLength(ephPubB64, encryptedPayload, PrivateKey.EPHEMERAL_PUBLIC_KEY_LENGTH);
|
|
62
|
+
PrivateKey.ensureBase64DecodedLength(ivB64, encryptedPayload, PrivateKey.IV_LENGTH);
|
|
63
|
+
PrivateKey.ensureBase64DecodedLength(tagB64, encryptedPayload, PrivateKey.TAG_LENGTH);
|
|
64
|
+
const ephemeralPub = PrivateKey.decodeBase64(ephPubB64, encryptedPayload);
|
|
65
|
+
const iv = PrivateKey.decodeBase64(ivB64, encryptedPayload);
|
|
66
|
+
const cipherText = StrictBase64_1.StrictBase64.decode(cipherTextB64, new InvalidFormatError_1.InvalidFormatError(encryptedPayload.valueOf()), { allowEmpty: true });
|
|
67
|
+
const tag = PrivateKey.decodeBase64(tagB64, encryptedPayload);
|
|
68
|
+
const x25519Priv = CryptoAdapter_1.CryptoAdapter.privateKeyToX25519(this.valueOf());
|
|
69
|
+
const sharedSecret = CryptoAdapter_1.CryptoAdapter.x25519SharedSecret(x25519Priv, ephemeralPub);
|
|
70
|
+
const aesKey = options.useHkdf
|
|
71
|
+
? CryptoAdapter_1.CryptoAdapter.deriveEncryptionKeyWithHkdf(sharedSecret, ephemeralPub, CryptoAdapter_1.CryptoAdapter.x25519PublicKey(x25519Priv))
|
|
72
|
+
: CryptoAdapter_1.CryptoAdapter.deriveEncryptionKey(sharedSecret, ephemeralPub);
|
|
73
|
+
return CryptoAdapter_1.CryptoAdapter.decryptAes256Gcm(aesKey, iv, cipherText, tag, options.aad);
|
|
74
|
+
}
|
|
57
75
|
getPublicKey() {
|
|
58
76
|
return PublicKey_1.PublicKey.fromPEM(CryptoAdapter_1.CryptoAdapter.getPublicKey(this.valueOf()));
|
|
59
77
|
}
|
|
@@ -66,24 +84,18 @@ class PrivateKey extends Key_1.Key {
|
|
|
66
84
|
}
|
|
67
85
|
decrypt(encryptedPayload) {
|
|
68
86
|
const parts = encryptedPayload.valueOf().split('.');
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
87
|
+
if (parts.length === PrivateKey.LEGACY_ENCRYPTED_PAYLOAD_PARTS) {
|
|
88
|
+
const [ephPubB64, ivB64, cipherTextB64, tagB64] = parts;
|
|
89
|
+
return this.decryptPayload(encryptedPayload, ephPubB64, ivB64, cipherTextB64, tagB64, { useHkdf: false });
|
|
90
|
+
}
|
|
91
|
+
(0, patterns_1.assert)(parts.length === PrivateKey.OWASP_ENCRYPTED_PAYLOAD_PARTS, new InvalidFormatError_1.InvalidFormatError(encryptedPayload.valueOf()));
|
|
92
|
+
const [version, algorithm, ephPubB64, ivB64, cipherTextB64, tagB64] = parts;
|
|
93
|
+
(0, patterns_1.assert)(version === PrivateKey.PAYLOAD_VERSION &&
|
|
94
|
+
algorithm === PrivateKey.PAYLOAD_ALGORITHM, new InvalidFormatError_1.InvalidFormatError(encryptedPayload.valueOf()));
|
|
95
|
+
return this.decryptPayload(encryptedPayload, ephPubB64, ivB64, cipherTextB64, tagB64, {
|
|
96
|
+
aad: PrivateKey.getPayloadAad(),
|
|
97
|
+
useHkdf: true,
|
|
73
98
|
});
|
|
74
|
-
const cipherTextLength = PrivateKey.getBase64DecodedLength(cipherTextB64);
|
|
75
|
-
(0, patterns_1.assert)(cipherTextLength <= PrivateKey.MAX_CIPHERTEXT_LENGTH, new InvalidLengthError_1.InvalidLengthError(cipherTextLength, PrivateKey.MAX_CIPHERTEXT_LENGTH));
|
|
76
|
-
PrivateKey.ensureBase64DecodedLength(ephPubB64, encryptedPayload, PrivateKey.EPHEMERAL_PUBLIC_KEY_LENGTH);
|
|
77
|
-
PrivateKey.ensureBase64DecodedLength(ivB64, encryptedPayload, PrivateKey.IV_LENGTH);
|
|
78
|
-
PrivateKey.ensureBase64DecodedLength(tagB64, encryptedPayload, PrivateKey.TAG_LENGTH);
|
|
79
|
-
const ephemeralPub = PrivateKey.decodeBase64(ephPubB64, encryptedPayload);
|
|
80
|
-
const iv = PrivateKey.decodeBase64(ivB64, encryptedPayload);
|
|
81
|
-
const cipherText = buffer_1.Buffer.from(cipherTextB64, 'base64');
|
|
82
|
-
const tag = PrivateKey.decodeBase64(tagB64, encryptedPayload);
|
|
83
|
-
const x25519Priv = CryptoAdapter_1.CryptoAdapter.privateKeyToX25519(this.valueOf());
|
|
84
|
-
const sharedSecret = CryptoAdapter_1.CryptoAdapter.x25519SharedSecret(x25519Priv, ephemeralPub);
|
|
85
|
-
const aesKey = CryptoAdapter_1.CryptoAdapter.deriveEncryptionKey(sharedSecret, ephemeralPub);
|
|
86
|
-
return CryptoAdapter_1.CryptoAdapter.decryptAes256Gcm(aesKey, iv, cipherText, tag);
|
|
87
99
|
}
|
|
88
100
|
}
|
|
89
101
|
exports.PrivateKey = PrivateKey;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrivateKey.js","sourceRoot":"","sources":["../../../src/value-objects/crypto/PrivateKey.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAEhC,wEAAqE;AACrE,wEAAqE;AACrE,6CAAwC;AACxC,oCAAiC;AACjC,8CAA2C;AAE3C,mDAAgD;AAGhD,+BAA4B;AAC5B,2CAAwC;AACxC,2CAAwC;
|
|
1
|
+
{"version":3,"file":"PrivateKey.js","sourceRoot":"","sources":["../../../src/value-objects/crypto/PrivateKey.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,10 @@ import { Signature } from './Signature';
|
|
|
6
6
|
export declare class PublicKey extends Key {
|
|
7
7
|
private static readonly LENGTH;
|
|
8
8
|
private static readonly MAX_PAYLOAD_LENGTH;
|
|
9
|
+
private static readonly PAYLOAD_ALGORITHM;
|
|
10
|
+
private static readonly PAYLOAD_VERSION;
|
|
9
11
|
private static readonly PATTERN;
|
|
12
|
+
private static getPayloadAad;
|
|
10
13
|
static fromPEM(pem: string | StringValueObject): PublicKey;
|
|
11
14
|
constructor(value: string | StringValueObject);
|
|
12
15
|
private ensureIsValidPublicKey;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PublicKey.d.ts","sourceRoot":"","sources":["../../../src/value-objects/crypto/PublicKey.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,qBAAa,SAAU,SAAQ,GAAG;IAChC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAO;IACrC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAe;IACzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAC+C;
|
|
1
|
+
{"version":3,"file":"PublicKey.d.ts","sourceRoot":"","sources":["../../../src/value-objects/crypto/PublicKey.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,qBAAa,SAAU,SAAQ,GAAG;IAChC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAO;IACrC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAe;IACzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAoC;IAE7E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAQ;IAE/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAC+C;IAE9E,OAAO,CAAC,MAAM,CAAC,aAAa;WAMd,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;gBAIrD,KAAK,EAAE,MAAM,GAAG,iBAAiB;IAU7C,OAAO,CAAC,sBAAsB;IAQvB,gBAAgB,CACrB,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,SAAS,GACnB,OAAO;IAeH,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,0BAA0B;CAgDnE"}
|
|
@@ -13,7 +13,12 @@ const Key_1 = require("./Key");
|
|
|
13
13
|
class PublicKey extends Key_1.Key {
|
|
14
14
|
static LENGTH = 113;
|
|
15
15
|
static MAX_PAYLOAD_LENGTH = 1024 * 1024;
|
|
16
|
+
static PAYLOAD_ALGORITHM = 'x25519-hkdf-sha256-aes-256-gcm';
|
|
17
|
+
static PAYLOAD_VERSION = 'v2';
|
|
16
18
|
static PATTERN = /^-----BEGIN PUBLIC KEY-----\n[A-Za-z0-9+/=]+\n-----END PUBLIC KEY-----\n$/;
|
|
19
|
+
static getPayloadAad() {
|
|
20
|
+
return buffer_1.Buffer.from([PublicKey.PAYLOAD_VERSION, PublicKey.PAYLOAD_ALGORITHM].join('.'));
|
|
21
|
+
}
|
|
17
22
|
static fromPEM(pem) {
|
|
18
23
|
return new PublicKey(pem.valueOf());
|
|
19
24
|
}
|
|
@@ -45,10 +50,12 @@ class PublicKey extends Key_1.Key {
|
|
|
45
50
|
const ephemeralPriv = CryptoAdapter_1.CryptoAdapter.x25519RandomPrivateKey();
|
|
46
51
|
const ephemeralPub = CryptoAdapter_1.CryptoAdapter.x25519PublicKey(ephemeralPriv);
|
|
47
52
|
const sharedSecret = CryptoAdapter_1.CryptoAdapter.x25519SharedSecret(ephemeralPriv, x25519Pub);
|
|
48
|
-
const aesKey = CryptoAdapter_1.CryptoAdapter.
|
|
53
|
+
const aesKey = CryptoAdapter_1.CryptoAdapter.deriveEncryptionKeyWithHkdf(sharedSecret, ephemeralPub, x25519Pub);
|
|
49
54
|
const iv = CryptoAdapter_1.CryptoAdapter.randomBytes(12);
|
|
50
|
-
const { cipherText, tag } = CryptoAdapter_1.CryptoAdapter.encryptAes256Gcm(aesKey, iv, messageBuffer);
|
|
55
|
+
const { cipherText, tag } = CryptoAdapter_1.CryptoAdapter.encryptAes256Gcm(aesKey, iv, messageBuffer, PublicKey.getPayloadAad());
|
|
51
56
|
const result = [
|
|
57
|
+
PublicKey.PAYLOAD_VERSION,
|
|
58
|
+
PublicKey.PAYLOAD_ALGORITHM,
|
|
52
59
|
buffer_1.Buffer.from(ephemeralPub).toString('base64'),
|
|
53
60
|
iv.toString('base64'),
|
|
54
61
|
buffer_1.Buffer.from(cipherText).toString('base64'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PublicKey.js","sourceRoot":"","sources":["../../../src/value-objects/crypto/PublicKey.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAEhC,wEAAqE;AACrE,wEAAqE;AACrE,6CAAwC;AACxC,oCAAiC;AACjC,8CAA2C;AAE3C,6EAA0E;AAC1E,mDAAgD;AAEhD,+BAA4B;AAG5B,MAAa,SAAU,SAAQ,SAAG;IACxB,MAAM,CAAU,MAAM,GAAG,GAAG,CAAC;IAC7B,MAAM,CAAU,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAAC;IACjD,MAAM,CAAU,OAAO,GAC7B,2EAA2E,CAAC;
|
|
1
|
+
{"version":3,"file":"PublicKey.js","sourceRoot":"","sources":["../../../src/value-objects/crypto/PublicKey.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Buffer } from 'buffer';
|
|
2
|
+
type StrictBase64Options = {
|
|
3
|
+
allowEmpty?: boolean;
|
|
4
|
+
};
|
|
5
|
+
export declare class StrictBase64 {
|
|
6
|
+
private static readonly PATTERN;
|
|
7
|
+
static getDecodedLength(value: string): number;
|
|
8
|
+
static ensure(value: string, error: Error, options?: StrictBase64Options): void;
|
|
9
|
+
static ensureDecodedLength(value: string, error: Error, length: number, options?: StrictBase64Options): void;
|
|
10
|
+
static decode(value: string, error: Error, options?: StrictBase64Options): Buffer;
|
|
11
|
+
static decodeFixedLength(value: string, error: Error, length: number): Buffer;
|
|
12
|
+
static decodeCanonicalFixedLength(value: string, error: Error, length: number): Buffer;
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=StrictBase64.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StrictBase64.d.ts","sourceRoot":"","sources":["../../../src/value-objects/crypto/StrictBase64.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,KAAK,mBAAmB,GAAG;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CACsC;WAEvD,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;WAMvC,MAAM,CAClB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,mBAAwB,GAChC,IAAI;WASO,mBAAmB,CAC/B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,mBAAwB,GAChC,IAAI;WAKO,MAAM,CAClB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,mBAAwB,GAChC,MAAM;WAMK,iBAAiB,CAC7B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,GACb,MAAM;WAMK,0BAA0B,CACtC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,GACb,MAAM;CAOV"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StrictBase64 = void 0;
|
|
4
|
+
const buffer_1 = require("buffer");
|
|
5
|
+
const patterns_1 = require("../../patterns");
|
|
6
|
+
class StrictBase64 {
|
|
7
|
+
static PATTERN = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;
|
|
8
|
+
static getDecodedLength(value) {
|
|
9
|
+
const padding = value.endsWith('==') ? 2 : value.endsWith('=') ? 1 : 0;
|
|
10
|
+
return (value.length / 4) * 3 - padding;
|
|
11
|
+
}
|
|
12
|
+
static ensure(value, error, options = {}) {
|
|
13
|
+
(0, patterns_1.assert)((options.allowEmpty === true || value.length > 0) &&
|
|
14
|
+
value.length % 4 === 0 &&
|
|
15
|
+
StrictBase64.PATTERN.test(value), error);
|
|
16
|
+
}
|
|
17
|
+
static ensureDecodedLength(value, error, length, options = {}) {
|
|
18
|
+
StrictBase64.ensure(value, error, options);
|
|
19
|
+
(0, patterns_1.assert)(StrictBase64.getDecodedLength(value) === length, error);
|
|
20
|
+
}
|
|
21
|
+
static decode(value, error, options = {}) {
|
|
22
|
+
StrictBase64.ensure(value, error, options);
|
|
23
|
+
return buffer_1.Buffer.from(value, 'base64');
|
|
24
|
+
}
|
|
25
|
+
static decodeFixedLength(value, error, length) {
|
|
26
|
+
StrictBase64.ensureDecodedLength(value, error, length);
|
|
27
|
+
return buffer_1.Buffer.from(value, 'base64');
|
|
28
|
+
}
|
|
29
|
+
static decodeCanonicalFixedLength(value, error, length) {
|
|
30
|
+
const decoded = StrictBase64.decodeFixedLength(value, error, length);
|
|
31
|
+
(0, patterns_1.assert)(decoded.toString('base64') === value, error);
|
|
32
|
+
return decoded;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.StrictBase64 = StrictBase64;
|
|
36
|
+
//# sourceMappingURL=StrictBase64.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StrictBase64.js","sourceRoot":"","sources":["../../../src/value-objects/crypto/StrictBase64.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAEhC,6CAAwC;AAMxC,MAAa,YAAY;IACf,MAAM,CAAU,OAAO,GAC7B,kEAAkE,CAAC;IAE9D,MAAM,CAAC,gBAAgB,CAAC,KAAa;QAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvE,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;IAC1C,CAAC;IAEM,MAAM,CAAC,MAAM,CAClB,KAAa,EACb,KAAY,EACZ,UAA+B,EAAE;QAEjC,IAAA,iBAAM,EACJ,CAAC,OAAO,CAAC,UAAU,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/C,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;YACtB,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAClC,KAAK,CACN,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,mBAAmB,CAC/B,KAAa,EACb,KAAY,EACZ,MAAc,EACd,UAA+B,EAAE;QAEjC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC3C,IAAA,iBAAM,EAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC;IACjE,CAAC;IAEM,MAAM,CAAC,MAAM,CAClB,KAAa,EACb,KAAY,EACZ,UAA+B,EAAE;QAEjC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAE3C,OAAO,eAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAEM,MAAM,CAAC,iBAAiB,CAC7B,KAAa,EACb,KAAY,EACZ,MAAc;QAEd,YAAY,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAEvD,OAAO,eAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAEM,MAAM,CAAC,0BAA0B,CACtC,KAAa,EACb,KAAY,EACZ,MAAc;QAEd,MAAM,OAAO,GAAG,YAAY,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAErE,IAAA,iBAAM,EAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,KAAK,EAAE,KAAK,CAAC,CAAC;QAEpD,OAAO,OAAO,CAAC;IACjB,CAAC;;AA/DH,oCAgEC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Buffer } from 'buffer';
|
|
2
|
+
import { Password } from '../Password';
|
|
2
3
|
import { StringValueObject } from '../StringValueObject';
|
|
3
4
|
import { ValueObject } from '../ValueObject';
|
|
4
5
|
import { CryptoPayload } from './CryptoPayload';
|
|
@@ -10,6 +11,10 @@ export type SymmetricKeyDerivationOptions = {
|
|
|
10
11
|
r?: number;
|
|
11
12
|
salt: string | StringValueObject | Buffer;
|
|
12
13
|
};
|
|
14
|
+
export type CryptoPassword = string | StringValueObject | Password;
|
|
15
|
+
export type SymmetricKeyCryptOptions = {
|
|
16
|
+
aad?: string | StringValueObject | Buffer;
|
|
17
|
+
};
|
|
13
18
|
export declare class SymmetricKey extends ValueObject<string> {
|
|
14
19
|
private static readonly ALGORITHM;
|
|
15
20
|
private static readonly IV_LENGTH;
|
|
@@ -19,22 +24,26 @@ export declare class SymmetricKey extends ValueObject<string> {
|
|
|
19
24
|
private static readonly SCRYPT_N;
|
|
20
25
|
private static readonly SCRYPT_P;
|
|
21
26
|
private static readonly SCRYPT_R;
|
|
27
|
+
private static readonly OWASP_SCRYPT_N;
|
|
28
|
+
private static readonly OWASP_SCRYPT_P;
|
|
29
|
+
private static readonly OWASP_SCRYPT_R;
|
|
22
30
|
private static readonly TAG_LENGTH;
|
|
23
31
|
private static readonly VERSION;
|
|
24
|
-
private static readonly BASE64_PATTERN;
|
|
25
|
-
private static getBase64DecodedLength;
|
|
26
32
|
private static ensureIsBase64;
|
|
27
33
|
private static ensureBase64DecodedLength;
|
|
28
34
|
private static getSaltBytes;
|
|
29
35
|
private static getPayloadBytes;
|
|
36
|
+
private static getAadBytes;
|
|
37
|
+
private static getDefaultAad;
|
|
30
38
|
static fromBase64(key: string | StringValueObject): SymmetricKey;
|
|
31
39
|
static fromBuffer(key: Buffer): SymmetricKey;
|
|
32
40
|
static generate(): SymmetricKey;
|
|
33
|
-
static fromPassword(password:
|
|
41
|
+
static fromPassword(password: CryptoPassword, options: SymmetricKeyDerivationOptions): Promise<SymmetricKey>;
|
|
42
|
+
static fromPasswordUsingOwasp(password: CryptoPassword, options: Pick<SymmetricKeyDerivationOptions, 'salt'>): Promise<SymmetricKey>;
|
|
34
43
|
constructor(value: string | StringValueObject);
|
|
35
44
|
private ensureIsValidKey;
|
|
36
45
|
getBuffer(): Buffer;
|
|
37
|
-
encrypt(payload: CryptoPayload): SymmetricEncryptedPayload;
|
|
38
|
-
decrypt(encryptedPayload: EncryptedPayload): Buffer;
|
|
46
|
+
encrypt(payload: CryptoPayload, options?: SymmetricKeyCryptOptions): SymmetricEncryptedPayload;
|
|
47
|
+
decrypt(encryptedPayload: EncryptedPayload, options?: SymmetricKeyCryptOptions): Buffer;
|
|
39
48
|
}
|
|
40
49
|
//# sourceMappingURL=SymmetricKey.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SymmetricKey.d.ts","sourceRoot":"","sources":["../../../src/value-objects/crypto/SymmetricKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAOhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"SymmetricKey.d.ts","sourceRoot":"","sources":["../../../src/value-objects/crypto/SymmetricKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAOhC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,MAAM,MAAM,6BAA6B,GAAG;IAC1C,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,MAAM,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,iBAAiB,GAAG,QAAQ,CAAC;AAEnE,MAAM,MAAM,wBAAwB,GAAG;IACrC,GAAG,CAAC,EAAE,MAAM,GAAG,iBAAiB,GAAG,MAAM,CAAC;CAC3C,CAAC;AAEF,qBAAa,YAAa,SAAQ,WAAW,CAAC,MAAM,CAAC;IACnD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAM;IACvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAM;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAe;IACzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAK;IAC1C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAS;IACzC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAK;IACrC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAK;IACrC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAS;IAC/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAK;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAK;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAM;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAEvC,OAAO,CAAC,MAAM,CAAC,cAAc;IAY7B,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAYxC,OAAO,CAAC,MAAM,CAAC,YAAY;IAU3B,OAAO,CAAC,MAAM,CAAC,eAAe;IAM9B,OAAO,CAAC,MAAM,CAAC,WAAW;IAQ1B,OAAO,CAAC,MAAM,CAAC,aAAa;WAId,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,YAAY;WAIzD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY;WASrC,QAAQ,IAAI,YAAY;WAMlB,YAAY,CAC9B,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,YAAY,CAAC;WAkBJ,sBAAsB,CACxC,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,IAAI,CAAC,6BAA6B,EAAE,MAAM,CAAC,GACnD,OAAO,CAAC,YAAY,CAAC;gBASZ,KAAK,EAAE,MAAM,GAAG,iBAAiB;IAU7C,OAAO,CAAC,gBAAgB;IASjB,SAAS,IAAI,MAAM;IAInB,OAAO,CACZ,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,wBAA6B,GACrC,yBAAyB;IAoCrB,OAAO,CACZ,gBAAgB,EAAE,gBAAgB,EAClC,OAAO,GAAE,wBAA6B,GACrC,MAAM;CAsDV"}
|
|
@@ -10,6 +10,7 @@ const NullObject_1 = require("../NullObject");
|
|
|
10
10
|
const ValueObject_1 = require("../ValueObject");
|
|
11
11
|
const CryptoAdapter_1 = require("./CryptoAdapter");
|
|
12
12
|
const CryptoDerivation_1 = require("./encrypted-private-key/CryptoDerivation");
|
|
13
|
+
const StrictBase64_1 = require("./StrictBase64");
|
|
13
14
|
const SymmetricEncryptedPayload_1 = require("./SymmetricEncryptedPayload");
|
|
14
15
|
class SymmetricKey extends ValueObject_1.ValueObject {
|
|
15
16
|
static ALGORITHM = 'aes-256-gcm';
|
|
@@ -20,21 +21,16 @@ class SymmetricKey extends ValueObject_1.ValueObject {
|
|
|
20
21
|
static SCRYPT_N = 16384;
|
|
21
22
|
static SCRYPT_P = 1;
|
|
22
23
|
static SCRYPT_R = 8;
|
|
24
|
+
static OWASP_SCRYPT_N = 16384;
|
|
25
|
+
static OWASP_SCRYPT_P = 5;
|
|
26
|
+
static OWASP_SCRYPT_R = 8;
|
|
23
27
|
static TAG_LENGTH = 16;
|
|
24
28
|
static VERSION = 'v1';
|
|
25
|
-
static
|
|
26
|
-
|
|
27
|
-
const padding = value.endsWith('==') ? 2 : value.endsWith('=') ? 1 : 0;
|
|
28
|
-
return (value.length / 4) * 3 - padding;
|
|
29
|
-
}
|
|
30
|
-
static ensureIsBase64(value, encryptedPayload, options = { allowEmpty: false }) {
|
|
31
|
-
(0, patterns_1.assert)((options.allowEmpty || value.length > 0) &&
|
|
32
|
-
value.length % 4 === 0 &&
|
|
33
|
-
SymmetricKey.BASE64_PATTERN.test(value), new InvalidFormatError_1.InvalidFormatError(encryptedPayload.valueOf()));
|
|
29
|
+
static ensureIsBase64(value, encryptedPayload, options) {
|
|
30
|
+
StrictBase64_1.StrictBase64.ensure(value, new InvalidFormatError_1.InvalidFormatError(encryptedPayload.valueOf()), options);
|
|
34
31
|
}
|
|
35
32
|
static ensureBase64DecodedLength(value, encryptedPayload, length) {
|
|
36
|
-
|
|
37
|
-
(0, patterns_1.assert)(SymmetricKey.getBase64DecodedLength(value) === length, new InvalidFormatError_1.InvalidFormatError(encryptedPayload.valueOf()));
|
|
33
|
+
StrictBase64_1.StrictBase64.ensureDecodedLength(value, new InvalidFormatError_1.InvalidFormatError(encryptedPayload.valueOf()), length);
|
|
38
34
|
}
|
|
39
35
|
static getSaltBytes(salt) {
|
|
40
36
|
if (buffer_1.Buffer.isBuffer(salt)) {
|
|
@@ -47,6 +43,15 @@ class SymmetricKey extends ValueObject_1.ValueObject {
|
|
|
47
43
|
? payload.getBuffer()
|
|
48
44
|
: buffer_1.Buffer.from(payload.valueOf());
|
|
49
45
|
}
|
|
46
|
+
static getAadBytes(aad) {
|
|
47
|
+
if (buffer_1.Buffer.isBuffer(aad)) {
|
|
48
|
+
return aad;
|
|
49
|
+
}
|
|
50
|
+
return buffer_1.Buffer.from(aad.valueOf());
|
|
51
|
+
}
|
|
52
|
+
static getDefaultAad(version, algorithm) {
|
|
53
|
+
return buffer_1.Buffer.from([version, algorithm].join('.'));
|
|
54
|
+
}
|
|
50
55
|
static fromBase64(key) {
|
|
51
56
|
return new SymmetricKey(key.valueOf());
|
|
52
57
|
}
|
|
@@ -67,6 +72,14 @@ class SymmetricKey extends ValueObject_1.ValueObject {
|
|
|
67
72
|
});
|
|
68
73
|
return SymmetricKey.fromBuffer(buffer_1.Buffer.from(key));
|
|
69
74
|
}
|
|
75
|
+
static async fromPasswordUsingOwasp(password, options) {
|
|
76
|
+
return SymmetricKey.fromPassword(password, {
|
|
77
|
+
N: SymmetricKey.OWASP_SCRYPT_N,
|
|
78
|
+
p: SymmetricKey.OWASP_SCRYPT_P,
|
|
79
|
+
r: SymmetricKey.OWASP_SCRYPT_R,
|
|
80
|
+
salt: options.salt,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
70
83
|
constructor(value) {
|
|
71
84
|
super(value?.valueOf());
|
|
72
85
|
if (NullObject_1.NullObject.isNullObject(this)) {
|
|
@@ -75,17 +88,21 @@ class SymmetricKey extends ValueObject_1.ValueObject {
|
|
|
75
88
|
this.ensureIsValidKey(this.value);
|
|
76
89
|
}
|
|
77
90
|
ensureIsValidKey(value) {
|
|
78
|
-
|
|
79
|
-
|
|
91
|
+
StrictBase64_1.StrictBase64.ensure(value, new InvalidFormatError_1.InvalidFormatError(value));
|
|
92
|
+
const decodedLength = StrictBase64_1.StrictBase64.getDecodedLength(value);
|
|
93
|
+
(0, patterns_1.assert)(decodedLength === SymmetricKey.KEY_LENGTH, new InvalidLengthError_1.InvalidLengthError(decodedLength, SymmetricKey.KEY_LENGTH));
|
|
80
94
|
}
|
|
81
95
|
getBuffer() {
|
|
82
96
|
return buffer_1.Buffer.from(this.valueOf(), 'base64');
|
|
83
97
|
}
|
|
84
|
-
encrypt(payload) {
|
|
98
|
+
encrypt(payload, options = {}) {
|
|
85
99
|
const messageBuffer = SymmetricKey.getPayloadBytes(payload);
|
|
86
100
|
(0, patterns_1.assert)(messageBuffer.length <= SymmetricKey.MAX_PAYLOAD_LENGTH, new InvalidLengthError_1.InvalidLengthError(messageBuffer.length, SymmetricKey.MAX_PAYLOAD_LENGTH));
|
|
87
101
|
const iv = CryptoAdapter_1.CryptoAdapter.randomBytes(SymmetricKey.IV_LENGTH);
|
|
88
|
-
const
|
|
102
|
+
const aad = options.aad === undefined
|
|
103
|
+
? SymmetricKey.getDefaultAad(SymmetricKey.VERSION, SymmetricKey.ALGORITHM)
|
|
104
|
+
: SymmetricKey.getAadBytes(options.aad);
|
|
105
|
+
const { cipherText, tag } = CryptoAdapter_1.CryptoAdapter.encryptAes256Gcm(this.getBuffer(), iv, messageBuffer, aad);
|
|
89
106
|
const result = [
|
|
90
107
|
SymmetricKey.VERSION,
|
|
91
108
|
SymmetricKey.ALGORITHM,
|
|
@@ -95,7 +112,7 @@ class SymmetricKey extends ValueObject_1.ValueObject {
|
|
|
95
112
|
].join('.');
|
|
96
113
|
return new SymmetricEncryptedPayload_1.SymmetricEncryptedPayload(result);
|
|
97
114
|
}
|
|
98
|
-
decrypt(encryptedPayload) {
|
|
115
|
+
decrypt(encryptedPayload, options = {}) {
|
|
99
116
|
const parts = encryptedPayload.valueOf().split('.');
|
|
100
117
|
(0, patterns_1.assert)(parts.length === SymmetricKey.PAYLOAD_PARTS, new InvalidFormatError_1.InvalidFormatError(encryptedPayload.valueOf()));
|
|
101
118
|
const [version, algorithm, ivB64, cipherTextB64, tagB64] = parts;
|
|
@@ -104,10 +121,28 @@ class SymmetricKey extends ValueObject_1.ValueObject {
|
|
|
104
121
|
SymmetricKey.ensureIsBase64(cipherTextB64, encryptedPayload, {
|
|
105
122
|
allowEmpty: true,
|
|
106
123
|
});
|
|
107
|
-
const cipherTextLength =
|
|
124
|
+
const cipherTextLength = StrictBase64_1.StrictBase64.getDecodedLength(cipherTextB64);
|
|
108
125
|
(0, patterns_1.assert)(cipherTextLength <= SymmetricKey.MAX_PAYLOAD_LENGTH, new InvalidLengthError_1.InvalidLengthError(cipherTextLength, SymmetricKey.MAX_PAYLOAD_LENGTH));
|
|
109
126
|
SymmetricKey.ensureBase64DecodedLength(tagB64, encryptedPayload, SymmetricKey.TAG_LENGTH);
|
|
110
|
-
|
|
127
|
+
const key = this.getBuffer();
|
|
128
|
+
const formatError = new InvalidFormatError_1.InvalidFormatError(encryptedPayload.valueOf());
|
|
129
|
+
const iv = StrictBase64_1.StrictBase64.decode(ivB64, formatError);
|
|
130
|
+
const cipherText = StrictBase64_1.StrictBase64.decode(cipherTextB64, formatError, {
|
|
131
|
+
allowEmpty: true,
|
|
132
|
+
});
|
|
133
|
+
const tag = StrictBase64_1.StrictBase64.decode(tagB64, formatError);
|
|
134
|
+
const aad = options.aad === undefined
|
|
135
|
+
? SymmetricKey.getDefaultAad(version, algorithm)
|
|
136
|
+
: SymmetricKey.getAadBytes(options.aad);
|
|
137
|
+
try {
|
|
138
|
+
return CryptoAdapter_1.CryptoAdapter.decryptAes256Gcm(key, iv, cipherText, tag, aad);
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
if (options.aad !== undefined) {
|
|
142
|
+
throw error;
|
|
143
|
+
}
|
|
144
|
+
return CryptoAdapter_1.CryptoAdapter.decryptAes256Gcm(key, iv, cipherText, tag);
|
|
145
|
+
}
|
|
111
146
|
}
|
|
112
147
|
}
|
|
113
148
|
exports.SymmetricKey = SymmetricKey;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SymmetricKey.js","sourceRoot":"","sources":["../../../src/value-objects/crypto/SymmetricKey.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAEhC,wEAAqE;AACrE,wEAAqE;AACrE,6CAAwC;AACxC,oCAAiC;AACjC,8CAA2C;
|
|
1
|
+
{"version":3,"file":"SymmetricKey.js","sourceRoot":"","sources":["../../../src/value-objects/crypto/SymmetricKey.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAEhC,wEAAqE;AACrE,wEAAqE;AACrE,6CAAwC;AACxC,oCAAiC;AACjC,8CAA2C;AAG3C,gDAA6C;AAC7C,mDAAgD;AAEhD,+EAA4E;AAE5E,iDAA8C;AAC9C,2EAAwE;AAexE,MAAa,YAAa,SAAQ,yBAAmB;IAC3C,MAAM,CAAU,SAAS,GAAG,aAAa,CAAC;IAC1C,MAAM,CAAU,SAAS,GAAG,EAAE,CAAC;IAC/B,MAAM,CAAU,UAAU,GAAG,EAAE,CAAC;IAChC,MAAM,CAAU,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAAC;IACjD,MAAM,CAAU,aAAa,GAAG,CAAC,CAAC;IAClC,MAAM,CAAU,QAAQ,GAAG,KAAK,CAAC;IACjC,MAAM,CAAU,QAAQ,GAAG,CAAC,CAAC;IAC7B,MAAM,CAAU,QAAQ,GAAG,CAAC,CAAC;IAC7B,MAAM,CAAU,cAAc,GAAG,KAAK,CAAC;IACvC,MAAM,CAAU,cAAc,GAAG,CAAC,CAAC;IACnC,MAAM,CAAU,cAAc,GAAG,CAAC,CAAC;IACnC,MAAM,CAAU,UAAU,GAAG,EAAE,CAAC;IAChC,MAAM,CAAU,OAAO,GAAG,IAAI,CAAC;IAE/B,MAAM,CAAC,cAAc,CAC3B,KAAa,EACb,gBAAkC,EAClC,OAAgC;QAEhC,2BAAY,CAAC,MAAM,CACjB,KAAK,EACL,IAAI,uCAAkB,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAClD,OAAO,CACR,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,yBAAyB,CACtC,KAAa,EACb,gBAAkC,EAClC,MAAc;QAEd,2BAAY,CAAC,mBAAmB,CAC9B,KAAK,EACL,IAAI,uCAAkB,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAClD,MAAM,CACP,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,YAAY,CACzB,IAAyC;QAEzC,IAAI,eAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,eAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACrC,CAAC;IAEO,MAAM,CAAC,eAAe,CAAC,OAAsB;QACnD,OAAO,OAAO,YAAY,aAAK;YAC7B,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE;YACrB,CAAC,CAAC,eAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACrC,CAAC;IAEO,MAAM,CAAC,WAAW,CAAC,GAAwC;QACjE,IAAI,eAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,GAAG,CAAC;QACb,CAAC;QAED,OAAO,eAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACpC,CAAC;IAEO,MAAM,CAAC,aAAa,CAAC,OAAe,EAAE,SAAiB;QAC7D,OAAO,eAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,CAAC;IAEM,MAAM,CAAC,UAAU,CAAC,GAA+B;QACtD,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,CAAC;IAEM,MAAM,CAAC,UAAU,CAAC,GAAW;QAClC,IAAA,iBAAM,EACJ,GAAG,CAAC,MAAM,KAAK,YAAY,CAAC,UAAU,EACtC,IAAI,uCAAkB,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,CAC5D,CAAC;QAEF,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClD,CAAC;IAEM,MAAM,CAAC,QAAQ;QACpB,OAAO,YAAY,CAAC,UAAU,CAC5B,6BAAa,CAAC,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC,CACnD,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,YAAY,CAC9B,QAAwB,EACxB,OAAsC;QAEtC,MAAM,IAAI,GAAG,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrD,IAAA,iBAAM,EAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,uCAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QAEhE,MAAM,GAAG,GAAG,MAAM,mCAAgB,CAAC,WAAW,CAC5C,QAAQ,CAAC,OAAO,EAAE,EAClB,IAAI,EACJ,YAAY,CAAC,UAAU,EACvB;YACE,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,YAAY,CAAC,QAAQ;YACrC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,YAAY,CAAC,QAAQ;YACrC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,YAAY,CAAC,QAAQ;SACtC,CACF,CAAC;QAEF,OAAO,YAAY,CAAC,UAAU,CAAC,eAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,sBAAsB,CACxC,QAAwB,EACxB,OAAoD;QAEpD,OAAO,YAAY,CAAC,YAAY,CAAC,QAAQ,EAAE;YACzC,CAAC,EAAE,YAAY,CAAC,cAAc;YAC9B,CAAC,EAAE,YAAY,CAAC,cAAc;YAC9B,CAAC,EAAE,YAAY,CAAC,cAAc;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;IACL,CAAC;IAED,YAAY,KAAiC;QAC3C,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAExB,IAAI,uBAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAEO,gBAAgB,CAAC,KAAa;QACpC,2BAAY,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,uCAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,MAAM,aAAa,GAAG,2BAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC3D,IAAA,iBAAM,EACJ,aAAa,KAAK,YAAY,CAAC,UAAU,EACzC,IAAI,uCAAkB,CAAC,aAAa,EAAE,YAAY,CAAC,UAAU,CAAC,CAC/D,CAAC;IACJ,CAAC;IAEM,SAAS;QACd,OAAO,eAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAEM,OAAO,CACZ,OAAsB,EACtB,UAAoC,EAAE;QAEtC,MAAM,aAAa,GAAG,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAA,iBAAM,EACJ,aAAa,CAAC,MAAM,IAAI,YAAY,CAAC,kBAAkB,EACvD,IAAI,uCAAkB,CACpB,aAAa,CAAC,MAAM,EACpB,YAAY,CAAC,kBAAkB,CAChC,CACF,CAAC;QAEF,MAAM,EAAE,GAAG,6BAAa,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC7D,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,KAAK,SAAS;YACvB,CAAC,CAAC,YAAY,CAAC,aAAa,CACxB,YAAY,CAAC,OAAO,EACpB,YAAY,CAAC,SAAS,CACvB;YACH,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,6BAAa,CAAC,gBAAgB,CACxD,IAAI,CAAC,SAAS,EAAE,EAChB,EAAE,EACF,aAAa,EACb,GAAG,CACJ,CAAC;QAEF,MAAM,MAAM,GAAG;YACb,YAAY,CAAC,OAAO;YACpB,YAAY,CAAC,SAAS;YACtB,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACrB,eAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC1C,eAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;SACpC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEZ,OAAO,IAAI,qDAAyB,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAEM,OAAO,CACZ,gBAAkC,EAClC,UAAoC,EAAE;QAEtC,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpD,IAAA,iBAAM,EACJ,KAAK,CAAC,MAAM,KAAK,YAAY,CAAC,aAAa,EAC3C,IAAI,uCAAkB,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CACnD,CAAC;QAEF,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;QACjE,IAAA,iBAAM,EACJ,OAAO,KAAK,YAAY,CAAC,OAAO,IAAI,SAAS,KAAK,YAAY,CAAC,SAAS,EACxE,IAAI,uCAAkB,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CACnD,CAAC;QAEF,YAAY,CAAC,yBAAyB,CACpC,KAAK,EACL,gBAAgB,EAChB,YAAY,CAAC,SAAS,CACvB,CAAC;QACF,YAAY,CAAC,cAAc,CAAC,aAAa,EAAE,gBAAgB,EAAE;YAC3D,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QACH,MAAM,gBAAgB,GAAG,2BAAY,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACtE,IAAA,iBAAM,EACJ,gBAAgB,IAAI,YAAY,CAAC,kBAAkB,EACnD,IAAI,uCAAkB,CAAC,gBAAgB,EAAE,YAAY,CAAC,kBAAkB,CAAC,CAC1E,CAAC;QACF,YAAY,CAAC,yBAAyB,CACpC,MAAM,EACN,gBAAgB,EAChB,YAAY,CAAC,UAAU,CACxB,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,IAAI,uCAAkB,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,MAAM,EAAE,GAAG,2BAAY,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,2BAAY,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,EAAE;YACjE,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,2BAAY,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACrD,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,KAAK,SAAS;YACvB,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC;YAChD,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAE5C,IAAI,CAAC;YACH,OAAO,6BAAa,CAAC,gBAAgB,CAAC,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,KAAK,CAAC;YACd,CAAC;YAED,OAAO,6BAAa,CAAC,gBAAgB,CAAC,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;;AA7OH,oCA8OC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { StringValueObject } from '../../StringValueObject';
|
|
2
1
|
import { PrivateKey } from '../PrivateKey';
|
|
2
|
+
import { CryptoPassword } from '../SymmetricKey';
|
|
3
3
|
import { EncryptedPrivateKeyVersion } from './EncryptedPrivateKeyVersion';
|
|
4
4
|
export declare class EncryptedPrivateKeyLegacy extends EncryptedPrivateKeyVersion {
|
|
5
5
|
private static readonly LEGACY_ITERATIONS;
|
|
@@ -8,7 +8,7 @@ export declare class EncryptedPrivateKeyLegacy extends EncryptedPrivateKeyVersio
|
|
|
8
8
|
private static readonly CIPHER;
|
|
9
9
|
private static readonly EXPECTED_PARTS;
|
|
10
10
|
matches(parts: string[]): boolean;
|
|
11
|
-
decrypt(parts: string[], password:
|
|
11
|
+
decrypt(parts: string[], password: CryptoPassword): Promise<PrivateKey>;
|
|
12
12
|
needsReEncryption(): boolean;
|
|
13
13
|
}
|
|
14
14
|
//# sourceMappingURL=EncryptedPrivateKeyLegacy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EncryptedPrivateKeyLegacy.d.ts","sourceRoot":"","sources":["../../../../src/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyLegacy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EncryptedPrivateKeyLegacy.d.ts","sourceRoot":"","sources":["../../../../src/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyLegacy.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,qBAAa,yBAA0B,SAAQ,0BAA0B;IACvE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAU;IACnD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAY;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAM;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAiB;IAC/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAK;IAEpC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO;IAI3B,OAAO,CAClB,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC;IAoBf,iBAAiB,IAAI,OAAO;CAGpC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EncryptedPrivateKeyLegacy.js","sourceRoot":"","sources":["../../../../src/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyLegacy.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;
|
|
1
|
+
{"version":3,"file":"EncryptedPrivateKeyLegacy.js","sourceRoot":"","sources":["../../../../src/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyLegacy.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAEhC,oDAAiD;AACjD,8CAA2C;AAE3C,yDAAsD;AACtD,6EAA0E;AAE1E,MAAa,yBAA0B,SAAQ,uDAA0B;IAC/D,MAAM,CAAU,iBAAiB,GAAG,MAAM,CAAC;IAC3C,MAAM,CAAU,gBAAgB,GAAG,QAAQ,CAAC;IAC5C,MAAM,CAAU,UAAU,GAAG,EAAE,CAAC;IAChC,MAAM,CAAU,MAAM,GAAG,aAAa,CAAC;IACvC,MAAM,CAAU,cAAc,GAAG,CAAC,CAAC;IAEpC,OAAO,CAAC,KAAe;QAC5B,OAAO,KAAK,CAAC,MAAM,KAAK,yBAAyB,CAAC,cAAc,CAAC;IACnE,CAAC;IAEM,KAAK,CAAC,OAAO,CAClB,KAAe,EACf,QAAwB;QAExB,MAAM,CAAC,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;QACtD,MAAM,UAAU,GAAG,eAAM,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QACxD,MAAM,EAAE,GAAG,eAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,eAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,eAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAE1C,MAAM,GAAG,GAAG,MAAM,mCAAgB,CAAC,WAAW,CAC5C,QAAQ,CAAC,OAAO,EAAE,EAClB,IAAI,EACJ,yBAAyB,CAAC,iBAAiB,EAC3C,yBAAyB,CAAC,UAAU,EACpC,yBAAyB,CAAC,gBAAgB,CAC3C,CAAC;QAEF,MAAM,SAAS,GAAG,6BAAa,CAAC,gBAAgB,CAAC,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;QAE3E,OAAO,IAAI,uBAAU,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9C,CAAC;IAEM,iBAAiB;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;;AApCH,8DAqCC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { StringValueObject } from '../../StringValueObject';
|
|
2
1
|
import { PrivateKey } from '../PrivateKey';
|
|
2
|
+
import { CryptoPassword } from '../SymmetricKey';
|
|
3
3
|
import { EncryptedPrivateKeyVersion } from './EncryptedPrivateKeyVersion';
|
|
4
4
|
export declare class EncryptedPrivateKeyV2 extends EncryptedPrivateKeyVersion {
|
|
5
5
|
private static readonly VERSION;
|
|
@@ -14,8 +14,9 @@ export declare class EncryptedPrivateKeyV2 extends EncryptedPrivateKeyVersion {
|
|
|
14
14
|
private static hasSupportedScryptParameters;
|
|
15
15
|
private static deriveSymmetricKey;
|
|
16
16
|
private static toSymmetricPayload;
|
|
17
|
-
static encrypt(privateKey: PrivateKey, password:
|
|
17
|
+
static encrypt(privateKey: PrivateKey, password: CryptoPassword): Promise<string>;
|
|
18
18
|
matches(parts: string[]): boolean;
|
|
19
|
-
decrypt(parts: string[], password:
|
|
19
|
+
decrypt(parts: string[], password: CryptoPassword): Promise<PrivateKey>;
|
|
20
|
+
needsReEncryption(): boolean;
|
|
20
21
|
}
|
|
21
22
|
//# sourceMappingURL=EncryptedPrivateKeyV2.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EncryptedPrivateKeyV2.d.ts","sourceRoot":"","sources":["../../../../src/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EncryptedPrivateKeyV2.d.ts","sourceRoot":"","sources":["../../../../src/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,cAAc,EAAgB,MAAM,iBAAiB,CAAC;AAE/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,qBAAa,qBAAsB,SAAQ,0BAA0B;IACnE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAQ;IACvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAY;IACvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAS;IACzC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAK;IACrC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAK;IACrC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAM;IAC1C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAiB;IAC/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAK;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAQ;IAEzD,OAAO,CAAC,MAAM,CAAC,4BAA4B;mBAQtB,kBAAkB;IAQvC,OAAO,CAAC,MAAM,CAAC,kBAAkB;WAkBb,OAAO,CACzB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,MAAM,CAAC;IA8BX,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO;IAS3B,OAAO,CAClB,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC;IAyBf,iBAAiB,IAAI,OAAO;CAGpC"}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EncryptedPrivateKeyV2 = void 0;
|
|
4
4
|
const buffer_1 = require("buffer");
|
|
5
|
+
const InvalidEncryptedPrivateKeyFormatError_1 = require("../../../errors/InvalidEncryptedPrivateKeyFormatError");
|
|
6
|
+
const patterns_1 = require("../../../patterns");
|
|
5
7
|
const PrivateKey_1 = require("../PrivateKey");
|
|
6
8
|
const SymmetricEncryptedPayload_1 = require("../SymmetricEncryptedPayload");
|
|
7
9
|
const SymmetricKey_1 = require("../SymmetricKey");
|
|
@@ -70,9 +72,7 @@ class EncryptedPrivateKeyV2 extends EncryptedPrivateKeyVersion_1.EncryptedPrivat
|
|
|
70
72
|
EncryptedPrivateKeyV2.hasSupportedScryptParameters(parts));
|
|
71
73
|
}
|
|
72
74
|
async decrypt(parts, password) {
|
|
73
|
-
|
|
74
|
-
throw new Error('Unsupported encrypted private key parameters');
|
|
75
|
-
}
|
|
75
|
+
(0, patterns_1.assert)(EncryptedPrivateKeyV2.hasSupportedScryptParameters(parts), new InvalidEncryptedPrivateKeyFormatError_1.InvalidEncryptedPrivateKeyFormatError('Unsupported encrypted private key parameters'));
|
|
76
76
|
const N = parseInt(parts[2].slice(1), 10);
|
|
77
77
|
const r = parseInt(parts[3].slice(1), 10);
|
|
78
78
|
const p = parseInt(parts[4].slice(1), 10);
|
|
@@ -85,6 +85,9 @@ class EncryptedPrivateKeyV2 extends EncryptedPrivateKeyVersion_1.EncryptedPrivat
|
|
|
85
85
|
const decrypted = key.decrypt(EncryptedPrivateKeyV2.toSymmetricPayload(parts));
|
|
86
86
|
return new PrivateKey_1.PrivateKey(decrypted.toString());
|
|
87
87
|
}
|
|
88
|
+
needsReEncryption() {
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
88
91
|
}
|
|
89
92
|
exports.EncryptedPrivateKeyV2 = EncryptedPrivateKeyV2;
|
|
90
93
|
//# sourceMappingURL=EncryptedPrivateKeyV2.js.map
|