@haskou/value-objects 4.0.1 → 5.0.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 +2 -3
- package/dist/errors/index.d.ts +0 -3
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +0 -3
- package/dist/errors/index.js.map +1 -1
- package/dist/value-objects/Enum.d.ts +1 -1
- package/dist/value-objects/Enum.d.ts.map +1 -1
- package/dist/value-objects/Enum.js.map +1 -1
- package/dist/value-objects/hashes/MD5Hash.d.ts +0 -3
- package/dist/value-objects/hashes/MD5Hash.d.ts.map +1 -1
- package/dist/value-objects/hashes/MD5Hash.js +0 -5
- package/dist/value-objects/hashes/MD5Hash.js.map +1 -1
- package/dist/value-objects/hashes/SHA256Hash.d.ts +0 -3
- package/dist/value-objects/hashes/SHA256Hash.d.ts.map +1 -1
- package/dist/value-objects/hashes/SHA256Hash.js +0 -5
- package/dist/value-objects/hashes/SHA256Hash.js.map +1 -1
- package/dist/value-objects/hashes/SHA512Hash.d.ts +0 -3
- package/dist/value-objects/hashes/SHA512Hash.d.ts.map +1 -1
- package/dist/value-objects/hashes/SHA512Hash.js +0 -5
- package/dist/value-objects/hashes/SHA512Hash.js.map +1 -1
- package/dist/value-objects/ids/ShortId.d.ts +1 -0
- package/dist/value-objects/ids/ShortId.d.ts.map +1 -1
- package/dist/value-objects/ids/ShortId.js +7 -2
- package/dist/value-objects/ids/ShortId.js.map +1 -1
- package/dist/value-objects/ids/UUID.d.ts +1 -0
- package/dist/value-objects/ids/UUID.d.ts.map +1 -1
- package/dist/value-objects/ids/UUID.js +8 -3
- package/dist/value-objects/ids/UUID.js.map +1 -1
- package/dist/value-objects/index.d.ts +0 -1
- package/dist/value-objects/index.d.ts.map +1 -1
- package/dist/value-objects/index.js +0 -1
- package/dist/value-objects/index.js.map +1 -1
- package/package.json +3 -11
- package/dist/errors/InvalidEncryptedPrivateKeyFormatError.d.ts +0 -5
- package/dist/errors/InvalidEncryptedPrivateKeyFormatError.d.ts.map +0 -1
- package/dist/errors/InvalidEncryptedPrivateKeyFormatError.js +0 -11
- package/dist/errors/InvalidEncryptedPrivateKeyFormatError.js.map +0 -1
- package/dist/errors/InvalidKeyError.d.ts +0 -5
- package/dist/errors/InvalidKeyError.d.ts.map +0 -1
- package/dist/errors/InvalidKeyError.js +0 -11
- package/dist/errors/InvalidKeyError.js.map +0 -1
- package/dist/errors/InvalidSignatureError.d.ts +0 -5
- package/dist/errors/InvalidSignatureError.d.ts.map +0 -1
- package/dist/errors/InvalidSignatureError.js +0 -11
- package/dist/errors/InvalidSignatureError.js.map +0 -1
- package/dist/value-objects/crypto/AsymmetricEncryptedPayload.d.ts +0 -5
- package/dist/value-objects/crypto/AsymmetricEncryptedPayload.d.ts.map +0 -1
- package/dist/value-objects/crypto/AsymmetricEncryptedPayload.js +0 -11
- package/dist/value-objects/crypto/AsymmetricEncryptedPayload.js.map +0 -1
- package/dist/value-objects/crypto/CryptoAdapter.d.ts +0 -31
- package/dist/value-objects/crypto/CryptoAdapter.d.ts.map +0 -1
- package/dist/value-objects/crypto/CryptoAdapter.js +0 -101
- package/dist/value-objects/crypto/CryptoAdapter.js.map +0 -1
- package/dist/value-objects/crypto/CryptoPayload.d.ts +0 -5
- package/dist/value-objects/crypto/CryptoPayload.d.ts.map +0 -1
- package/dist/value-objects/crypto/CryptoPayload.js +0 -3
- package/dist/value-objects/crypto/CryptoPayload.js.map +0 -1
- package/dist/value-objects/crypto/EncryptedKeyPair.d.ts +0 -25
- package/dist/value-objects/crypto/EncryptedKeyPair.d.ts.map +0 -1
- package/dist/value-objects/crypto/EncryptedKeyPair.js +0 -42
- package/dist/value-objects/crypto/EncryptedKeyPair.js.map +0 -1
- package/dist/value-objects/crypto/EncryptedPayload.d.ts +0 -6
- package/dist/value-objects/crypto/EncryptedPayload.d.ts.map +0 -1
- package/dist/value-objects/crypto/EncryptedPayload.js +0 -23
- package/dist/value-objects/crypto/EncryptedPayload.js.map +0 -1
- package/dist/value-objects/crypto/EncryptedPrivateKey.d.ts +0 -12
- package/dist/value-objects/crypto/EncryptedPrivateKey.d.ts.map +0 -1
- package/dist/value-objects/crypto/EncryptedPrivateKey.js +0 -39
- package/dist/value-objects/crypto/EncryptedPrivateKey.js.map +0 -1
- package/dist/value-objects/crypto/Key.d.ts +0 -4
- package/dist/value-objects/crypto/Key.d.ts.map +0 -1
- package/dist/value-objects/crypto/Key.js +0 -8
- package/dist/value-objects/crypto/Key.js.map +0 -1
- package/dist/value-objects/crypto/KeyPair.d.ts +0 -26
- package/dist/value-objects/crypto/KeyPair.d.ts.map +0 -1
- package/dist/value-objects/crypto/KeyPair.js +0 -45
- package/dist/value-objects/crypto/KeyPair.js.map +0 -1
- package/dist/value-objects/crypto/PrivateKey.d.ts +0 -32
- package/dist/value-objects/crypto/PrivateKey.d.ts.map +0 -1
- package/dist/value-objects/crypto/PrivateKey.js +0 -102
- package/dist/value-objects/crypto/PrivateKey.js.map +0 -1
- package/dist/value-objects/crypto/PublicKey.d.ts +0 -19
- package/dist/value-objects/crypto/PublicKey.d.ts.map +0 -1
- package/dist/value-objects/crypto/PublicKey.js +0 -68
- package/dist/value-objects/crypto/PublicKey.js.map +0 -1
- package/dist/value-objects/crypto/Signature.d.ts +0 -11
- package/dist/value-objects/crypto/Signature.d.ts.map +0 -1
- package/dist/value-objects/crypto/Signature.js +0 -26
- package/dist/value-objects/crypto/Signature.js.map +0 -1
- package/dist/value-objects/crypto/StrictBase64.d.ts +0 -15
- package/dist/value-objects/crypto/StrictBase64.d.ts.map +0 -1
- package/dist/value-objects/crypto/StrictBase64.js +0 -36
- package/dist/value-objects/crypto/StrictBase64.js.map +0 -1
- package/dist/value-objects/crypto/SymmetricEncryptedPayload.d.ts +0 -5
- package/dist/value-objects/crypto/SymmetricEncryptedPayload.d.ts.map +0 -1
- package/dist/value-objects/crypto/SymmetricEncryptedPayload.js +0 -11
- package/dist/value-objects/crypto/SymmetricEncryptedPayload.js.map +0 -1
- package/dist/value-objects/crypto/SymmetricKey.d.ts +0 -49
- package/dist/value-objects/crypto/SymmetricKey.d.ts.map +0 -1
- package/dist/value-objects/crypto/SymmetricKey.js +0 -149
- package/dist/value-objects/crypto/SymmetricKey.js.map +0 -1
- package/dist/value-objects/crypto/encrypted-private-key/CryptoDerivation.d.ts +0 -21
- package/dist/value-objects/crypto/encrypted-private-key/CryptoDerivation.d.ts.map +0 -1
- package/dist/value-objects/crypto/encrypted-private-key/CryptoDerivation.js +0 -56
- package/dist/value-objects/crypto/encrypted-private-key/CryptoDerivation.js.map +0 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyLegacy.d.ts +0 -14
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyLegacy.d.ts.map +0 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyLegacy.js +0 -33
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyLegacy.js.map +0 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.d.ts +0 -22
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.d.ts.map +0 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.js +0 -93
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.js.map +0 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV3.d.ts +0 -24
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV3.d.ts.map +0 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV3.js +0 -105
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV3.js.map +0 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyVersion.d.ts +0 -8
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyVersion.d.ts.map +0 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyVersion.js +0 -10
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyVersion.js.map +0 -1
- package/dist/value-objects/crypto/index.d.ts +0 -12
- package/dist/value-objects/crypto/index.d.ts.map +0 -1
- package/dist/value-objects/crypto/index.js +0 -15
- package/dist/value-objects/crypto/index.js.map +0 -1
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PublicKey = void 0;
|
|
4
|
-
const buffer_1 = require("buffer");
|
|
5
|
-
const InvalidFormatError_1 = require("../../errors/InvalidFormatError");
|
|
6
|
-
const InvalidLengthError_1 = require("../../errors/InvalidLengthError");
|
|
7
|
-
const patterns_1 = require("../../patterns");
|
|
8
|
-
const media_1 = require("../media");
|
|
9
|
-
const NullObject_1 = require("../NullObject");
|
|
10
|
-
const AsymmetricEncryptedPayload_1 = require("./AsymmetricEncryptedPayload");
|
|
11
|
-
const CryptoAdapter_1 = require("./CryptoAdapter");
|
|
12
|
-
const Key_1 = require("./Key");
|
|
13
|
-
class PublicKey extends Key_1.Key {
|
|
14
|
-
static LENGTH = 113;
|
|
15
|
-
static MAX_PAYLOAD_LENGTH = 1024 * 1024;
|
|
16
|
-
static PAYLOAD_ALGORITHM = 'x25519-hkdf-sha256-aes-256-gcm';
|
|
17
|
-
static PAYLOAD_VERSION = 'v2';
|
|
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
|
-
}
|
|
22
|
-
static fromPEM(pem) {
|
|
23
|
-
return new PublicKey(pem.valueOf());
|
|
24
|
-
}
|
|
25
|
-
constructor(value) {
|
|
26
|
-
super(value?.valueOf());
|
|
27
|
-
if (NullObject_1.NullObject.isNullObject(this)) {
|
|
28
|
-
return this;
|
|
29
|
-
}
|
|
30
|
-
this.ensureIsValidPublicKey(this.value);
|
|
31
|
-
}
|
|
32
|
-
ensureIsValidPublicKey(value) {
|
|
33
|
-
(0, patterns_1.assert)(value.length === PublicKey.LENGTH, new InvalidLengthError_1.InvalidLengthError(value, PublicKey.LENGTH));
|
|
34
|
-
(0, patterns_1.assert)(PublicKey.PATTERN.test(value), new InvalidFormatError_1.InvalidFormatError(value));
|
|
35
|
-
}
|
|
36
|
-
isValidSignature(payload, signature) {
|
|
37
|
-
const messageBuffer = payload instanceof media_1.Media
|
|
38
|
-
? payload.getBuffer()
|
|
39
|
-
: buffer_1.Buffer.from(payload.valueOf());
|
|
40
|
-
const signatureBuffer = buffer_1.Buffer.from(signature.valueOf(), 'base64');
|
|
41
|
-
const valid = CryptoAdapter_1.CryptoAdapter.verify(signatureBuffer, messageBuffer, this.valueOf());
|
|
42
|
-
return valid;
|
|
43
|
-
}
|
|
44
|
-
encrypt(payload) {
|
|
45
|
-
const messageBuffer = payload instanceof media_1.Media
|
|
46
|
-
? payload.getBuffer()
|
|
47
|
-
: buffer_1.Buffer.from(payload.valueOf());
|
|
48
|
-
(0, patterns_1.assert)(messageBuffer.length <= PublicKey.MAX_PAYLOAD_LENGTH, new InvalidLengthError_1.InvalidLengthError(messageBuffer.length, PublicKey.MAX_PAYLOAD_LENGTH));
|
|
49
|
-
const x25519Pub = CryptoAdapter_1.CryptoAdapter.publicKeyToX25519(this.valueOf());
|
|
50
|
-
const ephemeralPriv = CryptoAdapter_1.CryptoAdapter.x25519RandomPrivateKey();
|
|
51
|
-
const ephemeralPub = CryptoAdapter_1.CryptoAdapter.x25519PublicKey(ephemeralPriv);
|
|
52
|
-
const sharedSecret = CryptoAdapter_1.CryptoAdapter.x25519SharedSecret(ephemeralPriv, x25519Pub);
|
|
53
|
-
const aesKey = CryptoAdapter_1.CryptoAdapter.deriveEncryptionKeyWithHkdf(sharedSecret, ephemeralPub, x25519Pub);
|
|
54
|
-
const iv = CryptoAdapter_1.CryptoAdapter.randomBytes(12);
|
|
55
|
-
const { cipherText, tag } = CryptoAdapter_1.CryptoAdapter.encryptAes256Gcm(aesKey, iv, messageBuffer, PublicKey.getPayloadAad());
|
|
56
|
-
const result = [
|
|
57
|
-
PublicKey.PAYLOAD_VERSION,
|
|
58
|
-
PublicKey.PAYLOAD_ALGORITHM,
|
|
59
|
-
buffer_1.Buffer.from(ephemeralPub).toString('base64'),
|
|
60
|
-
iv.toString('base64'),
|
|
61
|
-
buffer_1.Buffer.from(cipherText).toString('base64'),
|
|
62
|
-
buffer_1.Buffer.from(tag).toString('base64'),
|
|
63
|
-
].join('.');
|
|
64
|
-
return new AsymmetricEncryptedPayload_1.AsymmetricEncryptedPayload(result);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
exports.PublicKey = PublicKey;
|
|
68
|
-
//# sourceMappingURL=PublicKey.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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,iBAAiB,GAAG,gCAAgC,CAAC;IAErE,MAAM,CAAU,eAAe,GAAG,IAAI,CAAC;IAEvC,MAAM,CAAU,OAAO,GAC7B,2EAA2E,CAAC;IAEtE,MAAM,CAAC,aAAa;QAC1B,OAAO,eAAM,CAAC,IAAI,CAChB,CAAC,SAAS,CAAC,eAAe,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CACnE,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,OAAO,CAAC,GAA+B;QACnD,OAAO,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACtC,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,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAEO,sBAAsB,CAAC,KAAa;QAC1C,IAAA,iBAAM,EACJ,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EACjC,IAAI,uCAAkB,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAChD,CAAC;QACF,IAAA,iBAAM,EAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,uCAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,CAAC;IAEM,gBAAgB,CACrB,OAAsB,EACtB,SAAoB;QAEpB,MAAM,aAAa,GACjB,OAAO,YAAY,aAAK;YACtB,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE;YACrB,CAAC,CAAC,eAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACrC,MAAM,eAAe,GAAG,eAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;QACnE,MAAM,KAAK,GAAG,6BAAa,CAAC,MAAM,CAChC,eAAe,EACf,aAAa,EACb,IAAI,CAAC,OAAO,EAAE,CACf,CAAC;QAEF,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,OAAO,CAAC,OAAsB;QACnC,MAAM,aAAa,GACjB,OAAO,YAAY,aAAK;YACtB,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE;YACrB,CAAC,CAAC,eAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAErC,IAAA,iBAAM,EACJ,aAAa,CAAC,MAAM,IAAI,SAAS,CAAC,kBAAkB,EACpD,IAAI,uCAAkB,CACpB,aAAa,CAAC,MAAM,EACpB,SAAS,CAAC,kBAAkB,CAC7B,CACF,CAAC;QAEF,MAAM,SAAS,GAAG,6BAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAElE,MAAM,aAAa,GAAG,6BAAa,CAAC,sBAAsB,EAAE,CAAC;QAC7D,MAAM,YAAY,GAAG,6BAAa,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QAClE,MAAM,YAAY,GAAG,6BAAa,CAAC,kBAAkB,CACnD,aAAa,EACb,SAAS,CACV,CAAC;QAEF,MAAM,MAAM,GAAG,6BAAa,CAAC,2BAA2B,CACtD,YAAY,EACZ,YAAY,EACZ,SAAS,CACV,CAAC;QAEF,MAAM,EAAE,GAAG,6BAAa,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,6BAAa,CAAC,gBAAgB,CACxD,MAAM,EACN,EAAE,EACF,aAAa,EACb,SAAS,CAAC,aAAa,EAAE,CAC1B,CAAC;QAEF,MAAM,MAAM,GAAG;YACb,SAAS,CAAC,eAAe;YACzB,SAAS,CAAC,iBAAiB;YAC3B,eAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC5C,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,uDAA0B,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;;AAvGH,8BAwGC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Buffer } from 'buffer';
|
|
2
|
-
import { StringValueObject } from '../StringValueObject';
|
|
3
|
-
import { ValueObject } from '../ValueObject';
|
|
4
|
-
export declare class Signature extends ValueObject<string> {
|
|
5
|
-
private static readonly LENGTH;
|
|
6
|
-
private static readonly PATTERN;
|
|
7
|
-
static fromBuffer(buffer: Buffer): Signature;
|
|
8
|
-
constructor(value: string | StringValueObject);
|
|
9
|
-
private hasValidFormat;
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=Signature.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Signature.d.ts","sourceRoot":"","sources":["../../../src/value-objects/crypto/Signature.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,qBAAa,SAAU,SAAQ,WAAW,CAAC,MAAM,CAAC;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAM;IACpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAA2B;WAE5C,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;gBAIvC,KAAK,EAAE,MAAM,GAAG,iBAAiB;IAU7C,OAAO,CAAC,cAAc;CAGvB"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Signature = void 0;
|
|
4
|
-
const InvalidSignatureError_1 = require("../../errors/InvalidSignatureError");
|
|
5
|
-
const patterns_1 = require("../../patterns");
|
|
6
|
-
const NullObject_1 = require("../NullObject");
|
|
7
|
-
const ValueObject_1 = require("../ValueObject");
|
|
8
|
-
class Signature extends ValueObject_1.ValueObject {
|
|
9
|
-
static LENGTH = 88;
|
|
10
|
-
static PATTERN = /^[A-Za-z0-9+/]{86}==$/;
|
|
11
|
-
static fromBuffer(buffer) {
|
|
12
|
-
return new Signature(buffer.toString('base64'));
|
|
13
|
-
}
|
|
14
|
-
constructor(value) {
|
|
15
|
-
super(value?.valueOf());
|
|
16
|
-
if (NullObject_1.NullObject.isNullObject(this)) {
|
|
17
|
-
return this;
|
|
18
|
-
}
|
|
19
|
-
(0, patterns_1.assert)(this.hasValidFormat(), new InvalidSignatureError_1.InvalidSignatureError(Signature.LENGTH));
|
|
20
|
-
}
|
|
21
|
-
hasValidFormat() {
|
|
22
|
-
return Signature.PATTERN.test(this.value);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
exports.Signature = Signature;
|
|
26
|
-
//# sourceMappingURL=Signature.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Signature.js","sourceRoot":"","sources":["../../../src/value-objects/crypto/Signature.ts"],"names":[],"mappings":";;;AAEA,8EAA2E;AAC3E,6CAAwC;AACxC,8CAA2C;AAE3C,gDAA6C;AAE7C,MAAa,SAAU,SAAQ,yBAAmB;IACxC,MAAM,CAAU,MAAM,GAAG,EAAE,CAAC;IAC5B,MAAM,CAAU,OAAO,GAAG,uBAAuB,CAAC;IAEnD,MAAM,CAAC,UAAU,CAAC,MAAc;QACrC,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClD,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,IAAA,iBAAM,EAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,6CAAqB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7E,CAAC;IAEO,cAAc;QACpB,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;;AApBH,8BAqBC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,36 +0,0 @@
|
|
|
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
|
-
(0, patterns_1.assert)(StrictBase64.getDecodedLength(value) === length, error);
|
|
19
|
-
StrictBase64.ensure(value, error, options);
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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,IAAA,iBAAM,EAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC;QAC/D,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7C,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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SymmetricEncryptedPayload.d.ts","sourceRoot":"","sources":["../../../src/value-objects/crypto/SymmetricEncryptedPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE9E,qBAAa,yBAA0B,SAAQ,gBAAgB;IACtD,SAAS,IAAI,sBAAsB;CAG3C"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SymmetricEncryptedPayload = void 0;
|
|
4
|
-
const EncryptedPayload_1 = require("./EncryptedPayload");
|
|
5
|
-
class SymmetricEncryptedPayload extends EncryptedPayload_1.EncryptedPayload {
|
|
6
|
-
getScheme() {
|
|
7
|
-
return 'symmetric';
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
exports.SymmetricEncryptedPayload = SymmetricEncryptedPayload;
|
|
11
|
-
//# sourceMappingURL=SymmetricEncryptedPayload.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SymmetricEncryptedPayload.js","sourceRoot":"","sources":["../../../src/value-objects/crypto/SymmetricEncryptedPayload.ts"],"names":[],"mappings":";;;AAAA,yDAA8E;AAE9E,MAAa,yBAA0B,SAAQ,mCAAgB;IACtD,SAAS;QACd,OAAO,WAAW,CAAC;IACrB,CAAC;CACF;AAJD,8DAIC"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { Buffer } from 'buffer';
|
|
2
|
-
import { Password } from '../Password';
|
|
3
|
-
import { StringValueObject } from '../StringValueObject';
|
|
4
|
-
import { ValueObject } from '../ValueObject';
|
|
5
|
-
import { CryptoPayload } from './CryptoPayload';
|
|
6
|
-
import { EncryptedPayload } from './EncryptedPayload';
|
|
7
|
-
import { SymmetricEncryptedPayload } from './SymmetricEncryptedPayload';
|
|
8
|
-
export type SymmetricKeyDerivationOptions = {
|
|
9
|
-
N?: number;
|
|
10
|
-
p?: number;
|
|
11
|
-
r?: number;
|
|
12
|
-
salt: string | StringValueObject | Buffer;
|
|
13
|
-
};
|
|
14
|
-
export type CryptoPassword = string | StringValueObject | Password;
|
|
15
|
-
export type SymmetricKeyCryptOptions = {
|
|
16
|
-
aad?: string | StringValueObject | Buffer;
|
|
17
|
-
};
|
|
18
|
-
export declare class SymmetricKey extends ValueObject<string> {
|
|
19
|
-
private static readonly ALGORITHM;
|
|
20
|
-
private static readonly IV_LENGTH;
|
|
21
|
-
private static readonly KEY_LENGTH;
|
|
22
|
-
private static readonly MAX_PAYLOAD_LENGTH;
|
|
23
|
-
private static readonly PAYLOAD_PARTS;
|
|
24
|
-
private static readonly SCRYPT_N;
|
|
25
|
-
private static readonly SCRYPT_P;
|
|
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;
|
|
30
|
-
private static readonly TAG_LENGTH;
|
|
31
|
-
private static readonly VERSION;
|
|
32
|
-
private static ensureIsBase64;
|
|
33
|
-
private static ensureBase64DecodedLength;
|
|
34
|
-
private static getSaltBytes;
|
|
35
|
-
private static getPayloadBytes;
|
|
36
|
-
private static getAadBytes;
|
|
37
|
-
private static getDefaultAad;
|
|
38
|
-
static fromBase64(key: string | StringValueObject): SymmetricKey;
|
|
39
|
-
static fromBuffer(key: Buffer): SymmetricKey;
|
|
40
|
-
static generate(): SymmetricKey;
|
|
41
|
-
static fromPassword(password: CryptoPassword, options: SymmetricKeyDerivationOptions): Promise<SymmetricKey>;
|
|
42
|
-
static fromPasswordUsingOwasp(password: CryptoPassword, options: Pick<SymmetricKeyDerivationOptions, 'salt'>): Promise<SymmetricKey>;
|
|
43
|
-
constructor(value: string | StringValueObject);
|
|
44
|
-
private ensureIsValidKey;
|
|
45
|
-
getBuffer(): Buffer;
|
|
46
|
-
encrypt(payload: CryptoPayload, options?: SymmetricKeyCryptOptions): SymmetricEncryptedPayload;
|
|
47
|
-
decrypt(encryptedPayload: EncryptedPayload, options?: SymmetricKeyCryptOptions): Buffer;
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=SymmetricKey.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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,CAAmB;IAC7D,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"}
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SymmetricKey = void 0;
|
|
4
|
-
const buffer_1 = require("buffer");
|
|
5
|
-
const InvalidFormatError_1 = require("../../errors/InvalidFormatError");
|
|
6
|
-
const InvalidLengthError_1 = require("../../errors/InvalidLengthError");
|
|
7
|
-
const patterns_1 = require("../../patterns");
|
|
8
|
-
const media_1 = require("../media");
|
|
9
|
-
const NullObject_1 = require("../NullObject");
|
|
10
|
-
const ValueObject_1 = require("../ValueObject");
|
|
11
|
-
const CryptoAdapter_1 = require("./CryptoAdapter");
|
|
12
|
-
const CryptoDerivation_1 = require("./encrypted-private-key/CryptoDerivation");
|
|
13
|
-
const StrictBase64_1 = require("./StrictBase64");
|
|
14
|
-
const SymmetricEncryptedPayload_1 = require("./SymmetricEncryptedPayload");
|
|
15
|
-
class SymmetricKey extends ValueObject_1.ValueObject {
|
|
16
|
-
static ALGORITHM = 'aes-256-gcm';
|
|
17
|
-
static IV_LENGTH = 12;
|
|
18
|
-
static KEY_LENGTH = 32;
|
|
19
|
-
static MAX_PAYLOAD_LENGTH = 8 * 1024 * 1024;
|
|
20
|
-
static PAYLOAD_PARTS = 5;
|
|
21
|
-
static SCRYPT_N = 16384;
|
|
22
|
-
static SCRYPT_P = 1;
|
|
23
|
-
static SCRYPT_R = 8;
|
|
24
|
-
static OWASP_SCRYPT_N = 16384;
|
|
25
|
-
static OWASP_SCRYPT_P = 5;
|
|
26
|
-
static OWASP_SCRYPT_R = 8;
|
|
27
|
-
static TAG_LENGTH = 16;
|
|
28
|
-
static VERSION = 'v1';
|
|
29
|
-
static ensureIsBase64(value, encryptedPayload, options) {
|
|
30
|
-
StrictBase64_1.StrictBase64.ensure(value, new InvalidFormatError_1.InvalidFormatError(encryptedPayload.valueOf()), options);
|
|
31
|
-
}
|
|
32
|
-
static ensureBase64DecodedLength(value, encryptedPayload, length) {
|
|
33
|
-
StrictBase64_1.StrictBase64.ensureDecodedLength(value, new InvalidFormatError_1.InvalidFormatError(encryptedPayload.valueOf()), length);
|
|
34
|
-
}
|
|
35
|
-
static getSaltBytes(salt) {
|
|
36
|
-
if (buffer_1.Buffer.isBuffer(salt)) {
|
|
37
|
-
return salt;
|
|
38
|
-
}
|
|
39
|
-
return buffer_1.Buffer.from(salt.valueOf());
|
|
40
|
-
}
|
|
41
|
-
static getPayloadBytes(payload) {
|
|
42
|
-
return payload instanceof media_1.Media
|
|
43
|
-
? payload.getBuffer()
|
|
44
|
-
: buffer_1.Buffer.from(payload.valueOf());
|
|
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
|
-
}
|
|
55
|
-
static fromBase64(key) {
|
|
56
|
-
return new SymmetricKey(key.valueOf());
|
|
57
|
-
}
|
|
58
|
-
static fromBuffer(key) {
|
|
59
|
-
(0, patterns_1.assert)(key.length === SymmetricKey.KEY_LENGTH, new InvalidLengthError_1.InvalidLengthError(key.length, SymmetricKey.KEY_LENGTH));
|
|
60
|
-
return new SymmetricKey(key.toString('base64'));
|
|
61
|
-
}
|
|
62
|
-
static generate() {
|
|
63
|
-
return SymmetricKey.fromBuffer(CryptoAdapter_1.CryptoAdapter.randomBytes(SymmetricKey.KEY_LENGTH));
|
|
64
|
-
}
|
|
65
|
-
static async fromPassword(password, options) {
|
|
66
|
-
const salt = SymmetricKey.getSaltBytes(options.salt);
|
|
67
|
-
(0, patterns_1.assert)(salt.length > 0, new InvalidLengthError_1.InvalidLengthError(salt.length, 1));
|
|
68
|
-
const key = await CryptoDerivation_1.CryptoDerivation.scryptAsync(password.valueOf(), salt, SymmetricKey.KEY_LENGTH, {
|
|
69
|
-
N: options.N ?? SymmetricKey.SCRYPT_N,
|
|
70
|
-
p: options.p ?? SymmetricKey.SCRYPT_P,
|
|
71
|
-
r: options.r ?? SymmetricKey.SCRYPT_R,
|
|
72
|
-
});
|
|
73
|
-
return SymmetricKey.fromBuffer(buffer_1.Buffer.from(key));
|
|
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
|
-
}
|
|
83
|
-
constructor(value) {
|
|
84
|
-
super(value?.valueOf());
|
|
85
|
-
if (NullObject_1.NullObject.isNullObject(this)) {
|
|
86
|
-
return this;
|
|
87
|
-
}
|
|
88
|
-
this.ensureIsValidKey(this.value);
|
|
89
|
-
}
|
|
90
|
-
ensureIsValidKey(value) {
|
|
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));
|
|
94
|
-
}
|
|
95
|
-
getBuffer() {
|
|
96
|
-
return buffer_1.Buffer.from(this.valueOf(), 'base64');
|
|
97
|
-
}
|
|
98
|
-
encrypt(payload, options = {}) {
|
|
99
|
-
const messageBuffer = SymmetricKey.getPayloadBytes(payload);
|
|
100
|
-
(0, patterns_1.assert)(messageBuffer.length <= SymmetricKey.MAX_PAYLOAD_LENGTH, new InvalidLengthError_1.InvalidLengthError(messageBuffer.length, SymmetricKey.MAX_PAYLOAD_LENGTH));
|
|
101
|
-
const iv = CryptoAdapter_1.CryptoAdapter.randomBytes(SymmetricKey.IV_LENGTH);
|
|
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);
|
|
106
|
-
const result = [
|
|
107
|
-
SymmetricKey.VERSION,
|
|
108
|
-
SymmetricKey.ALGORITHM,
|
|
109
|
-
iv.toString('base64'),
|
|
110
|
-
buffer_1.Buffer.from(cipherText).toString('base64'),
|
|
111
|
-
buffer_1.Buffer.from(tag).toString('base64'),
|
|
112
|
-
].join('.');
|
|
113
|
-
return new SymmetricEncryptedPayload_1.SymmetricEncryptedPayload(result);
|
|
114
|
-
}
|
|
115
|
-
decrypt(encryptedPayload, options = {}) {
|
|
116
|
-
const parts = encryptedPayload.valueOf().split('.');
|
|
117
|
-
(0, patterns_1.assert)(parts.length === SymmetricKey.PAYLOAD_PARTS, new InvalidFormatError_1.InvalidFormatError(encryptedPayload.valueOf()));
|
|
118
|
-
const [version, algorithm, ivB64, cipherTextB64, tagB64] = parts;
|
|
119
|
-
(0, patterns_1.assert)(version === SymmetricKey.VERSION && algorithm === SymmetricKey.ALGORITHM, new InvalidFormatError_1.InvalidFormatError(encryptedPayload.valueOf()));
|
|
120
|
-
SymmetricKey.ensureBase64DecodedLength(ivB64, encryptedPayload, SymmetricKey.IV_LENGTH);
|
|
121
|
-
const cipherTextLength = StrictBase64_1.StrictBase64.getDecodedLength(cipherTextB64);
|
|
122
|
-
(0, patterns_1.assert)(cipherTextLength <= SymmetricKey.MAX_PAYLOAD_LENGTH, new InvalidLengthError_1.InvalidLengthError(cipherTextLength, SymmetricKey.MAX_PAYLOAD_LENGTH));
|
|
123
|
-
SymmetricKey.ensureIsBase64(cipherTextB64, encryptedPayload, {
|
|
124
|
-
allowEmpty: true,
|
|
125
|
-
});
|
|
126
|
-
SymmetricKey.ensureBase64DecodedLength(tagB64, encryptedPayload, SymmetricKey.TAG_LENGTH);
|
|
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
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
exports.SymmetricKey = SymmetricKey;
|
|
149
|
-
//# sourceMappingURL=SymmetricKey.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SymmetricKey.js","sourceRoot":"","sources":["../../../src/value-objects/crypto/SymmetricKey.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { Buffer } from 'buffer';
|
|
2
|
-
type NodeLikeCrypto = {
|
|
3
|
-
pbkdf2?: (password: string, salt: Buffer, iterations: number, keyLength: number, algorithm: string, callback: (err: Error | null, key: Buffer) => void) => void;
|
|
4
|
-
randomBytes?: (size: number, callback: (err: Error | null, bytes: Buffer) => void) => void;
|
|
5
|
-
scrypt?: (password: string, salt: Buffer, keylen: number, options: {
|
|
6
|
-
N: number;
|
|
7
|
-
r: number;
|
|
8
|
-
p: number;
|
|
9
|
-
}, callback: (err: Error | null, key: Buffer) => void) => void;
|
|
10
|
-
};
|
|
11
|
-
export declare class CryptoDerivation {
|
|
12
|
-
static pbkdf2Async(password: string, salt: Buffer, iterations: number, keyLength: number, algorithm: string, cryptoModule?: NodeLikeCrypto): Promise<Buffer>;
|
|
13
|
-
static scryptAsync(password: string, salt: Buffer, keylen: number, options: {
|
|
14
|
-
N: number;
|
|
15
|
-
r: number;
|
|
16
|
-
p: number;
|
|
17
|
-
}, cryptoModule?: NodeLikeCrypto): Promise<Buffer>;
|
|
18
|
-
static randomBytesAsync(size: number, cryptoModule?: NodeLikeCrypto): Promise<Buffer>;
|
|
19
|
-
}
|
|
20
|
-
export {};
|
|
21
|
-
//# sourceMappingURL=CryptoDerivation.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CryptoDerivation.d.ts","sourceRoot":"","sources":["../../../../src/value-objects/crypto/encrypted-private-key/CryptoDerivation.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,KAAK,cAAc,GAAG;IACpB,MAAM,CAAC,EAAE,CACP,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,KAC/C,IAAI,CAAC;IACV,WAAW,CAAC,EAAE,CACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,KACjD,IAAI,CAAC;IACV,MAAM,CAAC,EAAE,CACP,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAC5C,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,KAC/C,IAAI,CAAC;CACX,CAAC;AAEF,qBAAa,gBAAgB;WACP,WAAW,CAC7B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,cAAc,GAC5B,OAAO,CAAC,MAAM,CAAC;WA0BJ,WAAW,CACvB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAC5C,YAAY,CAAC,EAAE,cAAc,GAC5B,OAAO,CAAC,MAAM,CAAC;WAeE,gBAAgB,CAClC,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,cAAc,GAC5B,OAAO,CAAC,MAAM,CAAC;CAYnB"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CryptoDerivation = void 0;
|
|
4
|
-
const pbkdf2_js_1 = require("@noble/hashes/pbkdf2.js");
|
|
5
|
-
const scrypt_js_1 = require("@noble/hashes/scrypt.js");
|
|
6
|
-
const sha2_js_1 = require("@noble/hashes/sha2.js");
|
|
7
|
-
const buffer_1 = require("buffer");
|
|
8
|
-
const CryptoAdapter_1 = require("../CryptoAdapter");
|
|
9
|
-
class CryptoDerivation {
|
|
10
|
-
static async pbkdf2Async(password, salt, iterations, keyLength, algorithm, cryptoModule) {
|
|
11
|
-
if (cryptoModule?.pbkdf2) {
|
|
12
|
-
return new Promise((resolve, reject) => {
|
|
13
|
-
cryptoModule.pbkdf2(password, salt, iterations, keyLength, algorithm, (err, key) => {
|
|
14
|
-
if (err)
|
|
15
|
-
reject(err);
|
|
16
|
-
else
|
|
17
|
-
resolve(key);
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
const hash = algorithm === 'sha512' ? sha2_js_1.sha512 : sha2_js_1.sha256;
|
|
22
|
-
const key = await (0, pbkdf2_js_1.pbkdf2Async)(hash, password, salt, {
|
|
23
|
-
c: iterations,
|
|
24
|
-
dkLen: keyLength,
|
|
25
|
-
});
|
|
26
|
-
return buffer_1.Buffer.from(key);
|
|
27
|
-
}
|
|
28
|
-
static scryptAsync(password, salt, keylen, options, cryptoModule) {
|
|
29
|
-
if (cryptoModule?.scrypt) {
|
|
30
|
-
return new Promise((resolve, reject) => {
|
|
31
|
-
cryptoModule.scrypt(password, salt, keylen, options, (err, key) => {
|
|
32
|
-
if (err)
|
|
33
|
-
reject(err);
|
|
34
|
-
else
|
|
35
|
-
resolve(key);
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
return (0, scrypt_js_1.scryptAsync)(password, salt, { ...options, dkLen: keylen }).then(buffer_1.Buffer.from);
|
|
40
|
-
}
|
|
41
|
-
static async randomBytesAsync(size, cryptoModule) {
|
|
42
|
-
if (cryptoModule?.randomBytes) {
|
|
43
|
-
return new Promise((resolve, reject) => {
|
|
44
|
-
cryptoModule.randomBytes(size, (err, bytes) => {
|
|
45
|
-
if (err)
|
|
46
|
-
reject(err);
|
|
47
|
-
else
|
|
48
|
-
resolve(bytes);
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
return CryptoAdapter_1.CryptoAdapter.randomBytes(size);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
exports.CryptoDerivation = CryptoDerivation;
|
|
56
|
-
//# sourceMappingURL=CryptoDerivation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CryptoDerivation.js","sourceRoot":"","sources":["../../../../src/value-objects/crypto/encrypted-private-key/CryptoDerivation.ts"],"names":[],"mappings":";;;AAAA,uDAAsD;AACtD,uDAAsD;AACtD,mDAAuD;AACvD,mCAAgC;AAEhC,oDAAiD;AAwBjD,MAAa,gBAAgB;IACpB,MAAM,CAAC,KAAK,CAAC,WAAW,CAC7B,QAAgB,EAChB,IAAY,EACZ,UAAkB,EAClB,SAAiB,EACjB,SAAiB,EACjB,YAA6B;QAE7B,IAAI,YAAY,EAAE,MAAM,EAAE,CAAC;YACzB,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC7C,YAAY,CAAC,MAAO,CAClB,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,SAAS,EACT,SAAS,EACT,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;oBACX,IAAI,GAAG;wBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;wBAChB,OAAO,CAAC,GAAG,CAAC,CAAC;gBACpB,CAAC,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAM,CAAC,CAAC,CAAC,gBAAM,CAAC;QACtD,MAAM,GAAG,GAAG,MAAM,IAAA,uBAAW,EAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;YAClD,CAAC,EAAE,UAAU;YACb,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,OAAO,eAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAEM,MAAM,CAAC,WAAW,CACvB,QAAgB,EAChB,IAAY,EACZ,MAAc,EACd,OAA4C,EAC5C,YAA6B;QAE7B,IAAI,YAAY,EAAE,MAAM,EAAE,CAAC;YACzB,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC7C,YAAY,CAAC,MAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;oBACjE,IAAI,GAAG;wBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;wBAChB,OAAO,CAAC,GAAG,CAAC,CAAC;gBACpB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAA,uBAAW,EAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CACpE,eAAM,CAAC,IAAI,CACZ,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAClC,IAAY,EACZ,YAA6B;QAE7B,IAAI,YAAY,EAAE,WAAW,EAAE,CAAC;YAC9B,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC7C,YAAY,CAAC,WAAY,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;oBAC7C,IAAI,GAAG;wBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;wBAChB,OAAO,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,6BAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;CACF;AAtED,4CAsEC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { PrivateKey } from '../PrivateKey';
|
|
2
|
-
import { CryptoPassword } from '../SymmetricKey';
|
|
3
|
-
import { EncryptedPrivateKeyVersion } from './EncryptedPrivateKeyVersion';
|
|
4
|
-
export declare class EncryptedPrivateKeyLegacy extends EncryptedPrivateKeyVersion {
|
|
5
|
-
private static readonly LEGACY_ITERATIONS;
|
|
6
|
-
private static readonly LEGACY_ALGORITHM;
|
|
7
|
-
private static readonly KEY_LENGTH;
|
|
8
|
-
private static readonly CIPHER;
|
|
9
|
-
private static readonly EXPECTED_PARTS;
|
|
10
|
-
matches(parts: string[]): boolean;
|
|
11
|
-
decrypt(parts: string[], password: CryptoPassword): Promise<PrivateKey>;
|
|
12
|
-
needsReEncryption(): boolean;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=EncryptedPrivateKeyLegacy.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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,33 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EncryptedPrivateKeyLegacy = void 0;
|
|
4
|
-
const buffer_1 = require("buffer");
|
|
5
|
-
const CryptoAdapter_1 = require("../CryptoAdapter");
|
|
6
|
-
const PrivateKey_1 = require("../PrivateKey");
|
|
7
|
-
const CryptoDerivation_1 = require("./CryptoDerivation");
|
|
8
|
-
const EncryptedPrivateKeyVersion_1 = require("./EncryptedPrivateKeyVersion");
|
|
9
|
-
class EncryptedPrivateKeyLegacy extends EncryptedPrivateKeyVersion_1.EncryptedPrivateKeyVersion {
|
|
10
|
-
static LEGACY_ITERATIONS = 100000;
|
|
11
|
-
static LEGACY_ALGORITHM = 'sha256';
|
|
12
|
-
static KEY_LENGTH = 32;
|
|
13
|
-
static CIPHER = 'aes-256-gcm';
|
|
14
|
-
static EXPECTED_PARTS = 4;
|
|
15
|
-
matches(parts) {
|
|
16
|
-
return parts.length === EncryptedPrivateKeyLegacy.EXPECTED_PARTS;
|
|
17
|
-
}
|
|
18
|
-
async decrypt(parts, password) {
|
|
19
|
-
const [cipherTextB64, ivB64, saltB64, tagB64] = parts;
|
|
20
|
-
const cipherText = buffer_1.Buffer.from(cipherTextB64, 'base64');
|
|
21
|
-
const iv = buffer_1.Buffer.from(ivB64, 'base64');
|
|
22
|
-
const salt = buffer_1.Buffer.from(saltB64, 'base64');
|
|
23
|
-
const tag = buffer_1.Buffer.from(tagB64, 'base64');
|
|
24
|
-
const key = await CryptoDerivation_1.CryptoDerivation.pbkdf2Async(password.valueOf(), salt, EncryptedPrivateKeyLegacy.LEGACY_ITERATIONS, EncryptedPrivateKeyLegacy.KEY_LENGTH, EncryptedPrivateKeyLegacy.LEGACY_ALGORITHM);
|
|
25
|
-
const decrypted = CryptoAdapter_1.CryptoAdapter.decryptAes256Gcm(key, iv, cipherText, tag);
|
|
26
|
-
return new PrivateKey_1.PrivateKey(decrypted.toString());
|
|
27
|
-
}
|
|
28
|
-
needsReEncryption() {
|
|
29
|
-
return true;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
exports.EncryptedPrivateKeyLegacy = EncryptedPrivateKeyLegacy;
|
|
33
|
-
//# sourceMappingURL=EncryptedPrivateKeyLegacy.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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,22 +0,0 @@
|
|
|
1
|
-
import { PrivateKey } from '../PrivateKey';
|
|
2
|
-
import { CryptoPassword } from '../SymmetricKey';
|
|
3
|
-
import { EncryptedPrivateKeyVersion } from './EncryptedPrivateKeyVersion';
|
|
4
|
-
export declare class EncryptedPrivateKeyV2 extends EncryptedPrivateKeyVersion {
|
|
5
|
-
private static readonly VERSION;
|
|
6
|
-
private static readonly KDF;
|
|
7
|
-
private static readonly SCRYPT_N;
|
|
8
|
-
private static readonly SCRYPT_R;
|
|
9
|
-
private static readonly SCRYPT_P;
|
|
10
|
-
private static readonly SALT_ENTROPY;
|
|
11
|
-
private static readonly CIPHER;
|
|
12
|
-
private static readonly EXPECTED_PARTS;
|
|
13
|
-
private static readonly SYMMETRIC_PAYLOAD_VERSION;
|
|
14
|
-
private static hasSupportedScryptParameters;
|
|
15
|
-
private static deriveSymmetricKey;
|
|
16
|
-
private static toSymmetricPayload;
|
|
17
|
-
static encrypt(privateKey: PrivateKey, password: CryptoPassword): Promise<string>;
|
|
18
|
-
matches(parts: string[]): boolean;
|
|
19
|
-
decrypt(parts: string[], password: CryptoPassword): Promise<PrivateKey>;
|
|
20
|
-
needsReEncryption(): boolean;
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=EncryptedPrivateKeyV2.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|