@digitaldefiance/node-ecies-lib 1.0.7 → 1.0.9
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 +45 -0
- package/dist/constants.d.ts +8 -5
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +43 -46
- package/dist/constants.js.map +1 -1
- package/dist/services/aes-gcm.d.ts +17 -10
- package/dist/services/aes-gcm.d.ts.map +1 -1
- package/dist/services/aes-gcm.js +33 -16
- package/dist/services/aes-gcm.js.map +1 -1
- package/dist/services/ecies/crypto-core.d.ts +5 -3
- package/dist/services/ecies/crypto-core.d.ts.map +1 -1
- package/dist/services/ecies/crypto-core.js +14 -9
- package/dist/services/ecies/crypto-core.js.map +1 -1
- package/dist/services/ecies/file.d.ts +23 -8
- package/dist/services/ecies/file.d.ts.map +1 -1
- package/dist/services/ecies/file.js +12 -9
- package/dist/services/ecies/file.js.map +1 -1
- package/dist/services/ecies/multi-recipient.js +46 -46
- package/dist/services/ecies/multi-recipient.js.map +1 -1
- package/dist/services/ecies/service.d.ts +2 -2
- package/dist/services/ecies/service.d.ts.map +1 -1
- package/dist/services/ecies/service.js +10 -8
- package/dist/services/ecies/service.js.map +1 -1
- package/dist/services/ecies/single-recipient.js +34 -34
- package/dist/services/ecies/single-recipient.js.map +1 -1
- package/dist/services/ecies/utilities.d.ts.map +1 -1
- package/dist/services/ecies/utilities.js +16 -11
- package/dist/services/ecies/utilities.js.map +1 -1
- package/dist/services/pbkdf2.d.ts +40 -8
- package/dist/services/pbkdf2.d.ts.map +1 -1
- package/dist/services/pbkdf2.js +68 -20
- package/dist/services/pbkdf2.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -240,6 +240,35 @@ const nodeEncrypted = nodeMember.encryptData('message');
|
|
|
240
240
|
- **Input Validation**: Comprehensive validation of all cryptographic inputs
|
|
241
241
|
- **Error Handling**: Detailed error types for debugging and security analysis
|
|
242
242
|
|
|
243
|
+
## 🛠️ Runtime Configuration Registry
|
|
244
|
+
|
|
245
|
+
This package uses a runtime configuration registry for all constants and cryptographic parameters. You can override defaults at runtime for advanced use cases:
|
|
246
|
+
|
|
247
|
+
```typescript
|
|
248
|
+
import {
|
|
249
|
+
getNodeRuntimeConfiguration,
|
|
250
|
+
registerNodeRuntimeConfiguration,
|
|
251
|
+
NODE_RUNTIME_CONFIGURATION_KEY,
|
|
252
|
+
} from '@digitaldefiance/node-ecies-lib';
|
|
253
|
+
|
|
254
|
+
// Get current config
|
|
255
|
+
const config = getNodeRuntimeConfiguration();
|
|
256
|
+
|
|
257
|
+
// Register a custom config
|
|
258
|
+
const customKey = Symbol('custom-node-ecies-config');
|
|
259
|
+
registerNodeRuntimeConfiguration(customKey, { PBKDF2: { ALGORITHM: 'sha512' } });
|
|
260
|
+
const customConfig = getNodeRuntimeConfiguration(customKey);
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
All constants are immutable and accessible via the registry/config API. See `src/constants.ts` and `src/defaults.ts` for details.
|
|
264
|
+
|
|
265
|
+
## 🏛️ Architectural Conventions
|
|
266
|
+
|
|
267
|
+
- Centralized constants file
|
|
268
|
+
- Immutability via Object.freeze
|
|
269
|
+
- Registry/config pattern for runtime overrides
|
|
270
|
+
- Type-safe interfaces for all config objects
|
|
271
|
+
|
|
243
272
|
## API Reference
|
|
244
273
|
|
|
245
274
|
### Constants
|
|
@@ -330,6 +359,22 @@ Please read the contributing guidelines in the main repository.
|
|
|
330
359
|
|
|
331
360
|
## ChangeLog
|
|
332
361
|
|
|
362
|
+
### Version 1.0.9
|
|
363
|
+
|
|
364
|
+
- Tue Oct 14 2025 15:24:00 GMT-0700 (Pacific Daylight Time)
|
|
365
|
+
- Bump versions of i18n/ecies libs
|
|
366
|
+
|
|
367
|
+
### Version 1.0.8
|
|
368
|
+
|
|
369
|
+
- Sun Oct 12 2025 22:30:00 GMT-0700 (Pacific Daylight Time)
|
|
370
|
+
- feat: upgrade to ecies-lib 1.0.26 with runtime configuration system
|
|
371
|
+
- Bump version to 1.0.8
|
|
372
|
+
- Update @digitaldefiance/ecies-lib dependency to 1.0.26
|
|
373
|
+
- Implement runtime configuration system with node-specific defaults
|
|
374
|
+
- Add PBKDF2 profile enum alignment and configuration overrides
|
|
375
|
+
- Remove obsolete AES-GCM E2E test file
|
|
376
|
+
- Update changelog for version 1.0.8
|
|
377
|
+
|
|
333
378
|
### Version 1.0.6
|
|
334
379
|
|
|
335
380
|
- Sun Oct 12 2025 16:47:00 GMT-0700 (Pacific Daylight Time)
|
package/dist/constants.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IPBkdf2Consts } from '@digitaldefiance/ecies-lib';
|
|
1
|
+
import { IPBkdf2Consts, getRuntimeConfiguration, registerRuntimeConfiguration } from '@digitaldefiance/ecies-lib';
|
|
2
2
|
import { CipherGCMTypes } from 'crypto';
|
|
3
3
|
import { IChecksumConsts } from './interfaces/checksum-consts';
|
|
4
4
|
import { IConstants } from './interfaces/constants';
|
|
@@ -11,13 +11,15 @@ import { IWrappedKeyConsts } from './interfaces/wrapped-key-consts';
|
|
|
11
11
|
* These values are critical for data integrity and MUST NOT be changed
|
|
12
12
|
* in an already established system as it will break all existing checksums.
|
|
13
13
|
*/
|
|
14
|
+
export declare const NODE_RUNTIME_CONFIGURATION_KEY: unique symbol;
|
|
15
|
+
type NodeRuntimeConfiguration = ReturnType<typeof getRuntimeConfiguration>;
|
|
16
|
+
type NodeRuntimeOverrides = Parameters<typeof registerRuntimeConfiguration>[1];
|
|
17
|
+
export declare const NODE_DEFAULTS_OVERRIDES: NodeRuntimeOverrides;
|
|
18
|
+
export declare function getNodeRuntimeConfiguration(): NodeRuntimeConfiguration;
|
|
19
|
+
export declare function registerNodeRuntimeConfiguration(configOrOverrides?: NodeRuntimeOverrides | NodeRuntimeConfiguration, options?: Parameters<typeof registerRuntimeConfiguration>[2]): NodeRuntimeConfiguration;
|
|
14
20
|
export declare const CHECKSUM: IChecksumConsts;
|
|
15
21
|
export declare const KEYRING: IKeyringConsts;
|
|
16
22
|
export declare const PBKDF2: IPBkdf2Consts;
|
|
17
|
-
/**
|
|
18
|
-
* Predefined PBKDF2 configuration profiles for different use cases
|
|
19
|
-
* These profiles provide standardized, well-tested parameter combinations
|
|
20
|
-
*/
|
|
21
23
|
export declare const PBKDF2_PROFILES: PbkdfProfiles;
|
|
22
24
|
export declare const WRAPPED_KEY: IWrappedKeyConsts;
|
|
23
25
|
export declare const KEYRING_ALGORITHM_CONFIGURATION: CipherGCMTypes;
|
|
@@ -26,4 +28,5 @@ export declare const KEYRING_ALGORITHM_CONFIGURATION: CipherGCMTypes;
|
|
|
26
28
|
*/
|
|
27
29
|
export declare const ENCRYPTION: IEncryptionConsts;
|
|
28
30
|
export declare const Constants: IConstants;
|
|
31
|
+
export {};
|
|
29
32
|
//# sourceMappingURL=constants.d.ts.map
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,aAAa,EACb,uBAAuB,EACvB,4BAA4B,EAC7B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAGpE;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,eAE1C,CAAC;AAEF,KAAK,wBAAwB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC3E,KAAK,oBAAoB,GAAG,UAAU,CACpC,OAAO,4BAA4B,CACpC,CAAC,CAAC,CAAC,CAAC;AAEL,eAAO,MAAM,uBAAuB,EAAE,oBAIpC,CAAC;AAOH,wBAAgB,2BAA2B,IAAI,wBAAwB,CAEtE;AAED,wBAAgB,gCAAgC,CAC9C,iBAAiB,CAAC,EAAE,oBAAoB,GAAG,wBAAwB,EACnE,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC,CAAC,CAAC,GAC3D,wBAAwB,CAO1B;AAED,eAAO,MAAM,QAAQ,EAAE,eAA0C,CAAC;AAElE,eAAO,MAAM,OAAO,EAAE,cAIX,CAAC;AAEZ,eAAO,MAAM,MAAM,EAAE,aAAsC,CAAC;AAQ5D,eAAO,MAAM,eAAe,EAAE,aAwCnB,CAAC;AAEZ,eAAO,MAAM,WAAW,EAAE,iBAKf,CAAC;AAEZ,eAAO,MAAM,+BAA+B,EACoB,cAAc,CAAC;AAE/E;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,iBAGd,CAAC;AAGZ,eAAO,MAAM,SAAS,EAAE,UAoCb,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -1,82 +1,77 @@
|
|
|
1
|
-
import { GUID_SIZE } from '@digitaldefiance/ecies-lib';
|
|
1
|
+
import { Constants as BaseConstants, GUID_SIZE, registerRuntimeConfiguration, } from '@digitaldefiance/ecies-lib';
|
|
2
2
|
import { ObjectId } from 'mongodb';
|
|
3
|
-
import {
|
|
3
|
+
import { Pbkdf2ProfileEnum as NodePbkdf2ProfileEnum } from './enumerations/pbkdf2-profile';
|
|
4
4
|
/**
|
|
5
5
|
* Constants for checksum operations
|
|
6
6
|
* These values are critical for data integrity and MUST NOT be changed
|
|
7
7
|
* in an already established system as it will break all existing checksums.
|
|
8
8
|
*/
|
|
9
|
-
export const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
/** algorithm to use for checksum */
|
|
15
|
-
ALGORITHM: 'sha3-512',
|
|
16
|
-
/** encoding to use for checksum */
|
|
17
|
-
ENCODING: 'hex',
|
|
9
|
+
export const NODE_RUNTIME_CONFIGURATION_KEY = Symbol.for('digitaldefiance.node.ecies.defaults');
|
|
10
|
+
export const NODE_DEFAULTS_OVERRIDES = Object.freeze({
|
|
11
|
+
PBKDF2: {
|
|
12
|
+
ALGORITHM: 'sha256',
|
|
13
|
+
},
|
|
18
14
|
});
|
|
15
|
+
let runtimeDefaults = registerRuntimeConfiguration(NODE_RUNTIME_CONFIGURATION_KEY, NODE_DEFAULTS_OVERRIDES);
|
|
16
|
+
export function getNodeRuntimeConfiguration() {
|
|
17
|
+
return runtimeDefaults;
|
|
18
|
+
}
|
|
19
|
+
export function registerNodeRuntimeConfiguration(configOrOverrides, options) {
|
|
20
|
+
runtimeDefaults = registerRuntimeConfiguration(NODE_RUNTIME_CONFIGURATION_KEY, configOrOverrides, options);
|
|
21
|
+
return runtimeDefaults;
|
|
22
|
+
}
|
|
23
|
+
export const CHECKSUM = runtimeDefaults.CHECKSUM;
|
|
19
24
|
export const KEYRING = Object.freeze({
|
|
20
25
|
ALGORITHM: 'aes',
|
|
21
26
|
KEY_BITS: 256,
|
|
22
27
|
MODE: 'gcm',
|
|
23
28
|
});
|
|
24
|
-
export const PBKDF2 =
|
|
25
|
-
ALGORITHM: 'sha256', // Changed from sha512 to match key-wrapping
|
|
26
|
-
SALT_BYTES: 32, // Changed from 16 to match key-wrapping and improve security
|
|
27
|
-
/**
|
|
28
|
-
* Number of pbkdf2 iterations per second when hashing a password.
|
|
29
|
-
* This is the high-security default for user login operations.
|
|
30
|
-
*/
|
|
31
|
-
ITERATIONS_PER_SECOND: 1304000,
|
|
32
|
-
});
|
|
29
|
+
export const PBKDF2 = runtimeDefaults.PBKDF2;
|
|
33
30
|
/**
|
|
34
31
|
* Predefined PBKDF2 configuration profiles for different use cases
|
|
35
32
|
* These profiles provide standardized, well-tested parameter combinations
|
|
36
33
|
*/
|
|
34
|
+
const baseProfiles = runtimeDefaults.PBKDF2_PROFILES;
|
|
37
35
|
export const PBKDF2_PROFILES = Object.freeze({
|
|
38
|
-
|
|
39
|
-
BROWSER_PASSWORD: Object.freeze({
|
|
40
|
-
|
|
36
|
+
// Align browser password profile with high security expectations (sha512, 64-byte salt/hash, 2M iterations)
|
|
37
|
+
[NodePbkdf2ProfileEnum.BROWSER_PASSWORD]: Object.freeze({
|
|
38
|
+
saltBytes: 64,
|
|
39
|
+
iterations: 2000000,
|
|
40
|
+
algorithm: 'sha512',
|
|
41
|
+
hashBytes: 64,
|
|
42
|
+
}),
|
|
43
|
+
// High security profile (sha512, 64-byte salt/hash, 2M iterations)
|
|
44
|
+
[NodePbkdf2ProfileEnum.HIGH_SECURITY]: Object.freeze({
|
|
41
45
|
saltBytes: 64,
|
|
42
46
|
iterations: 2000000,
|
|
43
|
-
algorithm: '
|
|
47
|
+
algorithm: 'sha512',
|
|
48
|
+
hashBytes: 64,
|
|
44
49
|
}),
|
|
45
|
-
|
|
46
|
-
|
|
50
|
+
// Fast test profile (small salt and iterations for speed)
|
|
51
|
+
[NodePbkdf2ProfileEnum.TEST_FAST]: Object.freeze({
|
|
52
|
+
saltBytes: 16,
|
|
53
|
+
iterations: 500,
|
|
54
|
+
algorithm: 'sha256',
|
|
55
|
+
hashBytes: 32,
|
|
56
|
+
}),
|
|
57
|
+
[NodePbkdf2ProfileEnum.USER_LOGIN]: Object.freeze({
|
|
47
58
|
saltBytes: 32,
|
|
48
59
|
iterations: 1304000,
|
|
49
60
|
algorithm: 'sha256',
|
|
50
61
|
hashBytes: 32,
|
|
51
62
|
}),
|
|
52
|
-
|
|
53
|
-
KEY_WRAPPING: Object.freeze({
|
|
63
|
+
[NodePbkdf2ProfileEnum.KEY_WRAPPING]: Object.freeze({
|
|
54
64
|
saltBytes: 32,
|
|
55
65
|
iterations: 100000,
|
|
56
66
|
algorithm: 'sha256',
|
|
57
67
|
hashBytes: 32,
|
|
58
68
|
}),
|
|
59
|
-
|
|
60
|
-
BACKUP_CODES: Object.freeze({
|
|
69
|
+
[NodePbkdf2ProfileEnum.BACKUP_CODES]: Object.freeze({
|
|
61
70
|
saltBytes: 32,
|
|
62
71
|
iterations: 1304000,
|
|
63
72
|
algorithm: 'sha256',
|
|
64
73
|
hashBytes: 32,
|
|
65
74
|
}),
|
|
66
|
-
/** Ultra-high security profile for sensitive operations */
|
|
67
|
-
HIGH_SECURITY: Object.freeze({
|
|
68
|
-
saltBytes: 64,
|
|
69
|
-
iterations: 2000000,
|
|
70
|
-
algorithm: 'sha512',
|
|
71
|
-
hashBytes: 64,
|
|
72
|
-
}),
|
|
73
|
-
/** Fast profile for testing and development */
|
|
74
|
-
TEST_FAST: Object.freeze({
|
|
75
|
-
saltBytes: 16,
|
|
76
|
-
iterations: 1000,
|
|
77
|
-
algorithm: 'sha256',
|
|
78
|
-
hashBytes: 32,
|
|
79
|
-
}),
|
|
80
75
|
});
|
|
81
76
|
export const WRAPPED_KEY = Object.freeze({
|
|
82
77
|
SALT_SIZE: PBKDF2.SALT_BYTES, // Use PBKDF2 standard salt size
|
|
@@ -93,7 +88,7 @@ export const ENCRYPTION = Object.freeze({
|
|
|
93
88
|
RECIPIENT_ID_SIZE: GUID_SIZE,
|
|
94
89
|
});
|
|
95
90
|
const objectIdLength = Buffer.from(new ObjectId().toHexString(), 'hex').length;
|
|
96
|
-
export const Constants = {
|
|
91
|
+
export const Constants = Object.freeze({
|
|
97
92
|
...BaseConstants,
|
|
98
93
|
/**
|
|
99
94
|
* The length of a raw object ID (not the hex string representation)
|
|
@@ -127,7 +122,9 @@ export const Constants = {
|
|
|
127
122
|
* Algorithm configuration string for keyring operations
|
|
128
123
|
*/
|
|
129
124
|
KEYRING_ALGORITHM_CONFIGURATION: KEYRING_ALGORITHM_CONFIGURATION,
|
|
130
|
-
|
|
125
|
+
PasswordRegex: runtimeDefaults.PasswordRegex,
|
|
126
|
+
MnemonicRegex: runtimeDefaults.MnemonicRegex,
|
|
127
|
+
});
|
|
131
128
|
if (CHECKSUM.SHA3_BUFFER_LENGTH !== CHECKSUM.SHA3_DEFAULT_HASH_BITS / 8 ||
|
|
132
129
|
CHECKSUM.SHA3_BUFFER_LENGTH !== CHECKSUM.SHA3_DEFAULT_HASH_BITS / 8) {
|
|
133
130
|
throw new Error('Invalid checksum constants');
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,IAAI,aAAa,EAC1B,SAAS,EAGT,4BAA4B,GAC7B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAOnC,OAAO,EAAE,iBAAiB,IAAI,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAE3F;;;;GAIG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC,GAAG,CACtD,qCAAqC,CACtC,CAAC;AAOF,MAAM,CAAC,MAAM,uBAAuB,GAAyB,MAAM,CAAC,MAAM,CAAC;IACzE,MAAM,EAAE;QACN,SAAS,EAAE,QAAQ;KACpB;CACF,CAAC,CAAC;AAEH,IAAI,eAAe,GAA6B,4BAA4B,CAC1E,8BAA8B,EAC9B,uBAAuB,CACxB,CAAC;AAEF,MAAM,UAAU,2BAA2B;IACzC,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,iBAAmE,EACnE,OAA4D;IAE5D,eAAe,GAAG,4BAA4B,CAC5C,8BAA8B,EAC9B,iBAAiB,EACjB,OAAO,CACR,CAAC;IACF,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAoB,eAAe,CAAC,QAAQ,CAAC;AAElE,MAAM,CAAC,MAAM,OAAO,GAAmB,MAAM,CAAC,MAAM,CAAC;IACnD,SAAS,EAAE,KAAc;IACzB,QAAQ,EAAE,GAAY;IACtB,IAAI,EAAE,KAAc;CACZ,CAAC,CAAC;AAEZ,MAAM,CAAC,MAAM,MAAM,GAAkB,eAAe,CAAC,MAAM,CAAC;AAE5D;;;GAGG;AACH,MAAM,YAAY,GAAG,eAAe,CAAC,eAAe,CAAC;AAErD,MAAM,CAAC,MAAM,eAAe,GAAkB,MAAM,CAAC,MAAM,CAAC;IAC1D,4GAA4G;IAC5G,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;QACtD,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,OAAO;QACnB,SAAS,EAAE,QAAQ;QACnB,SAAS,EAAE,EAAE;KACd,CAAC;IACF,mEAAmE;IACnE,CAAC,qBAAqB,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;QACnD,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,OAAO;QACnB,SAAS,EAAE,QAAQ;QACnB,SAAS,EAAE,EAAE;KACd,CAAC;IACF,0DAA0D;IAC1D,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;QAC/C,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,GAAG;QACf,SAAS,EAAE,QAAQ;QACnB,SAAS,EAAE,EAAE;KACd,CAAC;IACF,CAAC,qBAAqB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;QAChD,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,OAAO;QACnB,SAAS,EAAE,QAAQ;QACnB,SAAS,EAAE,EAAE;KACd,CAAC;IACF,CAAC,qBAAqB,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;QAClD,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,MAAM;QAClB,SAAS,EAAE,QAAQ;QACnB,SAAS,EAAE,EAAE;KACd,CAAC;IACF,CAAC,qBAAqB,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;QAClD,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,OAAO;QACnB,SAAS,EAAE,QAAQ;QACnB,SAAS,EAAE,EAAE;KACd,CAAC;CACM,CAAC,CAAC;AAEZ,MAAM,CAAC,MAAM,WAAW,GAAsB,MAAM,CAAC,MAAM,CAAC;IAC1D,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,gCAAgC;IAC9D,OAAO,EAAE,EAAW;IACpB,eAAe,EAAE,EAAW;IAC5B,cAAc,EAAE,MAAe,EAAE,yCAAyC;CAClE,CAAC,CAAC;AAEZ,MAAM,CAAC,MAAM,+BAA+B,GAC1C,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAoB,CAAC;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAsB,MAAM,CAAC,MAAM,CAAC;IACzD,oBAAoB,EAAE,CAAU;IAChC,iBAAiB,EAAE,SAAS;CACpB,CAAC,CAAC;AAEZ,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC;AAC/E,MAAM,CAAC,MAAM,SAAS,GAAe,MAAM,CAAC,MAAM,CAAC;IACjD,GAAG,aAAa;IAChB;;OAEG;IACH,gBAAgB,EAAE,cAAc;IAChC;;OAEG;IACH,MAAM,EAAE,MAAM;IACd;;OAEG;IACH,eAAe,EAAE,eAAe;IAChC;;OAEG;IACH,WAAW,EAAE,WAAW;IACxB;;OAEG;IACH,QAAQ,EAAE,QAAQ;IAClB;;OAEG;IACH,OAAO,EAAE,OAAO;IAChB;;OAEG;IACH,UAAU,EAAE,UAAU;IACtB;;OAEG;IACH,+BAA+B,EAAE,+BAA+B;IAChE,aAAa,EAAE,eAAe,CAAC,aAAa;IAC5C,aAAa,EAAE,eAAe,CAAC,aAAa;CACpC,CAAC,CAAC;AAEZ,IACE,QAAQ,CAAC,kBAAkB,KAAK,QAAQ,CAAC,sBAAsB,GAAG,CAAC;IACnE,QAAQ,CAAC,kBAAkB,KAAK,QAAQ,CAAC,sBAAsB,GAAG,CAAC,EACnE,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAChD,CAAC;AAED,IAAI,cAAc,KAAK,EAAE,EAAE,CAAC;IAC1B,OAAO,CAAC,IAAI,CACV,uDAAuD,EACvD,cAAc,CACf,CAAC;AACJ,CAAC"}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { IConstants } from '../interfaces/constants';
|
|
2
|
+
export declare class AESGCMService {
|
|
3
|
+
private readonly algorithmName;
|
|
4
|
+
private readonly mode;
|
|
5
|
+
private readonly keyBits;
|
|
6
|
+
private readonly ivSize;
|
|
7
|
+
private readonly keyringAlgorithmConfiguration;
|
|
8
|
+
constructor(constants: IConstants);
|
|
9
|
+
get ALGORITHM_NAME(): string;
|
|
10
|
+
get MODE(): string;
|
|
11
|
+
get KEY_BITS(): number;
|
|
5
12
|
/**
|
|
6
13
|
* Encrypt data using AES-GCM
|
|
7
14
|
* @param data Data to encrypt
|
|
@@ -9,7 +16,7 @@ export declare abstract class AESGCMService {
|
|
|
9
16
|
* @param authTag Whether to return separate auth tag
|
|
10
17
|
* @returns Encrypted data with IV and optional separate auth tag
|
|
11
18
|
*/
|
|
12
|
-
|
|
19
|
+
encrypt(data: Buffer, key: Buffer, authTag?: boolean): {
|
|
13
20
|
encrypted: Buffer;
|
|
14
21
|
iv: Buffer;
|
|
15
22
|
tag?: Buffer;
|
|
@@ -20,14 +27,14 @@ export declare abstract class AESGCMService {
|
|
|
20
27
|
* @param authTag The authentication tag
|
|
21
28
|
* @returns The combined Buffer
|
|
22
29
|
*/
|
|
23
|
-
|
|
30
|
+
combineEncryptedDataAndTag(encryptedData: Buffer, authTag: Buffer): Buffer;
|
|
24
31
|
/**
|
|
25
32
|
* Combine IV and encrypted data (with optional auth tag) into a single Buffer
|
|
26
33
|
* @param iv The initialization vector
|
|
27
34
|
* @param encryptedDataWithTag The encrypted data with auth tag already appended (if applicable)
|
|
28
35
|
* @returns The combined Buffer
|
|
29
36
|
*/
|
|
30
|
-
|
|
37
|
+
combineIvAndEncryptedData(iv: Buffer, encryptedDataWithTag: Buffer): Buffer;
|
|
31
38
|
/**
|
|
32
39
|
* Combine IV, encrypted data and auth tag into a single Buffer
|
|
33
40
|
* @param iv The initialization vector
|
|
@@ -35,14 +42,14 @@ export declare abstract class AESGCMService {
|
|
|
35
42
|
* @param authTag The authentication tag
|
|
36
43
|
* @returns The combined Buffer
|
|
37
44
|
*/
|
|
38
|
-
|
|
45
|
+
combineIvTagAndEncryptedData(iv: Buffer, encryptedData: Buffer, authTag: Buffer): Buffer;
|
|
39
46
|
/**
|
|
40
47
|
* Split combined encrypted data back into its components
|
|
41
48
|
* @param combinedData The combined data containing IV, encrypted data, and optionally auth tag
|
|
42
49
|
* @param hasAuthTag Whether the combined data includes an authentication tag
|
|
43
50
|
* @returns Object containing the split components
|
|
44
51
|
*/
|
|
45
|
-
|
|
52
|
+
splitEncryptedData(combinedData: Buffer, hasAuthTag?: boolean): {
|
|
46
53
|
iv: Buffer;
|
|
47
54
|
encryptedDataWithTag: Buffer;
|
|
48
55
|
};
|
|
@@ -54,6 +61,6 @@ export declare abstract class AESGCMService {
|
|
|
54
61
|
* @param authTag Whether the encrypted data includes an authentication tag
|
|
55
62
|
* @returns Decrypted data
|
|
56
63
|
*/
|
|
57
|
-
|
|
64
|
+
decrypt(iv: Buffer, encryptedData: Buffer, key: Buffer, authTag?: boolean): Buffer;
|
|
58
65
|
}
|
|
59
66
|
//# sourceMappingURL=aes-gcm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aes-gcm.d.ts","sourceRoot":"","sources":["../../src/services/aes-gcm.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"aes-gcm.d.ts","sourceRoot":"","sources":["../../src/services/aes-gcm.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAiB;gBAEnD,SAAS,EAAE,UAAU;IAQjC,IAAW,cAAc,IAAI,MAAM,CAElC;IAED,IAAW,IAAI,IAAI,MAAM,CAExB;IAED,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED;;;;;;OAMG;IACI,OAAO,CACZ,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,OAAe,GACvB;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE;IAmBlD;;;;;OAKG;IACI,0BAA0B,CAC/B,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,GACd,MAAM;IAIT;;;;;OAKG;IACI,yBAAyB,CAC9B,EAAE,EAAE,MAAM,EACV,oBAAoB,EAAE,MAAM,GAC3B,MAAM;IAIT;;;;;;OAMG;IACI,4BAA4B,CACjC,EAAE,EAAE,MAAM,EACV,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,GACd,MAAM;IAQT;;;;;OAKG;IACI,kBAAkB,CACvB,YAAY,EAAE,MAAM,EACpB,UAAU,GAAE,OAAc,GACzB;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAA;KAAE;IAgB/C;;;;;;;OAOG;IACI,OAAO,CACZ,EAAE,EAAE,MAAM,EACV,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,OAAe,GACvB,MAAM;CAWV"}
|
package/dist/services/aes-gcm.js
CHANGED
|
@@ -1,9 +1,26 @@
|
|
|
1
1
|
import { createCipheriv, createDecipheriv, randomBytes } from 'crypto';
|
|
2
|
-
import { Constants } from '../constants';
|
|
3
2
|
export class AESGCMService {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
algorithmName;
|
|
4
|
+
mode;
|
|
5
|
+
keyBits;
|
|
6
|
+
ivSize;
|
|
7
|
+
keyringAlgorithmConfiguration;
|
|
8
|
+
constructor(constants) {
|
|
9
|
+
this.algorithmName = constants.KEYRING.ALGORITHM;
|
|
10
|
+
this.mode = constants.KEYRING.MODE;
|
|
11
|
+
this.keyBits = constants.KEYRING.KEY_BITS;
|
|
12
|
+
this.ivSize = constants.WRAPPED_KEY.IV_SIZE;
|
|
13
|
+
this.keyringAlgorithmConfiguration = constants.KEYRING_ALGORITHM_CONFIGURATION;
|
|
14
|
+
}
|
|
15
|
+
get ALGORITHM_NAME() {
|
|
16
|
+
return this.algorithmName;
|
|
17
|
+
}
|
|
18
|
+
get MODE() {
|
|
19
|
+
return this.mode;
|
|
20
|
+
}
|
|
21
|
+
get KEY_BITS() {
|
|
22
|
+
return this.keyBits;
|
|
23
|
+
}
|
|
7
24
|
/**
|
|
8
25
|
* Encrypt data using AES-GCM
|
|
9
26
|
* @param data Data to encrypt
|
|
@@ -11,9 +28,9 @@ export class AESGCMService {
|
|
|
11
28
|
* @param authTag Whether to return separate auth tag
|
|
12
29
|
* @returns Encrypted data with IV and optional separate auth tag
|
|
13
30
|
*/
|
|
14
|
-
|
|
15
|
-
const iv = randomBytes(
|
|
16
|
-
const cipher = createCipheriv(
|
|
31
|
+
encrypt(data, key, authTag = false) {
|
|
32
|
+
const iv = randomBytes(this.ivSize);
|
|
33
|
+
const cipher = createCipheriv(this.keyringAlgorithmConfiguration, key, iv);
|
|
17
34
|
const encrypted = Buffer.concat([cipher.update(data), cipher.final()]);
|
|
18
35
|
const tag = cipher.getAuthTag();
|
|
19
36
|
if (!authTag) {
|
|
@@ -32,7 +49,7 @@ export class AESGCMService {
|
|
|
32
49
|
* @param authTag The authentication tag
|
|
33
50
|
* @returns The combined Buffer
|
|
34
51
|
*/
|
|
35
|
-
|
|
52
|
+
combineEncryptedDataAndTag(encryptedData, authTag) {
|
|
36
53
|
return Buffer.concat([encryptedData, authTag]);
|
|
37
54
|
}
|
|
38
55
|
/**
|
|
@@ -41,7 +58,7 @@ export class AESGCMService {
|
|
|
41
58
|
* @param encryptedDataWithTag The encrypted data with auth tag already appended (if applicable)
|
|
42
59
|
* @returns The combined Buffer
|
|
43
60
|
*/
|
|
44
|
-
|
|
61
|
+
combineIvAndEncryptedData(iv, encryptedDataWithTag) {
|
|
45
62
|
return Buffer.concat([iv, encryptedDataWithTag]);
|
|
46
63
|
}
|
|
47
64
|
/**
|
|
@@ -51,9 +68,9 @@ export class AESGCMService {
|
|
|
51
68
|
* @param authTag The authentication tag
|
|
52
69
|
* @returns The combined Buffer
|
|
53
70
|
*/
|
|
54
|
-
|
|
55
|
-
const encryptedWithTag =
|
|
56
|
-
return
|
|
71
|
+
combineIvTagAndEncryptedData(iv, encryptedData, authTag) {
|
|
72
|
+
const encryptedWithTag = this.combineEncryptedDataAndTag(encryptedData, authTag);
|
|
73
|
+
return this.combineIvAndEncryptedData(iv, encryptedWithTag);
|
|
57
74
|
}
|
|
58
75
|
/**
|
|
59
76
|
* Split combined encrypted data back into its components
|
|
@@ -61,8 +78,8 @@ export class AESGCMService {
|
|
|
61
78
|
* @param hasAuthTag Whether the combined data includes an authentication tag
|
|
62
79
|
* @returns Object containing the split components
|
|
63
80
|
*/
|
|
64
|
-
|
|
65
|
-
const ivLength =
|
|
81
|
+
splitEncryptedData(combinedData, hasAuthTag = true) {
|
|
82
|
+
const ivLength = this.ivSize;
|
|
66
83
|
const minLength = ivLength + (hasAuthTag ? 16 : 0);
|
|
67
84
|
if (combinedData.length < minLength) {
|
|
68
85
|
throw new Error('Combined data is too short to contain required components');
|
|
@@ -79,8 +96,8 @@ export class AESGCMService {
|
|
|
79
96
|
* @param authTag Whether the encrypted data includes an authentication tag
|
|
80
97
|
* @returns Decrypted data
|
|
81
98
|
*/
|
|
82
|
-
|
|
83
|
-
const decipher = createDecipheriv(
|
|
99
|
+
decrypt(iv, encryptedData, key, authTag = false) {
|
|
100
|
+
const decipher = createDecipheriv(this.keyringAlgorithmConfiguration, key, iv);
|
|
84
101
|
const tagLength = 16;
|
|
85
102
|
const tag = encryptedData.subarray(-tagLength);
|
|
86
103
|
const ciphertext = encryptedData.subarray(0, -tagLength);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aes-gcm.js","sourceRoot":"","sources":["../../src/services/aes-gcm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"aes-gcm.js","sourceRoot":"","sources":["../../src/services/aes-gcm.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IECIESConfig, SecureString } from '@digitaldefiance/ecies-lib';
|
|
1
|
+
import { IECIESConfig, IECIESConstants, SecureString } from '@digitaldefiance/ecies-lib';
|
|
2
2
|
import { Wallet } from '@ethereumjs/wallet';
|
|
3
3
|
import { ISimpleKeyPairBuffer } from '../../interfaces/simple-keypair-buffer';
|
|
4
4
|
import { IWalletSeed } from '../../interfaces/wallet-seed';
|
|
@@ -7,9 +7,11 @@ import { IWalletSeed } from '../../interfaces/wallet-seed';
|
|
|
7
7
|
* Includes coverage for simple and single modes, does not cover multiple mode which is in a separate module
|
|
8
8
|
*/
|
|
9
9
|
export declare class EciesCryptoCore {
|
|
10
|
-
|
|
10
|
+
protected readonly _config: IECIESConfig;
|
|
11
|
+
protected readonly _consts: IECIESConstants;
|
|
11
12
|
get config(): IECIESConfig;
|
|
12
|
-
|
|
13
|
+
get consts(): IECIESConstants;
|
|
14
|
+
constructor(config: IECIESConfig, eciesParams?: IECIESConstants);
|
|
13
15
|
/**
|
|
14
16
|
* Validates and normalizes a public key for ECIES operations
|
|
15
17
|
* @param publicKey The public key to normalize
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto-core.d.ts","sourceRoot":"","sources":["../../../src/services/ecies/crypto-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,YAAY,
|
|
1
|
+
{"version":3,"file":"crypto-core.d.ts","sourceRoot":"","sources":["../../../src/services/ecies/crypto-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,YAAY,EACZ,eAAe,EAEf,YAAY,EACb,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAS,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAInD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D;;;GAGG;AACH,qBAAa,eAAe;IAC1B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IACzC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAC5C,IAAW,MAAM,IAAI,YAAY,CAEhC;IAED,IAAW,MAAM,IAAI,eAAe,CAEnC;gBAEW,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,eAAe;IAK/D;;;;OAIG;IACI,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IA6CpD;;;OAGG;IACI,mBAAmB,IAAI,YAAY;IAI1C;;;;OAIG;IACI,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAO3C;;;;OAIG;IACI,yBAAyB,CAAC,QAAQ,EAAE,YAAY,GAAG,WAAW;IAiBrE;;;;OAIG;IACI,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB;IAYxE;;;;OAIG;IACI,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB;IAKpE;;;;OAIG;IACI,6BAA6B,CAClC,QAAQ,EAAE,YAAY,GACrB,oBAAoB;IAKvB;;;OAGG;IACI,kBAAkB,IAAI,MAAM;IAInC;;;;OAIG;IACI,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAK/C;;;OAGG;IACU,wBAAwB,IAAI,OAAO,CAAC;QAC/C,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAMF;;;;;OAKG;IACI,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;CAI1E"}
|
|
@@ -9,11 +9,16 @@ import { getEciesPluginI18nEngine } from '../../i18n/ecies-i18n-factory';
|
|
|
9
9
|
*/
|
|
10
10
|
export class EciesCryptoCore {
|
|
11
11
|
_config;
|
|
12
|
+
_consts;
|
|
12
13
|
get config() {
|
|
13
14
|
return this._config;
|
|
14
15
|
}
|
|
15
|
-
|
|
16
|
+
get consts() {
|
|
17
|
+
return this._consts;
|
|
18
|
+
}
|
|
19
|
+
constructor(config, eciesParams) {
|
|
16
20
|
this._config = config;
|
|
21
|
+
this._consts = eciesParams ?? ECIES;
|
|
17
22
|
}
|
|
18
23
|
/**
|
|
19
24
|
* Validates and normalizes a public key for ECIES operations
|
|
@@ -28,22 +33,22 @@ export class EciesCryptoCore {
|
|
|
28
33
|
}
|
|
29
34
|
const keyLength = publicKey.length;
|
|
30
35
|
// Already in correct format (65 bytes with 0x04 prefix)
|
|
31
|
-
if (keyLength ===
|
|
32
|
-
publicKey[0] ===
|
|
36
|
+
if (keyLength === this._consts.PUBLIC_KEY_LENGTH &&
|
|
37
|
+
publicKey[0] === this._consts.PUBLIC_KEY_MAGIC) {
|
|
33
38
|
return publicKey;
|
|
34
39
|
}
|
|
35
40
|
// Raw key without prefix (64 bytes) - add the 0x04 prefix
|
|
36
|
-
if (keyLength ===
|
|
37
|
-
return Buffer.concat([Buffer.from([
|
|
41
|
+
if (keyLength === this._consts.RAW_PUBLIC_KEY_LENGTH) {
|
|
42
|
+
return Buffer.concat([Buffer.from([this._consts.PUBLIC_KEY_MAGIC]), publicKey]);
|
|
38
43
|
}
|
|
39
44
|
// Invalid format
|
|
40
45
|
throw new ECIESError(ECIESErrorTypeEnum.InvalidEphemeralPublicKey, getEciesPluginI18nEngine(), undefined, undefined, {
|
|
41
46
|
error: 'Invalid public key format or length',
|
|
42
47
|
keyLength: String(keyLength),
|
|
43
|
-
expectedLength64: String(
|
|
44
|
-
expectedLength65: String(
|
|
48
|
+
expectedLength64: String(this._consts.RAW_PUBLIC_KEY_LENGTH),
|
|
49
|
+
expectedLength65: String(this._consts.PUBLIC_KEY_LENGTH),
|
|
45
50
|
keyPrefix: keyLength > 0 ? String(publicKey[0]) : 'N/A',
|
|
46
|
-
expectedPrefix: String(
|
|
51
|
+
expectedPrefix: String(this._consts.PUBLIC_KEY_MAGIC),
|
|
47
52
|
});
|
|
48
53
|
}
|
|
49
54
|
/**
|
|
@@ -88,7 +93,7 @@ export class EciesCryptoCore {
|
|
|
88
93
|
walletToSimpleKeyPairBuffer(wallet) {
|
|
89
94
|
const privateKey = Buffer.from(wallet.getPrivateKey());
|
|
90
95
|
const buf04 = new Uint8Array(1);
|
|
91
|
-
buf04[0] =
|
|
96
|
+
buf04[0] = this._consts.PUBLIC_KEY_MAGIC;
|
|
92
97
|
const publicKey = Buffer.concat([buf04, wallet.getPublicKey()]);
|
|
93
98
|
return {
|
|
94
99
|
privateKey,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto-core.js","sourceRoot":"","sources":["../../../src/services/ecies/crypto-core.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,UAAU,EACV,kBAAkB,
|
|
1
|
+
{"version":3,"file":"crypto-core.js","sourceRoot":"","sources":["../../../src/services/ecies/crypto-core.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,30 @@
|
|
|
1
1
|
import { ECIESService } from './service';
|
|
2
|
+
interface ChunkedFileHeader {
|
|
3
|
+
version: number;
|
|
4
|
+
chunkSize: number;
|
|
5
|
+
totalChunks: number;
|
|
6
|
+
originalSize: number;
|
|
7
|
+
}
|
|
2
8
|
export declare class EciesFileService {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
9
|
+
protected readonly eciesService: ECIESService;
|
|
10
|
+
protected readonly userPrivateKey: Buffer;
|
|
11
|
+
protected readonly config: {
|
|
12
|
+
chunkSize: number;
|
|
13
|
+
headerSize: number;
|
|
14
|
+
};
|
|
15
|
+
constructor(eciesService: ECIESService, userPrivateKey: Buffer, config?: {
|
|
16
|
+
chunkSize: number;
|
|
17
|
+
headerSize: number;
|
|
18
|
+
});
|
|
8
19
|
decryptFile(encryptedData: Buffer): Buffer;
|
|
9
20
|
encryptFileFromPath(filePath: string, recipientPublicKey: Buffer): Buffer;
|
|
10
21
|
decryptFileToPath(encryptedData: Buffer, outputPath: string): void;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
22
|
+
protected serializeHeader(header: ChunkedFileHeader): Buffer;
|
|
23
|
+
protected deserializeHeader(data: Buffer): ChunkedFileHeader;
|
|
24
|
+
protected parseEncryptedFile(encryptedData: Buffer): {
|
|
25
|
+
header: ChunkedFileHeader;
|
|
26
|
+
chunks: Buffer[];
|
|
27
|
+
};
|
|
14
28
|
}
|
|
29
|
+
export {};
|
|
15
30
|
//# sourceMappingURL=file.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../src/services/ecies/file.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../src/services/ecies/file.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,gBAAgB;IAC3B,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAC9C,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAC1C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;gBAGnE,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,MAAM,EACtB,MAAM,GAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAG9C;IAOH,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;IAuB1C,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,MAAM;IA4CzE,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAwBlE,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM;IAS5D,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB;IAS5D,SAAS,CAAC,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG;QACnD,MAAM,EAAE,iBAAiB,CAAC;QAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB;CAiCF"}
|