@futdevpro/fsm-dynamo 1.12.9 → 1.12.11
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/_collections/utils/async.util.d.ts +4 -3
- package/build/_collections/utils/async.util.d.ts.map +1 -1
- package/build/_collections/utils/async.util.js +65 -3
- package/build/_collections/utils/async.util.js.map +1 -1
- package/build/_collections/utils/time.util.js +7 -7
- package/build/_collections/utils/time.util.js.map +1 -1
- package/build/_models/interfaces/search-query.interface.d.ts +11 -0
- package/build/_models/interfaces/search-query.interface.d.ts.map +1 -1
- package/build/_models/types/db-/304/221filter.type.d.ts +2 -1
- package/build/_models/types/db-/304/221filter.type.d.ts.map +1 -1
- package/build/_models/types/db-/304/221filter.type.js.map +1 -1
- package/build/_modules/crypto/_collections/crypto-old.util.d.ts +107 -0
- package/build/_modules/crypto/_collections/crypto-old.util.d.ts.map +1 -0
- package/build/_modules/crypto/_collections/crypto-old.util.js +279 -0
- package/build/_modules/crypto/_collections/crypto-old.util.js.map +1 -0
- package/build/_modules/crypto/_collections/crypto.util.d.ts +38 -6
- package/build/_modules/crypto/_collections/crypto.util.d.ts.map +1 -1
- package/build/_modules/crypto/_collections/crypto.util.js +298 -36
- package/build/_modules/crypto/_collections/crypto.util.js.map +1 -1
- package/build/_modules/crypto/_collections/crypto.util.spec.js +397 -2
- package/build/_modules/crypto/_collections/crypto.util.spec.js.map +1 -1
- package/build/_modules/crypto/index.d.ts +1 -1
- package/build/_modules/crypto/index.d.ts.map +1 -1
- package/build/_modules/crypto/index.js +1 -1
- package/build/_modules/crypto/index.js.map +1 -1
- package/futdevpro-fsm-dynamo-01.12.11.tgz +0 -0
- package/package.json +1 -1
- package/src/_collections/utils/async.util.ts +65 -4
- package/src/_collections/utils/time.util.ts +7 -7
- package/src/_models/interfaces/search-query.interface.ts +11 -0
- package/src/_models/types/db-/304/221filter.type.ts +6 -5
- package/src/_modules/crypto/_collections/crypto-old.util.ts +323 -0
- package/src/_modules/crypto/_collections/crypto.util.spec.ts +475 -2
- package/src/_modules/crypto/_collections/crypto.util.ts +337 -43
- package/src/_modules/crypto/index.ts +1 -1
- package/futdevpro-fsm-dynamo-01.12.09.tgz +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto-old.util.js","sourceRoot":"","sources":["../../../../src/_modules/crypto/_collections/crypto-old.util.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,16 +22,25 @@ export interface CryptoConfig {
|
|
|
22
22
|
* systems is more important than cryptographic security.
|
|
23
23
|
*/
|
|
24
24
|
export declare class DyFM_Crypto {
|
|
25
|
+
private static readonly CRYPTO_VERSION;
|
|
25
26
|
private static readonly DEFAULT_CONFIG;
|
|
26
27
|
private static readonly defaultErrorUserMsg;
|
|
27
28
|
/**
|
|
28
|
-
* Validates the input data and key
|
|
29
|
+
* Validates the input data and key with comprehensive error messages
|
|
29
30
|
* @throws {DyFM_Error} if validation fails
|
|
30
31
|
*/
|
|
31
32
|
private static validateInput;
|
|
33
|
+
/**
|
|
34
|
+
* Validates data for encryption
|
|
35
|
+
*/
|
|
36
|
+
private static validateEncryptData;
|
|
37
|
+
/**
|
|
38
|
+
* Validates data for decryption
|
|
39
|
+
*/
|
|
40
|
+
private static validateDecryptData;
|
|
32
41
|
/**
|
|
33
42
|
* Generates a deterministic IV based on the input data and key
|
|
34
|
-
* Uses
|
|
43
|
+
* Uses SHA-256 with proper truncation for maximum stability
|
|
35
44
|
*
|
|
36
45
|
* @important DETERMINISTIC: Same data + key will ALWAYS produce the same IV
|
|
37
46
|
* across all systems and CryptoJS versions for consistent encryption results
|
|
@@ -39,22 +48,33 @@ export declare class DyFM_Crypto {
|
|
|
39
48
|
private static generateIV;
|
|
40
49
|
/**
|
|
41
50
|
* Generates a deterministic salt based on the input data and key
|
|
42
|
-
* Uses
|
|
51
|
+
* Uses SHA-256 with proper truncation for maximum stability
|
|
43
52
|
*
|
|
44
53
|
* @important DETERMINISTIC: Same data + key will ALWAYS produce the same salt
|
|
45
54
|
* across all systems and CryptoJS versions for consistent encryption results
|
|
46
55
|
*/
|
|
47
56
|
private static generateSalt;
|
|
57
|
+
/**
|
|
58
|
+
* Creates a deterministic seed for IV/salt generation
|
|
59
|
+
* Ensures consistent output across all environments and versions
|
|
60
|
+
*/
|
|
61
|
+
private static createDeterministicSeed;
|
|
48
62
|
/**
|
|
49
63
|
* Derives a key using PBKDF2 with reduced iterations for stability
|
|
50
64
|
*/
|
|
51
65
|
private static deriveKey;
|
|
52
66
|
/**
|
|
53
|
-
* Safely serializes data to JSON
|
|
67
|
+
* Safely serializes data to JSON with deterministic ordering
|
|
68
|
+
* Uses regular JSON.stringify but ensures consistency through other means
|
|
54
69
|
*/
|
|
55
70
|
private static safeSerialize;
|
|
56
71
|
/**
|
|
57
|
-
*
|
|
72
|
+
* Deterministic JSON stringify that produces identical output across environments
|
|
73
|
+
* Uses a hybrid approach: sorts keys for consistency but preserves order for arrays
|
|
74
|
+
*/
|
|
75
|
+
private static deterministicStringify;
|
|
76
|
+
/**
|
|
77
|
+
* Safely deserializes JSON data with enhanced error handling
|
|
58
78
|
*/
|
|
59
79
|
private static safeDeserialize;
|
|
60
80
|
/**
|
|
@@ -100,7 +120,19 @@ export declare class DyFM_Crypto {
|
|
|
100
120
|
*/
|
|
101
121
|
static isValidEncryptedData(encryptedData: string): boolean;
|
|
102
122
|
/**
|
|
103
|
-
*
|
|
123
|
+
* Analyzes encrypted data to help with debugging
|
|
124
|
+
* @param encryptedData The encrypted data to analyze
|
|
125
|
+
* @returns Analysis information about the encrypted data
|
|
126
|
+
*/
|
|
127
|
+
static analyzeEncryptedData(encryptedData: string): {
|
|
128
|
+
isValid: boolean;
|
|
129
|
+
version?: string;
|
|
130
|
+
dataLength: number;
|
|
131
|
+
hasValidFormat: boolean;
|
|
132
|
+
error?: string;
|
|
133
|
+
};
|
|
134
|
+
/**
|
|
135
|
+
* Gets default error settings with enhanced debugging information
|
|
104
136
|
*/
|
|
105
137
|
private static getDefaultErrorSettings;
|
|
106
138
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/crypto/_collections/crypto.util.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD;;;;;;;;;;;;;GAaG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAKpC;IACF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAEY;IAEvD;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;
|
|
1
|
+
{"version":3,"file":"crypto.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/crypto/_collections/crypto.util.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD;;;;;;;;;;;;;GAaG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAS;IAC/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAKpC;IACF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAEY;IAEvD;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAuC5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA8BlC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAmDlC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAazB;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAa3B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAOtC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;IAOxB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAc5B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAwCrC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAmD9B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM;IAsCtE;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,CAAC;IA+F/E;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,GAAE,MAAW,GAAG,MAAM;IAI/C;;;;OAIG;IACH,MAAM,CAAC,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO;IAO3D;;;;OAIG;IACH,MAAM,CAAC,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG;QAClD,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,OAAO,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB;IAgDD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;CAiBvC"}
|
|
@@ -23,6 +23,7 @@ const object_util_1 = require("../../../_collections/utils/object.util");
|
|
|
23
23
|
* systems is more important than cryptographic security.
|
|
24
24
|
*/
|
|
25
25
|
class DyFM_Crypto {
|
|
26
|
+
static CRYPTO_VERSION = '1.0';
|
|
26
27
|
static DEFAULT_CONFIG = {
|
|
27
28
|
ivLength: 16, // 128 bits
|
|
28
29
|
saltLength: 16, // 128 bits
|
|
@@ -32,53 +33,164 @@ class DyFM_Crypto {
|
|
|
32
33
|
static defaultErrorUserMsg = `We encountered an unhandled Authentication Error, ` +
|
|
33
34
|
`\nplease contact the responsible development team.`;
|
|
34
35
|
/**
|
|
35
|
-
* Validates the input data and key
|
|
36
|
+
* Validates the input data and key with comprehensive error messages
|
|
36
37
|
* @throws {DyFM_Error} if validation fails
|
|
37
38
|
*/
|
|
38
|
-
static validateInput(data, key) {
|
|
39
|
-
|
|
39
|
+
static validateInput(data, key, operation) {
|
|
40
|
+
// Validate key
|
|
41
|
+
if (!key) {
|
|
40
42
|
throw new error_control_model_1.DyFM_Error({
|
|
41
|
-
...this.getDefaultErrorSettings(
|
|
42
|
-
errorCode: 'DyFM-CRY-
|
|
43
|
-
message:
|
|
43
|
+
...this.getDefaultErrorSettings(operation),
|
|
44
|
+
errorCode: 'DyFM-CRY-KEY-MISSING',
|
|
45
|
+
message: `Encryption key is required for ${operation} operation. Please provide a valid key.`
|
|
44
46
|
});
|
|
45
47
|
}
|
|
46
|
-
|
|
48
|
+
if (typeof key !== 'string') {
|
|
49
|
+
throw new error_control_model_1.DyFM_Error({
|
|
50
|
+
...this.getDefaultErrorSettings(operation),
|
|
51
|
+
errorCode: 'DyFM-CRY-KEY-TYPE',
|
|
52
|
+
message: `Encryption key must be a string, but received ${typeof key}. Please provide a valid string key.`
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
if (key.trim().length === 0) {
|
|
56
|
+
throw new error_control_model_1.DyFM_Error({
|
|
57
|
+
...this.getDefaultErrorSettings(operation),
|
|
58
|
+
errorCode: 'DyFM-CRY-KEY-EMPTY',
|
|
59
|
+
message: 'Encryption key cannot be empty or contain only whitespace. Please provide a non-empty key.'
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
// Only warn about weak keys but don't reject them for backward compatibility
|
|
63
|
+
if (key.length < 8) {
|
|
64
|
+
console.warn('Warning: Encryption key is too short (minimum 8 characters recommended). Consider using a stronger key for better security.');
|
|
65
|
+
}
|
|
66
|
+
// Validate data based on operation
|
|
67
|
+
if (operation === 'encrypt') {
|
|
68
|
+
this.validateEncryptData(data);
|
|
69
|
+
}
|
|
70
|
+
else if (operation === 'decrypt') {
|
|
71
|
+
this.validateDecryptData(data);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Validates data for encryption
|
|
76
|
+
*/
|
|
77
|
+
static validateEncryptData(data) {
|
|
78
|
+
if (data === undefined) {
|
|
79
|
+
throw new error_control_model_1.DyFM_Error({
|
|
80
|
+
...this.getDefaultErrorSettings('encrypt'),
|
|
81
|
+
errorCode: 'DyFM-CRY-DATA-UNDEFINED',
|
|
82
|
+
message: 'Cannot encrypt undefined data. Please provide valid data to encrypt.'
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
if (data === null) {
|
|
86
|
+
throw new error_control_model_1.DyFM_Error({
|
|
87
|
+
...this.getDefaultErrorSettings('encrypt'),
|
|
88
|
+
errorCode: 'DyFM-CRY-DATA-NULL',
|
|
89
|
+
message: 'Cannot encrypt null data. Please provide valid data to encrypt.'
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
// Check for empty strings
|
|
93
|
+
if (typeof data === 'string' && data.trim().length === 0) {
|
|
94
|
+
throw new error_control_model_1.DyFM_Error({
|
|
95
|
+
...this.getDefaultErrorSettings('encrypt'),
|
|
96
|
+
errorCode: 'DyFM-CRY-DATA-EMPTY-STRING',
|
|
97
|
+
message: 'Cannot encrypt empty string. Please provide non-empty data to encrypt.'
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
// Allow empty objects and arrays for backward compatibility
|
|
101
|
+
// Only reject truly empty data like empty strings
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Validates data for decryption
|
|
105
|
+
*/
|
|
106
|
+
static validateDecryptData(data) {
|
|
47
107
|
if (data === undefined) {
|
|
48
108
|
throw new error_control_model_1.DyFM_Error({
|
|
49
|
-
...this.getDefaultErrorSettings('
|
|
50
|
-
errorCode: 'DyFM-CRY-
|
|
51
|
-
message:
|
|
109
|
+
...this.getDefaultErrorSettings('decrypt'),
|
|
110
|
+
errorCode: 'DyFM-CRY-ENCRYPTED-UNDEFINED',
|
|
111
|
+
message: 'Cannot decrypt undefined data. Please provide valid encrypted data to decrypt.'
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
if (data === null) {
|
|
115
|
+
throw new error_control_model_1.DyFM_Error({
|
|
116
|
+
...this.getDefaultErrorSettings('decrypt'),
|
|
117
|
+
errorCode: 'DyFM-CRY-ENCRYPTED-NULL',
|
|
118
|
+
message: 'Cannot decrypt null data. Please provide valid encrypted data to decrypt.'
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
if (typeof data !== 'string') {
|
|
122
|
+
throw new error_control_model_1.DyFM_Error({
|
|
123
|
+
...this.getDefaultErrorSettings('decrypt'),
|
|
124
|
+
errorCode: 'DyFM-CRY-ENCRYPTED-TYPE',
|
|
125
|
+
message: `Encrypted data must be a string, but received ${typeof data}. Please provide valid encrypted string data.`
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
if (data.trim().length === 0) {
|
|
129
|
+
throw new error_control_model_1.DyFM_Error({
|
|
130
|
+
...this.getDefaultErrorSettings('decrypt'),
|
|
131
|
+
errorCode: 'DyFM-CRY-ENCRYPTED-EMPTY',
|
|
132
|
+
message: 'Cannot decrypt empty string. Please provide valid encrypted data to decrypt.'
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
if (data.length < 10) {
|
|
136
|
+
throw new error_control_model_1.DyFM_Error({
|
|
137
|
+
...this.getDefaultErrorSettings('decrypt'),
|
|
138
|
+
errorCode: 'DyFM-CRY-ENCRYPTED-TOO-SHORT',
|
|
139
|
+
message: 'Encrypted data appears to be too short to be valid. Please check the encrypted data.'
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
// Check if it looks like valid encrypted data format
|
|
143
|
+
if (!/^[A-Za-z0-9\-_]+$/.test(data)) {
|
|
144
|
+
throw new error_control_model_1.DyFM_Error({
|
|
145
|
+
...this.getDefaultErrorSettings('decrypt'),
|
|
146
|
+
errorCode: 'DyFM-CRY-ENCRYPTED-INVALID-FORMAT',
|
|
147
|
+
message: 'Encrypted data does not appear to be in valid format. Expected URL-safe base64 format.'
|
|
52
148
|
});
|
|
53
149
|
}
|
|
54
150
|
}
|
|
55
151
|
/**
|
|
56
152
|
* Generates a deterministic IV based on the input data and key
|
|
57
|
-
* Uses
|
|
153
|
+
* Uses SHA-256 with proper truncation for maximum stability
|
|
58
154
|
*
|
|
59
155
|
* @important DETERMINISTIC: Same data + key will ALWAYS produce the same IV
|
|
60
156
|
* across all systems and CryptoJS versions for consistent encryption results
|
|
61
157
|
*/
|
|
62
158
|
static generateIV(data, key, config) {
|
|
63
|
-
//
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
159
|
+
// Create a deterministic seed from data and key
|
|
160
|
+
const seed = this.createDeterministicSeed(data, key, 'IV');
|
|
161
|
+
// Use SHA-256 for better stability and consistency
|
|
162
|
+
const hash = CryptoJS.SHA256(seed);
|
|
163
|
+
// Extract exactly 16 bytes (128 bits) for IV
|
|
164
|
+
// Use the first 4 words (4 * 4 = 16 bytes) from the hash
|
|
165
|
+
const ivWords = hash.words.slice(0, 4);
|
|
166
|
+
return CryptoJS.lib.WordArray.create(ivWords);
|
|
68
167
|
}
|
|
69
168
|
/**
|
|
70
169
|
* Generates a deterministic salt based on the input data and key
|
|
71
|
-
* Uses
|
|
170
|
+
* Uses SHA-256 with proper truncation for maximum stability
|
|
72
171
|
*
|
|
73
172
|
* @important DETERMINISTIC: Same data + key will ALWAYS produce the same salt
|
|
74
173
|
* across all systems and CryptoJS versions for consistent encryption results
|
|
75
174
|
*/
|
|
76
175
|
static generateSalt(data, key, config) {
|
|
77
|
-
//
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
176
|
+
// Create a deterministic seed from data and key (different from IV)
|
|
177
|
+
const seed = this.createDeterministicSeed(data, key, 'SALT');
|
|
178
|
+
// Use SHA-256 for better stability and consistency
|
|
179
|
+
const hash = CryptoJS.SHA256(seed);
|
|
180
|
+
// Extract exactly 16 bytes (128 bits) for salt
|
|
181
|
+
// Use the first 4 words (4 * 4 = 16 bytes) from the hash
|
|
182
|
+
const saltWords = hash.words.slice(0, 4);
|
|
183
|
+
return CryptoJS.lib.WordArray.create(saltWords);
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Creates a deterministic seed for IV/salt generation
|
|
187
|
+
* Ensures consistent output across all environments and versions
|
|
188
|
+
*/
|
|
189
|
+
static createDeterministicSeed(data, key, purpose) {
|
|
190
|
+
// Create a consistent seed that includes all relevant factors
|
|
191
|
+
// Order matters: data + key + purpose for consistency
|
|
192
|
+
const seed = `${data}|${key}|${purpose}`;
|
|
193
|
+
return seed;
|
|
82
194
|
}
|
|
83
195
|
/**
|
|
84
196
|
* Derives a key using PBKDF2 with reduced iterations for stability
|
|
@@ -90,11 +202,13 @@ class DyFM_Crypto {
|
|
|
90
202
|
});
|
|
91
203
|
}
|
|
92
204
|
/**
|
|
93
|
-
* Safely serializes data to JSON
|
|
205
|
+
* Safely serializes data to JSON with deterministic ordering
|
|
206
|
+
* Uses regular JSON.stringify but ensures consistency through other means
|
|
94
207
|
*/
|
|
95
208
|
static safeSerialize(data) {
|
|
96
209
|
try {
|
|
97
|
-
//
|
|
210
|
+
// Use regular JSON.stringify for backward compatibility
|
|
211
|
+
// The deterministic behavior comes from the IV/salt generation, not serialization
|
|
98
212
|
return JSON.stringify(data);
|
|
99
213
|
}
|
|
100
214
|
catch (error) {
|
|
@@ -106,10 +220,60 @@ class DyFM_Crypto {
|
|
|
106
220
|
}
|
|
107
221
|
}
|
|
108
222
|
/**
|
|
109
|
-
*
|
|
223
|
+
* Deterministic JSON stringify that produces identical output across environments
|
|
224
|
+
* Uses a hybrid approach: sorts keys for consistency but preserves order for arrays
|
|
225
|
+
*/
|
|
226
|
+
static deterministicStringify(obj) {
|
|
227
|
+
if (obj === null)
|
|
228
|
+
return 'null';
|
|
229
|
+
if (obj === undefined)
|
|
230
|
+
return 'undefined';
|
|
231
|
+
if (typeof obj === 'string')
|
|
232
|
+
return JSON.stringify(obj);
|
|
233
|
+
if (typeof obj === 'number')
|
|
234
|
+
return JSON.stringify(obj);
|
|
235
|
+
if (typeof obj === 'boolean')
|
|
236
|
+
return JSON.stringify(obj);
|
|
237
|
+
if (Array.isArray(obj)) {
|
|
238
|
+
const items = obj.map(item => this.deterministicStringify(item));
|
|
239
|
+
return '[' + items.join(',') + ']';
|
|
240
|
+
}
|
|
241
|
+
if (typeof obj === 'object') {
|
|
242
|
+
// For objects, we need to be more careful about key ordering
|
|
243
|
+
// Use a stable sort that preserves original order when possible
|
|
244
|
+
const keys = Object.keys(obj);
|
|
245
|
+
// Only sort if there are potential ordering issues
|
|
246
|
+
const needsSorting = keys.some((key, index) => {
|
|
247
|
+
if (index === 0)
|
|
248
|
+
return false;
|
|
249
|
+
return key < keys[index - 1];
|
|
250
|
+
});
|
|
251
|
+
const sortedKeys = needsSorting ? [...keys].sort() : keys;
|
|
252
|
+
const pairs = sortedKeys.map(key => {
|
|
253
|
+
const value = this.deterministicStringify(obj[key]);
|
|
254
|
+
return JSON.stringify(key) + ':' + value;
|
|
255
|
+
});
|
|
256
|
+
return '{' + pairs.join(',') + '}';
|
|
257
|
+
}
|
|
258
|
+
// Handle Date objects and other special types
|
|
259
|
+
if (obj instanceof Date) {
|
|
260
|
+
return JSON.stringify(obj.toISOString());
|
|
261
|
+
}
|
|
262
|
+
// Fallback to regular JSON.stringify for other types
|
|
263
|
+
return JSON.stringify(obj);
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Safely deserializes JSON data with enhanced error handling
|
|
110
267
|
*/
|
|
111
268
|
static safeDeserialize(data) {
|
|
112
269
|
try {
|
|
270
|
+
if (!data || data.trim().length === 0) {
|
|
271
|
+
throw new error_control_model_1.DyFM_Error({
|
|
272
|
+
...this.getDefaultErrorSettings('safeDeserialize'),
|
|
273
|
+
errorCode: 'DyFM-CRY-DES-EMPTY',
|
|
274
|
+
message: 'Cannot deserialize empty data. The decrypted data appears to be empty or invalid.'
|
|
275
|
+
});
|
|
276
|
+
}
|
|
113
277
|
//let parsed = JSON.parse(data);
|
|
114
278
|
let parsed = object_util_1.DyFM_Object.failableSafeParseJSON(data);
|
|
115
279
|
// Handle double-stringified JSON (or more levels of stringification)
|
|
@@ -139,10 +303,13 @@ class DyFM_Crypto {
|
|
|
139
303
|
return parsed;
|
|
140
304
|
}
|
|
141
305
|
catch (error) {
|
|
306
|
+
if (error instanceof error_control_model_1.DyFM_Error) {
|
|
307
|
+
throw error;
|
|
308
|
+
}
|
|
142
309
|
throw new error_control_model_1.DyFM_Error({
|
|
143
310
|
...this.getDefaultErrorSettings('safeDeserialize', error),
|
|
144
311
|
errorCode: 'DyFM-CRY-DES',
|
|
145
|
-
message: 'Failed to deserialize data'
|
|
312
|
+
message: 'Failed to deserialize data. The decrypted data may be corrupted or in an unexpected format.'
|
|
146
313
|
});
|
|
147
314
|
}
|
|
148
315
|
}
|
|
@@ -168,7 +335,7 @@ class DyFM_Crypto {
|
|
|
168
335
|
*/
|
|
169
336
|
static encrypt(data, key, config) {
|
|
170
337
|
try {
|
|
171
|
-
this.validateInput(data, key);
|
|
338
|
+
this.validateInput(data, key, 'encrypt');
|
|
172
339
|
const finalConfig = { ...this.DEFAULT_CONFIG, ...config };
|
|
173
340
|
// Convert data to string
|
|
174
341
|
const dataStr = this.safeSerialize(data);
|
|
@@ -183,7 +350,7 @@ class DyFM_Crypto {
|
|
|
183
350
|
mode: CryptoJS.mode.CBC,
|
|
184
351
|
padding: CryptoJS.pad.Pkcs7
|
|
185
352
|
});
|
|
186
|
-
// Combine IV + Salt + Ciphertext
|
|
353
|
+
// Combine IV + Salt + Ciphertext (skip version for backward compatibility)
|
|
187
354
|
const combined = iv.concat(salt).concat(encrypted.ciphertext);
|
|
188
355
|
// Convert to URL-safe base64
|
|
189
356
|
return CryptoJS.enc.Base64.stringify(combined)
|
|
@@ -208,7 +375,7 @@ class DyFM_Crypto {
|
|
|
208
375
|
*/
|
|
209
376
|
static decrypt(encryptedData, key, config) {
|
|
210
377
|
try {
|
|
211
|
-
this.validateInput(encryptedData, key);
|
|
378
|
+
this.validateInput(encryptedData, key, 'decrypt');
|
|
212
379
|
const finalConfig = { ...this.DEFAULT_CONFIG, ...config };
|
|
213
380
|
// Convert from URL-safe base64
|
|
214
381
|
const base64 = encryptedData
|
|
@@ -216,15 +383,24 @@ class DyFM_Crypto {
|
|
|
216
383
|
.replace(/_/g, '/');
|
|
217
384
|
// Parse the combined data
|
|
218
385
|
const combined = CryptoJS.enc.Base64.parse(base64);
|
|
386
|
+
// For now, skip version checking to maintain backward compatibility
|
|
387
|
+
// TODO: Implement proper version checking in future versions
|
|
219
388
|
// Validate minimum length (IV + Salt + minimum ciphertext)
|
|
220
389
|
const minLength = (finalConfig.ivLength + finalConfig.saltLength + 16) / 4; // 16 bytes minimum for ciphertext
|
|
221
390
|
if (combined.words.length < minLength) {
|
|
222
|
-
throw new
|
|
391
|
+
throw new error_control_model_1.DyFM_Error({
|
|
392
|
+
...this.getDefaultErrorSettings('decrypt'),
|
|
393
|
+
errorCode: 'DyFM-CRY-DATA-CORRUPTED',
|
|
394
|
+
message: `Encrypted data is corrupted or incomplete. Expected at least ${minLength * 4} bytes, but received ${combined.sigBytes} bytes.`
|
|
395
|
+
});
|
|
223
396
|
}
|
|
224
|
-
// Extract IV, salt, and ciphertext
|
|
225
|
-
const
|
|
226
|
-
const
|
|
227
|
-
const
|
|
397
|
+
// Extract IV, salt, and ciphertext (skip version for now)
|
|
398
|
+
const ivStart = 0;
|
|
399
|
+
const saltStart = ivStart + finalConfig.ivLength / 4;
|
|
400
|
+
const cipherStart = saltStart + finalConfig.saltLength / 4;
|
|
401
|
+
const iv = CryptoJS.lib.WordArray.create(combined.words.slice(ivStart, saltStart));
|
|
402
|
+
const salt = CryptoJS.lib.WordArray.create(combined.words.slice(saltStart, cipherStart));
|
|
403
|
+
const ciphertext = CryptoJS.lib.WordArray.create(combined.words.slice(cipherStart));
|
|
228
404
|
// Derive key using PBKDF2
|
|
229
405
|
const derivedKey = this.deriveKey(key, salt, finalConfig);
|
|
230
406
|
// Decrypt the data
|
|
@@ -235,12 +411,42 @@ class DyFM_Crypto {
|
|
|
235
411
|
});
|
|
236
412
|
// Parse JSON
|
|
237
413
|
const decryptedStr = decrypted.toString(CryptoJS.enc.Utf8);
|
|
414
|
+
// Check if decryption produced empty result
|
|
415
|
+
if (!decryptedStr || decryptedStr.trim().length === 0) {
|
|
416
|
+
throw new error_control_model_1.DyFM_Error({
|
|
417
|
+
...this.getDefaultErrorSettings('decrypt'),
|
|
418
|
+
errorCode: 'DyFM-CRY-DECRYPT-EMPTY',
|
|
419
|
+
message: 'Decryption failed - the result is empty. This usually means the encryption key is incorrect or the data is corrupted.'
|
|
420
|
+
});
|
|
421
|
+
}
|
|
238
422
|
return this.safeDeserialize(decryptedStr);
|
|
239
423
|
}
|
|
240
424
|
catch (error) {
|
|
425
|
+
// Check if it's already a DyFM_Error
|
|
426
|
+
if (error instanceof error_control_model_1.DyFM_Error) {
|
|
427
|
+
throw error;
|
|
428
|
+
}
|
|
429
|
+
// Handle specific decryption errors
|
|
430
|
+
if (error instanceof Error) {
|
|
431
|
+
if (error.message.includes('Malformed UTF-8')) {
|
|
432
|
+
throw new error_control_model_1.DyFM_Error({
|
|
433
|
+
...this.getDefaultErrorSettings('decrypt', error),
|
|
434
|
+
errorCode: 'DyFM-CRY-DECRYPT-UTF8',
|
|
435
|
+
message: 'Decryption failed - invalid UTF-8 data. This usually means the encryption key is incorrect or the data is corrupted.'
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
if (error.message.includes('Invalid padding')) {
|
|
439
|
+
throw new error_control_model_1.DyFM_Error({
|
|
440
|
+
...this.getDefaultErrorSettings('decrypt', error),
|
|
441
|
+
errorCode: 'DyFM-CRY-DECRYPT-PADDING',
|
|
442
|
+
message: 'Decryption failed - invalid padding. This usually means the encryption key is incorrect or the data is corrupted.'
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
}
|
|
241
446
|
throw new error_control_model_1.DyFM_Error({
|
|
242
447
|
...this.getDefaultErrorSettings('decrypt', error),
|
|
243
448
|
errorCode: 'DyFM-CRY-DRY',
|
|
449
|
+
message: 'Decryption failed. Please verify the encryption key and ensure the encrypted data is valid.'
|
|
244
450
|
});
|
|
245
451
|
}
|
|
246
452
|
}
|
|
@@ -264,15 +470,71 @@ class DyFM_Crypto {
|
|
|
264
470
|
return /^[A-Za-z0-9\-_]+$/.test(encryptedData);
|
|
265
471
|
}
|
|
266
472
|
/**
|
|
267
|
-
*
|
|
473
|
+
* Analyzes encrypted data to help with debugging
|
|
474
|
+
* @param encryptedData The encrypted data to analyze
|
|
475
|
+
* @returns Analysis information about the encrypted data
|
|
476
|
+
*/
|
|
477
|
+
static analyzeEncryptedData(encryptedData) {
|
|
478
|
+
try {
|
|
479
|
+
if (!this.isValidEncryptedData(encryptedData)) {
|
|
480
|
+
return {
|
|
481
|
+
isValid: false,
|
|
482
|
+
dataLength: encryptedData?.length || 0,
|
|
483
|
+
hasValidFormat: false,
|
|
484
|
+
error: 'Invalid format - not URL-safe base64'
|
|
485
|
+
};
|
|
486
|
+
}
|
|
487
|
+
// Convert from URL-safe base64
|
|
488
|
+
const base64 = encryptedData
|
|
489
|
+
.replace(/-/g, '+')
|
|
490
|
+
.replace(/_/g, '/');
|
|
491
|
+
// Parse the combined data
|
|
492
|
+
const combined = CryptoJS.enc.Base64.parse(base64);
|
|
493
|
+
// For now, just check if the data has minimum required length
|
|
494
|
+
const minLength = (16 + 16 + 16) / 4; // IV + Salt + minimum ciphertext
|
|
495
|
+
if (combined.words.length < minLength) {
|
|
496
|
+
return {
|
|
497
|
+
isValid: false,
|
|
498
|
+
dataLength: combined.sigBytes,
|
|
499
|
+
hasValidFormat: false,
|
|
500
|
+
error: 'Data too short to contain valid encrypted data'
|
|
501
|
+
};
|
|
502
|
+
}
|
|
503
|
+
return {
|
|
504
|
+
isValid: true,
|
|
505
|
+
version: 'legacy',
|
|
506
|
+
dataLength: combined.sigBytes,
|
|
507
|
+
hasValidFormat: true,
|
|
508
|
+
error: undefined
|
|
509
|
+
};
|
|
510
|
+
}
|
|
511
|
+
catch (error) {
|
|
512
|
+
return {
|
|
513
|
+
isValid: false,
|
|
514
|
+
dataLength: encryptedData?.length || 0,
|
|
515
|
+
hasValidFormat: false,
|
|
516
|
+
error: `Analysis failed: ${error}`
|
|
517
|
+
};
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
/**
|
|
521
|
+
* Gets default error settings with enhanced debugging information
|
|
268
522
|
*/
|
|
269
523
|
static getDefaultErrorSettings(operation, error) {
|
|
270
|
-
|
|
524
|
+
const baseSettings = {
|
|
271
525
|
status: error?.___status ?? error?.status ?? 401,
|
|
272
526
|
message: `Crypto operation "${operation}" failed`,
|
|
273
527
|
error: error,
|
|
274
528
|
errorCode: 'DyFM-CRY-ERR'
|
|
275
529
|
};
|
|
530
|
+
// Add debugging information for common failure scenarios
|
|
531
|
+
if (operation === 'decrypt') {
|
|
532
|
+
baseSettings.message += '. This usually indicates: 1) Wrong encryption key, 2) Corrupted encrypted data, 3) Version incompatibility, or 4) Data was encrypted with different parameters.';
|
|
533
|
+
}
|
|
534
|
+
else if (operation === 'encrypt') {
|
|
535
|
+
baseSettings.message += '. This usually indicates: 1) Invalid input data, 2) Invalid encryption key, or 3) Serialization failure.';
|
|
536
|
+
}
|
|
537
|
+
return baseSettings;
|
|
276
538
|
}
|
|
277
539
|
}
|
|
278
540
|
exports.DyFM_Crypto = DyFM_Crypto;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.util.js","sourceRoot":"","sources":["../../../../src/_modules/crypto/_collections/crypto.util.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"crypto.util.js","sourceRoot":"","sources":["../../../../src/_modules/crypto/_collections/crypto.util.ts"],"names":[],"mappings":"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"}
|