@futdevpro/fsm-dynamo 1.10.50 → 1.10.52
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/build/_modules/crypto/_collections/crypto-2-non-stable.util.d.ts +48 -0
- package/build/_modules/crypto/_collections/crypto-2-non-stable.util.d.ts.map +1 -0
- package/build/_modules/crypto/_collections/crypto-2-non-stable.util.js +204 -0
- package/build/_modules/crypto/_collections/crypto-2-non-stable.util.js.map +1 -0
- package/build/_modules/crypto/_collections/crypto.util.spec.js +83 -81
- package/build/_modules/crypto/_collections/crypto.util.spec.js.map +1 -1
- package/futdevpro-fsm-dynamo-01.10.52.tgz +0 -0
- package/package.json +1 -1
- package/src/_modules/crypto/_collections/crypto-2-non-stable.util.ts +224 -0
- package/src/_modules/crypto/_collections/crypto.util.spec.ts +7 -5
- package/futdevpro-fsm-dynamo-01.10.50.tgz +0 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A utility class for secure encryption and decryption of data
|
|
3
|
+
* Uses AES-256-CBC with deterministic IV and salt for consistent results
|
|
4
|
+
*/
|
|
5
|
+
export declare class DyFM_Crypto {
|
|
6
|
+
private static readonly defaultErrorUserMsg;
|
|
7
|
+
/**
|
|
8
|
+
* Validates the encryption key
|
|
9
|
+
*/
|
|
10
|
+
private static validateKey;
|
|
11
|
+
/**
|
|
12
|
+
* Safely serializes data to JSON
|
|
13
|
+
*/
|
|
14
|
+
private static safeSerialize;
|
|
15
|
+
/**
|
|
16
|
+
* Safely deserializes JSON data
|
|
17
|
+
*/
|
|
18
|
+
private static safeDeserialize;
|
|
19
|
+
/**
|
|
20
|
+
* Derives a 256-bit key from the passphrase using SHA256
|
|
21
|
+
*/
|
|
22
|
+
private static deriveKey;
|
|
23
|
+
/**
|
|
24
|
+
* Creates a deterministic IV from the key only
|
|
25
|
+
*/
|
|
26
|
+
private static createDeterministicIV;
|
|
27
|
+
/**
|
|
28
|
+
* Encrypts data using AES-256-CBC with deterministic key and IV
|
|
29
|
+
* @param data The data to encrypt
|
|
30
|
+
* @param key The encryption key
|
|
31
|
+
* @returns URL-safe encrypted string
|
|
32
|
+
* @throws {DyFM_Error} if encryption fails
|
|
33
|
+
*/
|
|
34
|
+
static encrypt<T>(data: T, key: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* Decrypts data that was encrypted using encrypt()
|
|
37
|
+
* @param encryptedData The encrypted data
|
|
38
|
+
* @param key The decryption key
|
|
39
|
+
* @returns The decrypted data
|
|
40
|
+
* @throws {DyFM_Error} if decryption fails
|
|
41
|
+
*/
|
|
42
|
+
static decrypt<T>(encryptedData: string, key: string): T;
|
|
43
|
+
/**
|
|
44
|
+
* Gets default error settings
|
|
45
|
+
*/
|
|
46
|
+
private static getDefaultErrorSettings;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=crypto-2-non-stable.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto-2-non-stable.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/crypto/_collections/crypto-2-non-stable.util.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAEY;IAEvD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAkB1B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAY5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IA6B9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;IAIxB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAKpC;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IA0C/C;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC;IAyDxD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;CAQvC"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DyFM_Crypto = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const CryptoJS = tslib_1.__importStar(require("crypto-js"));
|
|
6
|
+
const error_control_model_1 = require("../../../_models/control-models/error.control-model");
|
|
7
|
+
/**
|
|
8
|
+
* A utility class for secure encryption and decryption of data
|
|
9
|
+
* Uses AES-256-CBC with deterministic IV and salt for consistent results
|
|
10
|
+
*/
|
|
11
|
+
class DyFM_Crypto {
|
|
12
|
+
static defaultErrorUserMsg = `We encountered an unhandled Authentication Error, ` +
|
|
13
|
+
`\nplease contact the responsible development team.`;
|
|
14
|
+
/**
|
|
15
|
+
* Validates the encryption key
|
|
16
|
+
*/
|
|
17
|
+
static validateKey(key) {
|
|
18
|
+
if (!key || typeof key !== 'string') {
|
|
19
|
+
throw new error_control_model_1.DyFM_Error({
|
|
20
|
+
status: 401,
|
|
21
|
+
message: 'Encryption key is required and must be a string',
|
|
22
|
+
errorCode: 'DyFM-CRY-KEY-REQ'
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
if (key.trim().length === 0) {
|
|
26
|
+
throw new error_control_model_1.DyFM_Error({
|
|
27
|
+
status: 401,
|
|
28
|
+
message: 'Encryption key cannot be empty or whitespace-only',
|
|
29
|
+
errorCode: 'DyFM-CRY-KEY-EMPTY'
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Safely serializes data to JSON
|
|
35
|
+
*/
|
|
36
|
+
static safeSerialize(data) {
|
|
37
|
+
try {
|
|
38
|
+
return JSON.stringify(data);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
throw new error_control_model_1.DyFM_Error({
|
|
42
|
+
...this.getDefaultErrorSettings('safeSerialize', error),
|
|
43
|
+
errorCode: 'DyFM-CRY-SER',
|
|
44
|
+
message: 'Failed to serialize data'
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Safely deserializes JSON data
|
|
50
|
+
*/
|
|
51
|
+
static safeDeserialize(data) {
|
|
52
|
+
try {
|
|
53
|
+
let parsed = JSON.parse(data);
|
|
54
|
+
// Handle double-stringified JSON
|
|
55
|
+
if (typeof parsed === 'string') {
|
|
56
|
+
try {
|
|
57
|
+
parsed = JSON.parse(parsed);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// If second parse fails, return the string as is
|
|
61
|
+
return parsed;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Handle primitive values
|
|
65
|
+
if (typeof parsed === 'string' || typeof parsed === 'number' || typeof parsed === 'boolean') {
|
|
66
|
+
return parsed;
|
|
67
|
+
}
|
|
68
|
+
return parsed;
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
throw new error_control_model_1.DyFM_Error({
|
|
72
|
+
...this.getDefaultErrorSettings('safeDeserialize', error),
|
|
73
|
+
errorCode: 'DyFM-CRY-DES',
|
|
74
|
+
message: 'Failed to deserialize data'
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Derives a 256-bit key from the passphrase using SHA256
|
|
80
|
+
*/
|
|
81
|
+
static deriveKey(key) {
|
|
82
|
+
return CryptoJS.SHA256(key);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Creates a deterministic IV from the key only
|
|
86
|
+
*/
|
|
87
|
+
static createDeterministicIV(key) {
|
|
88
|
+
const hash = CryptoJS.SHA256(key + ':iv');
|
|
89
|
+
return CryptoJS.lib.WordArray.create(hash.words.slice(0, 4)); // Use first 16 bytes (128 bits)
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Encrypts data using AES-256-CBC with deterministic key and IV
|
|
93
|
+
* @param data The data to encrypt
|
|
94
|
+
* @param key The encryption key
|
|
95
|
+
* @returns URL-safe encrypted string
|
|
96
|
+
* @throws {DyFM_Error} if encryption fails
|
|
97
|
+
*/
|
|
98
|
+
static encrypt(data, key) {
|
|
99
|
+
try {
|
|
100
|
+
// Validate key
|
|
101
|
+
this.validateKey(key);
|
|
102
|
+
// Validate data
|
|
103
|
+
if (data === undefined || data === null) {
|
|
104
|
+
throw new error_control_model_1.DyFM_Error({
|
|
105
|
+
status: 401,
|
|
106
|
+
message: 'Data cannot be undefined or null',
|
|
107
|
+
errorCode: 'DyFM-CRY-DATA-NULL'
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
// Convert data to string
|
|
111
|
+
const dataStr = this.safeSerialize(data);
|
|
112
|
+
// Derive key and IV
|
|
113
|
+
const aesKey = this.deriveKey(key);
|
|
114
|
+
const iv = this.createDeterministicIV(key);
|
|
115
|
+
// Encrypt the data with deterministic key and IV
|
|
116
|
+
const encrypted = CryptoJS.AES.encrypt(dataStr, aesKey, {
|
|
117
|
+
iv: iv,
|
|
118
|
+
mode: CryptoJS.mode.CBC,
|
|
119
|
+
padding: CryptoJS.pad.Pkcs7
|
|
120
|
+
});
|
|
121
|
+
// Convert to URL-safe base64
|
|
122
|
+
const base64 = encrypted.ciphertext.toString(CryptoJS.enc.Base64);
|
|
123
|
+
return base64
|
|
124
|
+
.replace(/\+/g, '-')
|
|
125
|
+
.replace(/\//g, '_')
|
|
126
|
+
.replace(/=+$/, '');
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
throw new error_control_model_1.DyFM_Error({
|
|
130
|
+
...this.getDefaultErrorSettings('encrypt', error),
|
|
131
|
+
errorCode: 'DyFM-CRY-ENC',
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Decrypts data that was encrypted using encrypt()
|
|
137
|
+
* @param encryptedData The encrypted data
|
|
138
|
+
* @param key The decryption key
|
|
139
|
+
* @returns The decrypted data
|
|
140
|
+
* @throws {DyFM_Error} if decryption fails
|
|
141
|
+
*/
|
|
142
|
+
static decrypt(encryptedData, key) {
|
|
143
|
+
try {
|
|
144
|
+
// Validate key
|
|
145
|
+
this.validateKey(key);
|
|
146
|
+
// Validate encrypted data
|
|
147
|
+
if (!encryptedData || typeof encryptedData !== 'string') {
|
|
148
|
+
throw new error_control_model_1.DyFM_Error({
|
|
149
|
+
status: 401,
|
|
150
|
+
message: 'Encrypted data is required and must be a string',
|
|
151
|
+
errorCode: 'DyFM-CRY-DATA-REQ'
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
// Convert from URL-safe base64
|
|
155
|
+
let base64 = encryptedData
|
|
156
|
+
.replace(/-/g, '+')
|
|
157
|
+
.replace(/_/g, '/');
|
|
158
|
+
// Add padding if needed
|
|
159
|
+
const padLength = 4 - (base64.length % 4);
|
|
160
|
+
if (padLength < 4) {
|
|
161
|
+
base64 += '='.repeat(padLength);
|
|
162
|
+
}
|
|
163
|
+
// Derive key and IV
|
|
164
|
+
const aesKey = this.deriveKey(key);
|
|
165
|
+
const iv = this.createDeterministicIV(key);
|
|
166
|
+
// Decrypt the data
|
|
167
|
+
const encryptedWA = CryptoJS.enc.Base64.parse(base64);
|
|
168
|
+
const decrypted = CryptoJS.AES.decrypt({ ciphertext: encryptedWA }, aesKey, {
|
|
169
|
+
iv: iv,
|
|
170
|
+
mode: CryptoJS.mode.CBC,
|
|
171
|
+
padding: CryptoJS.pad.Pkcs7
|
|
172
|
+
});
|
|
173
|
+
// Parse JSON
|
|
174
|
+
const decryptedStr = decrypted.toString(CryptoJS.enc.Utf8);
|
|
175
|
+
if (!decryptedStr) {
|
|
176
|
+
throw new error_control_model_1.DyFM_Error({
|
|
177
|
+
status: 401,
|
|
178
|
+
message: 'Failed to decrypt data - invalid key or corrupted data',
|
|
179
|
+
errorCode: 'DyFM-CRY-DEC-FAIL'
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
return this.safeDeserialize(decryptedStr);
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
throw new error_control_model_1.DyFM_Error({
|
|
186
|
+
...this.getDefaultErrorSettings('decrypt', error),
|
|
187
|
+
errorCode: 'DyFM-CRY-DRY',
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Gets default error settings
|
|
193
|
+
*/
|
|
194
|
+
static getDefaultErrorSettings(operation, error) {
|
|
195
|
+
return {
|
|
196
|
+
status: error?.___status ?? error?.status ?? 401,
|
|
197
|
+
message: `Crypto operation "${operation}" failed; ` + error_control_model_1.DyFM_Error.getAnyMessage(error),
|
|
198
|
+
error: error,
|
|
199
|
+
errorCode: 'DyFM-CRY-ERR'
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
exports.DyFM_Crypto = DyFM_Crypto;
|
|
204
|
+
//# sourceMappingURL=crypto-2-non-stable.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto-2-non-stable.util.js","sourceRoot":"","sources":["../../../../src/_modules/crypto/_collections/crypto-2-non-stable.util.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
3
|
+
const crypto_2_non_stable_util_1 = require("./crypto-2-non-stable.util");
|
|
4
4
|
describe('| DyFM_Crypto', () => {
|
|
5
5
|
const testKey = 'test-secret-key-123';
|
|
6
6
|
const testData = { id: 1, name: 'test' };
|
|
7
7
|
describe('| encrypt', () => {
|
|
8
8
|
it('| should successfully encrypt data', () => {
|
|
9
|
-
const encrypted =
|
|
9
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(testData, testKey);
|
|
10
10
|
expect(encrypted).toBeDefined();
|
|
11
11
|
expect(typeof encrypted).toBe('string');
|
|
12
12
|
expect(encrypted).toMatch(/^[A-Za-z0-9\-_]+$/);
|
|
@@ -14,13 +14,13 @@ describe('| DyFM_Crypto', () => {
|
|
|
14
14
|
it('| should encrypt different data with different results', () => {
|
|
15
15
|
const data1 = { id: 1 };
|
|
16
16
|
const data2 = { id: 2 };
|
|
17
|
-
const encrypted1 =
|
|
18
|
-
const encrypted2 =
|
|
17
|
+
const encrypted1 = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(data1, testKey);
|
|
18
|
+
const encrypted2 = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(data2, testKey);
|
|
19
19
|
expect(encrypted1).not.toEqual(encrypted2);
|
|
20
20
|
});
|
|
21
21
|
it('| should throw DyFM_Error when encryption fails', () => {
|
|
22
22
|
// @ts-ignore - Testing invalid input
|
|
23
|
-
expect(() =>
|
|
23
|
+
expect(() => crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(undefined, testKey)).toThrow();
|
|
24
24
|
});
|
|
25
25
|
it('| should handle complex objects', () => {
|
|
26
26
|
const complexData = {
|
|
@@ -31,8 +31,8 @@ describe('| DyFM_Crypto', () => {
|
|
|
31
31
|
array: [1, 2, 3]
|
|
32
32
|
}
|
|
33
33
|
};
|
|
34
|
-
const encrypted =
|
|
35
|
-
const decrypted =
|
|
34
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(complexData, testKey);
|
|
35
|
+
const decrypted = crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
|
|
36
36
|
expect(decrypted).toEqual(complexData);
|
|
37
37
|
});
|
|
38
38
|
it('| should get the same result with the same input', () => {
|
|
@@ -45,8 +45,8 @@ describe('| DyFM_Crypto', () => {
|
|
|
45
45
|
}
|
|
46
46
|
};
|
|
47
47
|
const expectedResult = JSON.stringify(complexData);
|
|
48
|
-
const encrypted =
|
|
49
|
-
const decrypted =
|
|
48
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(complexData, testKey);
|
|
49
|
+
const decrypted = crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
|
|
50
50
|
const result = JSON.stringify(decrypted);
|
|
51
51
|
expect(result).toBe(expectedResult);
|
|
52
52
|
});
|
|
@@ -57,66 +57,66 @@ describe('| DyFM_Crypto', () => {
|
|
|
57
57
|
nested: { value: 'nested-value', array: [1, 2, 3] }
|
|
58
58
|
};
|
|
59
59
|
const originalData = JSON.stringify(complexData);
|
|
60
|
-
const encrypted =
|
|
61
|
-
const decrypted =
|
|
60
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(complexData, testKey);
|
|
61
|
+
const decrypted = crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
|
|
62
62
|
const result = JSON.stringify(decrypted);
|
|
63
63
|
expect(result).toBe(originalData);
|
|
64
64
|
});
|
|
65
65
|
it('| should handle arrays', () => {
|
|
66
66
|
const arrayData = [1, 'test', { nested: true }];
|
|
67
|
-
const encrypted =
|
|
68
|
-
const decrypted =
|
|
67
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(arrayData, testKey);
|
|
68
|
+
const decrypted = crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
|
|
69
69
|
expect(decrypted).toEqual(arrayData);
|
|
70
70
|
});
|
|
71
71
|
it('| should handle primitive values', () => {
|
|
72
72
|
const stringData = 'test string';
|
|
73
73
|
const numberData = 42;
|
|
74
74
|
const booleanData = true;
|
|
75
|
-
const encryptedString =
|
|
76
|
-
const encryptedNumber =
|
|
77
|
-
const encryptedBoolean =
|
|
78
|
-
expect(
|
|
79
|
-
expect(
|
|
80
|
-
expect(
|
|
75
|
+
const encryptedString = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(stringData, testKey);
|
|
76
|
+
const encryptedNumber = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(numberData, testKey);
|
|
77
|
+
const encryptedBoolean = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(booleanData, testKey);
|
|
78
|
+
expect(crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encryptedString, testKey)).toBe(stringData);
|
|
79
|
+
expect(crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encryptedNumber, testKey)).toBe(numberData);
|
|
80
|
+
expect(crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encryptedBoolean, testKey)).toBe(booleanData);
|
|
81
81
|
});
|
|
82
82
|
});
|
|
83
83
|
describe('| decrypt', () => {
|
|
84
84
|
it('| should successfully decrypt encrypted data', () => {
|
|
85
|
-
const encrypted =
|
|
86
|
-
const decrypted =
|
|
85
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(testData, testKey);
|
|
86
|
+
const decrypted = crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
|
|
87
87
|
expect(decrypted).toEqual(testData);
|
|
88
88
|
});
|
|
89
89
|
it('| should throw DyFM_Error when decryption fails', () => {
|
|
90
|
-
expect(() =>
|
|
90
|
+
expect(() => crypto_2_non_stable_util_1.DyFM_Crypto.decrypt('invalid-encrypted-data', testKey)).toThrow();
|
|
91
91
|
});
|
|
92
92
|
it('| should throw DyFM_Error when using wrong key', () => {
|
|
93
|
-
const encrypted =
|
|
94
|
-
expect(() =>
|
|
93
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(testData, testKey);
|
|
94
|
+
expect(() => crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encrypted, 'wrong-key')).toThrow();
|
|
95
95
|
});
|
|
96
96
|
it('| should throw DyFM_Error when encrypted data is modified', () => {
|
|
97
|
-
const encrypted =
|
|
97
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(testData, testKey);
|
|
98
98
|
const modified = encrypted.slice(0, -1) + 'A';
|
|
99
|
-
expect(() =>
|
|
99
|
+
expect(() => crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(modified, testKey)).toThrow();
|
|
100
100
|
});
|
|
101
101
|
});
|
|
102
102
|
describe('| URL-safe encryption', () => {
|
|
103
103
|
it('| should produce URL-safe strings', () => {
|
|
104
|
-
const encrypted =
|
|
104
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(testData, testKey);
|
|
105
105
|
expect(encrypted).toMatch(/^[A-Za-z0-9\-_]+$/);
|
|
106
106
|
});
|
|
107
107
|
it('| should work in HTTP headers', () => {
|
|
108
|
-
const encrypted =
|
|
108
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(testData, testKey);
|
|
109
109
|
const header = `Bearer ${encrypted}`;
|
|
110
110
|
const extracted = header.split(' ')[1];
|
|
111
|
-
const decrypted =
|
|
111
|
+
const decrypted = crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(extracted, testKey);
|
|
112
112
|
expect(decrypted).toEqual(testData);
|
|
113
113
|
});
|
|
114
114
|
it('| should work in URLs', () => {
|
|
115
|
-
const encrypted =
|
|
115
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(testData, testKey);
|
|
116
116
|
const url = `https://example.com/api?token=${encrypted}`;
|
|
117
117
|
const params = new URLSearchParams(url.split('?')[1]);
|
|
118
118
|
const extracted = params.get('token');
|
|
119
|
-
const decrypted =
|
|
119
|
+
const decrypted = crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(extracted, testKey);
|
|
120
120
|
expect(decrypted).toEqual(testData);
|
|
121
121
|
});
|
|
122
122
|
});
|
|
@@ -124,14 +124,14 @@ describe('| DyFM_Crypto', () => {
|
|
|
124
124
|
describe('| empty and null values', () => {
|
|
125
125
|
it('| should handle empty objects', () => {
|
|
126
126
|
const emptyObj = {};
|
|
127
|
-
const encrypted =
|
|
128
|
-
const decrypted =
|
|
127
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(emptyObj, testKey);
|
|
128
|
+
const decrypted = crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
|
|
129
129
|
expect(decrypted).toEqual(emptyObj);
|
|
130
130
|
});
|
|
131
131
|
it('| should handle empty arrays', () => {
|
|
132
132
|
const emptyArr = [];
|
|
133
|
-
const encrypted =
|
|
134
|
-
const decrypted =
|
|
133
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(emptyArr, testKey);
|
|
134
|
+
const decrypted = crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
|
|
135
135
|
expect(decrypted).toEqual(emptyArr);
|
|
136
136
|
});
|
|
137
137
|
it('| should handle null values in objects', () => {
|
|
@@ -140,8 +140,8 @@ describe('| DyFM_Crypto', () => {
|
|
|
140
140
|
name: null,
|
|
141
141
|
nested: { value: null }
|
|
142
142
|
};
|
|
143
|
-
const encrypted =
|
|
144
|
-
const decrypted =
|
|
143
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(dataWithNull, testKey);
|
|
144
|
+
const decrypted = crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
|
|
145
145
|
expect(decrypted).toEqual(dataWithNull);
|
|
146
146
|
});
|
|
147
147
|
it('| should handle undefined values in objects', () => {
|
|
@@ -150,41 +150,41 @@ describe('| DyFM_Crypto', () => {
|
|
|
150
150
|
name: undefined,
|
|
151
151
|
nested: { value: undefined }
|
|
152
152
|
};
|
|
153
|
-
const encrypted =
|
|
154
|
-
const decrypted =
|
|
153
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(dataWithUndefined, testKey);
|
|
154
|
+
const decrypted = crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
|
|
155
155
|
expect(decrypted).toEqual({ id: 1, nested: {} });
|
|
156
156
|
});
|
|
157
157
|
});
|
|
158
158
|
describe('| key edge cases', () => {
|
|
159
159
|
it('| should handle very long keys', () => {
|
|
160
160
|
const longKey = 'a'.repeat(1000);
|
|
161
|
-
const encrypted =
|
|
162
|
-
const decrypted =
|
|
161
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(testData, longKey);
|
|
162
|
+
const decrypted = crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encrypted, longKey);
|
|
163
163
|
expect(decrypted).toEqual(testData);
|
|
164
164
|
});
|
|
165
165
|
it('| should handle empty key', () => {
|
|
166
|
-
expect(() =>
|
|
166
|
+
expect(() => crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(testData, '')).toThrow();
|
|
167
167
|
});
|
|
168
168
|
it('| should handle whitespace-only keys', () => {
|
|
169
|
-
expect(() =>
|
|
169
|
+
expect(() => crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(testData, ' ')).toThrow();
|
|
170
170
|
});
|
|
171
171
|
});
|
|
172
172
|
describe('| encrypted data manipulation', () => {
|
|
173
173
|
it('| should detect when encrypted data is truncated', () => {
|
|
174
|
-
const encrypted =
|
|
174
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(testData, testKey);
|
|
175
175
|
const truncated = encrypted.slice(0, -10);
|
|
176
|
-
expect(() =>
|
|
176
|
+
expect(() => crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(truncated, testKey)).toThrow();
|
|
177
177
|
});
|
|
178
178
|
it('| should detect when encrypted data is extended', () => {
|
|
179
|
-
const encrypted =
|
|
179
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(testData, testKey);
|
|
180
180
|
const extended = encrypted + 'A'.repeat(10);
|
|
181
|
-
expect(() =>
|
|
181
|
+
expect(() => crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(extended, testKey)).toThrow();
|
|
182
182
|
});
|
|
183
183
|
it('| should detect when encrypted data is modified in the middle', () => {
|
|
184
|
-
const encrypted =
|
|
184
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(testData, testKey);
|
|
185
185
|
const midPoint = Math.floor(encrypted.length / 2);
|
|
186
186
|
const modified = encrypted.slice(0, midPoint) + 'X' + encrypted.slice(midPoint + 1);
|
|
187
|
-
expect(() =>
|
|
187
|
+
expect(() => crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(modified, testKey)).toThrow();
|
|
188
188
|
});
|
|
189
189
|
});
|
|
190
190
|
describe('| JSON handling edge cases', () => {
|
|
@@ -200,8 +200,8 @@ describe('| DyFM_Crypto', () => {
|
|
|
200
200
|
};
|
|
201
201
|
// Simulate double stringification
|
|
202
202
|
const doubleStringified = JSON.stringify(JSON.stringify(testData));
|
|
203
|
-
const encrypted =
|
|
204
|
-
const decrypted =
|
|
203
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(doubleStringified, testKey);
|
|
204
|
+
const decrypted = crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
|
|
205
205
|
// Should be able to parse the decrypted data back to the original object
|
|
206
206
|
const parsed = JSON.parse(decrypted);
|
|
207
207
|
expect(parsed).toEqual(testData);
|
|
@@ -451,8 +451,8 @@ describe('| DyFM_Crypto', () => {
|
|
|
451
451
|
'239': '}',
|
|
452
452
|
'240': '}'
|
|
453
453
|
};
|
|
454
|
-
const encrypted =
|
|
455
|
-
const decrypted =
|
|
454
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(charByCharData, testKey);
|
|
455
|
+
const decrypted = crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
|
|
456
456
|
// Should be able to parse the decrypted data back to the original object
|
|
457
457
|
expect(decrypted).toEqual(charByCharData);
|
|
458
458
|
});
|
|
@@ -466,11 +466,11 @@ describe('| DyFM_Crypto', () => {
|
|
|
466
466
|
};
|
|
467
467
|
const key = 'test-secret-key-123';
|
|
468
468
|
// Simulate different environments by creating new instances
|
|
469
|
-
const encrypted1 =
|
|
470
|
-
const encrypted2 =
|
|
469
|
+
const encrypted1 = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(testData, key);
|
|
470
|
+
const encrypted2 = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(testData, key);
|
|
471
471
|
expect(encrypted1).toBe(encrypted2);
|
|
472
|
-
expect(
|
|
473
|
-
expect(
|
|
472
|
+
expect(crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encrypted1, key)).toEqual(testData);
|
|
473
|
+
expect(crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encrypted2, key)).toEqual(testData);
|
|
474
474
|
});
|
|
475
475
|
it('| should maintain encryption consistency with different data types', () => {
|
|
476
476
|
const testCases = [
|
|
@@ -480,8 +480,8 @@ describe('| DyFM_Crypto', () => {
|
|
|
480
480
|
{ data: { nested: { value: true } }, key: 'key4' }
|
|
481
481
|
];
|
|
482
482
|
testCases.forEach(({ data, key }) => {
|
|
483
|
-
const encrypted1 =
|
|
484
|
-
const encrypted2 =
|
|
483
|
+
const encrypted1 = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(data, key);
|
|
484
|
+
const encrypted2 = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(data, key);
|
|
485
485
|
expect(encrypted1).toBe(encrypted2);
|
|
486
486
|
});
|
|
487
487
|
});
|
|
@@ -499,17 +499,17 @@ describe('| DyFM_Crypto', () => {
|
|
|
499
499
|
};
|
|
500
500
|
const key = 'db-storage-key';
|
|
501
501
|
// Simulate database storage and retrieval
|
|
502
|
-
const encrypted =
|
|
502
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(originalData, key);
|
|
503
503
|
const storedData = encrypted; // Simulating database storage
|
|
504
504
|
const retrievedData = storedData; // Simulating database retrieval
|
|
505
|
-
const decrypted =
|
|
505
|
+
const decrypted = crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(retrievedData, key);
|
|
506
506
|
expect(decrypted).toEqual(originalData);
|
|
507
507
|
});
|
|
508
508
|
it('| should handle multiple encryption/decryption cycles for database operations', () => {
|
|
509
509
|
const userData = {
|
|
510
510
|
id: 1,
|
|
511
511
|
name: 'test user',
|
|
512
|
-
lastLogin:
|
|
512
|
+
lastLogin: '2024-01-01T10:00:00.000Z',
|
|
513
513
|
preferences: {
|
|
514
514
|
language: 'en',
|
|
515
515
|
timezone: 'UTC'
|
|
@@ -517,15 +517,15 @@ describe('| DyFM_Crypto', () => {
|
|
|
517
517
|
};
|
|
518
518
|
const key = 'persistent-key';
|
|
519
519
|
// Simulate multiple database operations
|
|
520
|
-
const encrypted1 =
|
|
521
|
-
const decrypted1 =
|
|
522
|
-
// Simulate data update
|
|
520
|
+
const encrypted1 = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(userData, key);
|
|
521
|
+
const decrypted1 = crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encrypted1, key);
|
|
522
|
+
// Simulate data update with a different timestamp
|
|
523
523
|
const updatedData = {
|
|
524
524
|
...decrypted1,
|
|
525
|
-
lastLogin:
|
|
525
|
+
lastLogin: '2024-01-02T15:30:00.000Z'
|
|
526
526
|
};
|
|
527
|
-
const encrypted2 =
|
|
528
|
-
const decrypted2 =
|
|
527
|
+
const encrypted2 = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(updatedData, key);
|
|
528
|
+
const decrypted2 = crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encrypted2, key);
|
|
529
529
|
expect(decrypted1).toEqual(userData);
|
|
530
530
|
expect(decrypted2).toEqual(updatedData);
|
|
531
531
|
expect(decrypted2.lastLogin).not.toBe(userData.lastLogin);
|
|
@@ -541,10 +541,10 @@ describe('| DyFM_Crypto', () => {
|
|
|
541
541
|
};
|
|
542
542
|
const key = 'sensitive-data-key';
|
|
543
543
|
// Simulate multiple database operations with the same data
|
|
544
|
-
const encrypted1 =
|
|
545
|
-
const decrypted1 =
|
|
546
|
-
const encrypted2 =
|
|
547
|
-
const decrypted2 =
|
|
544
|
+
const encrypted1 = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(sensitiveData, key);
|
|
545
|
+
const decrypted1 = crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encrypted1, key);
|
|
546
|
+
const encrypted2 = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(decrypted1, key);
|
|
547
|
+
const decrypted2 = crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encrypted2, key);
|
|
548
548
|
expect(decrypted1).toEqual(sensitiveData);
|
|
549
549
|
expect(decrypted2).toEqual(sensitiveData);
|
|
550
550
|
expect(encrypted1).toBe(encrypted2); // Different encryption instances
|
|
@@ -555,10 +555,12 @@ describe('| DyFM_Crypto', () => {
|
|
|
555
555
|
const unicodeData = {
|
|
556
556
|
text: 'Hello 世界! 🌍',
|
|
557
557
|
emoji: '👋',
|
|
558
|
-
special: '
|
|
558
|
+
special: '!!!@@@###$$$%%%^^^&&&***((()))___+++---===[[[]]]{{{}}}|||;;;:::,,,...<<<>>>' +
|
|
559
|
+
'ĐĐĐđđđßßߤ¤¤×××÷÷÷¨¨¨¨~~~ˇˇˇ^^^˘˘˘°°°˛˛˛```˙˙˙´´´˝˝˝˝¸¸¸§§§' +
|
|
560
|
+
'???ééééáááűűűúúúőőőóóóüüüöööíííÉÉÉÁÁÁŰŰŰÚÚÚŐŐŐÓÓÓÜÖÖÖÍÍÍ'
|
|
559
561
|
};
|
|
560
|
-
const encrypted =
|
|
561
|
-
const decrypted =
|
|
562
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(unicodeData, testKey);
|
|
563
|
+
const decrypted = crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
|
|
562
564
|
expect(decrypted).toEqual(unicodeData);
|
|
563
565
|
});
|
|
564
566
|
it('| should handle special characters in object keys', () => {
|
|
@@ -568,8 +570,8 @@ describe('| DyFM_Crypto', () => {
|
|
|
568
570
|
'key-with-special-chars!@#': 'value',
|
|
569
571
|
'key-with-unicode-世界': 'value'
|
|
570
572
|
};
|
|
571
|
-
const encrypted =
|
|
572
|
-
const decrypted =
|
|
573
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(specialKeyData, testKey);
|
|
574
|
+
const decrypted = crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
|
|
573
575
|
expect(decrypted).toEqual(specialKeyData);
|
|
574
576
|
});
|
|
575
577
|
it('| should handle special characters in nested objects', () => {
|
|
@@ -580,8 +582,8 @@ describe('| DyFM_Crypto', () => {
|
|
|
580
582
|
}
|
|
581
583
|
}
|
|
582
584
|
};
|
|
583
|
-
const encrypted =
|
|
584
|
-
const decrypted =
|
|
585
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(nestedData, testKey);
|
|
586
|
+
const decrypted = crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
|
|
585
587
|
expect(decrypted).toEqual(nestedData);
|
|
586
588
|
});
|
|
587
589
|
it('| should handle special characters in arrays', () => {
|
|
@@ -590,8 +592,8 @@ describe('| DyFM_Crypto', () => {
|
|
|
590
592
|
{ 'special-key': 'value with !@#' },
|
|
591
593
|
['nested', 'array', 'with', 'special', 'chars!@#']
|
|
592
594
|
];
|
|
593
|
-
const encrypted =
|
|
594
|
-
const decrypted =
|
|
595
|
+
const encrypted = crypto_2_non_stable_util_1.DyFM_Crypto.encrypt(arrayData, testKey);
|
|
596
|
+
const decrypted = crypto_2_non_stable_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
|
|
595
597
|
expect(decrypted).toEqual(arrayData);
|
|
596
598
|
});
|
|
597
599
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.util.spec.js","sourceRoot":"","sources":["../../../../src/_modules/crypto/_collections/crypto.util.spec.ts"],"names":[],"mappings":"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G;oBACR,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK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"}
|
|
1
|
+
{"version":3,"file":"crypto.util.spec.js","sourceRoot":"","sources":["../../../../src/_modules/crypto/_collections/crypto.util.spec.ts"],"names":[],"mappings":";;AAAA,yEAAyD;AAEzD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,MAAM,OAAO,GAAG,qBAAqB,CAAC;IACtC,MAAM,QAAQ,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAEzC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAEzD,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;YAChC,MAAM,CAAC,OAAO,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YAExB,MAAM,UAAU,GAAG,sCAAW,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM,UAAU,GAAG,sCAAW,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAEvD,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,qCAAqC;YACrC,MAAM,CAAC,GAAG,EAAE,CAAC,sCAAW,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,WAAW,GAAG;gBAClB,EAAE,EAAE,CAAC;gBACL,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE;oBACN,KAAK,EAAE,cAAc;oBACrB,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;iBACjB;aACF,CAAC;YAEF,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC5D,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAE1D,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,WAAW,GAAG;gBAClB,EAAE,EAAE,CAAC;gBACL,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE;oBACN,KAAK,EAAE,cAAc;oBACrB,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;iBACjB;aACF,CAAC;YACF,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAEnD,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC5D,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAE1D,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,WAAW,GAAG;gBAClB,EAAE,EAAE,CAAC;gBACL,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;aACpD,CAAC;YACF,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAEjD,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC5D,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAE1D,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChC,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC1D,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAE1D,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,UAAU,GAAG,aAAa,CAAC;YACjC,MAAM,UAAU,GAAG,EAAE,CAAC;YACtB,MAAM,WAAW,GAAG,IAAI,CAAC;YAEzB,MAAM,eAAe,GAAG,sCAAW,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACjE,MAAM,eAAe,GAAG,sCAAW,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACjE,MAAM,gBAAgB,GAAG,sCAAW,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAEnE,MAAM,CAAC,sCAAW,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvE,MAAM,CAAC,sCAAW,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvE,MAAM,CAAC,sCAAW,CAAC,OAAO,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACzD,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAE1D,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,CAAC,GAAG,EAAE,CAAC,sCAAW,CAAC,OAAO,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACjF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACzD,MAAM,CAAC,GAAG,EAAE,CAAC,sCAAW,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;YACnE,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACzD,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAC9C,MAAM,CAAC,GAAG,EAAE,CAAC,sCAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACjE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACzD,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,UAAU,SAAS,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC1D,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACzD,MAAM,GAAG,GAAG,iCAAiC,SAAS,EAAE,CAAC;YACzD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,SAAU,EAAE,OAAO,CAAC,CAAC;YAC3D,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACvC,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;gBACvC,MAAM,QAAQ,GAAG,EAAE,CAAC;gBACpB,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACzD,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAC1D,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;gBACtC,MAAM,QAAQ,GAAU,EAAE,CAAC;gBAC3B,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACzD,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAC1D,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;gBAChD,MAAM,YAAY,GAAG;oBACnB,EAAE,EAAE,CAAC;oBACL,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;iBACxB,CAAC;gBACF,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;gBAC7D,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAC1D,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;gBACrD,MAAM,iBAAiB,GAAG;oBACxB,EAAE,EAAE,CAAC;oBACL,IAAI,EAAE,SAAS;oBACf,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;iBAC7B,CAAC;gBACF,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;gBAClE,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAC1D,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAChC,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;gBACxC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACzD,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAC1D,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;gBACnC,MAAM,CAAC,GAAG,EAAE,CAAC,sCAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAC5D,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;gBAC9C,MAAM,CAAC,GAAG,EAAE,CAAC,sCAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAC/D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;YAC7C,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;gBAC1D,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACzD,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC1C,MAAM,CAAC,GAAG,EAAE,CAAC,sCAAW,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAClE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;gBACzD,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACzD,MAAM,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC5C,MAAM,CAAC,GAAG,EAAE,CAAC,sCAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACjE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;gBACvE,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAClD,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;gBACpF,MAAM,CAAC,GAAG,EAAE,CAAC,sCAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACjE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;YAC1C,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;gBAChE,MAAM,QAAQ,GAAG;oBACf,QAAQ,EAAE,SAAS;oBACnB,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE,EAAE;oBACT,WAAW,EAAE,EAAE;oBACf,mBAAmB,EAAE,EAAE;oBACvB,aAAa,EAAE,EAAE;oBACjB,UAAU,EAAE,EAAE;iBACf,CAAC;gBAEF,kCAAkC;gBAClC,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAEnE,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;gBAClE,MAAM,SAAS,GAAG,sCAAW,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAE1D,yEAAyE;gBACzE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAmB,CAAC,CAAC;gBAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;gBACpE,6DAA6D;gBAC7D,MAAM,cAAc,GAAG;oBACrB,GAAG,EAAE,GAAG;oBACR,GAAG,EAAE,GAAG;oBACR,GAAG,EAAE,GAAG;oBACR,GAAG,EAAE,GAAG;oBACR,GAAG,EAAE,GAAG;oBACR,GAAG,EAAE,GAAG;oBACR,GAAG,EAAE,GAAG;oBACR,GAAG,EAAE,GAAG;oBACR,GAAG,EAAE,GAAG;oBACR,GAAG,EAAE,GAAG;oBACR,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK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"}
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@futdevpro/fsm-dynamo",
|
|
3
|
-
"version": "01.10.
|
|
3
|
+
"version": "01.10.52",
|
|
4
4
|
"description": "Full Stack Model Collection for Dynamic (NodeJS-Typescript) Framework called Dynamo, by Future Development Ltd.",
|
|
5
5
|
"DyBu_settings": {
|
|
6
6
|
"packageType": "full-stack-package",
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import * as CryptoJS from 'crypto-js';
|
|
2
|
+
import {
|
|
3
|
+
DyFM_Error,
|
|
4
|
+
DyFM_Error_Settings
|
|
5
|
+
} from '../../../_models/control-models/error.control-model';
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* A utility class for secure encryption and decryption of data
|
|
10
|
+
* Uses AES-256-CBC with deterministic IV and salt for consistent results
|
|
11
|
+
*/
|
|
12
|
+
export class DyFM_Crypto {
|
|
13
|
+
private static readonly defaultErrorUserMsg =
|
|
14
|
+
`We encountered an unhandled Authentication Error, ` +
|
|
15
|
+
`\nplease contact the responsible development team.`;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Validates the encryption key
|
|
19
|
+
*/
|
|
20
|
+
private static validateKey(key: string): void {
|
|
21
|
+
if (!key || typeof key !== 'string') {
|
|
22
|
+
throw new DyFM_Error({
|
|
23
|
+
status: 401,
|
|
24
|
+
message: 'Encryption key is required and must be a string',
|
|
25
|
+
errorCode: 'DyFM-CRY-KEY-REQ'
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (key.trim().length === 0) {
|
|
30
|
+
throw new DyFM_Error({
|
|
31
|
+
status: 401,
|
|
32
|
+
message: 'Encryption key cannot be empty or whitespace-only',
|
|
33
|
+
errorCode: 'DyFM-CRY-KEY-EMPTY'
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Safely serializes data to JSON
|
|
40
|
+
*/
|
|
41
|
+
private static safeSerialize<T>(data: T): string {
|
|
42
|
+
try {
|
|
43
|
+
return JSON.stringify(data);
|
|
44
|
+
} catch (error) {
|
|
45
|
+
throw new DyFM_Error({
|
|
46
|
+
...this.getDefaultErrorSettings('safeSerialize', error),
|
|
47
|
+
errorCode: 'DyFM-CRY-SER',
|
|
48
|
+
message: 'Failed to serialize data'
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Safely deserializes JSON data
|
|
55
|
+
*/
|
|
56
|
+
private static safeDeserialize<T>(data: string): T {
|
|
57
|
+
try {
|
|
58
|
+
let parsed = JSON.parse(data);
|
|
59
|
+
|
|
60
|
+
// Handle double-stringified JSON
|
|
61
|
+
if (typeof parsed === 'string') {
|
|
62
|
+
try {
|
|
63
|
+
parsed = JSON.parse(parsed);
|
|
64
|
+
} catch {
|
|
65
|
+
// If second parse fails, return the string as is
|
|
66
|
+
return parsed as T;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Handle primitive values
|
|
71
|
+
if (typeof parsed === 'string' || typeof parsed === 'number' || typeof parsed === 'boolean') {
|
|
72
|
+
return parsed as T;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return parsed as T;
|
|
76
|
+
} catch (error) {
|
|
77
|
+
throw new DyFM_Error({
|
|
78
|
+
...this.getDefaultErrorSettings('safeDeserialize', error),
|
|
79
|
+
errorCode: 'DyFM-CRY-DES',
|
|
80
|
+
message: 'Failed to deserialize data'
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Derives a 256-bit key from the passphrase using SHA256
|
|
87
|
+
*/
|
|
88
|
+
private static deriveKey(key: string): CryptoJS.lib.WordArray {
|
|
89
|
+
return CryptoJS.SHA256(key);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Creates a deterministic IV from the key only
|
|
94
|
+
*/
|
|
95
|
+
private static createDeterministicIV(key: string): CryptoJS.lib.WordArray {
|
|
96
|
+
const hash = CryptoJS.SHA256(key + ':iv');
|
|
97
|
+
return CryptoJS.lib.WordArray.create(hash.words.slice(0, 4)); // Use first 16 bytes (128 bits)
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Encrypts data using AES-256-CBC with deterministic key and IV
|
|
102
|
+
* @param data The data to encrypt
|
|
103
|
+
* @param key The encryption key
|
|
104
|
+
* @returns URL-safe encrypted string
|
|
105
|
+
* @throws {DyFM_Error} if encryption fails
|
|
106
|
+
*/
|
|
107
|
+
static encrypt<T>(data: T, key: string): string {
|
|
108
|
+
try {
|
|
109
|
+
// Validate key
|
|
110
|
+
this.validateKey(key);
|
|
111
|
+
|
|
112
|
+
// Validate data
|
|
113
|
+
if (data === undefined || data === null) {
|
|
114
|
+
throw new DyFM_Error({
|
|
115
|
+
status: 401,
|
|
116
|
+
message: 'Data cannot be undefined or null',
|
|
117
|
+
errorCode: 'DyFM-CRY-DATA-NULL'
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Convert data to string
|
|
122
|
+
const dataStr = this.safeSerialize(data);
|
|
123
|
+
|
|
124
|
+
// Derive key and IV
|
|
125
|
+
const aesKey = this.deriveKey(key);
|
|
126
|
+
const iv = this.createDeterministicIV(key);
|
|
127
|
+
|
|
128
|
+
// Encrypt the data with deterministic key and IV
|
|
129
|
+
const encrypted = CryptoJS.AES.encrypt(dataStr, aesKey, {
|
|
130
|
+
iv: iv,
|
|
131
|
+
mode: CryptoJS.mode.CBC,
|
|
132
|
+
padding: CryptoJS.pad.Pkcs7
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
// Convert to URL-safe base64
|
|
136
|
+
const base64 = encrypted.ciphertext.toString(CryptoJS.enc.Base64);
|
|
137
|
+
return base64
|
|
138
|
+
.replace(/\+/g, '-')
|
|
139
|
+
.replace(/\//g, '_')
|
|
140
|
+
.replace(/=+$/, '');
|
|
141
|
+
} catch (error) {
|
|
142
|
+
throw new DyFM_Error({
|
|
143
|
+
...this.getDefaultErrorSettings('encrypt', error),
|
|
144
|
+
errorCode: 'DyFM-CRY-ENC',
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Decrypts data that was encrypted using encrypt()
|
|
151
|
+
* @param encryptedData The encrypted data
|
|
152
|
+
* @param key The decryption key
|
|
153
|
+
* @returns The decrypted data
|
|
154
|
+
* @throws {DyFM_Error} if decryption fails
|
|
155
|
+
*/
|
|
156
|
+
static decrypt<T>(encryptedData: string, key: string): T {
|
|
157
|
+
try {
|
|
158
|
+
// Validate key
|
|
159
|
+
this.validateKey(key);
|
|
160
|
+
|
|
161
|
+
// Validate encrypted data
|
|
162
|
+
if (!encryptedData || typeof encryptedData !== 'string') {
|
|
163
|
+
throw new DyFM_Error({
|
|
164
|
+
status: 401,
|
|
165
|
+
message: 'Encrypted data is required and must be a string',
|
|
166
|
+
errorCode: 'DyFM-CRY-DATA-REQ'
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Convert from URL-safe base64
|
|
171
|
+
let base64 = encryptedData
|
|
172
|
+
.replace(/-/g, '+')
|
|
173
|
+
.replace(/_/g, '/');
|
|
174
|
+
|
|
175
|
+
// Add padding if needed
|
|
176
|
+
const padLength = 4 - (base64.length % 4);
|
|
177
|
+
if (padLength < 4) {
|
|
178
|
+
base64 += '='.repeat(padLength);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// Derive key and IV
|
|
182
|
+
const aesKey = this.deriveKey(key);
|
|
183
|
+
const iv = this.createDeterministicIV(key);
|
|
184
|
+
|
|
185
|
+
// Decrypt the data
|
|
186
|
+
const encryptedWA = CryptoJS.enc.Base64.parse(base64);
|
|
187
|
+
const decrypted = CryptoJS.AES.decrypt({ ciphertext: encryptedWA }, aesKey, {
|
|
188
|
+
iv: iv,
|
|
189
|
+
mode: CryptoJS.mode.CBC,
|
|
190
|
+
padding: CryptoJS.pad.Pkcs7
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
// Parse JSON
|
|
194
|
+
const decryptedStr = decrypted.toString(CryptoJS.enc.Utf8);
|
|
195
|
+
|
|
196
|
+
if (!decryptedStr) {
|
|
197
|
+
throw new DyFM_Error({
|
|
198
|
+
status: 401,
|
|
199
|
+
message: 'Failed to decrypt data - invalid key or corrupted data',
|
|
200
|
+
errorCode: 'DyFM-CRY-DEC-FAIL'
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
return this.safeDeserialize<T>(decryptedStr);
|
|
205
|
+
} catch (error) {
|
|
206
|
+
throw new DyFM_Error({
|
|
207
|
+
...this.getDefaultErrorSettings('decrypt', error),
|
|
208
|
+
errorCode: 'DyFM-CRY-DRY',
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Gets default error settings
|
|
215
|
+
*/
|
|
216
|
+
private static getDefaultErrorSettings(operation: string, error?: any): DyFM_Error_Settings {
|
|
217
|
+
return {
|
|
218
|
+
status: (error as DyFM_Error)?.___status ?? (error as any)?.status ?? 401,
|
|
219
|
+
message: `Crypto operation "${operation}" failed; ` + DyFM_Error.getAnyMessage(error),
|
|
220
|
+
error: error,
|
|
221
|
+
errorCode: 'DyFM-CRY-ERR'
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DyFM_Crypto } from './crypto.util';
|
|
1
|
+
import { DyFM_Crypto } from './crypto-2-non-stable.util';
|
|
2
2
|
|
|
3
3
|
describe('| DyFM_Crypto', () => {
|
|
4
4
|
const testKey = 'test-secret-key-123';
|
|
@@ -572,7 +572,7 @@ describe('| DyFM_Crypto', () => {
|
|
|
572
572
|
const userData: UserData = {
|
|
573
573
|
id: 1,
|
|
574
574
|
name: 'test user',
|
|
575
|
-
lastLogin:
|
|
575
|
+
lastLogin: '2024-01-01T10:00:00.000Z',
|
|
576
576
|
preferences: {
|
|
577
577
|
language: 'en',
|
|
578
578
|
timezone: 'UTC'
|
|
@@ -584,10 +584,10 @@ describe('| DyFM_Crypto', () => {
|
|
|
584
584
|
const encrypted1 = DyFM_Crypto.encrypt(userData, key);
|
|
585
585
|
const decrypted1 = DyFM_Crypto.decrypt(encrypted1, key) as UserData;
|
|
586
586
|
|
|
587
|
-
// Simulate data update
|
|
587
|
+
// Simulate data update with a different timestamp
|
|
588
588
|
const updatedData: UserData = {
|
|
589
589
|
...decrypted1,
|
|
590
|
-
lastLogin:
|
|
590
|
+
lastLogin: '2024-01-02T15:30:00.000Z'
|
|
591
591
|
};
|
|
592
592
|
const encrypted2 = DyFM_Crypto.encrypt(updatedData, key);
|
|
593
593
|
const decrypted2 = DyFM_Crypto.decrypt(encrypted2, key) as UserData;
|
|
@@ -625,7 +625,9 @@ describe('| DyFM_Crypto', () => {
|
|
|
625
625
|
const unicodeData = {
|
|
626
626
|
text: 'Hello 世界! 🌍',
|
|
627
627
|
emoji: '👋',
|
|
628
|
-
special: '
|
|
628
|
+
special: '!!!@@@###$$$%%%^^^&&&***((()))___+++---===[[[]]]{{{}}}|||;;;:::,,,...<<<>>>' +
|
|
629
|
+
'ĐĐĐđđđßßߤ¤¤×××÷÷÷¨¨¨¨~~~ˇˇˇ^^^˘˘˘°°°˛˛˛```˙˙˙´´´˝˝˝˝¸¸¸§§§' +
|
|
630
|
+
'???ééééáááűűűúúúőőőóóóüüüöööíííÉÉÉÁÁÁŰŰŰÚÚÚŐŐŐÓÓÓÜÖÖÖÍÍÍ'
|
|
629
631
|
};
|
|
630
632
|
const encrypted = DyFM_Crypto.encrypt(unicodeData, testKey);
|
|
631
633
|
const decrypted = DyFM_Crypto.decrypt(encrypted, testKey);
|
|
Binary file
|