@digitaldefiance/ecies-lib 2.1.42 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -3
- package/package.json +3 -3
- package/src/builders/ecies-builder.d.ts +7 -3
- package/src/builders/ecies-builder.d.ts.map +1 -1
- package/src/builders/ecies-builder.js +11 -9
- package/src/builders/ecies-builder.js.map +1 -1
- package/src/builders/member-builder.d.ts +10 -1
- package/src/builders/member-builder.d.ts.map +1 -1
- package/src/builders/member-builder.js +29 -7
- package/src/builders/member-builder.js.map +1 -1
- package/src/enumerations/ecies-error-type.d.ts +11 -1
- package/src/enumerations/ecies-error-type.d.ts.map +1 -1
- package/src/enumerations/ecies-error-type.js +10 -0
- package/src/enumerations/ecies-error-type.js.map +1 -1
- package/src/enumerations/ecies-string-key.d.ts +77 -1
- package/src/enumerations/ecies-string-key.d.ts.map +1 -1
- package/src/enumerations/ecies-string-key.js +77 -0
- package/src/enumerations/ecies-string-key.js.map +1 -1
- package/src/i18n-setup.d.ts.map +1 -1
- package/src/i18n-setup.js +15 -683
- package/src/i18n-setup.js.map +1 -1
- package/src/index.d.ts +12 -0
- package/src/index.d.ts.map +1 -1
- package/src/index.js +15 -1
- package/src/index.js.map +1 -1
- package/src/interfaces/encrypted-chunk.d.ts +55 -0
- package/src/interfaces/encrypted-chunk.d.ts.map +1 -0
- package/src/interfaces/encrypted-chunk.js +15 -0
- package/src/interfaces/encrypted-chunk.js.map +1 -0
- package/src/interfaces/encryption-state.d.ts +18 -0
- package/src/interfaces/encryption-state.d.ts.map +1 -0
- package/src/interfaces/encryption-state.js +5 -0
- package/src/interfaces/encryption-state.js.map +1 -0
- package/src/interfaces/frontend-member-operational.d.ts +12 -1
- package/src/interfaces/frontend-member-operational.d.ts.map +1 -1
- package/src/interfaces/multi-recipient-chunk.d.ts +65 -0
- package/src/interfaces/multi-recipient-chunk.d.ts.map +1 -0
- package/src/interfaces/multi-recipient-chunk.js +25 -0
- package/src/interfaces/multi-recipient-chunk.js.map +1 -0
- package/src/interfaces/stream-config.d.ts +14 -0
- package/src/interfaces/stream-config.d.ts.map +1 -0
- package/src/interfaces/stream-config.js +11 -0
- package/src/interfaces/stream-config.js.map +1 -0
- package/src/interfaces/stream-header.d.ts +29 -0
- package/src/interfaces/stream-header.d.ts.map +1 -0
- package/src/interfaces/stream-header.js +12 -0
- package/src/interfaces/stream-header.js.map +1 -0
- package/src/interfaces/stream-progress.d.ts +33 -0
- package/src/interfaces/stream-progress.d.ts.map +1 -0
- package/src/interfaces/stream-progress.js +3 -0
- package/src/interfaces/stream-progress.js.map +1 -0
- package/src/lib/crypto-container.d.ts.map +1 -1
- package/src/lib/crypto-container.js +2 -1
- package/src/lib/crypto-container.js.map +1 -1
- package/src/member.d.ts +27 -1
- package/src/member.d.ts.map +1 -1
- package/src/member.js +69 -2
- package/src/member.js.map +1 -1
- package/src/services/aes-gcm.d.ts.map +1 -1
- package/src/services/aes-gcm.js +29 -0
- package/src/services/aes-gcm.js.map +1 -1
- package/src/services/chunk-processor.d.ts +31 -0
- package/src/services/chunk-processor.d.ts.map +1 -0
- package/src/services/chunk-processor.js +149 -0
- package/src/services/chunk-processor.js.map +1 -0
- package/src/services/ecies/crypto-core.d.ts.map +1 -1
- package/src/services/ecies/crypto-core.js +23 -8
- package/src/services/ecies/crypto-core.js.map +1 -1
- package/src/services/ecies/service.d.ts +12 -4
- package/src/services/ecies/service.d.ts.map +1 -1
- package/src/services/ecies/service.js +28 -18
- package/src/services/ecies/service.js.map +1 -1
- package/src/services/ecies/single-recipient.d.ts.map +1 -1
- package/src/services/ecies/single-recipient.js +55 -4
- package/src/services/ecies/single-recipient.js.map +1 -1
- package/src/services/encryption-stream.d.ts +69 -0
- package/src/services/encryption-stream.d.ts.map +1 -0
- package/src/services/encryption-stream.js +297 -0
- package/src/services/encryption-stream.js.map +1 -0
- package/src/services/multi-recipient-processor.d.ts +25 -0
- package/src/services/multi-recipient-processor.d.ts.map +1 -0
- package/src/services/multi-recipient-processor.js +238 -0
- package/src/services/multi-recipient-processor.js.map +1 -0
- package/src/services/password-login.js +1 -1
- package/src/services/password-login.js.map +1 -1
- package/src/services/progress-tracker.d.ts +23 -0
- package/src/services/progress-tracker.d.ts.map +1 -0
- package/src/services/progress-tracker.js +98 -0
- package/src/services/progress-tracker.js.map +1 -0
- package/src/services/resumable-encryption.d.ts +19 -0
- package/src/services/resumable-encryption.d.ts.map +1 -0
- package/src/services/resumable-encryption.js +109 -0
- package/src/services/resumable-encryption.js.map +1 -0
- package/src/test-mocks/mock-frontend-member.d.ts +15 -0
- package/src/test-mocks/mock-frontend-member.d.ts.map +1 -1
- package/src/test-mocks/mock-frontend-member.js +58 -0
- package/src/test-mocks/mock-frontend-member.js.map +1 -1
- package/src/translations/de.d.ts +3 -0
- package/src/translations/de.d.ts.map +1 -0
- package/src/translations/de.js +178 -0
- package/src/translations/de.js.map +1 -0
- package/src/translations/en-US.d.ts +3 -0
- package/src/translations/en-US.d.ts.map +1 -0
- package/src/translations/en-US.js +178 -0
- package/src/translations/en-US.js.map +1 -0
- package/src/translations/es.d.ts +3 -0
- package/src/translations/es.d.ts.map +1 -0
- package/src/translations/es.js +178 -0
- package/src/translations/es.js.map +1 -0
- package/src/translations/fr.d.ts +3 -0
- package/src/translations/fr.d.ts.map +1 -0
- package/src/translations/fr.js +178 -0
- package/src/translations/fr.js.map +1 -0
- package/src/translations/ja.d.ts +3 -0
- package/src/translations/ja.d.ts.map +1 -0
- package/src/translations/ja.js +178 -0
- package/src/translations/ja.js.map +1 -0
- package/src/translations/uk.d.ts +3 -0
- package/src/translations/uk.d.ts.map +1 -0
- package/src/translations/uk.js +178 -0
- package/src/translations/uk.js.map +1 -0
- package/src/translations/zh-cn.d.ts +3 -0
- package/src/translations/zh-cn.d.ts.map +1 -0
- package/src/translations/zh-cn.js +178 -0
- package/src/translations/zh-cn.js.map +1 -0
- package/src/utils.d.ts.map +1 -1
- package/src/utils.js +8 -5
- package/src/utils.js.map +1 -1
|
@@ -6,6 +6,9 @@ const ecies_encryption_type_1 = require("../../enumerations/ecies-encryption-typ
|
|
|
6
6
|
const crypto_core_1 = require("./crypto-core");
|
|
7
7
|
const signature_1 = require("./signature");
|
|
8
8
|
const single_recipient_1 = require("./single-recipient");
|
|
9
|
+
const i18n_setup_1 = require("../../i18n-setup");
|
|
10
|
+
const ecies_string_key_1 = require("../../enumerations/ecies-string-key");
|
|
11
|
+
const multi_recipient_1 = require("./multi-recipient");
|
|
9
12
|
/**
|
|
10
13
|
* Browser-compatible ECIES service that mirrors the server-side functionality
|
|
11
14
|
* Uses Web Crypto API and @scure/@noble libraries for browser compatibility
|
|
@@ -15,6 +18,7 @@ class ECIESService {
|
|
|
15
18
|
cryptoCore;
|
|
16
19
|
signature;
|
|
17
20
|
singleRecipient;
|
|
21
|
+
multiRecipient;
|
|
18
22
|
eciesConsts;
|
|
19
23
|
constructor(config, eciesParams = constants_1.Constants.ECIES) {
|
|
20
24
|
this.eciesConsts = eciesParams;
|
|
@@ -30,7 +34,8 @@ class ECIESService {
|
|
|
30
34
|
// Initialize components
|
|
31
35
|
this.cryptoCore = new crypto_core_1.EciesCryptoCore(this._config, this.eciesConsts);
|
|
32
36
|
this.signature = new signature_1.EciesSignature(this.cryptoCore);
|
|
33
|
-
this.singleRecipient = new single_recipient_1.EciesSingleRecipient(this._config);
|
|
37
|
+
this.singleRecipient = new single_recipient_1.EciesSingleRecipient(this._config, this.eciesConsts);
|
|
38
|
+
this.multiRecipient = new multi_recipient_1.EciesMultiRecipient(this._config, this.eciesConsts);
|
|
34
39
|
}
|
|
35
40
|
get core() {
|
|
36
41
|
return this.cryptoCore;
|
|
@@ -138,7 +143,8 @@ class ECIESService {
|
|
|
138
143
|
*/
|
|
139
144
|
computeEncryptedLengthFromDataLength(dataLength, encryptionMode, recipientCount) {
|
|
140
145
|
if (dataLength < 0) {
|
|
141
|
-
|
|
146
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
147
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, ecies_string_key_1.EciesStringKey.Error_Service_InvalidDataLength));
|
|
142
148
|
}
|
|
143
149
|
switch (encryptionMode) {
|
|
144
150
|
case 'simple':
|
|
@@ -151,7 +157,8 @@ class ECIESService {
|
|
|
151
157
|
this.eciesConsts.MULTIPLE.FIXED_OVERHEAD_SIZE +
|
|
152
158
|
(recipientCount ?? 1) * this.eciesConsts.MULTIPLE.ENCRYPTED_KEY_SIZE);
|
|
153
159
|
default:
|
|
154
|
-
|
|
160
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
161
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, ecies_string_key_1.EciesStringKey.Error_Service_InvalidEncryptionType));
|
|
155
162
|
}
|
|
156
163
|
}
|
|
157
164
|
/**
|
|
@@ -159,33 +166,36 @@ class ECIESService {
|
|
|
159
166
|
*/
|
|
160
167
|
computeDecryptedLengthFromEncryptedDataLength(encryptedDataLength, padding) {
|
|
161
168
|
if (encryptedDataLength < 0) {
|
|
162
|
-
|
|
169
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
170
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, ecies_string_key_1.EciesStringKey.Error_Service_InvalidEncryptedDataLength));
|
|
163
171
|
}
|
|
164
172
|
const overhead = this.eciesConsts.SINGLE.FIXED_OVERHEAD_SIZE;
|
|
165
173
|
const actualPadding = padding !== undefined ? padding : 0;
|
|
166
174
|
const decryptedLength = encryptedDataLength - overhead - actualPadding;
|
|
167
175
|
if (decryptedLength < 0) {
|
|
168
|
-
|
|
176
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
177
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, ecies_string_key_1.EciesStringKey.Error_Service_ComputedDecryptedLengthNegative));
|
|
169
178
|
}
|
|
170
179
|
return decryptedLength;
|
|
171
180
|
}
|
|
172
181
|
/**
|
|
173
182
|
* Generic encrypt method
|
|
174
183
|
*/
|
|
175
|
-
async encrypt(encryptionType,
|
|
176
|
-
if (
|
|
177
|
-
|
|
178
|
-
recipients.length === 1) {
|
|
179
|
-
return this.singleRecipient.encrypt(encryptionType === ecies_encryption_type_1.EciesEncryptionTypeEnum.Simple, recipients[0].publicKey, message, preamble);
|
|
180
|
-
}
|
|
181
|
-
else if (encryptionType === ecies_encryption_type_1.EciesEncryptionTypeEnum.Multiple &&
|
|
182
|
-
recipients.length > 1) {
|
|
183
|
-
// TODO: Implement multi-recipient encryption
|
|
184
|
-
throw new Error('Multi-recipient encryption not yet implemented');
|
|
185
|
-
}
|
|
186
|
-
else {
|
|
187
|
-
throw new Error(`Invalid encryption type or number of recipients: ${encryptionType}, ${recipients.length}`);
|
|
184
|
+
async encrypt(encryptionType, recipientPublicKey, message, preamble) {
|
|
185
|
+
if (encryptionType === ecies_encryption_type_1.EciesEncryptionTypeEnum.Multiple) {
|
|
186
|
+
throw new Error((0, i18n_setup_1.getEciesI18nEngine)().translate(i18n_setup_1.EciesComponentId, ecies_string_key_1.EciesStringKey.Error_ECIESError_MultipleEncryptionTypeNotSupportedInSingleRecipientMode));
|
|
188
187
|
}
|
|
188
|
+
return this.singleRecipient.encrypt(encryptionType === ecies_encryption_type_1.EciesEncryptionTypeEnum.Simple, recipientPublicKey, message, preamble);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Encrypt for multiple recipients
|
|
192
|
+
* @param recipients
|
|
193
|
+
* @param message
|
|
194
|
+
* @param preamble
|
|
195
|
+
* @returns
|
|
196
|
+
*/
|
|
197
|
+
async encryptMultiple(recipients, message, preamble) {
|
|
198
|
+
return this.multiRecipient.encryptMultiple(recipients, message, preamble);
|
|
189
199
|
}
|
|
190
200
|
}
|
|
191
201
|
exports.ECIESService = ECIESService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/services/ecies/service.ts"],"names":[],"mappings":";;;AACA,+CAA4C;AAC5C,oFAGkD;AAIlD,+CAAgD;AAEhD,2CAA6C;AAC7C,yDAA0D;
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/services/ecies/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"single-recipient.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/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;AAI/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,GAAE,eAAiC;IAMhF;;OAEG;IACU,OAAO,CAClB,aAAa,EAAE,OAAO,EACtB,iBAAiB,EAAE,UAAU,EAC7B,OAAO,EAAE,UAAU,EACnB,QAAQ,GAAE,UAA8B,GACvC,OAAO,CAAC,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"single-recipient.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/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;AAI/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,GAAE,eAAiC;IAMhF;;OAEG;IACU,OAAO,CAClB,aAAa,EAAE,OAAO,EACtB,iBAAiB,EAAE,UAAU,EAC7B,OAAO,EAAE,UAAU,EACnB,QAAQ,GAAE,UAA8B,GACvC,OAAO,CAAC,UAAU,CAAC;IAsFtB;;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;IA+HD;;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;IAoEtB,OAAO,CAAC,WAAW;CAUpB"}
|
|
@@ -51,6 +51,12 @@ class EciesSingleRecipient {
|
|
|
51
51
|
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
52
52
|
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_ECIESError_AuthenticationTagIsRequiredForECIESEncryption));
|
|
53
53
|
}
|
|
54
|
+
// Validate encrypted size is reasonable
|
|
55
|
+
const maxEncryptedSize = message.length + 1024; // Allow overhead for encryption
|
|
56
|
+
if (encrypted.length > maxEncryptedSize) {
|
|
57
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
58
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_ECIESError_EncryptedSizeExceedsExpected));
|
|
59
|
+
}
|
|
54
60
|
// Add length prefix for single mode
|
|
55
61
|
const lengthArray = encryptionType === 'simple' ? new Uint8Array(0) : new Uint8Array(8);
|
|
56
62
|
if (encryptionType === 'single') {
|
|
@@ -138,6 +144,11 @@ class EciesSingleRecipient {
|
|
|
138
144
|
const dataLength = includeLengthAndCrc
|
|
139
145
|
? Number(new DataView(dataLengthArray.buffer, dataLengthArray.byteOffset, dataLengthArray.byteLength).getBigUint64(0, false))
|
|
140
146
|
: options?.dataLength ?? -1;
|
|
147
|
+
// Validate data length is reasonable
|
|
148
|
+
if (includeLengthAndCrc && (dataLength < 0 || dataLength > this.eciesConsts.MAX_RAW_DATA_SIZE)) {
|
|
149
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
150
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_ECIESError_InvalidDataLength));
|
|
151
|
+
}
|
|
141
152
|
if (includeLengthAndCrc &&
|
|
142
153
|
options?.dataLength !== undefined &&
|
|
143
154
|
dataLength !== options.dataLength) {
|
|
@@ -187,10 +198,49 @@ class EciesSingleRecipient {
|
|
|
187
198
|
* Decrypt with individual components
|
|
188
199
|
*/
|
|
189
200
|
async decryptWithComponents(privateKey, ephemeralPublicKey, iv, authTag, encrypted) {
|
|
190
|
-
//
|
|
201
|
+
// Validate private key
|
|
202
|
+
if (!privateKey || privateKey.length !== 32) {
|
|
203
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
204
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_ECIESError_InvalidPrivateKey));
|
|
205
|
+
}
|
|
206
|
+
// Check for all-zero private key
|
|
207
|
+
let allZeros = true;
|
|
208
|
+
for (let i = 0; i < privateKey.length; i++) {
|
|
209
|
+
if (privateKey[i] !== 0) {
|
|
210
|
+
allZeros = false;
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
if (allZeros) {
|
|
215
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
216
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_ECIESError_InvalidPrivateKey));
|
|
217
|
+
}
|
|
218
|
+
// Validate IV
|
|
219
|
+
if (!iv || iv.length !== this.eciesConsts.IV_SIZE) {
|
|
220
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
221
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_ECIESError_InvalidIV));
|
|
222
|
+
}
|
|
223
|
+
// Validate auth tag
|
|
224
|
+
if (!authTag || authTag.length !== this.eciesConsts.AUTH_TAG_SIZE) {
|
|
225
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
226
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_ECIESError_InvalidAuthTag));
|
|
227
|
+
}
|
|
228
|
+
// Normalize ephemeral public key (this validates it's a valid key)
|
|
191
229
|
const normalizedEphemeralKey = this.cryptoCore.normalizePublicKey(ephemeralPublicKey);
|
|
192
230
|
// Compute shared secret
|
|
193
231
|
const sharedSecret = this.cryptoCore.computeSharedSecret(privateKey, normalizedEphemeralKey);
|
|
232
|
+
// Validate shared secret is not all zeros
|
|
233
|
+
let sharedSecretAllZeros = true;
|
|
234
|
+
for (let i = 0; i < sharedSecret.length; i++) {
|
|
235
|
+
if (sharedSecret[i] !== 0) {
|
|
236
|
+
sharedSecretAllZeros = false;
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
if (sharedSecretAllZeros) {
|
|
241
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
242
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_ECIESError_InvalidSharedSecret));
|
|
243
|
+
}
|
|
194
244
|
// Use first 32 bytes as symmetric key
|
|
195
245
|
const symKey = sharedSecret.slice(0, this.eciesConsts.SYMMETRIC.KEY_SIZE);
|
|
196
246
|
// Combine encrypted data with auth tag for AES-GCM
|
|
@@ -201,11 +251,12 @@ class EciesSingleRecipient {
|
|
|
201
251
|
arraysEqual(a, b) {
|
|
202
252
|
if (a.length !== b.length)
|
|
203
253
|
return false;
|
|
254
|
+
// Constant-time comparison to prevent timing attacks
|
|
255
|
+
let diff = 0;
|
|
204
256
|
for (let i = 0; i < a.length; i++) {
|
|
205
|
-
|
|
206
|
-
return false;
|
|
257
|
+
diff |= a[i] ^ b[i];
|
|
207
258
|
}
|
|
208
|
-
return
|
|
259
|
+
return diff === 0;
|
|
209
260
|
}
|
|
210
261
|
}
|
|
211
262
|
exports.EciesSingleRecipient = EciesSingleRecipient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"single-recipient.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/services/ecies/single-recipient.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"single-recipient.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/services/ecies/single-recipient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { IECIESConstants } from '../interfaces/ecies-consts';
|
|
2
|
+
import { IStreamConfig } from '../interfaces/stream-config';
|
|
3
|
+
import { IEncryptedChunk } from '../interfaces/encrypted-chunk';
|
|
4
|
+
import { IStreamHeader } from '../interfaces/stream-header';
|
|
5
|
+
import { IStreamProgress } from '../interfaces/stream-progress';
|
|
6
|
+
import { ECIESService } from './ecies/service';
|
|
7
|
+
import { IMultiRecipientChunk } from '../interfaces/multi-recipient-chunk';
|
|
8
|
+
/**
|
|
9
|
+
* Options for stream encryption
|
|
10
|
+
*/
|
|
11
|
+
export interface IEncryptStreamOptions {
|
|
12
|
+
chunkSize?: number;
|
|
13
|
+
signal?: AbortSignal;
|
|
14
|
+
includeChecksums?: boolean;
|
|
15
|
+
onProgress?: (progress: IStreamProgress) => void;
|
|
16
|
+
}
|
|
17
|
+
export interface IMultiRecipientStreamOptions extends IEncryptStreamOptions {
|
|
18
|
+
recipients: Array<{
|
|
19
|
+
id: Uint8Array;
|
|
20
|
+
publicKey: Uint8Array;
|
|
21
|
+
}>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Options for stream decryption
|
|
25
|
+
*/
|
|
26
|
+
export interface IDecryptStreamOptions {
|
|
27
|
+
signal?: AbortSignal;
|
|
28
|
+
onProgress?: (progress: IStreamProgress) => void;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Streaming encryption/decryption service
|
|
32
|
+
*/
|
|
33
|
+
export declare class EncryptionStream {
|
|
34
|
+
private readonly ecies;
|
|
35
|
+
private readonly config;
|
|
36
|
+
private readonly eciesConsts;
|
|
37
|
+
private readonly processor;
|
|
38
|
+
private readonly multiRecipientProcessor;
|
|
39
|
+
constructor(ecies: ECIESService, config?: IStreamConfig, eciesConsts?: IECIESConstants);
|
|
40
|
+
/**
|
|
41
|
+
* Build stream header
|
|
42
|
+
*/
|
|
43
|
+
buildStreamHeader(header: IStreamHeader): Uint8Array;
|
|
44
|
+
/**
|
|
45
|
+
* Parse stream header
|
|
46
|
+
*/
|
|
47
|
+
parseStreamHeader(data: Uint8Array): IStreamHeader;
|
|
48
|
+
/**
|
|
49
|
+
* Encrypt data stream
|
|
50
|
+
*/
|
|
51
|
+
encryptStream(source: AsyncIterable<Uint8Array>, publicKey: Uint8Array, options?: IEncryptStreamOptions): AsyncGenerator<IEncryptedChunk, void, unknown>;
|
|
52
|
+
/**
|
|
53
|
+
* Encrypt stream for multiple recipients
|
|
54
|
+
* Uses shared symmetric key encrypted for each recipient
|
|
55
|
+
*/
|
|
56
|
+
encryptStreamMultiple(source: AsyncIterable<Uint8Array>, recipients: Array<{
|
|
57
|
+
id: Uint8Array;
|
|
58
|
+
publicKey: Uint8Array;
|
|
59
|
+
}>, options?: IEncryptStreamOptions): AsyncGenerator<IMultiRecipientChunk, void, unknown>;
|
|
60
|
+
/**
|
|
61
|
+
* Decrypt multi-recipient stream
|
|
62
|
+
*/
|
|
63
|
+
decryptStreamMultiple(source: AsyncIterable<Uint8Array>, recipientId: Uint8Array, privateKey: Uint8Array, options?: IDecryptStreamOptions): AsyncGenerator<Uint8Array, void, unknown>;
|
|
64
|
+
/**
|
|
65
|
+
* Decrypt data stream
|
|
66
|
+
*/
|
|
67
|
+
decryptStream(source: AsyncIterable<Uint8Array>, privateKey: Uint8Array, options?: IDecryptStreamOptions): AsyncGenerator<Uint8Array, void, unknown>;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=encryption-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryption-stream.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/services/encryption-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAyB,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,aAAa,EAA2B,MAAM,6BAA6B,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAI3E;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;CAClD;AAED,MAAM,WAAW,4BAA6B,SAAQ,qBAAqB;IACzE,UAAU,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,CAAC,CAAC;CAC9D;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;CAClD;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAN9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA0B;gBAG/C,KAAK,EAAE,YAAY,EACnB,MAAM,GAAE,aAAqC,EAC7C,WAAW,GAAE,eAAiC;IAMjE;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU;IAgBpD;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa;IA6BlD;;OAEG;IACI,aAAa,CAClB,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,EACjC,SAAS,EAAE,UAAU,EACrB,OAAO,GAAE,qBAA0B,GAClC,cAAc,CAAC,eAAe,EAAE,IAAI,EAAE,OAAO,CAAC;IAkGjD;;;OAGG;IACI,qBAAqB,CAC1B,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,EACjC,UAAU,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,CAAC,EAC5D,OAAO,GAAE,qBAA0B,GAClC,cAAc,CAAC,oBAAoB,EAAE,IAAI,EAAE,OAAO,CAAC;IAkGtD;;OAEG;IACI,qBAAqB,CAC1B,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,EACjC,WAAW,EAAE,UAAU,EACvB,UAAU,EAAE,UAAU,EACtB,OAAO,GAAE,qBAA0B,GAClC,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC;IAiD5C;;OAEG;IACI,aAAa,CAClB,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,EACjC,UAAU,EAAE,UAAU,EACtB,OAAO,GAAE,qBAA0B,GAClC,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC;CAiD7C"}
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EncryptionStream = void 0;
|
|
4
|
+
const constants_1 = require("../constants");
|
|
5
|
+
const stream_config_1 = require("../interfaces/stream-config");
|
|
6
|
+
const stream_header_1 = require("../interfaces/stream-header");
|
|
7
|
+
const chunk_processor_1 = require("./chunk-processor");
|
|
8
|
+
const progress_tracker_1 = require("./progress-tracker");
|
|
9
|
+
const multi_recipient_processor_1 = require("./multi-recipient-processor");
|
|
10
|
+
const i18n_setup_1 = require("../i18n-setup");
|
|
11
|
+
const enumerations_1 = require("../enumerations");
|
|
12
|
+
/**
|
|
13
|
+
* Streaming encryption/decryption service
|
|
14
|
+
*/
|
|
15
|
+
class EncryptionStream {
|
|
16
|
+
ecies;
|
|
17
|
+
config;
|
|
18
|
+
eciesConsts;
|
|
19
|
+
processor;
|
|
20
|
+
multiRecipientProcessor;
|
|
21
|
+
constructor(ecies, config = stream_config_1.DEFAULT_STREAM_CONFIG, eciesConsts = constants_1.Constants.ECIES) {
|
|
22
|
+
this.ecies = ecies;
|
|
23
|
+
this.config = config;
|
|
24
|
+
this.eciesConsts = eciesConsts;
|
|
25
|
+
this.processor = new chunk_processor_1.ChunkProcessor(ecies, eciesConsts);
|
|
26
|
+
this.multiRecipientProcessor = new multi_recipient_processor_1.MultiRecipientProcessor(ecies);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Build stream header
|
|
30
|
+
*/
|
|
31
|
+
buildStreamHeader(header) {
|
|
32
|
+
const buffer = new Uint8Array(stream_header_1.STREAM_HEADER_CONSTANTS.HEADER_SIZE);
|
|
33
|
+
const view = new DataView(buffer.buffer);
|
|
34
|
+
view.setUint32(0, header.magic, false);
|
|
35
|
+
view.setUint16(4, header.version, false);
|
|
36
|
+
view.setUint8(6, header.encryptionType);
|
|
37
|
+
view.setUint32(7, header.chunkSize, false);
|
|
38
|
+
view.setUint32(11, header.totalChunks, false);
|
|
39
|
+
view.setBigUint64(15, BigInt(header.totalBytes), false);
|
|
40
|
+
view.setBigUint64(23, BigInt(header.timestamp), false);
|
|
41
|
+
// Bytes 31-127: reserved (zeros)
|
|
42
|
+
return buffer;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Parse stream header
|
|
46
|
+
*/
|
|
47
|
+
parseStreamHeader(data) {
|
|
48
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
49
|
+
if (data.length < stream_header_1.STREAM_HEADER_CONSTANTS.HEADER_SIZE) {
|
|
50
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_Stream_DataTooShortForHeader));
|
|
51
|
+
}
|
|
52
|
+
const view = new DataView(data.buffer, data.byteOffset);
|
|
53
|
+
const magic = view.getUint32(0, false);
|
|
54
|
+
if (magic !== stream_header_1.STREAM_HEADER_CONSTANTS.MAGIC) {
|
|
55
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_Stream_InvalidMagicBytes));
|
|
56
|
+
}
|
|
57
|
+
const version = view.getUint16(4, false);
|
|
58
|
+
if (version !== stream_header_1.STREAM_HEADER_CONSTANTS.VERSION) {
|
|
59
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_Stream_UnsupportedVersion));
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
magic,
|
|
63
|
+
version,
|
|
64
|
+
encryptionType: view.getUint8(6),
|
|
65
|
+
chunkSize: view.getUint32(7, false),
|
|
66
|
+
totalChunks: view.getUint32(11, false),
|
|
67
|
+
totalBytes: Number(view.getBigUint64(15, false)),
|
|
68
|
+
timestamp: Number(view.getBigUint64(23, false)),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Encrypt data stream
|
|
73
|
+
*/
|
|
74
|
+
async *encryptStream(source, publicKey, options = {}) {
|
|
75
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
76
|
+
// Validate public key (65 bytes uncompressed with 0x04 prefix)
|
|
77
|
+
if (!publicKey || (publicKey.length !== 65 && publicKey.length !== 33)) {
|
|
78
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_Stream_InvalidPublicKeyLength));
|
|
79
|
+
}
|
|
80
|
+
const chunkSize = options.chunkSize ?? this.config.chunkSize;
|
|
81
|
+
const includeChecksums = options.includeChecksums ?? this.config.includeChecksums;
|
|
82
|
+
const signal = options.signal;
|
|
83
|
+
const onProgress = options.onProgress;
|
|
84
|
+
let buffer = new Uint8Array(0);
|
|
85
|
+
let chunkIndex = 0;
|
|
86
|
+
let lastYieldedChunk = null;
|
|
87
|
+
let tracker;
|
|
88
|
+
let totalBytesRead = 0;
|
|
89
|
+
const maxSingleChunk = 100 * 1024 * 1024; // 100MB max per source chunk
|
|
90
|
+
for await (const data of source) {
|
|
91
|
+
// Check for cancellation
|
|
92
|
+
if (signal?.aborted) {
|
|
93
|
+
throw new DOMException(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_Stream_EncryptionCancelled), 'AbortError');
|
|
94
|
+
}
|
|
95
|
+
// Prevent buffer exhaustion from single large source chunk
|
|
96
|
+
if (data.length > maxSingleChunk) {
|
|
97
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_Stream_BufferOverflowTemplate, { max: maxSingleChunk }));
|
|
98
|
+
}
|
|
99
|
+
// Append to buffer
|
|
100
|
+
const newBuffer = new Uint8Array(buffer.length + data.length);
|
|
101
|
+
newBuffer.set(buffer);
|
|
102
|
+
newBuffer.set(data, buffer.length);
|
|
103
|
+
buffer = newBuffer;
|
|
104
|
+
totalBytesRead += data.length;
|
|
105
|
+
// Initialize tracker on first data
|
|
106
|
+
if (!tracker && onProgress) {
|
|
107
|
+
tracker = new progress_tracker_1.ProgressTracker();
|
|
108
|
+
}
|
|
109
|
+
// Process complete chunks
|
|
110
|
+
while (buffer.length >= chunkSize) {
|
|
111
|
+
if (signal?.aborted) {
|
|
112
|
+
throw new DOMException('Encryption cancelled', 'AbortError');
|
|
113
|
+
}
|
|
114
|
+
const chunkData = buffer.slice(0, chunkSize);
|
|
115
|
+
buffer = buffer.slice(chunkSize);
|
|
116
|
+
const encryptedChunk = await this.processor.encryptChunk(chunkData, publicKey, chunkIndex++, false, includeChecksums);
|
|
117
|
+
lastYieldedChunk = encryptedChunk;
|
|
118
|
+
yield encryptedChunk;
|
|
119
|
+
// Report progress
|
|
120
|
+
if (tracker && onProgress) {
|
|
121
|
+
onProgress(tracker.update(chunkSize));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// Process remaining data as last chunk
|
|
126
|
+
if (buffer.length > 0) {
|
|
127
|
+
if (signal?.aborted) {
|
|
128
|
+
throw new DOMException('Encryption cancelled', 'AbortError');
|
|
129
|
+
}
|
|
130
|
+
const encryptedChunk = await this.processor.encryptChunk(buffer, publicKey, chunkIndex, true, includeChecksums);
|
|
131
|
+
yield encryptedChunk;
|
|
132
|
+
// Report final progress
|
|
133
|
+
if (tracker && onProgress) {
|
|
134
|
+
onProgress(tracker.update(buffer.length));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
else if (chunkIndex === 0) {
|
|
138
|
+
// Empty stream - yield nothing
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
else if (lastYieldedChunk) {
|
|
142
|
+
// Mark the last yielded chunk as last
|
|
143
|
+
lastYieldedChunk.isLast = true;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Encrypt stream for multiple recipients
|
|
148
|
+
* Uses shared symmetric key encrypted for each recipient
|
|
149
|
+
*/
|
|
150
|
+
async *encryptStreamMultiple(source, recipients, options = {}) {
|
|
151
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
152
|
+
if (recipients.length === 0) {
|
|
153
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_Stream_AtLeastOneRecipientRequired));
|
|
154
|
+
}
|
|
155
|
+
if (recipients.length > 65535) {
|
|
156
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_Stream_MaxRecipientsExceeded));
|
|
157
|
+
}
|
|
158
|
+
// Validate all recipient public keys
|
|
159
|
+
for (const recipient of recipients) {
|
|
160
|
+
if (!recipient.publicKey || (recipient.publicKey.length !== 65 && recipient.publicKey.length !== 33)) {
|
|
161
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_Stream_InvalidRecipientPublicKeyLength));
|
|
162
|
+
}
|
|
163
|
+
if (!recipient.id || recipient.id.length !== 32) {
|
|
164
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_Stream_InvalidRecipientIdLength));
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
const chunkSize = options.chunkSize ?? this.config.chunkSize;
|
|
168
|
+
const signal = options.signal;
|
|
169
|
+
const onProgress = options.onProgress;
|
|
170
|
+
// Generate shared symmetric key for this stream
|
|
171
|
+
const symmetricKey = crypto.getRandomValues(new Uint8Array(32));
|
|
172
|
+
let buffer = new Uint8Array(0);
|
|
173
|
+
let chunkIndex = 0;
|
|
174
|
+
let tracker;
|
|
175
|
+
const maxSingleChunk = 100 * 1024 * 1024;
|
|
176
|
+
for await (const data of source) {
|
|
177
|
+
if (signal?.aborted) {
|
|
178
|
+
throw new DOMException('Encryption cancelled', 'AbortError');
|
|
179
|
+
}
|
|
180
|
+
if (data.length > maxSingleChunk) {
|
|
181
|
+
throw new Error(`Buffer overflow: source chunk exceeds ${maxSingleChunk} bytes`);
|
|
182
|
+
}
|
|
183
|
+
const newBuffer = new Uint8Array(buffer.length + data.length);
|
|
184
|
+
newBuffer.set(buffer);
|
|
185
|
+
newBuffer.set(data, buffer.length);
|
|
186
|
+
buffer = newBuffer;
|
|
187
|
+
if (!tracker && onProgress) {
|
|
188
|
+
tracker = new progress_tracker_1.ProgressTracker();
|
|
189
|
+
}
|
|
190
|
+
while (buffer.length >= chunkSize) {
|
|
191
|
+
if (signal?.aborted) {
|
|
192
|
+
throw new DOMException('Encryption cancelled', 'AbortError');
|
|
193
|
+
}
|
|
194
|
+
const chunkData = buffer.slice(0, chunkSize);
|
|
195
|
+
buffer = buffer.slice(chunkSize);
|
|
196
|
+
const encryptedChunk = await this.multiRecipientProcessor.encryptChunk(chunkData, recipients, chunkIndex++, false, symmetricKey);
|
|
197
|
+
yield encryptedChunk;
|
|
198
|
+
if (tracker && onProgress) {
|
|
199
|
+
onProgress(tracker.update(chunkSize));
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// Process remaining data as last chunk
|
|
204
|
+
if (buffer.length > 0) {
|
|
205
|
+
if (signal?.aborted) {
|
|
206
|
+
throw new DOMException('Encryption cancelled', 'AbortError');
|
|
207
|
+
}
|
|
208
|
+
const encryptedChunk = await this.multiRecipientProcessor.encryptChunk(buffer, recipients, chunkIndex, true, symmetricKey);
|
|
209
|
+
yield encryptedChunk;
|
|
210
|
+
if (tracker && onProgress) {
|
|
211
|
+
onProgress(tracker.update(buffer.length));
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
else if (chunkIndex > 0) {
|
|
215
|
+
// Mark last yielded chunk - need to re-yield with isLast=true
|
|
216
|
+
// This is handled by the processor setting isLast flag
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Decrypt multi-recipient stream
|
|
221
|
+
*/
|
|
222
|
+
async *decryptStreamMultiple(source, recipientId, privateKey, options = {}) {
|
|
223
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
224
|
+
if (!recipientId || recipientId.length !== 32) {
|
|
225
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_Stream_InvalidRecipientIdMust32Bytes));
|
|
226
|
+
}
|
|
227
|
+
if (!privateKey || privateKey.length !== 32) {
|
|
228
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_Stream_InvalidPrivateKeyMust32Bytes));
|
|
229
|
+
}
|
|
230
|
+
const signal = options.signal;
|
|
231
|
+
const onProgress = options.onProgress;
|
|
232
|
+
let expectedIndex = 0;
|
|
233
|
+
let tracker;
|
|
234
|
+
if (onProgress) {
|
|
235
|
+
tracker = new progress_tracker_1.ProgressTracker();
|
|
236
|
+
}
|
|
237
|
+
for await (const chunkData of source) {
|
|
238
|
+
if (signal?.aborted) {
|
|
239
|
+
throw new DOMException(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_Stream_DecryptionCancelled), 'AbortError');
|
|
240
|
+
}
|
|
241
|
+
const { data, header } = await this.multiRecipientProcessor.decryptChunk(chunkData, recipientId, privateKey);
|
|
242
|
+
if (header.chunkIndex !== expectedIndex) {
|
|
243
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_Stream_ChunkSequenceErrorTemplate, { expected: expectedIndex, actual: header.chunkIndex }));
|
|
244
|
+
}
|
|
245
|
+
expectedIndex++;
|
|
246
|
+
yield data;
|
|
247
|
+
if (tracker && onProgress) {
|
|
248
|
+
onProgress(tracker.update(data.length));
|
|
249
|
+
}
|
|
250
|
+
const isLast = (header.flags & 0x01) !== 0;
|
|
251
|
+
if (isLast) {
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Decrypt data stream
|
|
258
|
+
*/
|
|
259
|
+
async *decryptStream(source, privateKey, options = {}) {
|
|
260
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
261
|
+
// Validate private key
|
|
262
|
+
if (!privateKey || privateKey.length !== 32) {
|
|
263
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_Stream_InvalidPrivateKeyMust32Bytes));
|
|
264
|
+
}
|
|
265
|
+
const signal = options.signal;
|
|
266
|
+
const onProgress = options.onProgress;
|
|
267
|
+
let expectedIndex = 0;
|
|
268
|
+
let tracker;
|
|
269
|
+
if (onProgress) {
|
|
270
|
+
tracker = new progress_tracker_1.ProgressTracker();
|
|
271
|
+
}
|
|
272
|
+
for await (const chunkData of source) {
|
|
273
|
+
// Check for cancellation
|
|
274
|
+
if (signal?.aborted) {
|
|
275
|
+
throw new DOMException(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_Stream_DecryptionCancelled), 'AbortError');
|
|
276
|
+
}
|
|
277
|
+
const { data, header } = await this.processor.decryptChunk(chunkData, privateKey);
|
|
278
|
+
// Validate sequence
|
|
279
|
+
if (header.index !== expectedIndex) {
|
|
280
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_Stream_ChunkSequenceErrorTemplate, { expected: expectedIndex, actual: header.index }));
|
|
281
|
+
}
|
|
282
|
+
expectedIndex++;
|
|
283
|
+
yield data;
|
|
284
|
+
// Report progress
|
|
285
|
+
if (tracker && onProgress) {
|
|
286
|
+
onProgress(tracker.update(data.length));
|
|
287
|
+
}
|
|
288
|
+
// Check if this was the last chunk
|
|
289
|
+
const isLast = (header.flags & 0x01) !== 0;
|
|
290
|
+
if (isLast) {
|
|
291
|
+
break;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
exports.EncryptionStream = EncryptionStream;
|
|
297
|
+
//# sourceMappingURL=encryption-stream.js.map
|