@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.
Files changed (128) hide show
  1. package/README.md +153 -3
  2. package/package.json +3 -3
  3. package/src/builders/ecies-builder.d.ts +7 -3
  4. package/src/builders/ecies-builder.d.ts.map +1 -1
  5. package/src/builders/ecies-builder.js +11 -9
  6. package/src/builders/ecies-builder.js.map +1 -1
  7. package/src/builders/member-builder.d.ts +10 -1
  8. package/src/builders/member-builder.d.ts.map +1 -1
  9. package/src/builders/member-builder.js +29 -7
  10. package/src/builders/member-builder.js.map +1 -1
  11. package/src/enumerations/ecies-error-type.d.ts +11 -1
  12. package/src/enumerations/ecies-error-type.d.ts.map +1 -1
  13. package/src/enumerations/ecies-error-type.js +10 -0
  14. package/src/enumerations/ecies-error-type.js.map +1 -1
  15. package/src/enumerations/ecies-string-key.d.ts +77 -1
  16. package/src/enumerations/ecies-string-key.d.ts.map +1 -1
  17. package/src/enumerations/ecies-string-key.js +77 -0
  18. package/src/enumerations/ecies-string-key.js.map +1 -1
  19. package/src/i18n-setup.d.ts.map +1 -1
  20. package/src/i18n-setup.js +15 -683
  21. package/src/i18n-setup.js.map +1 -1
  22. package/src/index.d.ts +12 -0
  23. package/src/index.d.ts.map +1 -1
  24. package/src/index.js +15 -1
  25. package/src/index.js.map +1 -1
  26. package/src/interfaces/encrypted-chunk.d.ts +55 -0
  27. package/src/interfaces/encrypted-chunk.d.ts.map +1 -0
  28. package/src/interfaces/encrypted-chunk.js +15 -0
  29. package/src/interfaces/encrypted-chunk.js.map +1 -0
  30. package/src/interfaces/encryption-state.d.ts +18 -0
  31. package/src/interfaces/encryption-state.d.ts.map +1 -0
  32. package/src/interfaces/encryption-state.js +5 -0
  33. package/src/interfaces/encryption-state.js.map +1 -0
  34. package/src/interfaces/frontend-member-operational.d.ts +12 -1
  35. package/src/interfaces/frontend-member-operational.d.ts.map +1 -1
  36. package/src/interfaces/multi-recipient-chunk.d.ts +65 -0
  37. package/src/interfaces/multi-recipient-chunk.d.ts.map +1 -0
  38. package/src/interfaces/multi-recipient-chunk.js +25 -0
  39. package/src/interfaces/multi-recipient-chunk.js.map +1 -0
  40. package/src/interfaces/stream-config.d.ts +14 -0
  41. package/src/interfaces/stream-config.d.ts.map +1 -0
  42. package/src/interfaces/stream-config.js +11 -0
  43. package/src/interfaces/stream-config.js.map +1 -0
  44. package/src/interfaces/stream-header.d.ts +29 -0
  45. package/src/interfaces/stream-header.d.ts.map +1 -0
  46. package/src/interfaces/stream-header.js +12 -0
  47. package/src/interfaces/stream-header.js.map +1 -0
  48. package/src/interfaces/stream-progress.d.ts +33 -0
  49. package/src/interfaces/stream-progress.d.ts.map +1 -0
  50. package/src/interfaces/stream-progress.js +3 -0
  51. package/src/interfaces/stream-progress.js.map +1 -0
  52. package/src/lib/crypto-container.d.ts.map +1 -1
  53. package/src/lib/crypto-container.js +2 -1
  54. package/src/lib/crypto-container.js.map +1 -1
  55. package/src/member.d.ts +27 -1
  56. package/src/member.d.ts.map +1 -1
  57. package/src/member.js +69 -2
  58. package/src/member.js.map +1 -1
  59. package/src/services/aes-gcm.d.ts.map +1 -1
  60. package/src/services/aes-gcm.js +29 -0
  61. package/src/services/aes-gcm.js.map +1 -1
  62. package/src/services/chunk-processor.d.ts +31 -0
  63. package/src/services/chunk-processor.d.ts.map +1 -0
  64. package/src/services/chunk-processor.js +149 -0
  65. package/src/services/chunk-processor.js.map +1 -0
  66. package/src/services/ecies/crypto-core.d.ts.map +1 -1
  67. package/src/services/ecies/crypto-core.js +23 -8
  68. package/src/services/ecies/crypto-core.js.map +1 -1
  69. package/src/services/ecies/service.d.ts +12 -4
  70. package/src/services/ecies/service.d.ts.map +1 -1
  71. package/src/services/ecies/service.js +28 -18
  72. package/src/services/ecies/service.js.map +1 -1
  73. package/src/services/ecies/single-recipient.d.ts.map +1 -1
  74. package/src/services/ecies/single-recipient.js +55 -4
  75. package/src/services/ecies/single-recipient.js.map +1 -1
  76. package/src/services/encryption-stream.d.ts +69 -0
  77. package/src/services/encryption-stream.d.ts.map +1 -0
  78. package/src/services/encryption-stream.js +297 -0
  79. package/src/services/encryption-stream.js.map +1 -0
  80. package/src/services/multi-recipient-processor.d.ts +25 -0
  81. package/src/services/multi-recipient-processor.d.ts.map +1 -0
  82. package/src/services/multi-recipient-processor.js +238 -0
  83. package/src/services/multi-recipient-processor.js.map +1 -0
  84. package/src/services/password-login.js +1 -1
  85. package/src/services/password-login.js.map +1 -1
  86. package/src/services/progress-tracker.d.ts +23 -0
  87. package/src/services/progress-tracker.d.ts.map +1 -0
  88. package/src/services/progress-tracker.js +98 -0
  89. package/src/services/progress-tracker.js.map +1 -0
  90. package/src/services/resumable-encryption.d.ts +19 -0
  91. package/src/services/resumable-encryption.d.ts.map +1 -0
  92. package/src/services/resumable-encryption.js +109 -0
  93. package/src/services/resumable-encryption.js.map +1 -0
  94. package/src/test-mocks/mock-frontend-member.d.ts +15 -0
  95. package/src/test-mocks/mock-frontend-member.d.ts.map +1 -1
  96. package/src/test-mocks/mock-frontend-member.js +58 -0
  97. package/src/test-mocks/mock-frontend-member.js.map +1 -1
  98. package/src/translations/de.d.ts +3 -0
  99. package/src/translations/de.d.ts.map +1 -0
  100. package/src/translations/de.js +178 -0
  101. package/src/translations/de.js.map +1 -0
  102. package/src/translations/en-US.d.ts +3 -0
  103. package/src/translations/en-US.d.ts.map +1 -0
  104. package/src/translations/en-US.js +178 -0
  105. package/src/translations/en-US.js.map +1 -0
  106. package/src/translations/es.d.ts +3 -0
  107. package/src/translations/es.d.ts.map +1 -0
  108. package/src/translations/es.js +178 -0
  109. package/src/translations/es.js.map +1 -0
  110. package/src/translations/fr.d.ts +3 -0
  111. package/src/translations/fr.d.ts.map +1 -0
  112. package/src/translations/fr.js +178 -0
  113. package/src/translations/fr.js.map +1 -0
  114. package/src/translations/ja.d.ts +3 -0
  115. package/src/translations/ja.d.ts.map +1 -0
  116. package/src/translations/ja.js +178 -0
  117. package/src/translations/ja.js.map +1 -0
  118. package/src/translations/uk.d.ts +3 -0
  119. package/src/translations/uk.d.ts.map +1 -0
  120. package/src/translations/uk.js +178 -0
  121. package/src/translations/uk.js.map +1 -0
  122. package/src/translations/zh-cn.d.ts +3 -0
  123. package/src/translations/zh-cn.d.ts.map +1 -0
  124. package/src/translations/zh-cn.js +178 -0
  125. package/src/translations/zh-cn.js.map +1 -0
  126. package/src/utils.d.ts.map +1 -1
  127. package/src/utils.js +8 -5
  128. 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
- throw new Error('Invalid data length');
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
- throw new Error('Invalid encryption type');
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
- throw new Error('Invalid encrypted data length');
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
- throw new Error('Computed decrypted length is negative');
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, recipients, message, preamble) {
176
- if ((encryptionType === ecies_encryption_type_1.EciesEncryptionTypeEnum.Simple ||
177
- ecies_encryption_type_1.EciesEncryptionTypeEnum.Single) &&
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":"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"}
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;AAC1D,iDAAwE;AACxE,0EAAqE;AACrE,uDAAwD;AAExD;;;GAGG;AACH,MAAa,YAAY;IACJ,OAAO,CAAe;IACtB,UAAU,CAAkB;IAC5B,SAAS,CAAiB;IAC1B,eAAe,CAAuB;IACtC,cAAc,CAAsB;IACpC,WAAW,CAAkB;IAEhD,YAAY,MAA8B,EAAE,cAA+B,qBAAS,CAAC,KAAK;QACxF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG;YACb,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU;YACtC,wBAAwB,EAAE,IAAI,CAAC,WAAW,CAAC,2BAA2B;YACtE,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,iBAAiB;YACpD,kBAAkB,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS;YACxD,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ;YACrD,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI;YACjD,GAAG,MAAM;SACV,CAAC;QAEF,wBAAwB;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,6BAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACtE,IAAI,CAAC,SAAS,GAAG,IAAI,0BAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,eAAe,GAAG,IAAI,uCAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAChF,IAAI,CAAC,cAAc,GAAG,IAAI,qCAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAChF,CAAC;IAED,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IAChC,CAAC;IAED,iCAAiC;IAEjC;;OAEG;IACI,mBAAmB;QACxB,OAAO,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC;IAC/C,CAAC;IAED;;OAEG;IACI,yBAAyB,CAAC,QAAsB;QACrD,OAAO,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACI,mBAAmB,CAAC,IAAgB;QACzC,OAAO,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACI,uBAAuB,CAAC,QAAsB;QACnD,OAAO,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACI,YAAY,CAAC,UAAsB;QACxC,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;IAED,6CAA6C;IAE7C;;OAEG;IACI,KAAK,CAAC,qBAAqB,CAChC,aAAsB,EACtB,iBAA6B,EAC7B,OAAmB,EACnB,WAAuB,IAAI,UAAU,CAAC,CAAC,CAAC;QAExC,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CACjC,aAAa,EACb,iBAAiB,EACjB,OAAO,EACP,QAAQ,CACT,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,0BAA0B,CAC/B,cAAuC,EACvC,IAAgB,EAChB,eAAuB,CAAC,EACxB,OAAiC;QAEjC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAC3D,cAAc,EACd,IAAI,EACJ,YAAY,EACZ,OAAO,CACR,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,+BAA+B,CAC1C,aAAsB,EACtB,UAAsB,EACtB,aAAyB,EACzB,eAAuB,CAAC,EACxB,OAAiC;QAEjC,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CACjD,aAAa;YACX,CAAC,CAAC,+CAAuB,CAAC,MAAM;YAChC,CAAC,CAAC,+CAAuB,CAAC,MAAM,EAClC,UAAU,EACV,aAAa,EACb,YAAY,EACZ,OAAO,CACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,iCAAiC,CAC5C,cAAuC,EACvC,UAAsB,EACtB,aAAyB,EACzB,eAAuB,CAAC,EACxB,OAAiC;QAEjC,OAAO,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAC7C,cAAc,EACd,UAAU,EACV,aAAa,EACb,YAAY,EACZ,OAAO,CACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,2BAA2B,CACtC,UAAsB,EACtB,kBAA8B,EAC9B,EAAc,EACd,OAAmB,EACnB,SAAqB;QAErB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAChE,UAAU,EACV,kBAAkB,EAClB,EAAE,EACF,OAAO,EACP,SAAS,CACV,CAAC;QAEF,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;IAC3D,CAAC;IAED,4BAA4B;IAE5B;;OAEG;IACI,WAAW,CAChB,UAAsB,EACtB,IAAgB;QAEhB,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACI,aAAa,CAClB,SAAqB,EACrB,IAAgB,EAChB,SAA8B;QAE9B,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACI,oCAAoC,CACzC,eAAgC;QAEhC,OAAO,IAAI,CAAC,SAAS,CAAC,oCAAoC,CAAC,eAAe,CAAC,CAAC;IAC9E,CAAC;IAED;;OAEG;IACI,oCAAoC,CACzC,cAAmC;QAEnC,OAAO,IAAI,CAAC,SAAS,CAAC,oCAAoC,CAAC,cAAc,CAAC,CAAC;IAC7E,CAAC;IAED,0BAA0B;IAE1B;;OAEG;IACI,oCAAoC,CACzC,UAAkB,EAClB,cAAmC,EACnC,cAAuB;QAEvB,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,IAAA,+BAAkB,GAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,6BAAgB,EAAE,iCAAc,CAAC,+BAA+B,CAAC,CAAC,CAAC;QACtG,CAAC;QAED,QAAQ,cAAc,EAAE,CAAC;YACvB,KAAK,QAAQ;gBACX,OAAO,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,mBAAmB,CAAC;YAClE,KAAK,QAAQ;gBACX,OAAO,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,mBAAmB,CAAC;YAClE,KAAK,UAAU;gBACb,4CAA4C;gBAC5C,OAAO,CACL,UAAU;oBACV,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,mBAAmB;oBAC7C,CAAC,cAAc,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CACrE,CAAC;YACJ;gBACE,MAAM,MAAM,GAAG,IAAA,+BAAkB,GAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,6BAAgB,EAAE,iCAAc,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC5G,CAAC;IACH,CAAC;IAED;;OAEG;IACI,6CAA6C,CAClD,mBAA2B,EAC3B,OAAgB;QAEhB,IAAI,mBAAmB,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,IAAA,+BAAkB,GAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,6BAAgB,EAAE,iCAAc,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAC/G,CAAC;QAEH,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,mBAAmB,CAAC;QAC3D,MAAM,aAAa,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,eAAe,GAAG,mBAAmB,GAAG,QAAQ,GAAG,aAAa,CAAC;QAEvE,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAA,+BAAkB,GAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,6BAAgB,EAAE,iCAAc,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACpH,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,OAAO,CAClB,cAAuC,EACvC,kBAA8B,EAC9B,OAAmB,EACnB,QAAqB;QAErB,IAAI,cAAc,KAAK,+CAAuB,CAAC,QAAQ,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CACb,IAAA,+BAAkB,GAAE,CAAC,SAAS,CAC5B,6BAAgB,EAChB,iCAAc,CAAC,wEAAwE,CACxF,CACF,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CACjC,cAAc,KAAK,+CAAuB,CAAC,MAAM,EACjD,kBAAkB,EAClB,OAAO,EACP,QAAQ,CACT,CAAC;IACJ,CAAC;IACD;;;;;;OAMG;IACI,KAAK,CAAC,eAAe,CAC1B,UAAkC,EAClC,OAAmB,EACnB,QAAqB;QAEnB,OAAO,IAAI,CAAC,cAAc,CAAC,eAAe,CACxC,UAAU,EACV,OAAO,EACP,QAAQ,CACT,CAAC;IACJ,CAAC;CACF;AA1TH,oCA0TG"}
@@ -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;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;IAyHD;;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
+ {"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
- // Normalize ephemeral public key
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
- if (a[i] !== b[i])
206
- return false;
257
+ diff |= a[i] ^ b[i];
207
258
  }
208
- return true;
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