@haskou/value-objects 2.7.4 → 2.8.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 +63 -9
- package/dist/value-objects/crypto/AsymmetricEncryptedPayload.d.ts +5 -0
- package/dist/value-objects/crypto/AsymmetricEncryptedPayload.d.ts.map +1 -0
- package/dist/value-objects/crypto/AsymmetricEncryptedPayload.js +11 -0
- package/dist/value-objects/crypto/AsymmetricEncryptedPayload.js.map +1 -0
- package/dist/value-objects/crypto/EncryptedPayload.d.ts +2 -0
- package/dist/value-objects/crypto/EncryptedPayload.d.ts.map +1 -1
- package/dist/value-objects/crypto/EncryptedPayload.js +10 -0
- package/dist/value-objects/crypto/EncryptedPayload.js.map +1 -1
- package/dist/value-objects/crypto/PublicKey.d.ts +2 -2
- package/dist/value-objects/crypto/PublicKey.d.ts.map +1 -1
- package/dist/value-objects/crypto/PublicKey.js +2 -2
- package/dist/value-objects/crypto/PublicKey.js.map +1 -1
- package/dist/value-objects/crypto/SymmetricEncryptedPayload.d.ts +5 -0
- package/dist/value-objects/crypto/SymmetricEncryptedPayload.d.ts.map +1 -0
- package/dist/value-objects/crypto/SymmetricEncryptedPayload.js +11 -0
- package/dist/value-objects/crypto/SymmetricEncryptedPayload.js.map +1 -0
- package/dist/value-objects/crypto/SymmetricKey.d.ts +40 -0
- package/dist/value-objects/crypto/SymmetricKey.d.ts.map +1 -0
- package/dist/value-objects/crypto/SymmetricKey.js +114 -0
- package/dist/value-objects/crypto/SymmetricKey.js.map +1 -0
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.d.ts +3 -2
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.d.ts.map +1 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.js +35 -14
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.js.map +1 -1
- package/dist/value-objects/crypto/index.d.ts +3 -0
- package/dist/value-objects/crypto/index.d.ts.map +1 -1
- package/dist/value-objects/crypto/index.js +3 -0
- package/dist/value-objects/crypto/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@ npm install @haskou/value-objects
|
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
```typescript
|
|
18
|
-
import { Email, PositiveNumber, Color, Hour } from 'value-objects';
|
|
18
|
+
import { Email, PositiveNumber, Color, Hour } from '@haskou/value-objects';
|
|
19
19
|
|
|
20
20
|
// ✅ Automatic validation on construction
|
|
21
21
|
const email = new Email('user@example.com'); // Valid
|
|
@@ -87,13 +87,55 @@ your application.
|
|
|
87
87
|
- **`Coordinates`** - Coordinate pairs
|
|
88
88
|
|
|
89
89
|
### 🔐 Cryptography
|
|
90
|
-
- **`KeyPair`** - Ed25519 key pair generation
|
|
91
|
-
- **`PrivateKey`** - Ed25519 private key (PEM format)
|
|
92
|
-
- **`PublicKey`** - Ed25519 public key (PEM format)
|
|
93
|
-
- **`Signature`** - Base64-encoded
|
|
94
|
-
- **`
|
|
90
|
+
- **`KeyPair`** - Ed25519 key pair generation for signing and verification
|
|
91
|
+
- **`PrivateKey`** - Ed25519 private key (PEM format) for signing; also accepted by asymmetric payload decryption for data addressed to the matching key pair
|
|
92
|
+
- **`PublicKey`** - Ed25519 public key (PEM format) for signature verification; also accepted by asymmetric payload encryption to address data to the matching key pair
|
|
93
|
+
- **`Signature`** - Base64-encoded Ed25519 digital signature
|
|
94
|
+
- **`EncryptedPayload`** - Base container for dot-separated encrypted payload formats
|
|
95
|
+
- **`AsymmetricEncryptedPayload`** - Payload encrypted for an Ed25519/X25519 recipient key pair
|
|
96
|
+
- **`SymmetricEncryptedPayload`** - Payload encrypted with a symmetric AES-256-GCM key
|
|
97
|
+
- **`SymmetricKey`** - 32-byte AES-256-GCM key, randomly generated or deterministically derived from a password and salt with scrypt
|
|
98
|
+
- **`EncryptedPrivateKey`** - Password-protected private key encryption using scrypt + AES-256-GCM
|
|
95
99
|
- **`EncryptedKeyPair`** - Key pair with encrypted private key
|
|
96
100
|
|
|
101
|
+
Technical notes:
|
|
102
|
+
|
|
103
|
+
- Asymmetric payload encryption is a classical hybrid scheme. It generates an ephemeral
|
|
104
|
+
X25519 key pair, converts the recipient Ed25519 key material to Montgomery
|
|
105
|
+
form for X25519 key agreement, derives a shared secret, then derives a
|
|
106
|
+
256-bit AES key with SHA-256 and encrypts the payload with AES-256-GCM.
|
|
107
|
+
- The asymmetric payload format is
|
|
108
|
+
`ephemeralPublicKey.iv.cipherText.tag`, with Base64-encoded fields,
|
|
109
|
+
32-byte ephemeral public keys, 12-byte random IVs, and 16-byte
|
|
110
|
+
authentication tags. Tampered ciphertext, IVs, tags, or key-agreement data
|
|
111
|
+
fail authentication during decryption.
|
|
112
|
+
- Symmetric payload encryption uses a 32-byte AES-256-GCM key directly. The
|
|
113
|
+
payload format is `v1.aes-256-gcm.iv.cipherText.tag`, with Base64-encoded
|
|
114
|
+
IV, ciphertext, and tag fields.
|
|
115
|
+
- `SymmetricKey.generate()` creates a random 256-bit key. `SymmetricKey.fromPassword()`
|
|
116
|
+
derives the same 256-bit key from the same password, salt, and scrypt
|
|
117
|
+
parameters. Encryption itself is still randomized because each payload uses a
|
|
118
|
+
fresh 12-byte IV.
|
|
119
|
+
- A 32-byte key provides the AES-256 key size. Real security depends on using
|
|
120
|
+
either a high-entropy random key or a strong password with a unique,
|
|
121
|
+
non-empty salt. AES-GCM also requires that IVs do not repeat for the same key;
|
|
122
|
+
the library generates a random 96-bit IV for each encryption.
|
|
123
|
+
- Payload encryption is intended for small payloads and is currently capped at
|
|
124
|
+
1 MiB before encryption.
|
|
125
|
+
- Encrypted private keys use a separate password-based scheme:
|
|
126
|
+
`scrypt(N=16384,r=8,p=1)` with a 16-byte salt, then AES-256-GCM with a
|
|
127
|
+
12-byte IV and 16-byte authentication tag.
|
|
128
|
+
- This is not a post-quantum cryptography scheme. Ed25519 and X25519 are
|
|
129
|
+
classical elliptic-curve primitives, so neither signatures nor payload key
|
|
130
|
+
agreement are post-quantum secure.
|
|
131
|
+
- Payload encryption uses fresh ephemeral key material and a random IV per
|
|
132
|
+
encryption, but captured payloads can still be decrypted later if the
|
|
133
|
+
recipient private key is compromised. Treat it as recipient-addressed
|
|
134
|
+
encryption with ciphertext integrity, not as sender-authenticated encryption
|
|
135
|
+
or a forward-secret transport protocol.
|
|
136
|
+
- The payload encryption format is library-specific, not HPKE, and has not been
|
|
137
|
+
independently audited as a protocol.
|
|
138
|
+
|
|
97
139
|
### 📎 Media
|
|
98
140
|
- **`Media`** - Binary/string content with Buffer, size, and Base64 helpers
|
|
99
141
|
|
|
@@ -147,15 +189,26 @@ const sha512 = SHA512Hash.from('hello'); // 9b71d224bd62f3785d96d46ad3ea3d73319b
|
|
|
147
189
|
console.log(md5.toBase64());
|
|
148
190
|
|
|
149
191
|
// Crypto
|
|
150
|
-
const keyPair = KeyPair.generate(); // Ed25519 key pair
|
|
192
|
+
const keyPair = await KeyPair.generate(); // Ed25519 key pair
|
|
151
193
|
const signature = keyPair.sign('hello world'); // Sign a message
|
|
152
194
|
keyPair.isValidSignature('hello world', signature); // true
|
|
153
195
|
|
|
154
196
|
// Encrypted key pairs
|
|
155
197
|
const encrypted = await keyPair.encryptKeyPair('my-password');
|
|
156
|
-
const sig = encrypted.sign('message', 'my-password');
|
|
198
|
+
const sig = await encrypted.sign('message', 'my-password');
|
|
157
199
|
encrypted.isValidSignature('message', sig); // true
|
|
158
200
|
|
|
201
|
+
// Symmetric payload encryption
|
|
202
|
+
const symmetricKey = SymmetricKey.generate();
|
|
203
|
+
const symmetricPayload = symmetricKey.encrypt('secret data');
|
|
204
|
+
const plaintext = symmetricKey.decrypt(symmetricPayload);
|
|
205
|
+
console.log(plaintext.toString()); // 'secret data'
|
|
206
|
+
|
|
207
|
+
// Deterministic key derivation from a password and explicit salt
|
|
208
|
+
const derivedKey = await SymmetricKey.fromPassword('my-password', {
|
|
209
|
+
salt: 'stable-application-salt',
|
|
210
|
+
});
|
|
211
|
+
|
|
159
212
|
// Media
|
|
160
213
|
const media = new Media('hello world');
|
|
161
214
|
console.log(media.getSize()); // 11
|
|
@@ -211,7 +264,8 @@ to choose the npm version bump:
|
|
|
211
264
|
Branches without one of these prefixes still run CI, but they do not publish
|
|
212
265
|
to npm. Publishing uses npm Trusted Publishing from the `ci.yml` workflow.
|
|
213
266
|
After a successful publish, CI commits the release version to the default
|
|
214
|
-
branch
|
|
267
|
+
branch, creates the matching `vX.Y.Z` Git tag, and publishes a compact GitHub
|
|
268
|
+
Release with the PR title, npm package link, release branch, and PR notes.
|
|
215
269
|
|
|
216
270
|
## 🤝 Contributing
|
|
217
271
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AsymmetricEncryptedPayload.d.ts","sourceRoot":"","sources":["../../../src/value-objects/crypto/AsymmetricEncryptedPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE9E,qBAAa,0BAA2B,SAAQ,gBAAgB;IACvD,SAAS,IAAI,sBAAsB;CAG3C"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AsymmetricEncryptedPayload = void 0;
|
|
4
|
+
const EncryptedPayload_1 = require("./EncryptedPayload");
|
|
5
|
+
class AsymmetricEncryptedPayload extends EncryptedPayload_1.EncryptedPayload {
|
|
6
|
+
getScheme() {
|
|
7
|
+
return 'asymmetric';
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.AsymmetricEncryptedPayload = AsymmetricEncryptedPayload;
|
|
11
|
+
//# sourceMappingURL=AsymmetricEncryptedPayload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AsymmetricEncryptedPayload.js","sourceRoot":"","sources":["../../../src/value-objects/crypto/AsymmetricEncryptedPayload.ts"],"names":[],"mappings":";;;AAAA,yDAA8E;AAE9E,MAAa,0BAA2B,SAAQ,mCAAgB;IACvD,SAAS;QACd,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AAJD,gEAIC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { ValueObject } from '../ValueObject';
|
|
2
|
+
export type EncryptedPayloadScheme = 'asymmetric' | 'symmetric' | 'unknown';
|
|
2
3
|
export declare class EncryptedPayload extends ValueObject<string> {
|
|
4
|
+
getScheme(): EncryptedPayloadScheme;
|
|
3
5
|
}
|
|
4
6
|
//# sourceMappingURL=EncryptedPayload.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EncryptedPayload.d.ts","sourceRoot":"","sources":["../../../src/value-objects/crypto/EncryptedPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,qBAAa,gBAAiB,SAAQ,WAAW,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"EncryptedPayload.d.ts","sourceRoot":"","sources":["../../../src/value-objects/crypto/EncryptedPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,MAAM,sBAAsB,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,CAAC;AAE5E,qBAAa,gBAAiB,SAAQ,WAAW,CAAC,MAAM,CAAC;IAChD,SAAS,IAAI,sBAAsB;CAa3C"}
|
|
@@ -3,6 +3,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.EncryptedPayload = void 0;
|
|
4
4
|
const ValueObject_1 = require("../ValueObject");
|
|
5
5
|
class EncryptedPayload extends ValueObject_1.ValueObject {
|
|
6
|
+
getScheme() {
|
|
7
|
+
const parts = this.valueOf().split('.');
|
|
8
|
+
if (parts.length === 4) {
|
|
9
|
+
return 'asymmetric';
|
|
10
|
+
}
|
|
11
|
+
if (parts.length === 5 && parts[0] === 'v1' && parts[1] === 'aes-256-gcm') {
|
|
12
|
+
return 'symmetric';
|
|
13
|
+
}
|
|
14
|
+
return 'unknown';
|
|
15
|
+
}
|
|
6
16
|
}
|
|
7
17
|
exports.EncryptedPayload = EncryptedPayload;
|
|
8
18
|
//# sourceMappingURL=EncryptedPayload.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EncryptedPayload.js","sourceRoot":"","sources":["../../../src/value-objects/crypto/EncryptedPayload.ts"],"names":[],"mappings":";;;AAAA,gDAA6C;
|
|
1
|
+
{"version":3,"file":"EncryptedPayload.js","sourceRoot":"","sources":["../../../src/value-objects/crypto/EncryptedPayload.ts"],"names":[],"mappings":";;;AAAA,gDAA6C;AAI7C,MAAa,gBAAiB,SAAQ,yBAAmB;IAChD,SAAS;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAExC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,aAAa,EAAE,CAAC;YAC1E,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAdD,4CAcC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StringValueObject } from '../StringValueObject';
|
|
2
|
+
import { AsymmetricEncryptedPayload } from './AsymmetricEncryptedPayload';
|
|
2
3
|
import { CryptoPayload } from './CryptoPayload';
|
|
3
|
-
import { EncryptedPayload } from './EncryptedPayload';
|
|
4
4
|
import { Key } from './Key';
|
|
5
5
|
import { Signature } from './Signature';
|
|
6
6
|
export declare class PublicKey extends Key {
|
|
@@ -11,6 +11,6 @@ export declare class PublicKey extends Key {
|
|
|
11
11
|
constructor(value: string | StringValueObject);
|
|
12
12
|
private ensureIsValidPublicKey;
|
|
13
13
|
isValidSignature(payload: CryptoPayload, signature: Signature): boolean;
|
|
14
|
-
encrypt(payload: CryptoPayload):
|
|
14
|
+
encrypt(payload: CryptoPayload): AsymmetricEncryptedPayload;
|
|
15
15
|
}
|
|
16
16
|
//# sourceMappingURL=PublicKey.d.ts.map
|
|
@@ -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;
|
|
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;WAEhE,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;CA4CnE"}
|
|
@@ -7,8 +7,8 @@ const InvalidLengthError_1 = require("../../errors/InvalidLengthError");
|
|
|
7
7
|
const patterns_1 = require("../../patterns");
|
|
8
8
|
const media_1 = require("../media");
|
|
9
9
|
const NullObject_1 = require("../NullObject");
|
|
10
|
+
const AsymmetricEncryptedPayload_1 = require("./AsymmetricEncryptedPayload");
|
|
10
11
|
const CryptoAdapter_1 = require("./CryptoAdapter");
|
|
11
|
-
const EncryptedPayload_1 = require("./EncryptedPayload");
|
|
12
12
|
const Key_1 = require("./Key");
|
|
13
13
|
class PublicKey extends Key_1.Key {
|
|
14
14
|
static LENGTH = 113;
|
|
@@ -54,7 +54,7 @@ class PublicKey extends Key_1.Key {
|
|
|
54
54
|
buffer_1.Buffer.from(cipherText).toString('base64'),
|
|
55
55
|
buffer_1.Buffer.from(tag).toString('base64'),
|
|
56
56
|
].join('.');
|
|
57
|
-
return new
|
|
57
|
+
return new AsymmetricEncryptedPayload_1.AsymmetricEncryptedPayload(result);
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
exports.PublicKey = PublicKey;
|
|
@@ -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,mDAAgD;AAEhD
|
|
1
|
+
{"version":3,"file":"PublicKey.js","sourceRoot":"","sources":["../../../src/value-objects/crypto/PublicKey.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Buffer } from 'buffer';
|
|
2
|
+
import { StringValueObject } from '../StringValueObject';
|
|
3
|
+
import { ValueObject } from '../ValueObject';
|
|
4
|
+
import { CryptoPayload } from './CryptoPayload';
|
|
5
|
+
import { EncryptedPayload } from './EncryptedPayload';
|
|
6
|
+
import { SymmetricEncryptedPayload } from './SymmetricEncryptedPayload';
|
|
7
|
+
export type SymmetricKeyDerivationOptions = {
|
|
8
|
+
N?: number;
|
|
9
|
+
p?: number;
|
|
10
|
+
r?: number;
|
|
11
|
+
salt: string | StringValueObject | Buffer;
|
|
12
|
+
};
|
|
13
|
+
export declare class SymmetricKey extends ValueObject<string> {
|
|
14
|
+
private static readonly ALGORITHM;
|
|
15
|
+
private static readonly IV_LENGTH;
|
|
16
|
+
private static readonly KEY_LENGTH;
|
|
17
|
+
private static readonly MAX_PAYLOAD_LENGTH;
|
|
18
|
+
private static readonly PAYLOAD_PARTS;
|
|
19
|
+
private static readonly SCRYPT_N;
|
|
20
|
+
private static readonly SCRYPT_P;
|
|
21
|
+
private static readonly SCRYPT_R;
|
|
22
|
+
private static readonly TAG_LENGTH;
|
|
23
|
+
private static readonly VERSION;
|
|
24
|
+
private static readonly BASE64_PATTERN;
|
|
25
|
+
private static getBase64DecodedLength;
|
|
26
|
+
private static ensureIsBase64;
|
|
27
|
+
private static ensureBase64DecodedLength;
|
|
28
|
+
private static getSaltBytes;
|
|
29
|
+
private static getPayloadBytes;
|
|
30
|
+
static fromBase64(key: string | StringValueObject): SymmetricKey;
|
|
31
|
+
static fromBuffer(key: Buffer): SymmetricKey;
|
|
32
|
+
static generate(): SymmetricKey;
|
|
33
|
+
static fromPassword(password: string | StringValueObject, options: SymmetricKeyDerivationOptions): Promise<SymmetricKey>;
|
|
34
|
+
constructor(value: string | StringValueObject);
|
|
35
|
+
private ensureIsValidKey;
|
|
36
|
+
getBuffer(): Buffer;
|
|
37
|
+
encrypt(payload: CryptoPayload): SymmetricEncryptedPayload;
|
|
38
|
+
decrypt(encryptedPayload: EncryptedPayload): Buffer;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=SymmetricKey.d.ts.map
|
|
@@ -0,0 +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;AACtD,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,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,UAAU,CAAM;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAQ;IACvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAC+B;IAErE,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAMrC,OAAO,CAAC,MAAM,CAAC,cAAc;IAa7B,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAYxC,OAAO,CAAC,MAAM,CAAC,YAAY;IAU3B,OAAO,CAAC,MAAM,CAAC,eAAe;WAMhB,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,MAAM,GAAG,iBAAiB,EACpC,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,YAAY,CAAC;gBAkBZ,KAAK,EAAE,MAAM,GAAG,iBAAiB;IAU7C,OAAO,CAAC,gBAAgB;IAcjB,SAAS,IAAI,MAAM;IAInB,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,yBAAyB;IA4B1D,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,MAAM;CAuC3D"}
|
|
@@ -0,0 +1,114 @@
|
|
|
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 SymmetricEncryptedPayload_1 = require("./SymmetricEncryptedPayload");
|
|
14
|
+
class SymmetricKey extends ValueObject_1.ValueObject {
|
|
15
|
+
static ALGORITHM = 'aes-256-gcm';
|
|
16
|
+
static IV_LENGTH = 12;
|
|
17
|
+
static KEY_LENGTH = 32;
|
|
18
|
+
static MAX_PAYLOAD_LENGTH = 1024 * 1024;
|
|
19
|
+
static PAYLOAD_PARTS = 5;
|
|
20
|
+
static SCRYPT_N = 16384;
|
|
21
|
+
static SCRYPT_P = 1;
|
|
22
|
+
static SCRYPT_R = 8;
|
|
23
|
+
static TAG_LENGTH = 16;
|
|
24
|
+
static VERSION = 'v1';
|
|
25
|
+
static BASE64_PATTERN = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;
|
|
26
|
+
static getBase64DecodedLength(value) {
|
|
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()));
|
|
34
|
+
}
|
|
35
|
+
static ensureBase64DecodedLength(value, encryptedPayload, length) {
|
|
36
|
+
SymmetricKey.ensureIsBase64(value, encryptedPayload);
|
|
37
|
+
(0, patterns_1.assert)(SymmetricKey.getBase64DecodedLength(value) === length, new InvalidFormatError_1.InvalidFormatError(encryptedPayload.valueOf()));
|
|
38
|
+
}
|
|
39
|
+
static getSaltBytes(salt) {
|
|
40
|
+
if (buffer_1.Buffer.isBuffer(salt)) {
|
|
41
|
+
return salt;
|
|
42
|
+
}
|
|
43
|
+
return buffer_1.Buffer.from(salt.valueOf());
|
|
44
|
+
}
|
|
45
|
+
static getPayloadBytes(payload) {
|
|
46
|
+
return payload instanceof media_1.Media
|
|
47
|
+
? payload.getBuffer()
|
|
48
|
+
: buffer_1.Buffer.from(payload.valueOf());
|
|
49
|
+
}
|
|
50
|
+
static fromBase64(key) {
|
|
51
|
+
return new SymmetricKey(key.valueOf());
|
|
52
|
+
}
|
|
53
|
+
static fromBuffer(key) {
|
|
54
|
+
(0, patterns_1.assert)(key.length === SymmetricKey.KEY_LENGTH, new InvalidLengthError_1.InvalidLengthError(key.length, SymmetricKey.KEY_LENGTH));
|
|
55
|
+
return new SymmetricKey(key.toString('base64'));
|
|
56
|
+
}
|
|
57
|
+
static generate() {
|
|
58
|
+
return SymmetricKey.fromBuffer(CryptoAdapter_1.CryptoAdapter.randomBytes(SymmetricKey.KEY_LENGTH));
|
|
59
|
+
}
|
|
60
|
+
static async fromPassword(password, options) {
|
|
61
|
+
const salt = SymmetricKey.getSaltBytes(options.salt);
|
|
62
|
+
(0, patterns_1.assert)(salt.length > 0, new InvalidLengthError_1.InvalidLengthError(salt.length, 1));
|
|
63
|
+
const key = await CryptoDerivation_1.CryptoDerivation.scryptAsync(password.valueOf(), salt, SymmetricKey.KEY_LENGTH, {
|
|
64
|
+
N: options.N ?? SymmetricKey.SCRYPT_N,
|
|
65
|
+
p: options.p ?? SymmetricKey.SCRYPT_P,
|
|
66
|
+
r: options.r ?? SymmetricKey.SCRYPT_R,
|
|
67
|
+
});
|
|
68
|
+
return SymmetricKey.fromBuffer(buffer_1.Buffer.from(key));
|
|
69
|
+
}
|
|
70
|
+
constructor(value) {
|
|
71
|
+
super(value?.valueOf());
|
|
72
|
+
if (NullObject_1.NullObject.isNullObject(this)) {
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
this.ensureIsValidKey(this.value);
|
|
76
|
+
}
|
|
77
|
+
ensureIsValidKey(value) {
|
|
78
|
+
(0, patterns_1.assert)(value.length % 4 === 0 && SymmetricKey.BASE64_PATTERN.test(value), new InvalidFormatError_1.InvalidFormatError(value));
|
|
79
|
+
(0, patterns_1.assert)(SymmetricKey.getBase64DecodedLength(value) === SymmetricKey.KEY_LENGTH, new InvalidLengthError_1.InvalidLengthError(SymmetricKey.getBase64DecodedLength(value), SymmetricKey.KEY_LENGTH));
|
|
80
|
+
}
|
|
81
|
+
getBuffer() {
|
|
82
|
+
return buffer_1.Buffer.from(this.valueOf(), 'base64');
|
|
83
|
+
}
|
|
84
|
+
encrypt(payload) {
|
|
85
|
+
const messageBuffer = SymmetricKey.getPayloadBytes(payload);
|
|
86
|
+
(0, patterns_1.assert)(messageBuffer.length <= SymmetricKey.MAX_PAYLOAD_LENGTH, new InvalidLengthError_1.InvalidLengthError(messageBuffer.length, SymmetricKey.MAX_PAYLOAD_LENGTH));
|
|
87
|
+
const iv = CryptoAdapter_1.CryptoAdapter.randomBytes(SymmetricKey.IV_LENGTH);
|
|
88
|
+
const { cipherText, tag } = CryptoAdapter_1.CryptoAdapter.encryptAes256Gcm(this.getBuffer(), iv, messageBuffer);
|
|
89
|
+
const result = [
|
|
90
|
+
SymmetricKey.VERSION,
|
|
91
|
+
SymmetricKey.ALGORITHM,
|
|
92
|
+
iv.toString('base64'),
|
|
93
|
+
buffer_1.Buffer.from(cipherText).toString('base64'),
|
|
94
|
+
buffer_1.Buffer.from(tag).toString('base64'),
|
|
95
|
+
].join('.');
|
|
96
|
+
return new SymmetricEncryptedPayload_1.SymmetricEncryptedPayload(result);
|
|
97
|
+
}
|
|
98
|
+
decrypt(encryptedPayload) {
|
|
99
|
+
const parts = encryptedPayload.valueOf().split('.');
|
|
100
|
+
(0, patterns_1.assert)(parts.length === SymmetricKey.PAYLOAD_PARTS, new InvalidFormatError_1.InvalidFormatError(encryptedPayload.valueOf()));
|
|
101
|
+
const [version, algorithm, ivB64, cipherTextB64, tagB64] = parts;
|
|
102
|
+
(0, patterns_1.assert)(version === SymmetricKey.VERSION && algorithm === SymmetricKey.ALGORITHM, new InvalidFormatError_1.InvalidFormatError(encryptedPayload.valueOf()));
|
|
103
|
+
SymmetricKey.ensureBase64DecodedLength(ivB64, encryptedPayload, SymmetricKey.IV_LENGTH);
|
|
104
|
+
SymmetricKey.ensureIsBase64(cipherTextB64, encryptedPayload, {
|
|
105
|
+
allowEmpty: true,
|
|
106
|
+
});
|
|
107
|
+
const cipherTextLength = SymmetricKey.getBase64DecodedLength(cipherTextB64);
|
|
108
|
+
(0, patterns_1.assert)(cipherTextLength <= SymmetricKey.MAX_PAYLOAD_LENGTH, new InvalidLengthError_1.InvalidLengthError(cipherTextLength, SymmetricKey.MAX_PAYLOAD_LENGTH));
|
|
109
|
+
SymmetricKey.ensureBase64DecodedLength(tagB64, encryptedPayload, SymmetricKey.TAG_LENGTH);
|
|
110
|
+
return CryptoAdapter_1.CryptoAdapter.decryptAes256Gcm(this.getBuffer(), buffer_1.Buffer.from(ivB64, 'base64'), buffer_1.Buffer.from(cipherTextB64, 'base64'), buffer_1.Buffer.from(tagB64, 'base64'));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
exports.SymmetricKey = SymmetricKey;
|
|
114
|
+
//# sourceMappingURL=SymmetricKey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SymmetricKey.js","sourceRoot":"","sources":["../../../src/value-objects/crypto/SymmetricKey.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,11 +8,12 @@ export declare class EncryptedPrivateKeyV2 extends EncryptedPrivateKeyVersion {
|
|
|
8
8
|
private static readonly SCRYPT_R;
|
|
9
9
|
private static readonly SCRYPT_P;
|
|
10
10
|
private static readonly SALT_ENTROPY;
|
|
11
|
-
private static readonly IV_ENTROPY;
|
|
12
|
-
private static readonly KEY_LENGTH;
|
|
13
11
|
private static readonly CIPHER;
|
|
14
12
|
private static readonly EXPECTED_PARTS;
|
|
13
|
+
private static readonly SYMMETRIC_PAYLOAD_VERSION;
|
|
15
14
|
private static hasSupportedScryptParameters;
|
|
15
|
+
private static deriveSymmetricKey;
|
|
16
|
+
private static toSymmetricPayload;
|
|
16
17
|
static encrypt(privateKey: PrivateKey, password: string | StringValueObject): Promise<string>;
|
|
17
18
|
matches(parts: string[]): boolean;
|
|
18
19
|
decrypt(parts: string[], password: string | StringValueObject): Promise<PrivateKey>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EncryptedPrivateKeyV2.d.ts","sourceRoot":"","sources":["../../../../src/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"EncryptedPrivateKeyV2.d.ts","sourceRoot":"","sources":["../../../../src/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI3C,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,MAAM,GAAG,iBAAiB,GACnC,OAAO,CAAC,MAAM,CAAC;IA8BX,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO;IAS3B,OAAO,CAClB,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GACnC,OAAO,CAAC,UAAU,CAAC;CAqBvB"}
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EncryptedPrivateKeyV2 = void 0;
|
|
4
4
|
const buffer_1 = require("buffer");
|
|
5
|
-
const CryptoAdapter_1 = require("../CryptoAdapter");
|
|
6
5
|
const PrivateKey_1 = require("../PrivateKey");
|
|
6
|
+
const SymmetricEncryptedPayload_1 = require("../SymmetricEncryptedPayload");
|
|
7
|
+
const SymmetricKey_1 = require("../SymmetricKey");
|
|
7
8
|
const CryptoDerivation_1 = require("./CryptoDerivation");
|
|
8
9
|
const EncryptedPrivateKeyVersion_1 = require("./EncryptedPrivateKeyVersion");
|
|
9
10
|
class EncryptedPrivateKeyV2 extends EncryptedPrivateKeyVersion_1.EncryptedPrivateKeyVersion {
|
|
@@ -13,24 +14,43 @@ class EncryptedPrivateKeyV2 extends EncryptedPrivateKeyVersion_1.EncryptedPrivat
|
|
|
13
14
|
static SCRYPT_R = 8;
|
|
14
15
|
static SCRYPT_P = 1;
|
|
15
16
|
static SALT_ENTROPY = 16;
|
|
16
|
-
static IV_ENTROPY = 12;
|
|
17
|
-
static KEY_LENGTH = 32;
|
|
18
17
|
static CIPHER = 'aes-256-gcm';
|
|
19
18
|
static EXPECTED_PARTS = 9;
|
|
19
|
+
static SYMMETRIC_PAYLOAD_VERSION = 'v1';
|
|
20
20
|
static hasSupportedScryptParameters(parts) {
|
|
21
21
|
return (parts[2] === `N${EncryptedPrivateKeyV2.SCRYPT_N}` &&
|
|
22
22
|
parts[3] === `r${EncryptedPrivateKeyV2.SCRYPT_R}` &&
|
|
23
23
|
parts[4] === `p${EncryptedPrivateKeyV2.SCRYPT_P}`);
|
|
24
24
|
}
|
|
25
|
+
static async deriveSymmetricKey(password, salt, options) {
|
|
26
|
+
return SymmetricKey_1.SymmetricKey.fromPassword(password, { ...options, salt });
|
|
27
|
+
}
|
|
28
|
+
static toSymmetricPayload(parts) {
|
|
29
|
+
const iv = parts[6];
|
|
30
|
+
const tag = parts[7];
|
|
31
|
+
const cipherText = parts[8];
|
|
32
|
+
return new SymmetricEncryptedPayload_1.SymmetricEncryptedPayload([
|
|
33
|
+
EncryptedPrivateKeyV2.SYMMETRIC_PAYLOAD_VERSION,
|
|
34
|
+
EncryptedPrivateKeyV2.CIPHER,
|
|
35
|
+
iv,
|
|
36
|
+
cipherText,
|
|
37
|
+
tag,
|
|
38
|
+
].join('.'));
|
|
39
|
+
}
|
|
25
40
|
static async encrypt(privateKey, password) {
|
|
26
41
|
const salt = await CryptoDerivation_1.CryptoDerivation.randomBytesAsync(EncryptedPrivateKeyV2.SALT_ENTROPY);
|
|
27
|
-
const key = await
|
|
42
|
+
const key = await EncryptedPrivateKeyV2.deriveSymmetricKey(password, salt, {
|
|
28
43
|
N: EncryptedPrivateKeyV2.SCRYPT_N,
|
|
29
44
|
p: EncryptedPrivateKeyV2.SCRYPT_P,
|
|
30
45
|
r: EncryptedPrivateKeyV2.SCRYPT_R,
|
|
31
46
|
});
|
|
32
|
-
const
|
|
33
|
-
|
|
47
|
+
const symmetricPayload = key
|
|
48
|
+
.encrypt(privateKey.valueOf())
|
|
49
|
+
.valueOf()
|
|
50
|
+
.split('.');
|
|
51
|
+
const iv = symmetricPayload[2];
|
|
52
|
+
const cipherText = symmetricPayload[3];
|
|
53
|
+
const tag = symmetricPayload[4];
|
|
34
54
|
return [
|
|
35
55
|
EncryptedPrivateKeyV2.VERSION,
|
|
36
56
|
EncryptedPrivateKeyV2.KDF,
|
|
@@ -38,9 +58,9 @@ class EncryptedPrivateKeyV2 extends EncryptedPrivateKeyVersion_1.EncryptedPrivat
|
|
|
38
58
|
`r${EncryptedPrivateKeyV2.SCRYPT_R}`,
|
|
39
59
|
`p${EncryptedPrivateKeyV2.SCRYPT_P}`,
|
|
40
60
|
salt.toString('base64'),
|
|
41
|
-
iv
|
|
42
|
-
|
|
43
|
-
|
|
61
|
+
iv,
|
|
62
|
+
tag,
|
|
63
|
+
cipherText,
|
|
44
64
|
].join('.');
|
|
45
65
|
}
|
|
46
66
|
matches(parts) {
|
|
@@ -57,11 +77,12 @@ class EncryptedPrivateKeyV2 extends EncryptedPrivateKeyVersion_1.EncryptedPrivat
|
|
|
57
77
|
const r = parseInt(parts[3].slice(1), 10);
|
|
58
78
|
const p = parseInt(parts[4].slice(1), 10);
|
|
59
79
|
const salt = buffer_1.Buffer.from(parts[5], 'base64');
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
80
|
+
const key = await EncryptedPrivateKeyV2.deriveSymmetricKey(password, salt, {
|
|
81
|
+
N,
|
|
82
|
+
p,
|
|
83
|
+
r,
|
|
84
|
+
});
|
|
85
|
+
const decrypted = key.decrypt(EncryptedPrivateKeyV2.toSymmetricPayload(parts));
|
|
65
86
|
return new PrivateKey_1.PrivateKey(decrypted.toString());
|
|
66
87
|
}
|
|
67
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EncryptedPrivateKeyV2.js","sourceRoot":"","sources":["../../../../src/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAGhC,
|
|
1
|
+
{"version":3,"file":"EncryptedPrivateKeyV2.js","sourceRoot":"","sources":["../../../../src/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export * from './AsymmetricEncryptedPayload';
|
|
1
2
|
export * from './EncryptedKeyPair';
|
|
2
3
|
export * from './EncryptedPayload';
|
|
3
4
|
export * from './EncryptedPrivateKey';
|
|
@@ -6,4 +7,6 @@ export * from './KeyPair';
|
|
|
6
7
|
export * from './PrivateKey';
|
|
7
8
|
export * from './PublicKey';
|
|
8
9
|
export * from './Signature';
|
|
10
|
+
export * from './SymmetricEncryptedPayload';
|
|
11
|
+
export * from './SymmetricKey';
|
|
9
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/value-objects/crypto/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/value-objects/crypto/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gBAAgB,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./AsymmetricEncryptedPayload"), exports);
|
|
4
5
|
tslib_1.__exportStar(require("./EncryptedKeyPair"), exports);
|
|
5
6
|
tslib_1.__exportStar(require("./EncryptedPayload"), exports);
|
|
6
7
|
tslib_1.__exportStar(require("./EncryptedPrivateKey"), exports);
|
|
@@ -9,4 +10,6 @@ tslib_1.__exportStar(require("./KeyPair"), exports);
|
|
|
9
10
|
tslib_1.__exportStar(require("./PrivateKey"), exports);
|
|
10
11
|
tslib_1.__exportStar(require("./PublicKey"), exports);
|
|
11
12
|
tslib_1.__exportStar(require("./Signature"), exports);
|
|
13
|
+
tslib_1.__exportStar(require("./SymmetricEncryptedPayload"), exports);
|
|
14
|
+
tslib_1.__exportStar(require("./SymmetricKey"), exports);
|
|
12
15
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/value-objects/crypto/index.ts"],"names":[],"mappings":";;;AAAA,6DAAmC;AACnC,6DAAmC;AACnC,gEAAsC;AACtC,gDAAsB;AACtB,oDAA0B;AAC1B,uDAA6B;AAC7B,sDAA4B;AAC5B,sDAA4B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/value-objects/crypto/index.ts"],"names":[],"mappings":";;;AAAA,uEAA6C;AAC7C,6DAAmC;AACnC,6DAAmC;AACnC,gEAAsC;AACtC,gDAAsB;AACtB,oDAA0B;AAC1B,uDAA6B;AAC7B,sDAA4B;AAC5B,sDAA4B;AAC5B,sEAA4C;AAC5C,yDAA+B"}
|