@digitaldefiance/node-ecies-lib 1.1.22 → 1.1.24

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 (212) hide show
  1. package/README.md +8 -0
  2. package/package.json +6 -5
  3. package/src/constants.d.ts +32 -0
  4. package/src/constants.d.ts.map +1 -0
  5. package/src/constants.js +137 -0
  6. package/src/constants.js.map +1 -0
  7. package/src/enumerations/index.d.ts +2 -0
  8. package/src/enumerations/index.d.ts.map +1 -0
  9. package/src/enumerations/index.js +5 -0
  10. package/src/enumerations/index.js.map +1 -0
  11. package/src/enumerations/pbkdf2-profile.d.ts +9 -0
  12. package/src/enumerations/pbkdf2-profile.d.ts.map +1 -0
  13. package/src/enumerations/pbkdf2-profile.js +13 -0
  14. package/src/enumerations/pbkdf2-profile.js.map +1 -0
  15. package/src/i18n/ecies-i18n-factory.d.ts +54 -0
  16. package/src/i18n/ecies-i18n-factory.d.ts.map +1 -0
  17. package/src/i18n/ecies-i18n-factory.js +333 -0
  18. package/src/i18n/ecies-i18n-factory.js.map +1 -0
  19. package/src/i18n/{index.ts → index.d.ts} +1 -0
  20. package/src/i18n/index.d.ts.map +1 -0
  21. package/src/i18n/index.js +5 -0
  22. package/src/i18n/index.js.map +1 -0
  23. package/src/{index.ts → index.d.ts} +1 -0
  24. package/src/index.d.ts.map +1 -0
  25. package/src/index.js +11 -0
  26. package/src/index.js.map +1 -0
  27. package/src/interfaces/authenticated-cipher.d.ts +10 -0
  28. package/src/interfaces/authenticated-cipher.d.ts.map +1 -0
  29. package/src/interfaces/authenticated-cipher.js +3 -0
  30. package/src/interfaces/authenticated-cipher.js.map +1 -0
  31. package/src/interfaces/authenticated-decipher.d.ts +9 -0
  32. package/src/interfaces/authenticated-decipher.d.ts.map +1 -0
  33. package/src/interfaces/authenticated-decipher.js +3 -0
  34. package/src/interfaces/authenticated-decipher.js.map +1 -0
  35. package/src/interfaces/checksum-config.d.ts +5 -0
  36. package/src/interfaces/checksum-config.d.ts.map +1 -0
  37. package/src/interfaces/checksum-config.js +3 -0
  38. package/src/interfaces/checksum-config.js.map +1 -0
  39. package/src/interfaces/checksum-consts.d.ts +11 -0
  40. package/src/interfaces/checksum-consts.d.ts.map +1 -0
  41. package/src/interfaces/checksum-consts.js +3 -0
  42. package/src/interfaces/checksum-consts.js.map +1 -0
  43. package/src/interfaces/constants.d.ts +43 -0
  44. package/src/interfaces/constants.d.ts.map +1 -0
  45. package/src/interfaces/constants.js +3 -0
  46. package/src/interfaces/constants.js.map +1 -0
  47. package/src/interfaces/ecies-consts.d.ts +88 -0
  48. package/src/interfaces/ecies-consts.d.ts.map +1 -0
  49. package/src/interfaces/ecies-consts.js +3 -0
  50. package/src/interfaces/ecies-consts.js.map +1 -0
  51. package/src/interfaces/encryption-consts.d.ts +11 -0
  52. package/src/interfaces/encryption-consts.d.ts.map +1 -0
  53. package/src/interfaces/encryption-consts.js +3 -0
  54. package/src/interfaces/encryption-consts.js.map +1 -0
  55. package/src/interfaces/{index.ts → index.d.ts} +1 -0
  56. package/src/interfaces/index.d.ts.map +1 -0
  57. package/src/interfaces/index.js +21 -0
  58. package/src/interfaces/index.js.map +1 -0
  59. package/src/interfaces/keypair-buffer-with-un-encrypted-private-key.d.ts +6 -0
  60. package/src/interfaces/keypair-buffer-with-un-encrypted-private-key.d.ts.map +1 -0
  61. package/src/interfaces/keypair-buffer-with-un-encrypted-private-key.js +3 -0
  62. package/src/interfaces/keypair-buffer-with-un-encrypted-private-key.js.map +1 -0
  63. package/src/interfaces/keyring-consts.d.ts +6 -0
  64. package/src/interfaces/keyring-consts.d.ts.map +1 -0
  65. package/src/interfaces/keyring-consts.js +3 -0
  66. package/src/interfaces/keyring-consts.js.map +1 -0
  67. package/src/interfaces/member-operational.d.ts +36 -0
  68. package/src/interfaces/member-operational.d.ts.map +1 -0
  69. package/src/interfaces/member-operational.js +3 -0
  70. package/src/interfaces/member-operational.js.map +1 -0
  71. package/src/interfaces/{member-with-mnemonic.ts → member-with-mnemonic.d.ts} +3 -3
  72. package/src/interfaces/member-with-mnemonic.d.ts.map +1 -0
  73. package/src/interfaces/member-with-mnemonic.js +3 -0
  74. package/src/interfaces/member-with-mnemonic.js.map +1 -0
  75. package/src/interfaces/{multi-encrypted-message.ts → multi-encrypted-message.d.ts} +5 -5
  76. package/src/interfaces/multi-encrypted-message.d.ts.map +1 -0
  77. package/src/interfaces/multi-encrypted-message.js +3 -0
  78. package/src/interfaces/multi-encrypted-message.js.map +1 -0
  79. package/src/interfaces/multi-encrypted-parsed-header.d.ts +24 -0
  80. package/src/interfaces/multi-encrypted-parsed-header.d.ts.map +1 -0
  81. package/src/interfaces/multi-encrypted-parsed-header.js +3 -0
  82. package/src/interfaces/multi-encrypted-parsed-header.js.map +1 -0
  83. package/src/interfaces/{pbkdf-profiles.ts → pbkdf-profiles.d.ts} +2 -2
  84. package/src/interfaces/pbkdf-profiles.d.ts.map +1 -0
  85. package/src/interfaces/pbkdf-profiles.js +3 -0
  86. package/src/interfaces/pbkdf-profiles.js.map +1 -0
  87. package/src/interfaces/pbkdf2-result.d.ts +6 -0
  88. package/src/interfaces/pbkdf2-result.d.ts.map +1 -0
  89. package/src/interfaces/pbkdf2-result.js +3 -0
  90. package/src/interfaces/pbkdf2-result.js.map +1 -0
  91. package/src/interfaces/signing-key-private-key-info.d.ts +11 -0
  92. package/src/interfaces/signing-key-private-key-info.d.ts.map +1 -0
  93. package/src/interfaces/signing-key-private-key-info.js +3 -0
  94. package/src/interfaces/signing-key-private-key-info.js.map +1 -0
  95. package/src/interfaces/{simple-keypair-buffer.ts → simple-keypair-buffer.d.ts} +3 -3
  96. package/src/interfaces/simple-keypair-buffer.d.ts.map +1 -0
  97. package/src/interfaces/simple-keypair-buffer.js +3 -0
  98. package/src/interfaces/simple-keypair-buffer.js.map +1 -0
  99. package/src/interfaces/{simple-keypair.ts → simple-keypair.d.ts} +3 -3
  100. package/src/interfaces/simple-keypair.d.ts.map +1 -0
  101. package/src/interfaces/simple-keypair.js +3 -0
  102. package/src/interfaces/simple-keypair.js.map +1 -0
  103. package/src/interfaces/simple-public-key-only-buffer.d.ts +4 -0
  104. package/src/interfaces/simple-public-key-only-buffer.d.ts.map +1 -0
  105. package/src/interfaces/simple-public-key-only-buffer.js +3 -0
  106. package/src/interfaces/simple-public-key-only-buffer.js.map +1 -0
  107. package/src/interfaces/simple-public-key-only.d.ts +4 -0
  108. package/src/interfaces/simple-public-key-only.d.ts.map +1 -0
  109. package/src/interfaces/simple-public-key-only.js +3 -0
  110. package/src/interfaces/simple-public-key-only.js.map +1 -0
  111. package/src/interfaces/single-encrypted-parsed-header.d.ts +35 -0
  112. package/src/interfaces/single-encrypted-parsed-header.d.ts.map +1 -0
  113. package/src/interfaces/single-encrypted-parsed-header.js +3 -0
  114. package/src/interfaces/single-encrypted-parsed-header.js.map +1 -0
  115. package/src/interfaces/{wallet-seed.ts → wallet-seed.d.ts} +3 -3
  116. package/src/interfaces/wallet-seed.d.ts.map +1 -0
  117. package/src/interfaces/wallet-seed.js +3 -0
  118. package/src/interfaces/wallet-seed.js.map +1 -0
  119. package/src/interfaces/wrapped-key-consts.d.ts +7 -0
  120. package/src/interfaces/wrapped-key-consts.d.ts.map +1 -0
  121. package/src/interfaces/wrapped-key-consts.js +3 -0
  122. package/src/interfaces/wrapped-key-consts.js.map +1 -0
  123. package/src/member.d.ts +74 -0
  124. package/src/member.d.ts.map +1 -0
  125. package/src/member.js +273 -0
  126. package/src/member.js.map +1 -0
  127. package/src/services/aes-gcm.d.ts +66 -0
  128. package/src/services/aes-gcm.d.ts.map +1 -0
  129. package/src/services/aes-gcm.js +115 -0
  130. package/src/services/aes-gcm.js.map +1 -0
  131. package/src/services/ecies/crypto-core.d.ts +83 -0
  132. package/src/services/ecies/crypto-core.d.ts.map +1 -0
  133. package/src/services/ecies/crypto-core.js +166 -0
  134. package/src/services/ecies/crypto-core.js.map +1 -0
  135. package/src/services/ecies/file.d.ts +30 -0
  136. package/src/services/ecies/file.d.ts.map +1 -0
  137. package/src/services/ecies/file.js +112 -0
  138. package/src/services/ecies/file.js.map +1 -0
  139. package/src/services/ecies/{index.ts → index.d.ts} +1 -0
  140. package/src/services/ecies/index.d.ts.map +1 -0
  141. package/src/services/ecies/index.js +11 -0
  142. package/src/services/ecies/index.js.map +1 -0
  143. package/src/services/ecies/multi-recipient.d.ts +82 -0
  144. package/src/services/ecies/multi-recipient.d.ts.map +1 -0
  145. package/src/services/ecies/multi-recipient.js +360 -0
  146. package/src/services/ecies/multi-recipient.js.map +1 -0
  147. package/src/services/ecies/service.d.ts +70 -0
  148. package/src/services/ecies/service.d.ts.map +1 -0
  149. package/src/services/ecies/service.js +167 -0
  150. package/src/services/ecies/service.js.map +1 -0
  151. package/src/services/ecies/signature.d.ts +38 -0
  152. package/src/services/ecies/signature.d.ts.map +1 -0
  153. package/src/services/ecies/signature.js +69 -0
  154. package/src/services/ecies/signature.js.map +1 -0
  155. package/src/services/ecies/single-recipient.d.ts +85 -0
  156. package/src/services/ecies/single-recipient.d.ts.map +1 -0
  157. package/src/services/ecies/single-recipient.js +399 -0
  158. package/src/services/ecies/single-recipient.js.map +1 -0
  159. package/src/services/ecies/utilities.d.ts +22 -0
  160. package/src/services/ecies/utilities.d.ts.map +1 -0
  161. package/src/services/ecies/utilities.js +75 -0
  162. package/src/services/ecies/utilities.js.map +1 -0
  163. package/src/services/index.d.ts +4 -0
  164. package/src/services/index.d.ts.map +1 -0
  165. package/src/services/index.js +7 -0
  166. package/src/services/index.js.map +1 -0
  167. package/src/services/pbkdf2.d.ts +106 -0
  168. package/src/services/pbkdf2.d.ts.map +1 -0
  169. package/src/services/pbkdf2.js +195 -0
  170. package/src/services/pbkdf2.js.map +1 -0
  171. package/src/{types.ts → types.d.ts} +9 -26
  172. package/src/types.d.ts.map +1 -0
  173. package/src/types.js +3 -0
  174. package/src/types.js.map +1 -0
  175. package/src/utils.d.ts +11 -0
  176. package/src/utils.d.ts.map +1 -0
  177. package/src/utils.js +82 -0
  178. package/src/utils.js.map +1 -0
  179. package/LICENSE +0 -21
  180. package/src/constants.ts +0 -182
  181. package/src/enumerations/index.ts +0 -1
  182. package/src/enumerations/pbkdf2-profile.ts +0 -8
  183. package/src/i18n/ecies-i18n-factory.ts +0 -435
  184. package/src/interfaces/authenticated-cipher.ts +0 -9
  185. package/src/interfaces/authenticated-decipher.ts +0 -8
  186. package/src/interfaces/checksum-config.ts +0 -4
  187. package/src/interfaces/checksum-consts.ts +0 -13
  188. package/src/interfaces/constants.ts +0 -43
  189. package/src/interfaces/ecies-consts.ts +0 -99
  190. package/src/interfaces/encryption-consts.ts +0 -10
  191. package/src/interfaces/keypair-buffer-with-un-encrypted-private-key.ts +0 -7
  192. package/src/interfaces/keyring-consts.ts +0 -5
  193. package/src/interfaces/member-operational.ts +0 -52
  194. package/src/interfaces/multi-encrypted-parsed-header.ts +0 -24
  195. package/src/interfaces/pbkdf2-result.ts +0 -5
  196. package/src/interfaces/signing-key-private-key-info.ts +0 -12
  197. package/src/interfaces/simple-public-key-only-buffer.ts +0 -3
  198. package/src/interfaces/simple-public-key-only.ts +0 -3
  199. package/src/interfaces/single-encrypted-parsed-header.ts +0 -35
  200. package/src/interfaces/wrapped-key-consts.ts +0 -6
  201. package/src/member.ts +0 -463
  202. package/src/services/aes-gcm.ts +0 -160
  203. package/src/services/ecies/crypto-core.ts +0 -213
  204. package/src/services/ecies/file.ts +0 -174
  205. package/src/services/ecies/multi-recipient.ts +0 -583
  206. package/src/services/ecies/service.ts +0 -351
  207. package/src/services/ecies/signature.ts +0 -91
  208. package/src/services/ecies/single-recipient.ts +0 -676
  209. package/src/services/ecies/utilities.ts +0 -111
  210. package/src/services/index.ts +0 -3
  211. package/src/services/pbkdf2.ts +0 -307
  212. package/src/utils.ts +0 -104
@@ -1,351 +0,0 @@
1
- import {
2
- EciesEncryptionType,
3
- EciesEncryptionTypeEnum,
4
- ECIESError,
5
- ECIESErrorTypeEnum,
6
- HexString,
7
- IECIESConfig,
8
- IECIESConstants,
9
- SecureString,
10
- } from '@digitaldefiance/ecies-lib';
11
- import { Wallet } from '@ethereumjs/wallet';
12
- import {
13
- createEciesTranslationEngine,
14
- getEciesPluginI18nEngine,
15
- NodeEciesComponentId,
16
- NodeEciesStringKey,
17
- } from '../../i18n/ecies-i18n-factory';
18
- import { Member } from '../../member';
19
-
20
- // Import all the modular components
21
- import { CoreLanguageCode, PluginI18nEngine } from '@digitaldefiance/i18n-lib';
22
- import { Constants } from '../../constants';
23
- import { IWalletSeed } from '../../interfaces';
24
- import { IMultiEncryptedMessage } from '../../interfaces/multi-encrypted-message';
25
- import { IMultiEncryptedParsedHeader } from '../../interfaces/multi-encrypted-parsed-header';
26
- import { ISingleEncryptedParsedHeader } from '../../interfaces/single-encrypted-parsed-header';
27
- import { SignatureBuffer, SignatureString } from '../../types';
28
- import { EciesCryptoCore } from './crypto-core';
29
- import { EciesMultiRecipient } from './multi-recipient';
30
- import { EciesSignature } from './signature';
31
- import { EciesSingleRecipientCore } from './single-recipient';
32
- import { EciesUtilities } from './utilities';
33
-
34
- /**
35
- * Unified ECIES service that integrates all the modular components
36
- */
37
- export class ECIESService {
38
- protected readonly _config: IECIESConfig;
39
- protected readonly cryptoCore: EciesCryptoCore;
40
- protected readonly signature: EciesSignature;
41
- protected readonly singleRecipient: EciesSingleRecipientCore;
42
- protected readonly multiRecipient: EciesMultiRecipient;
43
- protected readonly utilities: EciesUtilities;
44
- protected readonly engine: PluginI18nEngine<CoreLanguageCode>;
45
-
46
- constructor(
47
- engineOrConfig?: PluginI18nEngine<CoreLanguageCode> | Partial<IECIESConfig>,
48
- config?: Partial<IECIESConfig>,
49
- eciesParams: IECIESConstants = Constants.ECIES
50
- ) {
51
- // Determine if first parameter is engine or config
52
- let engine: PluginI18nEngine<CoreLanguageCode>;
53
- let actualConfig: Partial<IECIESConfig>;
54
-
55
- if (engineOrConfig && 'translate' in engineOrConfig) {
56
- // First parameter is an engine
57
- engine = engineOrConfig as PluginI18nEngine<CoreLanguageCode>;
58
- actualConfig = config || {};
59
- } else {
60
- // First parameter is config or undefined
61
- engine = createEciesTranslationEngine();
62
- actualConfig = (engineOrConfig as Partial<IECIESConfig>) || {};
63
- }
64
-
65
- const eciesConsts = eciesParams;
66
- this._config = {
67
- ...config,
68
- curveName: eciesConsts.CURVE_NAME,
69
- primaryKeyDerivationPath: eciesConsts.PRIMARY_KEY_DERIVATION_PATH,
70
- mnemonicStrength: eciesConsts.MNEMONIC_STRENGTH,
71
- symmetricAlgorithm: eciesConsts.SYMMETRIC.ALGORITHM,
72
- symmetricKeyBits: eciesConsts.SYMMETRIC.KEY_BITS,
73
- symmetricKeyMode: eciesConsts.SYMMETRIC.MODE,
74
- ...actualConfig,
75
- };
76
-
77
- // Initialize all components
78
- this.engine = engine;
79
- this.cryptoCore = new EciesCryptoCore(this._config, eciesParams);
80
- this.signature = new EciesSignature(this.cryptoCore);
81
- this.singleRecipient = new EciesSingleRecipientCore(this._config, engine);
82
- this.multiRecipient = new EciesMultiRecipient(this.cryptoCore, engine);
83
- this.utilities = new EciesUtilities();
84
- }
85
-
86
- public get core(): EciesCryptoCore {
87
- return this.cryptoCore;
88
- }
89
-
90
- public get config(): IECIESConfig {
91
- return this._config;
92
- }
93
-
94
- /**
95
- * The name of the elliptic curve used for ECIES encryption/decryption
96
- */
97
- public get curveName(): string {
98
- return this._config.curveName;
99
- }
100
-
101
- // === Key Management Methods ===
102
-
103
- public generateNewMnemonic(): SecureString {
104
- return this.cryptoCore.generateNewMnemonic();
105
- }
106
-
107
- public walletFromSeed(seed: Buffer): Wallet {
108
- return this.cryptoCore.walletFromSeed(seed);
109
- }
110
-
111
- public walletAndSeedFromMnemonic(mnemonic: SecureString): IWalletSeed {
112
- return this.cryptoCore.walletAndSeedFromMnemonic(mnemonic);
113
- }
114
-
115
- public walletToSimpleKeyPairBuffer(wallet: Wallet) {
116
- return this.cryptoCore.walletToSimpleKeyPairBuffer(wallet);
117
- }
118
-
119
- public seedToSimpleKeyPairBuffer(seed: Buffer) {
120
- return this.cryptoCore.seedToSimpleKeyPairBuffer(seed);
121
- }
122
-
123
- public mnemonicToSimpleKeyPairBuffer(mnemonic: SecureString) {
124
- return this.cryptoCore.mnemonicToSimpleKeyPairBuffer(mnemonic);
125
- }
126
-
127
- // === Core Encryption/Decryption Methods ===
128
-
129
- public encryptSimpleOrSingle(
130
- encryptSimple: boolean,
131
- receiverPublicKey: Buffer,
132
- message: Buffer,
133
- preamble: Buffer = Buffer.alloc(0)
134
- ): Buffer {
135
- return this.singleRecipient.encrypt(
136
- encryptSimple,
137
- receiverPublicKey,
138
- message,
139
- preamble
140
- );
141
- }
142
-
143
- public parseSingleEncryptedHeader(
144
- encryptionType: EciesEncryptionTypeEnum,
145
- data: Buffer,
146
- preambleSize: number = 0,
147
- options?: {
148
- dataLength?: number;
149
- }
150
- ): ISingleEncryptedParsedHeader {
151
- const { header } = this.singleRecipient.parseEncryptedMessage(
152
- encryptionType,
153
- data,
154
- preambleSize,
155
- options
156
- );
157
- return header;
158
- }
159
-
160
- public decryptSimpleOrSingleWithHeader(
161
- decryptSimple: boolean,
162
- privateKey: Buffer,
163
- encryptedData: Buffer,
164
- preambleSize: number = 0,
165
- options?: {
166
- dataLength?: number;
167
- }
168
- ): Buffer {
169
- return this.singleRecipient.decryptWithHeader(
170
- decryptSimple
171
- ? EciesEncryptionTypeEnum.Simple
172
- : EciesEncryptionTypeEnum.Single,
173
- privateKey,
174
- encryptedData,
175
- preambleSize,
176
- options
177
- );
178
- }
179
-
180
- public decryptSimpleOrSingleWithHeaderEx(
181
- encryptionType: EciesEncryptionTypeEnum,
182
- privateKey: Buffer,
183
- encryptedData: Buffer,
184
- preambleSize: number = 0,
185
- options?: {
186
- dataLength?: number;
187
- }
188
- ): { decrypted: Buffer; consumedBytes: number } {
189
- return this.singleRecipient.decryptWithHeaderEx(
190
- encryptionType,
191
- privateKey,
192
- encryptedData,
193
- preambleSize,
194
- options
195
- );
196
- }
197
-
198
- public decryptSingleWithComponents(
199
- privateKey: Buffer,
200
- ephemeralPublicKey: Buffer,
201
- iv: Buffer,
202
- authTag: Buffer,
203
- encrypted: Buffer
204
- ): { decrypted: Buffer; ciphertextLength?: number } {
205
- const decrypted = this.singleRecipient.decryptWithComponents(
206
- privateKey,
207
- ephemeralPublicKey,
208
- iv,
209
- authTag,
210
- encrypted
211
- );
212
-
213
- // Return an object with a 'decrypted' property for compatibility with existing code
214
- return { decrypted, ciphertextLength: encrypted.length };
215
- }
216
-
217
- // === Signature Methods ===
218
-
219
- public signMessage(privateKey: Buffer, data: Buffer): SignatureBuffer {
220
- return this.signature.signMessage(privateKey, data);
221
- }
222
-
223
- public verifyMessage(
224
- publicKey: Buffer,
225
- data: Buffer,
226
- signature: SignatureBuffer
227
- ): boolean {
228
- return this.signature.verifyMessage(publicKey, data, signature);
229
- }
230
-
231
- public signatureStringToSignatureBuffer(
232
- signatureString: HexString
233
- ): SignatureBuffer {
234
- return this.signature.signatureStringToSignatureBuffer(signatureString);
235
- }
236
-
237
- public signatureBufferToSignatureString(
238
- signatureBuffer: SignatureBuffer
239
- ): SignatureString {
240
- return this.signature.signatureBufferToSignatureString(signatureBuffer);
241
- }
242
-
243
- // === Multi-Recipient Methods ===
244
-
245
- public encryptMultiple(
246
- recipients: Member[],
247
- message: Buffer
248
- ): IMultiEncryptedMessage {
249
- return this.multiRecipient.encryptMultiple(recipients, message);
250
- }
251
-
252
- public decryptMultipleECIEForRecipient(
253
- encryptedData: IMultiEncryptedMessage,
254
- recipient: Member
255
- ): Buffer {
256
- return this.multiRecipient.decryptMultipleECIEForRecipient(
257
- encryptedData,
258
- recipient
259
- );
260
- }
261
-
262
- public calculateECIESMultipleRecipientOverhead(
263
- recipientCount: number,
264
- includeMessageOverhead: boolean
265
- ): number {
266
- return this.multiRecipient.calculateECIESMultipleRecipientOverhead(
267
- recipientCount,
268
- includeMessageOverhead
269
- );
270
- }
271
-
272
- public buildECIESMultipleRecipientHeader(
273
- data: IMultiEncryptedMessage
274
- ): Buffer {
275
- return this.multiRecipient.buildECIESMultipleRecipientHeader(data);
276
- }
277
-
278
- public parseMultiEncryptedHeader(data: Buffer): IMultiEncryptedParsedHeader {
279
- return this.multiRecipient.parseMultiEncryptedHeader(data);
280
- }
281
-
282
- public parseMultiEncryptedBuffer(data: Buffer): IMultiEncryptedMessage {
283
- return this.multiRecipient.parseMultiEncryptedBuffer(data);
284
- }
285
-
286
- // === Utility Methods ===
287
-
288
- public computeEncryptedLengthFromDataLength(
289
- dataLength: number,
290
- encryptionMode: EciesEncryptionType,
291
- recipientCount?: number
292
- ): number {
293
- return this.utilities.computeEncryptedLengthFromDataLength(
294
- dataLength,
295
- encryptionMode,
296
- recipientCount
297
- );
298
- }
299
-
300
- public computeDecryptedLengthFromEncryptedDataLength(
301
- encryptedDataLength: number,
302
- padding?: number
303
- ): number {
304
- return this.utilities.computeDecryptedLengthFromEncryptedDataLength(
305
- encryptedDataLength,
306
- padding
307
- );
308
- }
309
-
310
- public encrypt(
311
- encryptionType: EciesEncryptionType,
312
- recipients: Member[],
313
- message: Buffer,
314
- preamble?: Buffer
315
- ): Buffer {
316
- if (
317
- (encryptionType === 'simple' || encryptionType === 'single') &&
318
- recipients.length === 1
319
- ) {
320
- return this.singleRecipient.encrypt(
321
- encryptionType === 'simple',
322
- recipients[0].publicKey,
323
- message,
324
- preamble
325
- );
326
- } else if (encryptionType === 'multiple' && recipients.length > 1) {
327
- const result = this.multiRecipient.encryptMultiple(
328
- recipients,
329
- message,
330
- preamble
331
- );
332
- return result.encryptedMessage;
333
- } else {
334
- const pluginEngine = getEciesPluginI18nEngine();
335
- throw new ECIESError(
336
- ECIESErrorTypeEnum.InvalidEncryptionType,
337
- this.engine,
338
- undefined,
339
- undefined,
340
- {
341
- error: pluginEngine.translate(
342
- NodeEciesComponentId,
343
- NodeEciesStringKey.Error_InvalidEncryptionTypeOrNumberOfRecipients
344
- ),
345
- encryptionType: encryptionType,
346
- recipients: String(recipients.length),
347
- }
348
- );
349
- }
350
- }
351
- }
@@ -1,91 +0,0 @@
1
- import {
2
- ECIESError,
3
- ECIESErrorTypeEnum,
4
- HexString,
5
- } from '@digitaldefiance/ecies-lib';
6
- import { secp256k1 } from '@noble/curves/secp256k1.js';
7
- import { sha256 } from '@noble/hashes/sha2.js';
8
- import { createEciesTranslationEngine } from '../../i18n/ecies-i18n-factory';
9
- import { SignatureBuffer, SignatureString } from '../../types';
10
- import { EciesCryptoCore } from './crypto-core';
11
-
12
- /**
13
- * Signature-related functions for ECIES
14
- */
15
- export class EciesSignature {
16
- private readonly cryptoCore: EciesCryptoCore;
17
-
18
- constructor(cryptoCore: EciesCryptoCore) {
19
- this.cryptoCore = cryptoCore;
20
- }
21
-
22
- /**
23
- * Signs arbitrary binary data with the given private key.
24
- * @param privateKey The private key to sign the message with.
25
- * @param data The data to sign.
26
- * @returns The signature (64 bytes: r + s).
27
- */
28
- public signMessage(privateKey: Buffer, data: Buffer): SignatureBuffer {
29
- const hash = sha256(data);
30
- const signature = secp256k1.sign(hash, privateKey, {
31
- format: 'compact',
32
- extraEntropy: false,
33
- });
34
- return Buffer.from(signature) as SignatureBuffer;
35
- }
36
-
37
- /**
38
- * Verifies arbitrary binary data with the given public key.
39
- * @param publicKey The public key to verify the message with.
40
- * @param data The data to verify.
41
- * @param signature The signature to verify (64 bytes: r + s).
42
- * @returns True if the signature is valid, false otherwise.
43
- */
44
- public verifyMessage(
45
- publicKey: Buffer,
46
- data: Buffer,
47
- signature: SignatureBuffer,
48
- ): boolean {
49
- if (signature.length !== 64) {
50
- throw new ECIESError(
51
- ECIESErrorTypeEnum.InvalidSignature,
52
- createEciesTranslationEngine(),
53
- );
54
- }
55
-
56
- // Normalize and validate the public key
57
- try {
58
- publicKey = this.cryptoCore.normalizePublicKey(publicKey);
59
- } catch {
60
- throw new ECIESError(
61
- ECIESErrorTypeEnum.InvalidSenderPublicKey,
62
- createEciesTranslationEngine(),
63
- );
64
- }
65
-
66
- const hash = sha256(data);
67
- return secp256k1.verify(signature, hash, publicKey);
68
- }
69
-
70
- /**
71
- * Converts a signature string to a signature buffer.
72
- * @param signatureString - The signature string to convert.
73
- * @returns The signature buffer.
74
- */
75
- public signatureStringToSignatureBuffer(
76
- signatureString: HexString,
77
- ): SignatureBuffer {
78
- return Buffer.from(signatureString, 'hex') as SignatureBuffer;
79
- }
80
-
81
- /**
82
- * Converts a signature buffer to a signature string.
83
- * @param signatureBuffer - The signature buffer to convert.
84
- * @returns The signature string.
85
- */
86
- public signatureBufferToSignatureString(
87
- signatureBuffer: SignatureBuffer,
88
- ): SignatureString {
89
- return signatureBuffer.toString('hex') as SignatureString;
90
- }
91
- }