@futdevpro/fsm-dynamo 1.10.37 → 1.10.38
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/constants/global-settings.const.d.ts.map +1 -1
- package/build/_collections/constants/global-settings.const.js +1 -0
- package/build/_collections/constants/global-settings.const.js.map +1 -1
- package/build/_models/interfaces/environment/global-settings.interface.d.ts +1 -0
- package/build/_models/interfaces/environment/global-settings.interface.d.ts.map +1 -1
- package/build/_modules/crypto/_collections/crypto.util.d.ts +11 -17
- package/build/_modules/crypto/_collections/crypto.util.d.ts.map +1 -1
- package/build/_modules/crypto/_collections/crypto.util.js +74 -58
- package/build/_modules/crypto/_collections/crypto.util.js.map +1 -1
- package/build/_modules/crypto/_collections/crypto.util.spec.js +390 -0
- package/build/_modules/crypto/_collections/crypto.util.spec.js.map +1 -1
- package/futdevpro-fsm-dynamo-01.10.38.tgz +0 -0
- package/package.json +1 -1
- package/src/_collections/constants/global-settings.const.ts +2 -0
- package/src/_models/interfaces/environment/global-settings.interface.ts +2 -0
- package/src/_modules/crypto/_collections/crypto.util.spec.ts +428 -0
- package/src/_modules/crypto/_collections/crypto.util.ts +86 -52
- package/futdevpro-fsm-dynamo-01.10.37.tgz +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-settings.const.d.ts","sourceRoot":"","sources":["../../../src/_collections/constants/global-settings.const.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACrB,MAAM,gEAAgE,CAAC;AAIxE,eAAO,MAAM,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"global-settings.const.d.ts","sourceRoot":"","sources":["../../../src/_collections/constants/global-settings.const.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACrB,MAAM,gEAAgE,CAAC;AAIxE,eAAO,MAAM,oBAAoB,EAAE,oBAMlC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-settings.const.js","sourceRoot":"","sources":["../../../src/_collections/constants/global-settings.const.ts"],"names":[],"mappings":";;;AAQa,QAAA,oBAAoB,GAAyB;IACxD,OAAO,EAAE,MAAM;IAEf,YAAY,EAAE,EAAE;CACjB,CAAC"}
|
|
1
|
+
{"version":3,"file":"global-settings.const.js","sourceRoot":"","sources":["../../../src/_collections/constants/global-settings.const.ts"],"names":[],"mappings":";;;AAQa,QAAA,oBAAoB,GAAyB;IACxD,mBAAmB,EAAE,qBAAqB;IAE1C,OAAO,EAAE,MAAM;IAEf,YAAY,EAAE,EAAE;CACjB,CAAC"}
|
|
@@ -7,6 +7,7 @@ import { DyFM_GlobalLog_Settings } from './global-log-settings.interface';
|
|
|
7
7
|
*
|
|
8
8
|
*/
|
|
9
9
|
export interface DyFM_Global_Settings {
|
|
10
|
+
systemShortCodeName: string;
|
|
10
11
|
/**
|
|
11
12
|
* this will be used as the main baseUrl for the application,
|
|
12
13
|
* this is not required, but we suggest to use at least a '/api' as base route
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-settings.interface.d.ts","sourceRoot":"","sources":["../../../../src/_models/interfaces/environment/global-settings.interface.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE1E;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,YAAY,EAAE,uBAAuB,CAAC;CACvC"}
|
|
1
|
+
{"version":3,"file":"global-settings.interface.d.ts","sourceRoot":"","sources":["../../../../src/_models/interfaces/environment/global-settings.interface.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE1E;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,YAAY,EAAE,uBAAuB,CAAC;CACvC"}
|
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Error codes for crypto operations
|
|
3
3
|
*/
|
|
4
|
-
export declare enum CryptoErrorCode {
|
|
5
|
-
INVALID_INPUT = "DyFM-CRY-EA0",
|
|
6
|
-
DECRYPTION_FAILED = "DyFM-CRY-DRY",
|
|
7
|
-
ENCRYPTION_FAILED = "DyFM-CRY-ENF",
|
|
8
|
-
INVALID_KEY = "DyFM-CRY-IKY",
|
|
9
|
-
INVALID_DATA = "DyFM-CRY-IDT"
|
|
10
|
-
}
|
|
11
4
|
/**
|
|
12
5
|
* Configuration options for encryption/decryption
|
|
13
6
|
*/
|
|
@@ -23,35 +16,36 @@ export interface CryptoConfig {
|
|
|
23
16
|
*/
|
|
24
17
|
export declare class DyFM_Crypto {
|
|
25
18
|
private static readonly DEFAULT_CONFIG;
|
|
19
|
+
private static readonly defaultErrorUserMsg;
|
|
26
20
|
/**
|
|
27
21
|
* Validates the input data and key
|
|
28
22
|
* @throws {DyFM_Error} if validation fails
|
|
29
23
|
*/
|
|
30
24
|
private static validateInput;
|
|
31
25
|
/**
|
|
32
|
-
* Generates a
|
|
33
|
-
|
|
26
|
+
* Generates a deterministic IV based on the input data and key
|
|
27
|
+
*/
|
|
28
|
+
private static generateIV;
|
|
29
|
+
/**
|
|
30
|
+
* Generates a deterministic salt based on the input data and key
|
|
34
31
|
*/
|
|
35
|
-
private static
|
|
32
|
+
private static generateSalt;
|
|
36
33
|
/**
|
|
37
34
|
* Derives a key using PBKDF2
|
|
38
|
-
* @param key The input key
|
|
39
|
-
* @param salt The salt to use
|
|
40
|
-
* @param config Configuration options
|
|
41
35
|
*/
|
|
42
36
|
private static deriveKey;
|
|
43
37
|
/**
|
|
44
38
|
* Safely serializes data to JSON
|
|
45
|
-
* @param data The data to serialize
|
|
46
|
-
* @returns Serialized data as string
|
|
47
39
|
*/
|
|
48
40
|
private static safeSerialize;
|
|
49
41
|
/**
|
|
50
42
|
* Safely deserializes JSON data
|
|
51
|
-
* @param data The JSON string to deserialize
|
|
52
|
-
* @returns Deserialized data
|
|
53
43
|
*/
|
|
54
44
|
private static safeDeserialize;
|
|
45
|
+
/**
|
|
46
|
+
* Gets default error settings
|
|
47
|
+
*/
|
|
48
|
+
private static getDefaultErrorSettings;
|
|
55
49
|
/**
|
|
56
50
|
* Encrypts data using AES-256-CBC
|
|
57
51
|
* @param data The data to encrypt
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/crypto/_collections/crypto.util.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"crypto.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/crypto/_collections/crypto.util.ts"],"names":[],"mappings":"AAKA;;GAEG;AASH;;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;AAED;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAKpC;IACF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAEY;IAMvD;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAkB5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAKzB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAK3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;IAOxB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAY5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IA6B9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAQtC;;;;;;;OAOG;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;IAwD/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;CAM5D"}
|
|
@@ -1,31 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DyFM_Crypto =
|
|
3
|
+
exports.DyFM_Crypto = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const CryptoJS = tslib_1.__importStar(require("crypto-js"));
|
|
6
6
|
const error_control_model_1 = require("../../../_models/control-models/error.control-model");
|
|
7
|
-
/**
|
|
8
|
-
* Error codes for crypto operations
|
|
9
|
-
*/
|
|
10
|
-
var CryptoErrorCode;
|
|
11
|
-
(function (CryptoErrorCode) {
|
|
12
|
-
CryptoErrorCode["INVALID_INPUT"] = "DyFM-CRY-EA0";
|
|
13
|
-
CryptoErrorCode["DECRYPTION_FAILED"] = "DyFM-CRY-DRY";
|
|
14
|
-
CryptoErrorCode["ENCRYPTION_FAILED"] = "DyFM-CRY-ENF";
|
|
15
|
-
CryptoErrorCode["INVALID_KEY"] = "DyFM-CRY-IKY";
|
|
16
|
-
CryptoErrorCode["INVALID_DATA"] = "DyFM-CRY-IDT";
|
|
17
|
-
})(CryptoErrorCode || (exports.CryptoErrorCode = CryptoErrorCode = {}));
|
|
18
7
|
/**
|
|
19
8
|
* A utility class for secure encryption and decryption of data
|
|
20
9
|
* Uses AES-256-CBC with PBKDF2 key derivation
|
|
21
10
|
*/
|
|
22
11
|
class DyFM_Crypto {
|
|
23
12
|
static DEFAULT_CONFIG = {
|
|
24
|
-
ivLength: 16,
|
|
25
|
-
saltLength: 16,
|
|
13
|
+
ivLength: 16, // 128 bits
|
|
14
|
+
saltLength: 16, // 128 bits
|
|
26
15
|
keyIterations: 10000,
|
|
27
|
-
keySize: 256
|
|
16
|
+
keySize: 8 // 256 bits (8 * 32)
|
|
28
17
|
};
|
|
18
|
+
static defaultErrorUserMsg = `We encountered an unhandled Authentication Error, ` +
|
|
19
|
+
`\nplease contact the responsible development team.`;
|
|
29
20
|
// Tömör: kb. 60–80 karakteres token, nem 200+
|
|
30
21
|
// Nem szabványos: nehéz visszafejteni
|
|
31
22
|
// Használható cookie, header, URL-ben
|
|
@@ -34,33 +25,37 @@ class DyFM_Crypto {
|
|
|
34
25
|
* @throws {DyFM_Error} if validation fails
|
|
35
26
|
*/
|
|
36
27
|
static validateInput(data, key) {
|
|
37
|
-
if (
|
|
28
|
+
if (!key || typeof key !== 'string' || key.trim().length === 0) {
|
|
38
29
|
throw new error_control_model_1.DyFM_Error({
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
30
|
+
...this.getDefaultErrorSettings('validateInput'),
|
|
31
|
+
errorCode: 'DyFM-CRY-IKY',
|
|
32
|
+
message: 'Invalid encryption key'
|
|
42
33
|
});
|
|
43
34
|
}
|
|
44
|
-
if (
|
|
35
|
+
if (data === undefined || data === null) {
|
|
45
36
|
throw new error_control_model_1.DyFM_Error({
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
37
|
+
...this.getDefaultErrorSettings('validateInput'),
|
|
38
|
+
errorCode: 'DyFM-CRY-IDT',
|
|
39
|
+
message: 'Invalid data to encrypt/decrypt'
|
|
49
40
|
});
|
|
50
41
|
}
|
|
51
42
|
}
|
|
52
43
|
/**
|
|
53
|
-
* Generates a
|
|
54
|
-
* @param length Length of the padding in bytes
|
|
44
|
+
* Generates a deterministic IV based on the input data and key
|
|
55
45
|
*/
|
|
56
|
-
static
|
|
57
|
-
|
|
46
|
+
static generateIV(data, key, config) {
|
|
47
|
+
const hash = CryptoJS.SHA256(data + key);
|
|
48
|
+
return CryptoJS.lib.WordArray.create(hash.words.slice(0, config.ivLength / 4));
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Generates a deterministic salt based on the input data and key
|
|
52
|
+
*/
|
|
53
|
+
static generateSalt(data, key, config) {
|
|
54
|
+
const hash = CryptoJS.SHA256(key + data);
|
|
55
|
+
return CryptoJS.lib.WordArray.create(hash.words.slice(0, config.saltLength / 4));
|
|
58
56
|
}
|
|
59
57
|
/**
|
|
60
58
|
* Derives a key using PBKDF2
|
|
61
|
-
* @param key The input key
|
|
62
|
-
* @param salt The salt to use
|
|
63
|
-
* @param config Configuration options
|
|
64
59
|
*/
|
|
65
60
|
static deriveKey(key, salt, config) {
|
|
66
61
|
return CryptoJS.PBKDF2(key, salt, {
|
|
@@ -70,8 +65,6 @@ class DyFM_Crypto {
|
|
|
70
65
|
}
|
|
71
66
|
/**
|
|
72
67
|
* Safely serializes data to JSON
|
|
73
|
-
* @param data The data to serialize
|
|
74
|
-
* @returns Serialized data as string
|
|
75
68
|
*/
|
|
76
69
|
static safeSerialize(data) {
|
|
77
70
|
try {
|
|
@@ -79,29 +72,52 @@ class DyFM_Crypto {
|
|
|
79
72
|
}
|
|
80
73
|
catch (error) {
|
|
81
74
|
throw new error_control_model_1.DyFM_Error({
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
75
|
+
...this.getDefaultErrorSettings('safeSerialize', error),
|
|
76
|
+
errorCode: 'DyFM-CRY-SER',
|
|
77
|
+
message: 'Failed to serialize data'
|
|
85
78
|
});
|
|
86
79
|
}
|
|
87
80
|
}
|
|
88
81
|
/**
|
|
89
82
|
* Safely deserializes JSON data
|
|
90
|
-
* @param data The JSON string to deserialize
|
|
91
|
-
* @returns Deserialized data
|
|
92
83
|
*/
|
|
93
84
|
static safeDeserialize(data) {
|
|
94
85
|
try {
|
|
95
|
-
|
|
86
|
+
let parsed = JSON.parse(data);
|
|
87
|
+
// Handle double-stringified JSON
|
|
88
|
+
if (typeof parsed === 'string') {
|
|
89
|
+
try {
|
|
90
|
+
parsed = JSON.parse(parsed);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
// If second parse fails, return the string as is
|
|
94
|
+
return parsed;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Handle primitive values
|
|
98
|
+
if (typeof parsed === 'string' || typeof parsed === 'number' || typeof parsed === 'boolean') {
|
|
99
|
+
return parsed;
|
|
100
|
+
}
|
|
101
|
+
return parsed;
|
|
96
102
|
}
|
|
97
103
|
catch (error) {
|
|
98
104
|
throw new error_control_model_1.DyFM_Error({
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
105
|
+
...this.getDefaultErrorSettings('safeDeserialize', error),
|
|
106
|
+
errorCode: 'DyFM-CRY-DES',
|
|
107
|
+
message: 'Failed to deserialize data'
|
|
102
108
|
});
|
|
103
109
|
}
|
|
104
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* Gets default error settings
|
|
113
|
+
*/
|
|
114
|
+
static getDefaultErrorSettings(operation, error) {
|
|
115
|
+
return {
|
|
116
|
+
message: `Crypto operation '${operation}' failed`,
|
|
117
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
118
|
+
errorCode: 'DyFM-CRY-ERR'
|
|
119
|
+
};
|
|
120
|
+
}
|
|
105
121
|
/**
|
|
106
122
|
* Encrypts data using AES-256-CBC
|
|
107
123
|
* @param data The data to encrypt
|
|
@@ -114,17 +130,15 @@ class DyFM_Crypto {
|
|
|
114
130
|
try {
|
|
115
131
|
this.validateInput(data, key);
|
|
116
132
|
const finalConfig = { ...this.DEFAULT_CONFIG, ...config };
|
|
117
|
-
//
|
|
118
|
-
const
|
|
119
|
-
|
|
133
|
+
// Convert data to string
|
|
134
|
+
const dataStr = this.safeSerialize(data);
|
|
135
|
+
// Generate deterministic IV and salt based on data and key
|
|
136
|
+
const iv = this.generateIV(dataStr, key, finalConfig);
|
|
137
|
+
const salt = this.generateSalt(dataStr, key, finalConfig);
|
|
120
138
|
// Derive key using PBKDF2
|
|
121
139
|
const derivedKey = this.deriveKey(key, salt, finalConfig);
|
|
122
|
-
// Convert data to string and add random padding
|
|
123
|
-
const dataStr = this.safeSerialize(data);
|
|
124
|
-
const padding = this.generatePadding(16);
|
|
125
|
-
const paddedData = padding + dataStr;
|
|
126
140
|
// Encrypt the data
|
|
127
|
-
const encrypted = CryptoJS.AES.encrypt(
|
|
141
|
+
const encrypted = CryptoJS.AES.encrypt(dataStr, derivedKey, {
|
|
128
142
|
iv: iv,
|
|
129
143
|
mode: CryptoJS.mode.CBC,
|
|
130
144
|
padding: CryptoJS.pad.Pkcs7
|
|
@@ -139,9 +153,8 @@ class DyFM_Crypto {
|
|
|
139
153
|
}
|
|
140
154
|
catch (error) {
|
|
141
155
|
throw new error_control_model_1.DyFM_Error({
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
errorCode: CryptoErrorCode.ENCRYPTION_FAILED
|
|
156
|
+
...this.getDefaultErrorSettings('encrypt', error),
|
|
157
|
+
errorCode: 'DyFM-CRY-ENC',
|
|
145
158
|
});
|
|
146
159
|
}
|
|
147
160
|
}
|
|
@@ -163,6 +176,11 @@ class DyFM_Crypto {
|
|
|
163
176
|
.replace(/_/g, '/');
|
|
164
177
|
// Parse the combined data
|
|
165
178
|
const combined = CryptoJS.enc.Base64.parse(base64);
|
|
179
|
+
// Validate minimum length (IV + Salt + minimum ciphertext)
|
|
180
|
+
const minLength = (finalConfig.ivLength + finalConfig.saltLength + 16) / 4; // 16 bytes minimum for ciphertext
|
|
181
|
+
if (combined.words.length < minLength) {
|
|
182
|
+
throw new Error('Invalid encrypted data length');
|
|
183
|
+
}
|
|
166
184
|
// Extract IV, salt, and ciphertext
|
|
167
185
|
const iv = CryptoJS.lib.WordArray.create(combined.words.slice(0, finalConfig.ivLength / 4));
|
|
168
186
|
const salt = CryptoJS.lib.WordArray.create(combined.words.slice(finalConfig.ivLength / 4, (finalConfig.ivLength + finalConfig.saltLength) / 4));
|
|
@@ -175,16 +193,14 @@ class DyFM_Crypto {
|
|
|
175
193
|
mode: CryptoJS.mode.CBC,
|
|
176
194
|
padding: CryptoJS.pad.Pkcs7
|
|
177
195
|
});
|
|
178
|
-
//
|
|
196
|
+
// Parse JSON
|
|
179
197
|
const decryptedStr = decrypted.toString(CryptoJS.enc.Utf8);
|
|
180
|
-
|
|
181
|
-
return this.safeDeserialize(jsonStr);
|
|
198
|
+
return this.safeDeserialize(decryptedStr);
|
|
182
199
|
}
|
|
183
200
|
catch (error) {
|
|
184
201
|
throw new error_control_model_1.DyFM_Error({
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
errorCode: CryptoErrorCode.DECRYPTION_FAILED
|
|
202
|
+
...this.getDefaultErrorSettings('decrypt', error),
|
|
203
|
+
errorCode: 'DyFM-CRY-DRY',
|
|
188
204
|
});
|
|
189
205
|
}
|
|
190
206
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.util.js","sourceRoot":"","sources":["../../../../src/_modules/crypto/_collections/crypto.util.ts"],"names":[],"mappings":";;;;AAAA,4DAAsC;AAEtC,
|
|
1
|
+
{"version":3,"file":"crypto.util.js","sourceRoot":"","sources":["../../../../src/_modules/crypto/_collections/crypto.util.ts"],"names":[],"mappings":"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"}
|