@digitaldefiance/ecies-lib 1.0.23 → 1.0.25
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 +131 -4
- package/dist/constants.d.ts +0 -13
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +3 -164
- package/dist/constants.js.map +1 -1
- package/dist/defaults.d.ts +37 -0
- package/dist/defaults.d.ts.map +1 -0
- package/dist/defaults.js +323 -0
- package/dist/defaults.js.map +1 -0
- package/dist/enumerations/ecies-string-key.d.ts +1 -0
- package/dist/enumerations/ecies-string-key.d.ts.map +1 -1
- package/dist/enumerations/ecies-string-key.js +1 -0
- package/dist/enumerations/ecies-string-key.js.map +1 -1
- package/dist/enumerations/pbkdf2-error-type.d.ts +1 -0
- package/dist/enumerations/pbkdf2-error-type.d.ts.map +1 -1
- package/dist/enumerations/pbkdf2-error-type.js +1 -0
- package/dist/enumerations/pbkdf2-error-type.js.map +1 -1
- package/dist/i18n-setup.d.ts.map +1 -1
- package/dist/i18n-setup.js +5 -0
- package/dist/i18n-setup.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/constants.d.ts +2 -29
- package/dist/interfaces/constants.d.ts.map +1 -1
- package/dist/interfaces/defaults.d.ts +35 -0
- package/dist/interfaces/defaults.d.ts.map +1 -0
- package/dist/interfaces/defaults.js +2 -0
- package/dist/interfaces/defaults.js.map +1 -0
- package/dist/interfaces/index.d.ts +1 -1
- package/dist/interfaces/index.d.ts.map +1 -1
- package/dist/interfaces/index.js +1 -1
- package/dist/interfaces/index.js.map +1 -1
- package/dist/interfaces/member-operational.d.ts +3 -2
- package/dist/interfaces/member-operational.d.ts.map +1 -1
- package/dist/member.d.ts +7 -9
- package/dist/member.d.ts.map +1 -1
- package/dist/member.js +13 -13
- package/dist/member.js.map +1 -1
- package/dist/regexes.d.ts +3 -0
- package/dist/regexes.d.ts.map +1 -0
- package/dist/regexes.js +3 -0
- package/dist/regexes.js.map +1 -0
- package/dist/services/aes-gcm.d.ts +4 -3
- package/dist/services/aes-gcm.d.ts.map +1 -1
- package/dist/services/aes-gcm.js +13 -10
- package/dist/services/aes-gcm.js.map +1 -1
- package/dist/services/ecies/crypto-core.d.ts +4 -2
- package/dist/services/ecies/crypto-core.d.ts.map +1 -1
- package/dist/services/ecies/crypto-core.js +9 -7
- package/dist/services/ecies/crypto-core.js.map +1 -1
- package/dist/services/ecies/multi-recipient.d.ts +5 -2
- package/dist/services/ecies/multi-recipient.d.ts.map +1 -1
- package/dist/services/ecies/multi-recipient.js +36 -34
- package/dist/services/ecies/multi-recipient.js.map +1 -1
- package/dist/services/ecies/service.d.ts +9 -5
- package/dist/services/ecies/service.d.ts.map +1 -1
- package/dist/services/ecies/service.js +16 -14
- package/dist/services/ecies/service.js.map +1 -1
- package/dist/services/ecies/single-recipient.d.ts +6 -3
- package/dist/services/ecies/single-recipient.d.ts.map +1 -1
- package/dist/services/ecies/single-recipient.js +27 -25
- package/dist/services/ecies/single-recipient.js.map +1 -1
- package/dist/services/password-login.d.ts +3 -1
- package/dist/services/password-login.d.ts.map +1 -1
- package/dist/services/password-login.js +6 -3
- package/dist/services/password-login.js.map +1 -1
- package/dist/services/pbkdf2.d.ts +7 -3
- package/dist/services/pbkdf2.d.ts.map +1 -1
- package/dist/services/pbkdf2.js +16 -7
- package/dist/services/pbkdf2.js.map +1 -1
- package/dist/types/deep-partial.d.ts +4 -0
- package/dist/types/deep-partial.d.ts.map +1 -0
- package/dist/types/deep-partial.js +2 -0
- package/dist/types/deep-partial.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ECIES } from '../../
|
|
1
|
+
import { ECIES } from '../../defaults';
|
|
2
2
|
import { concatUint8Arrays } from '../../utils';
|
|
3
3
|
import { AESGCMService } from '../aes-gcm';
|
|
4
4
|
import { EciesCryptoCore } from './crypto-core';
|
|
@@ -7,17 +7,19 @@ import { EciesCryptoCore } from './crypto-core';
|
|
|
7
7
|
*/
|
|
8
8
|
export class EciesMultiRecipient {
|
|
9
9
|
cryptoCore;
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
eciesConsts;
|
|
11
|
+
constructor(config, eciesParams) {
|
|
12
|
+
this.cryptoCore = new EciesCryptoCore(config, eciesParams);
|
|
13
|
+
this.eciesConsts = eciesParams ?? ECIES;
|
|
12
14
|
}
|
|
13
15
|
/**
|
|
14
16
|
* Get the header size for multi-recipient encryption
|
|
15
17
|
*/
|
|
16
18
|
getHeaderSize(recipientCount) {
|
|
17
|
-
return (
|
|
18
|
-
|
|
19
|
-
recipientCount *
|
|
20
|
-
recipientCount *
|
|
19
|
+
return (this.eciesConsts.MULTIPLE.DATA_LENGTH_SIZE +
|
|
20
|
+
this.eciesConsts.MULTIPLE.RECIPIENT_COUNT_SIZE +
|
|
21
|
+
recipientCount * this.eciesConsts.MULTIPLE.RECIPIENT_ID_SIZE +
|
|
22
|
+
recipientCount * this.eciesConsts.MULTIPLE.ENCRYPTED_KEY_SIZE);
|
|
21
23
|
}
|
|
22
24
|
/**
|
|
23
25
|
* Encrypt a message symmetric key with a public key
|
|
@@ -28,8 +30,8 @@ export class EciesMultiRecipient {
|
|
|
28
30
|
async encryptKey(receiverPublicKey, messageSymmetricKey) {
|
|
29
31
|
const ephemeralKeyPair = await this.cryptoCore.generateEphemeralKeyPair();
|
|
30
32
|
const sharedSecret = await this.cryptoCore.computeSharedSecret(ephemeralKeyPair.privateKey, receiverPublicKey);
|
|
31
|
-
const symKey = sharedSecret.slice(0,
|
|
32
|
-
const encryptResult = await AESGCMService.encrypt(messageSymmetricKey, symKey, true);
|
|
33
|
+
const symKey = sharedSecret.slice(0, this.eciesConsts.SYMMETRIC.KEY_SIZE);
|
|
34
|
+
const encryptResult = await AESGCMService.encrypt(messageSymmetricKey, symKey, true, this.eciesConsts);
|
|
33
35
|
const { encrypted, iv } = encryptResult;
|
|
34
36
|
const authTag = encryptResult.tag;
|
|
35
37
|
if (!authTag) {
|
|
@@ -44,19 +46,19 @@ export class EciesMultiRecipient {
|
|
|
44
46
|
* @returns The decrypted data buffer
|
|
45
47
|
*/
|
|
46
48
|
async decryptKey(privateKey, encryptedKey) {
|
|
47
|
-
if (encryptedKey.length !==
|
|
48
|
-
throw new Error(`Invalid encrypted key length: expected ${
|
|
49
|
+
if (encryptedKey.length !== this.eciesConsts.MULTIPLE.ENCRYPTED_KEY_SIZE) {
|
|
50
|
+
throw new Error(`Invalid encrypted key length: expected ${this.eciesConsts.MULTIPLE.ENCRYPTED_KEY_SIZE}, got ${encryptedKey.length}`);
|
|
49
51
|
}
|
|
50
|
-
const ephemeralPublicKey = encryptedKey.slice(0,
|
|
51
|
-
const iv = encryptedKey.slice(
|
|
52
|
-
const authTag = encryptedKey.slice(
|
|
53
|
-
const encrypted = encryptedKey.slice(
|
|
52
|
+
const ephemeralPublicKey = encryptedKey.slice(0, this.eciesConsts.PUBLIC_KEY_LENGTH);
|
|
53
|
+
const iv = encryptedKey.slice(this.eciesConsts.PUBLIC_KEY_LENGTH, this.eciesConsts.PUBLIC_KEY_LENGTH + this.eciesConsts.IV_SIZE);
|
|
54
|
+
const authTag = encryptedKey.slice(this.eciesConsts.PUBLIC_KEY_LENGTH + this.eciesConsts.IV_SIZE, this.eciesConsts.PUBLIC_KEY_LENGTH + this.eciesConsts.IV_SIZE + this.eciesConsts.AUTH_TAG_SIZE);
|
|
55
|
+
const encrypted = encryptedKey.slice(this.eciesConsts.PUBLIC_KEY_LENGTH + this.eciesConsts.IV_SIZE + this.eciesConsts.AUTH_TAG_SIZE);
|
|
54
56
|
const sharedSecret = await this.cryptoCore.computeSharedSecret(privateKey, ephemeralPublicKey);
|
|
55
|
-
const symKey = sharedSecret.slice(0,
|
|
57
|
+
const symKey = sharedSecret.slice(0, this.eciesConsts.SYMMETRIC.KEY_SIZE);
|
|
56
58
|
const encryptedWithTag = AESGCMService.combineEncryptedDataAndTag(encrypted, authTag);
|
|
57
59
|
try {
|
|
58
|
-
const decrypted = await AESGCMService.decrypt(iv, encryptedWithTag, symKey, true);
|
|
59
|
-
if (decrypted.length !==
|
|
60
|
+
const decrypted = await AESGCMService.decrypt(iv, encryptedWithTag, symKey, true, this.eciesConsts);
|
|
61
|
+
if (decrypted.length !== this.eciesConsts.SYMMETRIC.KEY_SIZE) {
|
|
60
62
|
throw new Error('Invalid data length');
|
|
61
63
|
}
|
|
62
64
|
return decrypted;
|
|
@@ -70,16 +72,16 @@ export class EciesMultiRecipient {
|
|
|
70
72
|
* Encrypt a message for multiple recipients
|
|
71
73
|
*/
|
|
72
74
|
async encryptMultiple(recipients, message, preamble = new Uint8Array(0)) {
|
|
73
|
-
if (recipients.length >
|
|
75
|
+
if (recipients.length > this.eciesConsts.MULTIPLE.MAX_RECIPIENTS) {
|
|
74
76
|
throw new Error(`Too many recipients: ${recipients.length}`);
|
|
75
77
|
}
|
|
76
|
-
if (message.length >
|
|
78
|
+
if (message.length > this.eciesConsts.MAX_RAW_DATA_SIZE) {
|
|
77
79
|
throw new Error(`Message too large: ${message.length}`);
|
|
78
80
|
}
|
|
79
81
|
// Generate symmetric key
|
|
80
|
-
const symmetricKey = crypto.getRandomValues(new Uint8Array(
|
|
82
|
+
const symmetricKey = crypto.getRandomValues(new Uint8Array(this.eciesConsts.SYMMETRIC.KEY_SIZE));
|
|
81
83
|
// Encrypt message with symmetric key
|
|
82
|
-
const encryptResult = await AESGCMService.encrypt(message, symmetricKey, true);
|
|
84
|
+
const encryptResult = await AESGCMService.encrypt(message, symmetricKey, true, this.eciesConsts);
|
|
83
85
|
const { encrypted, iv } = encryptResult;
|
|
84
86
|
const authTag = encryptResult.tag;
|
|
85
87
|
if (!authTag) {
|
|
@@ -119,15 +121,15 @@ export class EciesMultiRecipient {
|
|
|
119
121
|
const symmetricKey = await this.decryptKey(privateKey, encryptedKey);
|
|
120
122
|
// Extract components from encrypted message
|
|
121
123
|
let offset = 0;
|
|
122
|
-
const iv = encryptedData.encryptedMessage.slice(offset, offset +
|
|
123
|
-
offset +=
|
|
124
|
-
const authTag = encryptedData.encryptedMessage.slice(offset, offset +
|
|
125
|
-
offset +=
|
|
124
|
+
const iv = encryptedData.encryptedMessage.slice(offset, offset + this.eciesConsts.IV_SIZE);
|
|
125
|
+
offset += this.eciesConsts.IV_SIZE;
|
|
126
|
+
const authTag = encryptedData.encryptedMessage.slice(offset, offset + this.eciesConsts.AUTH_TAG_SIZE);
|
|
127
|
+
offset += this.eciesConsts.AUTH_TAG_SIZE;
|
|
126
128
|
const encrypted = encryptedData.encryptedMessage.slice(offset);
|
|
127
129
|
// AES-GCM provides authentication via auth tag (no separate CRC needed)
|
|
128
130
|
// Decrypt with symmetric key
|
|
129
131
|
const encryptedWithTag = AESGCMService.combineEncryptedDataAndTag(encrypted, authTag);
|
|
130
|
-
const decrypted = await AESGCMService.decrypt(iv, encryptedWithTag, symmetricKey, true);
|
|
132
|
+
const decrypted = await AESGCMService.decrypt(iv, encryptedWithTag, symmetricKey, true, this.eciesConsts);
|
|
131
133
|
// Verify length
|
|
132
134
|
if (decrypted.length !== encryptedData.dataLength) {
|
|
133
135
|
throw new Error('Decrypted data length mismatch');
|
|
@@ -141,7 +143,7 @@ export class EciesMultiRecipient {
|
|
|
141
143
|
if (data.recipientIds.length !== data.recipientKeys.length) {
|
|
142
144
|
throw new Error('Recipient count mismatch');
|
|
143
145
|
}
|
|
144
|
-
if (data.dataLength < 0 || data.dataLength >
|
|
146
|
+
if (data.dataLength < 0 || data.dataLength > this.eciesConsts.MAX_RAW_DATA_SIZE) {
|
|
145
147
|
throw new Error('Invalid data length');
|
|
146
148
|
}
|
|
147
149
|
// Data length (8 bytes)
|
|
@@ -169,26 +171,26 @@ export class EciesMultiRecipient {
|
|
|
169
171
|
// Read data length
|
|
170
172
|
const dataLength = Number(view.getBigUint64(offset, false));
|
|
171
173
|
offset += 8;
|
|
172
|
-
if (dataLength <= 0 || dataLength >
|
|
174
|
+
if (dataLength <= 0 || dataLength > this.eciesConsts.MAX_RAW_DATA_SIZE) {
|
|
173
175
|
throw new Error('Invalid data length');
|
|
174
176
|
}
|
|
175
177
|
// Read recipient count
|
|
176
178
|
const recipientCount = view.getUint16(offset, false);
|
|
177
179
|
offset += 2;
|
|
178
|
-
if (recipientCount <= 0 || recipientCount >
|
|
180
|
+
if (recipientCount <= 0 || recipientCount > this.eciesConsts.MULTIPLE.MAX_RECIPIENTS) {
|
|
179
181
|
throw new Error('Invalid recipient count');
|
|
180
182
|
}
|
|
181
183
|
// Read recipient IDs
|
|
182
184
|
const recipientIds = [];
|
|
183
185
|
for (let i = 0; i < recipientCount; i++) {
|
|
184
|
-
recipientIds.push(data.slice(offset, offset +
|
|
185
|
-
offset +=
|
|
186
|
+
recipientIds.push(data.slice(offset, offset + this.eciesConsts.MULTIPLE.RECIPIENT_ID_SIZE));
|
|
187
|
+
offset += this.eciesConsts.MULTIPLE.RECIPIENT_ID_SIZE;
|
|
186
188
|
}
|
|
187
189
|
// Read encrypted keys
|
|
188
190
|
const recipientKeys = [];
|
|
189
191
|
for (let i = 0; i < recipientCount; i++) {
|
|
190
|
-
recipientKeys.push(data.slice(offset, offset +
|
|
191
|
-
offset +=
|
|
192
|
+
recipientKeys.push(data.slice(offset, offset + this.eciesConsts.MULTIPLE.ENCRYPTED_KEY_SIZE));
|
|
193
|
+
offset += this.eciesConsts.MULTIPLE.ENCRYPTED_KEY_SIZE;
|
|
192
194
|
}
|
|
193
195
|
return {
|
|
194
196
|
dataLength,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-recipient.js","sourceRoot":"","sources":["../../../src/services/ecies/multi-recipient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"multi-recipient.js","sourceRoot":"","sources":["../../../src/services/ecies/multi-recipient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,23 @@
|
|
|
1
|
+
import { IECIESConstants } from '../../interfaces/ecies-consts';
|
|
1
2
|
import { EciesEncryptionType, EciesEncryptionTypeEnum } from '../../enumerations/ecies-encryption-type';
|
|
2
3
|
import { IECIESConfig } from '../../interfaces/ecies-config';
|
|
3
4
|
import { SecureString } from '../../secure-string';
|
|
4
5
|
import { SignatureString, SignatureUint8Array } from '../../types';
|
|
5
6
|
import { EciesCryptoCore } from './crypto-core';
|
|
6
7
|
import { ISimpleKeyPair, IWalletSeed } from './interfaces';
|
|
8
|
+
import { EciesSignature } from './signature';
|
|
9
|
+
import { EciesSingleRecipient } from './single-recipient';
|
|
7
10
|
/**
|
|
8
11
|
* Browser-compatible ECIES service that mirrors the server-side functionality
|
|
9
12
|
* Uses Web Crypto API and @scure/@noble libraries for browser compatibility
|
|
10
13
|
*/
|
|
11
14
|
export declare class ECIESService {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
protected readonly _config: IECIESConfig;
|
|
16
|
+
protected readonly cryptoCore: EciesCryptoCore;
|
|
17
|
+
protected readonly signature: EciesSignature;
|
|
18
|
+
protected readonly singleRecipient: EciesSingleRecipient;
|
|
19
|
+
protected readonly eciesConsts: IECIESConstants;
|
|
20
|
+
constructor(config?: Partial<IECIESConfig>, eciesParams?: IECIESConstants);
|
|
17
21
|
get core(): EciesCryptoCore;
|
|
18
22
|
get config(): IECIESConfig;
|
|
19
23
|
get curveName(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/services/ecies/service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/services/ecies/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ECIES } from '../../
|
|
1
|
+
import { ECIES } from '../../defaults';
|
|
2
2
|
import { EciesEncryptionTypeEnum, } from '../../enumerations/ecies-encryption-type';
|
|
3
3
|
import { EciesCryptoCore } from './crypto-core';
|
|
4
4
|
import { EciesSignature } from './signature';
|
|
@@ -12,18 +12,20 @@ export class ECIESService {
|
|
|
12
12
|
cryptoCore;
|
|
13
13
|
signature;
|
|
14
14
|
singleRecipient;
|
|
15
|
-
|
|
15
|
+
eciesConsts;
|
|
16
|
+
constructor(config, eciesParams) {
|
|
17
|
+
this.eciesConsts = eciesParams ?? ECIES;
|
|
16
18
|
this._config = {
|
|
17
|
-
curveName:
|
|
18
|
-
primaryKeyDerivationPath:
|
|
19
|
-
mnemonicStrength:
|
|
20
|
-
symmetricAlgorithm:
|
|
21
|
-
symmetricKeyBits:
|
|
22
|
-
symmetricKeyMode:
|
|
19
|
+
curveName: this.eciesConsts.CURVE_NAME,
|
|
20
|
+
primaryKeyDerivationPath: this.eciesConsts.PRIMARY_KEY_DERIVATION_PATH,
|
|
21
|
+
mnemonicStrength: this.eciesConsts.MNEMONIC_STRENGTH,
|
|
22
|
+
symmetricAlgorithm: this.eciesConsts.SYMMETRIC.ALGORITHM,
|
|
23
|
+
symmetricKeyBits: this.eciesConsts.SYMMETRIC.KEY_BITS,
|
|
24
|
+
symmetricKeyMode: this.eciesConsts.SYMMETRIC.MODE,
|
|
23
25
|
...config,
|
|
24
26
|
};
|
|
25
27
|
// Initialize components
|
|
26
|
-
this.cryptoCore = new EciesCryptoCore(this._config);
|
|
28
|
+
this.cryptoCore = new EciesCryptoCore(this._config, this.eciesConsts);
|
|
27
29
|
this.signature = new EciesSignature(this.cryptoCore);
|
|
28
30
|
this.singleRecipient = new EciesSingleRecipient(this._config);
|
|
29
31
|
}
|
|
@@ -137,14 +139,14 @@ export class ECIESService {
|
|
|
137
139
|
}
|
|
138
140
|
switch (encryptionMode) {
|
|
139
141
|
case 'simple':
|
|
140
|
-
return dataLength +
|
|
142
|
+
return dataLength + this.eciesConsts.SIMPLE.FIXED_OVERHEAD_SIZE;
|
|
141
143
|
case 'single':
|
|
142
|
-
return dataLength +
|
|
144
|
+
return dataLength + this.eciesConsts.SINGLE.FIXED_OVERHEAD_SIZE;
|
|
143
145
|
case 'multiple':
|
|
144
146
|
// Basic calculation for multiple recipients
|
|
145
147
|
return (dataLength +
|
|
146
|
-
|
|
147
|
-
(recipientCount ?? 1) *
|
|
148
|
+
this.eciesConsts.MULTIPLE.FIXED_OVERHEAD_SIZE +
|
|
149
|
+
(recipientCount ?? 1) * this.eciesConsts.MULTIPLE.ENCRYPTED_KEY_SIZE);
|
|
148
150
|
default:
|
|
149
151
|
throw new Error('Invalid encryption type');
|
|
150
152
|
}
|
|
@@ -156,7 +158,7 @@ export class ECIESService {
|
|
|
156
158
|
if (encryptedDataLength < 0) {
|
|
157
159
|
throw new Error('Invalid encrypted data length');
|
|
158
160
|
}
|
|
159
|
-
const overhead =
|
|
161
|
+
const overhead = this.eciesConsts.SINGLE.FIXED_OVERHEAD_SIZE;
|
|
160
162
|
const actualPadding = padding !== undefined ? padding : 0;
|
|
161
163
|
const decryptedLength = encryptedDataLength - overhead - actualPadding;
|
|
162
164
|
if (decryptedLength < 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/services/ecies/service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/services/ecies/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
+
import { IECIESConstants } from '../../interfaces/ecies-consts';
|
|
1
2
|
import { EciesEncryptionTypeEnum } from '../../enumerations/ecies-encryption-type';
|
|
2
3
|
import { IECIESConfig } from '../../interfaces/ecies-config';
|
|
4
|
+
import { EciesCryptoCore } from './crypto-core';
|
|
3
5
|
import { IDecryptionResult, ISingleEncryptedParsedHeader } from './interfaces';
|
|
4
6
|
/**
|
|
5
7
|
* Browser-compatible single recipient ECIES encryption/decryption
|
|
6
8
|
*/
|
|
7
9
|
export declare class EciesSingleRecipient {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
protected readonly cryptoCore: EciesCryptoCore;
|
|
11
|
+
protected readonly config: IECIESConfig;
|
|
12
|
+
protected readonly eciesConsts: IECIESConstants;
|
|
13
|
+
constructor(config: IECIESConfig, eciesParams?: IECIESConstants);
|
|
11
14
|
/**
|
|
12
15
|
* Encrypt a message for a single recipient
|
|
13
16
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"single-recipient.d.ts","sourceRoot":"","sources":["../../../src/services/ecies/single-recipient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"single-recipient.d.ts","sourceRoot":"","sources":["../../../src/services/ecies/single-recipient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAEL,uBAAuB,EACxB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAG7D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAE/E;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IAC/C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IACxC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;gBAEpC,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,eAAe;IAM/D;;OAEG;IACU,OAAO,CAClB,aAAa,EAAE,OAAO,EACtB,iBAAiB,EAAE,UAAU,EAC7B,OAAO,EAAE,UAAU,EACnB,QAAQ,GAAE,UAA8B,GACvC,OAAO,CAAC,UAAU,CAAC;IA+EtB;;OAEG;IACI,qBAAqB,CAC1B,cAAc,EAAE,uBAAuB,GAAG,SAAS,EACnD,IAAI,EAAE,UAAU,EAChB,YAAY,GAAE,MAAU,EACxB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAChC;QACD,MAAM,EAAE,4BAA4B,CAAC;QACrC,IAAI,EAAE,UAAU,CAAC;QACjB,SAAS,EAAE,UAAU,CAAC;KACvB;IAqHD;;OAEG;IACU,iBAAiB,CAC5B,cAAc,EAAE,uBAAuB,GAAG,SAAS,EACnD,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,UAAU,EACzB,YAAY,GAAE,MAAU,EACxB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAChC,OAAO,CAAC,UAAU,CAAC;IAWtB;;OAEG;IACU,mBAAmB,CAC9B,cAAc,EAAE,uBAAuB,GAAG,SAAS,EACnD,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,UAAU,EACzB,YAAY,GAAE,MAAU,EACxB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAChC,OAAO,CAAC,iBAAiB,CAAC;IAsB7B;;OAEG;IACU,qBAAqB,CAChC,UAAU,EAAE,UAAU,EACtB,kBAAkB,EAAE,UAAU,EAC9B,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,UAAU,CAAC;IAwBtB,OAAO,CAAC,WAAW;CAOpB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ECIES } from '../../
|
|
1
|
+
import { ECIES } from '../../defaults';
|
|
2
2
|
import { EciesEncryptionTypeEnum, } from '../../enumerations/ecies-encryption-type';
|
|
3
3
|
import { AESGCMService } from '../aes-gcm';
|
|
4
4
|
import { EciesCryptoCore } from './crypto-core';
|
|
@@ -8,9 +8,11 @@ import { EciesCryptoCore } from './crypto-core';
|
|
|
8
8
|
export class EciesSingleRecipient {
|
|
9
9
|
cryptoCore;
|
|
10
10
|
config;
|
|
11
|
-
|
|
11
|
+
eciesConsts;
|
|
12
|
+
constructor(config, eciesParams) {
|
|
12
13
|
this.config = config;
|
|
13
|
-
this.
|
|
14
|
+
this.eciesConsts = eciesParams ?? ECIES;
|
|
15
|
+
this.cryptoCore = new EciesCryptoCore(config, this.eciesConsts);
|
|
14
16
|
}
|
|
15
17
|
/**
|
|
16
18
|
* Encrypt a message for a single recipient
|
|
@@ -21,10 +23,10 @@ export class EciesSingleRecipient {
|
|
|
21
23
|
: 'single';
|
|
22
24
|
const encryptionTypeArray = new Uint8Array([
|
|
23
25
|
encryptionType === 'simple'
|
|
24
|
-
?
|
|
25
|
-
:
|
|
26
|
+
? this.eciesConsts.ENCRYPTION_TYPE.SIMPLE
|
|
27
|
+
: this.eciesConsts.ENCRYPTION_TYPE.SINGLE,
|
|
26
28
|
]);
|
|
27
|
-
if (message.length >
|
|
29
|
+
if (message.length > this.eciesConsts.MAX_RAW_DATA_SIZE) {
|
|
28
30
|
throw new Error(`Message length exceeds maximum allowed size: ${message.length}`);
|
|
29
31
|
}
|
|
30
32
|
// Generate ephemeral key pair
|
|
@@ -34,9 +36,9 @@ export class EciesSingleRecipient {
|
|
|
34
36
|
const normalizedReceiverPublicKey = this.cryptoCore.normalizePublicKey(receiverPublicKey);
|
|
35
37
|
const sharedSecret = this.cryptoCore.computeSharedSecret(ephemeralPrivateKey, normalizedReceiverPublicKey);
|
|
36
38
|
// Use first 32 bytes as symmetric key
|
|
37
|
-
const symKey = sharedSecret.slice(0,
|
|
39
|
+
const symKey = sharedSecret.slice(0, this.eciesConsts.SYMMETRIC.KEY_SIZE);
|
|
38
40
|
// Encrypt using AES-GCM
|
|
39
|
-
const encryptResult = await AESGCMService.encrypt(message, symKey, true);
|
|
41
|
+
const encryptResult = await AESGCMService.encrypt(message, symKey, true, this.eciesConsts);
|
|
40
42
|
const { encrypted, iv } = encryptResult;
|
|
41
43
|
const authTag = encryptResult.tag;
|
|
42
44
|
if (!authTag) {
|
|
@@ -80,13 +82,13 @@ export class EciesSingleRecipient {
|
|
|
80
82
|
const actualEncryptionTypeByte = data[preambleSize];
|
|
81
83
|
let actualEncryptionType;
|
|
82
84
|
switch (actualEncryptionTypeByte) {
|
|
83
|
-
case
|
|
85
|
+
case this.eciesConsts.ENCRYPTION_TYPE.SIMPLE:
|
|
84
86
|
actualEncryptionType = EciesEncryptionTypeEnum.Simple;
|
|
85
87
|
break;
|
|
86
|
-
case
|
|
88
|
+
case this.eciesConsts.ENCRYPTION_TYPE.SINGLE:
|
|
87
89
|
actualEncryptionType = EciesEncryptionTypeEnum.Single;
|
|
88
90
|
break;
|
|
89
|
-
case
|
|
91
|
+
case this.eciesConsts.ENCRYPTION_TYPE.MULTIPLE:
|
|
90
92
|
throw new Error('Multiple encryption type not supported in single recipient mode');
|
|
91
93
|
default:
|
|
92
94
|
throw new Error(`Invalid encryption type: ${actualEncryptionTypeByte}`);
|
|
@@ -97,8 +99,8 @@ export class EciesSingleRecipient {
|
|
|
97
99
|
}
|
|
98
100
|
const includeLengthAndCrc = actualEncryptionType === EciesEncryptionTypeEnum.Single;
|
|
99
101
|
const requiredSize = includeLengthAndCrc
|
|
100
|
-
?
|
|
101
|
-
:
|
|
102
|
+
? this.eciesConsts.SINGLE.FIXED_OVERHEAD_SIZE
|
|
103
|
+
: this.eciesConsts.SIMPLE.FIXED_OVERHEAD_SIZE;
|
|
102
104
|
if (data.length < requiredSize) {
|
|
103
105
|
throw new Error(`Data too short: required ${requiredSize}, got ${data.length}`);
|
|
104
106
|
}
|
|
@@ -107,19 +109,19 @@ export class EciesSingleRecipient {
|
|
|
107
109
|
// Skip encryption type byte
|
|
108
110
|
offset += 1;
|
|
109
111
|
// Extract header components
|
|
110
|
-
const ephemeralPublicKey = data.slice(offset, offset +
|
|
111
|
-
offset +=
|
|
112
|
+
const ephemeralPublicKey = data.slice(offset, offset + this.eciesConsts.PUBLIC_KEY_LENGTH);
|
|
113
|
+
offset += this.eciesConsts.PUBLIC_KEY_LENGTH;
|
|
112
114
|
const normalizedKey = this.cryptoCore.normalizePublicKey(ephemeralPublicKey);
|
|
113
|
-
const iv = data.slice(offset, offset +
|
|
114
|
-
offset +=
|
|
115
|
-
const authTag = data.slice(offset, offset +
|
|
116
|
-
offset +=
|
|
115
|
+
const iv = data.slice(offset, offset + this.eciesConsts.IV_SIZE);
|
|
116
|
+
offset += this.eciesConsts.IV_SIZE;
|
|
117
|
+
const authTag = data.slice(offset, offset + this.eciesConsts.AUTH_TAG_SIZE);
|
|
118
|
+
offset += this.eciesConsts.AUTH_TAG_SIZE;
|
|
117
119
|
// Extract length for single mode
|
|
118
120
|
const dataLengthArray = includeLengthAndCrc
|
|
119
|
-
? data.slice(offset, offset +
|
|
121
|
+
? data.slice(offset, offset + this.eciesConsts.SINGLE.DATA_LENGTH_SIZE)
|
|
120
122
|
: new Uint8Array(0);
|
|
121
123
|
if (includeLengthAndCrc) {
|
|
122
|
-
offset +=
|
|
124
|
+
offset += this.eciesConsts.SINGLE.DATA_LENGTH_SIZE;
|
|
123
125
|
}
|
|
124
126
|
const dataLength = includeLengthAndCrc
|
|
125
127
|
? Number(new DataView(dataLengthArray.buffer, dataLengthArray.byteOffset, dataLengthArray.byteLength).getBigUint64(0, false))
|
|
@@ -143,8 +145,8 @@ export class EciesSingleRecipient {
|
|
|
143
145
|
authTag,
|
|
144
146
|
dataLength,
|
|
145
147
|
headerSize: includeLengthAndCrc
|
|
146
|
-
?
|
|
147
|
-
:
|
|
148
|
+
? this.eciesConsts.SINGLE.FIXED_OVERHEAD_SIZE
|
|
149
|
+
: this.eciesConsts.SIMPLE.FIXED_OVERHEAD_SIZE,
|
|
148
150
|
},
|
|
149
151
|
data: encryptedData,
|
|
150
152
|
remainder,
|
|
@@ -177,11 +179,11 @@ export class EciesSingleRecipient {
|
|
|
177
179
|
// Compute shared secret
|
|
178
180
|
const sharedSecret = this.cryptoCore.computeSharedSecret(privateKey, normalizedEphemeralKey);
|
|
179
181
|
// Use first 32 bytes as symmetric key
|
|
180
|
-
const symKey = sharedSecret.slice(0,
|
|
182
|
+
const symKey = sharedSecret.slice(0, this.eciesConsts.SYMMETRIC.KEY_SIZE);
|
|
181
183
|
// Combine encrypted data with auth tag for AES-GCM
|
|
182
184
|
const encryptedWithTag = AESGCMService.combineEncryptedDataAndTag(encrypted, authTag);
|
|
183
185
|
// Decrypt
|
|
184
|
-
return await AESGCMService.decrypt(iv, encryptedWithTag, symKey, true);
|
|
186
|
+
return await AESGCMService.decrypt(iv, encryptedWithTag, symKey, true, this.eciesConsts);
|
|
185
187
|
}
|
|
186
188
|
arraysEqual(a, b) {
|
|
187
189
|
if (a.length !== b.length)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"single-recipient.js","sourceRoot":"","sources":["../../../src/services/ecies/single-recipient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"single-recipient.js","sourceRoot":"","sources":["../../../src/services/ecies/single-recipient.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,15 +5,17 @@ import { ECIESService } from './ecies/service';
|
|
|
5
5
|
import { Pbkdf2Service } from './pbkdf2';
|
|
6
6
|
import { EciesStringKey } from '../enumerations';
|
|
7
7
|
import { I18nEngine, Language } from '@digitaldefiance/i18n-lib';
|
|
8
|
+
import { IECIESConstants } from '../interfaces/ecies-consts';
|
|
8
9
|
export declare class PasswordLoginService {
|
|
9
10
|
protected readonly eciesService: ECIESService;
|
|
10
11
|
protected readonly pbkdf2Service: Pbkdf2Service;
|
|
11
12
|
protected readonly engine: I18nEngine<EciesStringKey, Language, any, any>;
|
|
13
|
+
protected readonly eciesConsts: IECIESConstants;
|
|
12
14
|
static readonly privateKeyStorageKey = "encryptedPrivateKey";
|
|
13
15
|
static readonly saltStorageKey = "passwordLoginSalt";
|
|
14
16
|
static readonly encryptedMnemonicStorageKey = "encryptedMnemonic";
|
|
15
17
|
static readonly profileStorageKey = "pbkdf2Profile";
|
|
16
|
-
constructor(eciesService: ECIESService, pbkdf2Service: Pbkdf2Service, engine: I18nEngine<EciesStringKey, Language, any, any
|
|
18
|
+
constructor(eciesService: ECIESService, pbkdf2Service: Pbkdf2Service, engine: I18nEngine<EciesStringKey, Language, any, any>, eciesParams?: IECIESConstants);
|
|
17
19
|
createPasswordLoginBundle(mnemonic: SecureString, password: SecureString, profile?: Pbkdf2ProfileEnum): Promise<{
|
|
18
20
|
salt: Uint8Array;
|
|
19
21
|
encryptedPrivateKey: Uint8Array;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password-login.d.ts","sourceRoot":"","sources":["../../src/services/password-login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,cAAc,EAA8B,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAkB,UAAU,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"password-login.d.ts","sourceRoot":"","sources":["../../src/services/password-login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,cAAc,EAA8B,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAkB,UAAU,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAI7D,qBAAa,oBAAoB;IAC/B,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAC9C,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IAChD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,cAAc,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1E,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IAChD,gBAAuB,oBAAoB,yBAAyB;IACpE,gBAAuB,cAAc,uBAAuB;IAC5D,gBAAuB,2BAA2B,uBAAuB;IACzE,gBAAuB,iBAAiB,mBAAmB;gBAE/C,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,CAAC,cAAc,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,WAAW,CAAC,EAAE,eAAe;IAO9I,yBAAyB,CACpC,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,iBAAsD,GAC9D,OAAO,CAAC;QACT,IAAI,EAAE,UAAU,CAAC;QACjB,mBAAmB,EAAE,UAAU,CAAC;QAChC,iBAAiB,EAAE,UAAU,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IAwCF;;;;OAIG;IACU,oCAAoC,CAC/C,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,iBAAsD,GAC9D,OAAO,CAAC,MAAM,CAAC;IA4BL,+CAA+C,CAC1D,IAAI,EAAE,UAAU,EAChB,mBAAmB,EAAE,UAAU,EAC/B,iBAAiB,EAAE,UAAU,EAC7B,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,iBAAsD,GAC9D,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,YAAY,CAAA;KAAE,CAAC;IAuCtD;;;;OAIG;IACU,0CAA0C,CACrD,QAAQ,EAAE,YAAY,GACrB,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,YAAY,CAAA;KAAE,CAAC;IAmCtD;;;OAGG;WACW,oBAAoB,IAAI,OAAO;CAkB9C"}
|
|
@@ -7,18 +7,21 @@ import { AESGCMService } from './aes-gcm';
|
|
|
7
7
|
import { TranslatableError, TypedHandleableError } from '../errors';
|
|
8
8
|
import { EciesStringKey, PasswordLoginErrorTypeEnum } from '../enumerations';
|
|
9
9
|
import { buildReasonMap } from '@digitaldefiance/i18n-lib';
|
|
10
|
+
import { ECIES } from '../defaults';
|
|
10
11
|
export class PasswordLoginService {
|
|
11
12
|
eciesService;
|
|
12
13
|
pbkdf2Service;
|
|
13
14
|
engine;
|
|
15
|
+
eciesConsts;
|
|
14
16
|
static privateKeyStorageKey = 'encryptedPrivateKey';
|
|
15
17
|
static saltStorageKey = 'passwordLoginSalt';
|
|
16
18
|
static encryptedMnemonicStorageKey = 'encryptedMnemonic';
|
|
17
19
|
static profileStorageKey = 'pbkdf2Profile';
|
|
18
|
-
constructor(eciesService, pbkdf2Service, engine) {
|
|
20
|
+
constructor(eciesService, pbkdf2Service, engine, eciesParams) {
|
|
19
21
|
this.eciesService = eciesService;
|
|
20
22
|
this.pbkdf2Service = pbkdf2Service;
|
|
21
23
|
this.engine = engine;
|
|
24
|
+
this.eciesConsts = eciesParams ?? ECIES;
|
|
22
25
|
}
|
|
23
26
|
async createPasswordLoginBundle(mnemonic, password, profile = Pbkdf2ProfileEnum.BROWSER_PASSWORD) {
|
|
24
27
|
const { wallet } = this.eciesService.walletAndSeedFromMnemonic(mnemonic);
|
|
@@ -64,8 +67,8 @@ export class PasswordLoginService {
|
|
|
64
67
|
}
|
|
65
68
|
const derivedKey = await this.pbkdf2Service.deriveKeyFromPasswordWithProfileAsync(password.valueAsUint8Array, profile, salt);
|
|
66
69
|
// Decrypt private key with derived key
|
|
67
|
-
const { iv, encryptedDataWithTag } = AESGCMService.splitEncryptedData(encryptedPrivateKey, true);
|
|
68
|
-
const privateKeyBytes = await AESGCMService.decrypt(iv, encryptedDataWithTag, derivedKey.hash, true);
|
|
70
|
+
const { iv, encryptedDataWithTag } = AESGCMService.splitEncryptedData(encryptedPrivateKey, true, this.eciesConsts);
|
|
71
|
+
const privateKeyBytes = await AESGCMService.decrypt(iv, encryptedDataWithTag, derivedKey.hash, true, this.eciesConsts);
|
|
69
72
|
const wallet = Wallet.fromPrivateKey(privateKeyBytes);
|
|
70
73
|
// now decrypt the mnemonic
|
|
71
74
|
const decryptedMnemonic = await this.eciesService.decryptSimpleOrSingleWithHeader(true, wallet.getPrivateKey(), encryptedMnemonic);
|