@digitaldefiance/node-ecies-lib 4.7.14 → 4.7.15

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digitaldefiance/node-ecies-lib",
3
- "version": "4.7.14",
3
+ "version": "4.7.15",
4
4
  "description": "Digital Defiance Node ECIES Library",
5
5
  "homepage": "https://github.com/Digital-Defiance/node-ecies-lib",
6
6
  "repository": {
package/src/index.d.ts CHANGED
@@ -7,6 +7,7 @@ export * from './i18n';
7
7
  export * from './interfaces';
8
8
  export * from './member';
9
9
  export * from './types';
10
+ export * from './secure-buffer';
10
11
  export { AESGCMService } from './services/aes-gcm';
11
12
  export { ChunkProcessor } from './services/chunk-processor';
12
13
  export * from './services/ecies';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/digitaldefiance-node-ecies-lib/src/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AAGtB,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,cAAc,2BAA2B,CAAC;AAG1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGxD,YAAY,EACV,UAAU,EACV,SAAS,EACT,OAAO,IAAI,eAAe,GAC3B,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/digitaldefiance-node-ecies-lib/src/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AAGtB,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAGhC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,cAAc,2BAA2B,CAAC;AAG1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGxD,YAAY,EACV,UAAU,EACV,SAAS,EACT,OAAO,IAAI,eAAe,GAC3B,MAAM,iBAAiB,CAAC"}
package/src/index.js CHANGED
@@ -13,6 +13,7 @@ tslib_1.__exportStar(require("./i18n"), exports);
13
13
  tslib_1.__exportStar(require("./interfaces"), exports);
14
14
  tslib_1.__exportStar(require("./member"), exports);
15
15
  tslib_1.__exportStar(require("./types"), exports);
16
+ tslib_1.__exportStar(require("./secure-buffer"), exports);
16
17
  // Services - explicit exports to avoid conflicts
17
18
  var aes_gcm_1 = require("./services/aes-gcm");
18
19
  Object.defineProperty(exports, "AESGCMService", { enumerable: true, get: function () { return aes_gcm_1.AESGCMService; } });
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/digitaldefiance-node-ecies-lib/src/index.ts"],"names":[],"mappings":";;;;AAAA,0BAA0B;AAC1B,qDAA2B;AAC3B,iDAAuB;AACvB,gDAAsB;AAEtB,4CAA4C;AAC5C,sDAA4B;AAC5B,yDAA+B;AAC/B,iDAAuB;AACvB,uDAA6B;AAC7B,mDAAyB;AACzB,kDAAwB;AAExB,iDAAiD;AACjD,8CAAmD;AAA1C,wGAAA,aAAa,OAAA;AACtB,8DAA4D;AAAnD,iHAAA,cAAc,OAAA;AACvB,2DAAiC;AACjC,kEAAgE;AAAvD,qHAAA,gBAAgB,OAAA;AACzB,kFAA+E;AAAtE,oIAAA,uBAAuB,OAAA;AAChC,4CAAkD;AAAzC,uGAAA,aAAa,OAAA;AACtB,gEAA8D;AAArD,mHAAA,eAAe,OAAA;AACxB,oEAA0C;AAE1C,kCAAkC;AAClC,qDAAsD;AAA7C,oHAAA,iBAAiB,OAAA;AAC1B,uDAAwD;AAA/C,sHAAA,kBAAkB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/digitaldefiance-node-ecies-lib/src/index.ts"],"names":[],"mappings":";;;;AAAA,0BAA0B;AAC1B,qDAA2B;AAC3B,iDAAuB;AACvB,gDAAsB;AAEtB,4CAA4C;AAC5C,sDAA4B;AAC5B,yDAA+B;AAC/B,iDAAuB;AACvB,uDAA6B;AAC7B,mDAAyB;AACzB,kDAAwB;AACxB,0DAAgC;AAEhC,iDAAiD;AACjD,8CAAmD;AAA1C,wGAAA,aAAa,OAAA;AACtB,8DAA4D;AAAnD,iHAAA,cAAc,OAAA;AACvB,2DAAiC;AACjC,kEAAgE;AAAvD,qHAAA,gBAAgB,OAAA;AACzB,kFAA+E;AAAtE,oIAAA,uBAAuB,OAAA;AAChC,4CAAkD;AAAzC,uGAAA,aAAa,OAAA;AACtB,gEAA8D;AAArD,mHAAA,eAAe,OAAA;AACxB,oEAA0C;AAE1C,kCAAkC;AAClC,qDAAsD;AAA7C,oHAAA,iBAAiB,OAAA;AAC1B,uDAAwD;AAA/C,sHAAA,kBAAkB,OAAA"}
@@ -0,0 +1,62 @@
1
+ import { IIdProvider } from '@digitaldefiance/ecies-lib';
2
+ /**
3
+ * A secure buffer implementation for Node.js using Buffer instead of Uint8Array.
4
+ * The buffer is encrypted with a key derived from a random ID.
5
+ * The ID is stored in the clear, but the buffer is encrypted with a key derived from the ID.
6
+ * This allows the buffer to be decrypted, but only if the ID and salt are known.
7
+ *
8
+ * Supports explicit resource management (TC39 proposal) for automatic disposal:
9
+ * ```typescript
10
+ * using buffer = new SecureBuffer(sensitiveData);
11
+ * // buffer automatically disposed when leaving scope
12
+ * ```
13
+ */
14
+ export declare class SecureBuffer implements Disposable {
15
+ private _disposed;
16
+ private readonly _id;
17
+ private readonly _idProvider;
18
+ private readonly _length;
19
+ private readonly _obfuscatedValue;
20
+ private readonly _key;
21
+ private readonly _obfuscatedChecksum;
22
+ private _disposedAt?;
23
+ constructor(data?: Buffer, idProvider?: IIdProvider);
24
+ dispose(): void;
25
+ /**
26
+ * Symbol.dispose implementation for explicit resource management
27
+ * Allows using 'using' keyword (TC39 proposal)
28
+ */
29
+ [Symbol.dispose](): void;
30
+ /**
31
+ * Factory method for backward compatibility that uses Constants.idProvider
32
+ * @param data Optional data to secure
33
+ * @returns A new SecureBuffer instance using the global ID provider
34
+ */
35
+ static create(data?: Buffer): SecureBuffer;
36
+ /**
37
+ * Static factory method that creates a SecureBuffer for a symmetric key
38
+ * Useful for managing encryption keys securely
39
+ */
40
+ static allocateKey(sizeBytes?: number): SecureBuffer;
41
+ private assertNotDisposed;
42
+ static fromString(data: string): SecureBuffer;
43
+ get disposedAtStack(): string | undefined;
44
+ get id(): string;
45
+ get idUint8Array(): Uint8Array;
46
+ get idBuffer(): Buffer;
47
+ get originalLength(): number;
48
+ get value(): Buffer;
49
+ get valueAsString(): string;
50
+ get valueAsHexString(): string;
51
+ get valueAsBase64String(): string;
52
+ get checksum(): string;
53
+ private generateSimpleChecksum;
54
+ private createSimpleObfuscatedChecksum;
55
+ private validateSimpleChecksum;
56
+ private timingSafeEqual;
57
+ private validateObfuscatedChecksum;
58
+ private obfuscateData;
59
+ private deobfuscateData;
60
+ get length(): number;
61
+ }
62
+ //# sourceMappingURL=secure-buffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secure-buffer.d.ts","sourceRoot":"","sources":["../../../../packages/digitaldefiance-node-ecies-lib/src/secure-buffer.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,WAAW,EAGZ,MAAM,4BAA4B,CAAC;AAOpC;;;;;;;;;;;GAWG;AACH,qBAAa,YAAa,YAAW,UAAU;IAC7C,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,WAAW,CAAC,CAAS;gBAG3B,IAAI,CAAC,EAAE,MAAM,EACb,UAAU,GAAE,WAAiC;IAmBxC,OAAO,IAAI,IAAI;IAYtB;;;OAGG;IACH,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;IAIxB;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY;IAI1C;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,SAAS,GAAE,MAAW,GAAG,YAAY;IAOxD,OAAO,CAAC,iBAAiB;WAYX,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY;IAIpD,IAAW,eAAe,IAAI,MAAM,GAAG,SAAS,CAE/C;IAED,IAAW,EAAE,IAAI,MAAM,CAGtB;IAED,IAAW,YAAY,IAAI,UAAU,CAGpC;IAED,IAAW,QAAQ,IAAI,MAAM,CAG5B;IAED,IAAW,cAAc,IAAI,MAAM,CAGlC;IAED,IAAW,KAAK,IAAI,MAAM,CA4BzB;IAED,IAAW,aAAa,IAAI,MAAM,CAGjC;IAED,IAAW,gBAAgB,IAAI,MAAM,CAGpC;IAED,IAAW,mBAAmB,IAAI,MAAM,CAGvC;IAED,IAAW,QAAQ,IAAI,MAAM,CAM5B;IAED,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,8BAA8B;IAMtC,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,0BAA0B;IAOlC,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,eAAe;IAIvB,IAAW,MAAM,IAAI,MAAM,CAG1B;CACF"}
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SecureBuffer = void 0;
4
+ const crypto_1 = require("crypto");
5
+ const constants_1 = require("./constants");
6
+ const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
7
+ /**
8
+ * Default ID provider (singleton, no circular dependency)
9
+ */
10
+ const DEFAULT_ID_PROVIDER = new ecies_lib_1.ObjectIdProvider();
11
+ /**
12
+ * A secure buffer implementation for Node.js using Buffer instead of Uint8Array.
13
+ * The buffer is encrypted with a key derived from a random ID.
14
+ * The ID is stored in the clear, but the buffer is encrypted with a key derived from the ID.
15
+ * This allows the buffer to be decrypted, but only if the ID and salt are known.
16
+ *
17
+ * Supports explicit resource management (TC39 proposal) for automatic disposal:
18
+ * ```typescript
19
+ * using buffer = new SecureBuffer(sensitiveData);
20
+ * // buffer automatically disposed when leaving scope
21
+ * ```
22
+ */
23
+ class SecureBuffer {
24
+ _disposed = false;
25
+ _id;
26
+ _idProvider;
27
+ _length;
28
+ _obfuscatedValue;
29
+ _key;
30
+ _obfuscatedChecksum;
31
+ _disposedAt;
32
+ constructor(data, idProvider = DEFAULT_ID_PROVIDER) {
33
+ this._idProvider = idProvider;
34
+ this._id = Buffer.from(this._idProvider.generate());
35
+ // don't bother encrypting an empty buffer
36
+ if (data === undefined || data.length === 0) {
37
+ this._length = 0;
38
+ this._obfuscatedValue = Buffer.alloc(0);
39
+ this._key = Buffer.alloc(0);
40
+ this._obfuscatedChecksum = Buffer.alloc(0);
41
+ return;
42
+ }
43
+ this._length = data.length;
44
+ this._key = this._id;
45
+ this._obfuscatedValue = this.obfuscateData(data);
46
+ // Create a simple checksum without crypto for synchronous operation
47
+ this._obfuscatedChecksum = this.createSimpleObfuscatedChecksum(data);
48
+ }
49
+ dispose() {
50
+ const err = new ecies_lib_1.DisposedError();
51
+ if (typeof Error.captureStackTrace === 'function') {
52
+ Error.captureStackTrace(err, this.dispose);
53
+ }
54
+ this._disposedAt = err.stack ?? 'stack unavailable';
55
+ this._obfuscatedValue.fill(0);
56
+ this._key.fill(0);
57
+ this._obfuscatedChecksum.fill(0);
58
+ this._disposed = true;
59
+ }
60
+ /**
61
+ * Symbol.dispose implementation for explicit resource management
62
+ * Allows using 'using' keyword (TC39 proposal)
63
+ */
64
+ [Symbol.dispose]() {
65
+ this.dispose();
66
+ }
67
+ /**
68
+ * Factory method for backward compatibility that uses Constants.idProvider
69
+ * @param data Optional data to secure
70
+ * @returns A new SecureBuffer instance using the global ID provider
71
+ */
72
+ static create(data) {
73
+ return new SecureBuffer(data, constants_1.Constants.idProvider);
74
+ }
75
+ /**
76
+ * Static factory method that creates a SecureBuffer for a symmetric key
77
+ * Useful for managing encryption keys securely
78
+ */
79
+ static allocateKey(sizeBytes = 32) {
80
+ const keyData = Buffer.alloc(sizeBytes);
81
+ // Fill with random data using Node.js crypto
82
+ (0, crypto_1.randomFillSync)(keyData);
83
+ return new SecureBuffer(keyData);
84
+ }
85
+ assertNotDisposed() {
86
+ if (this._disposed) {
87
+ const e = new ecies_lib_1.DisposedError();
88
+ try {
89
+ e.disposedAt = this._disposedAt;
90
+ }
91
+ catch {
92
+ // ignore if Error object is sealed/frozen
93
+ }
94
+ throw e;
95
+ }
96
+ }
97
+ static fromString(data) {
98
+ return new SecureBuffer(Buffer.from(data, 'utf8'));
99
+ }
100
+ get disposedAtStack() {
101
+ return this._disposedAt;
102
+ }
103
+ get id() {
104
+ this.assertNotDisposed();
105
+ return this._idProvider.serialize(this._id);
106
+ }
107
+ get idUint8Array() {
108
+ this.assertNotDisposed();
109
+ return new Uint8Array(this._id);
110
+ }
111
+ get idBuffer() {
112
+ this.assertNotDisposed();
113
+ return this._id;
114
+ }
115
+ get originalLength() {
116
+ this.assertNotDisposed();
117
+ return this._length;
118
+ }
119
+ get value() {
120
+ this.assertNotDisposed();
121
+ if (this._length === 0) {
122
+ return Buffer.alloc(0);
123
+ }
124
+ try {
125
+ const deobfuscatedResult = this.deobfuscateData(this._obfuscatedValue);
126
+ if (deobfuscatedResult.length !== this._length) {
127
+ throw new ecies_lib_1.SecureStorageError(ecies_lib_1.SecureStorageErrorType.DecryptedValueLengthMismatch);
128
+ }
129
+ if (!this.validateObfuscatedChecksum(deobfuscatedResult)) {
130
+ throw new ecies_lib_1.SecureStorageError(ecies_lib_1.SecureStorageErrorType.DecryptedValueChecksumMismatch);
131
+ }
132
+ return deobfuscatedResult;
133
+ }
134
+ catch (error) {
135
+ // If it's already a SecureStorageError, re-throw it
136
+ if (error instanceof ecies_lib_1.SecureStorageError) {
137
+ throw error;
138
+ }
139
+ // Convert any other error (including AES-GCM authentication errors) to SecureStorageError
140
+ throw new ecies_lib_1.SecureStorageError(ecies_lib_1.SecureStorageErrorType.DecryptedValueChecksumMismatch);
141
+ }
142
+ }
143
+ get valueAsString() {
144
+ this.assertNotDisposed();
145
+ return this.value.toString('utf8');
146
+ }
147
+ get valueAsHexString() {
148
+ this.assertNotDisposed();
149
+ return this.value.toString('hex');
150
+ }
151
+ get valueAsBase64String() {
152
+ this.assertNotDisposed();
153
+ return this.value.toString('base64');
154
+ }
155
+ get checksum() {
156
+ this.assertNotDisposed();
157
+ const deobfuscatedChecksum = this.deobfuscateData(this._obfuscatedChecksum).toString('utf8');
158
+ return deobfuscatedChecksum;
159
+ }
160
+ generateSimpleChecksum(data) {
161
+ const dataBytes = typeof data === 'string' ? Buffer.from(data, 'utf8') : data;
162
+ let hash = 0;
163
+ for (let i = 0; i < dataBytes.length; i++) {
164
+ hash = ((hash << 5) - hash + dataBytes[i]) & 0xffffffff;
165
+ }
166
+ return hash.toString(16);
167
+ }
168
+ createSimpleObfuscatedChecksum(data) {
169
+ const checksum = this.generateSimpleChecksum(data);
170
+ const result = this.obfuscateData(Buffer.from(checksum, 'utf8'));
171
+ return result;
172
+ }
173
+ validateSimpleChecksum(data, checksum) {
174
+ const generatedChecksum = this.generateSimpleChecksum(data);
175
+ const a = Buffer.from(generatedChecksum, 'utf8');
176
+ const b = Buffer.from(checksum, 'utf8');
177
+ return this.timingSafeEqual(a, b);
178
+ }
179
+ timingSafeEqual(a, b) {
180
+ if (a.length !== b.length) {
181
+ return false;
182
+ }
183
+ let result = 0;
184
+ for (let i = 0; i < a.length; i++) {
185
+ result |= a[i] ^ b[i];
186
+ }
187
+ return result === 0;
188
+ }
189
+ validateObfuscatedChecksum(data) {
190
+ const deobfuscatedChecksum = this.deobfuscateData(this._obfuscatedChecksum).toString('utf8');
191
+ return this.validateSimpleChecksum(data, deobfuscatedChecksum);
192
+ }
193
+ obfuscateData(data) {
194
+ return Buffer.from(ecies_lib_1.XorService.xor(new Uint8Array(data), new Uint8Array(this._key)));
195
+ }
196
+ deobfuscateData(data) {
197
+ return Buffer.from(ecies_lib_1.XorService.xor(new Uint8Array(data), new Uint8Array(this._key)));
198
+ }
199
+ get length() {
200
+ this.assertNotDisposed();
201
+ return this._length;
202
+ }
203
+ }
204
+ exports.SecureBuffer = SecureBuffer;
205
+ //# sourceMappingURL=secure-buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secure-buffer.js","sourceRoot":"","sources":["../../../../packages/digitaldefiance-node-ecies-lib/src/secure-buffer.ts"],"names":[],"mappings":"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"}