@archi-code/crypto-tools 1.0.0-alpha.1

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.
Files changed (75) hide show
  1. package/dist/cjs/encrypt/cryptoEngine.d.ts +25 -0
  2. package/dist/cjs/encrypt/cryptoEngine.js +136 -0
  3. package/dist/cjs/encrypt/cryptoEngine.js.map +1 -0
  4. package/dist/cjs/hash/client/sodium-hasher.d.ts +8 -0
  5. package/dist/cjs/hash/client/sodium-hasher.js +44 -0
  6. package/dist/cjs/hash/client/sodium-hasher.js.map +1 -0
  7. package/dist/cjs/hash/hasher-factory.d.ts +4 -0
  8. package/dist/cjs/hash/hasher-factory.js +17 -0
  9. package/dist/cjs/hash/hasher-factory.js.map +1 -0
  10. package/dist/cjs/hash/hasher.d.ts +7 -0
  11. package/dist/cjs/hash/hasher.js +13 -0
  12. package/dist/cjs/hash/hasher.js.map +1 -0
  13. package/dist/cjs/index.d.ts +9 -0
  14. package/dist/cjs/index.js +26 -0
  15. package/dist/cjs/index.js.map +1 -0
  16. package/dist/cjs/password-encryptor/client/bcrypt-password-encryptor.d.ts +9 -0
  17. package/dist/cjs/password-encryptor/client/bcrypt-password-encryptor.js +34 -0
  18. package/dist/cjs/password-encryptor/client/bcrypt-password-encryptor.js.map +1 -0
  19. package/dist/cjs/password-encryptor/client/sodium-password-encryptor.d.ts +6 -0
  20. package/dist/cjs/password-encryptor/client/sodium-password-encryptor.js +38 -0
  21. package/dist/cjs/password-encryptor/client/sodium-password-encryptor.js.map +1 -0
  22. package/dist/cjs/password-encryptor/password-encryptor-factory.d.ts +4 -0
  23. package/dist/cjs/password-encryptor/password-encryptor-factory.js +21 -0
  24. package/dist/cjs/password-encryptor/password-encryptor-factory.js.map +1 -0
  25. package/dist/cjs/password-encryptor/password-encryptor.d.ts +6 -0
  26. package/dist/cjs/password-encryptor/password-encryptor.js +13 -0
  27. package/dist/cjs/password-encryptor/password-encryptor.js.map +1 -0
  28. package/dist/cjs/sign/jwt-data-signer.d.ts +11 -0
  29. package/dist/cjs/sign/jwt-data-signer.js +50 -0
  30. package/dist/cjs/sign/jwt-data-signer.js.map +1 -0
  31. package/dist/cjs/sodium-initializer.d.ts +6 -0
  32. package/dist/cjs/sodium-initializer.js +30 -0
  33. package/dist/cjs/sodium-initializer.js.map +1 -0
  34. package/dist/cjs/symmetric-encryption.d.ts +11 -0
  35. package/dist/cjs/symmetric-encryption.js +79 -0
  36. package/dist/cjs/symmetric-encryption.js.map +1 -0
  37. package/dist/esm/encrypt/cryptoEngine.d.ts +25 -0
  38. package/dist/esm/encrypt/cryptoEngine.js +132 -0
  39. package/dist/esm/encrypt/cryptoEngine.js.map +1 -0
  40. package/dist/esm/hash/client/sodium-hasher.d.ts +8 -0
  41. package/dist/esm/hash/client/sodium-hasher.js +40 -0
  42. package/dist/esm/hash/client/sodium-hasher.js.map +1 -0
  43. package/dist/esm/hash/hasher-factory.d.ts +4 -0
  44. package/dist/esm/hash/hasher-factory.js +13 -0
  45. package/dist/esm/hash/hasher-factory.js.map +1 -0
  46. package/dist/esm/hash/hasher.d.ts +7 -0
  47. package/dist/esm/hash/hasher.js +9 -0
  48. package/dist/esm/hash/hasher.js.map +1 -0
  49. package/dist/esm/index.d.ts +9 -0
  50. package/dist/esm/index.js +10 -0
  51. package/dist/esm/index.js.map +1 -0
  52. package/dist/esm/password-encryptor/client/bcrypt-password-encryptor.d.ts +9 -0
  53. package/dist/esm/password-encryptor/client/bcrypt-password-encryptor.js +30 -0
  54. package/dist/esm/password-encryptor/client/bcrypt-password-encryptor.js.map +1 -0
  55. package/dist/esm/password-encryptor/client/sodium-password-encryptor.d.ts +6 -0
  56. package/dist/esm/password-encryptor/client/sodium-password-encryptor.js +34 -0
  57. package/dist/esm/password-encryptor/client/sodium-password-encryptor.js.map +1 -0
  58. package/dist/esm/password-encryptor/password-encryptor-factory.d.ts +4 -0
  59. package/dist/esm/password-encryptor/password-encryptor-factory.js +17 -0
  60. package/dist/esm/password-encryptor/password-encryptor-factory.js.map +1 -0
  61. package/dist/esm/password-encryptor/password-encryptor.d.ts +6 -0
  62. package/dist/esm/password-encryptor/password-encryptor.js +9 -0
  63. package/dist/esm/password-encryptor/password-encryptor.js.map +1 -0
  64. package/dist/esm/sign/jwt-data-signer.d.ts +11 -0
  65. package/dist/esm/sign/jwt-data-signer.js +46 -0
  66. package/dist/esm/sign/jwt-data-signer.js.map +1 -0
  67. package/dist/esm/sodium-initializer.d.ts +6 -0
  68. package/dist/esm/sodium-initializer.js +26 -0
  69. package/dist/esm/sodium-initializer.js.map +1 -0
  70. package/dist/esm/symmetric-encryption.d.ts +11 -0
  71. package/dist/esm/symmetric-encryption.js +75 -0
  72. package/dist/esm/symmetric-encryption.js.map +1 -0
  73. package/dist/tsconfig.cjs.tsbuildinfo +1 -0
  74. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  75. package/package.json +93 -0
@@ -0,0 +1,25 @@
1
+ export declare class CryptoEngine {
2
+ private CHARACTER_SET;
3
+ private CHARACTER_SET_LENGTH;
4
+ private plugboardMapping;
5
+ private reflectorMap;
6
+ private wheels;
7
+ private initialWheelPositions;
8
+ constructor(seedKey: string);
9
+ private toBase64;
10
+ private fromBase64;
11
+ resetWheels(): void;
12
+ private charToIndex;
13
+ private indexToChar;
14
+ private keyToSeed;
15
+ private createRandom;
16
+ private createPlugboardMapping;
17
+ private createReflectorMap;
18
+ private createWheels;
19
+ private advanceWheels;
20
+ private forwardThroughWheel;
21
+ private backwardThroughWheel;
22
+ encode(message: string): string;
23
+ decode(message: string): string;
24
+ private transform;
25
+ }
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CryptoEngine = void 0;
4
+ class CryptoEngine {
5
+ constructor(seedKey) {
6
+ this.CHARACTER_SET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
7
+ this.CHARACTER_SET_LENGTH = this.CHARACTER_SET.length;
8
+ const encodedSeedKey = this.toBase64(seedKey);
9
+ this.plugboardMapping = this.createPlugboardMapping(encodedSeedKey);
10
+ this.reflectorMap = this.createReflectorMap(encodedSeedKey);
11
+ this.wheels = this.createWheels(encodedSeedKey);
12
+ this.initialWheelPositions = this.wheels.map((wheel) => wheel.position);
13
+ }
14
+ toBase64(input) {
15
+ return Buffer.from(input, 'utf-8').toString('base64');
16
+ }
17
+ fromBase64(input) {
18
+ return Buffer.from(input, 'base64').toString('utf-8');
19
+ }
20
+ resetWheels() {
21
+ this.wheels.forEach((wheel, index) => {
22
+ wheel.position = this.initialWheelPositions[index];
23
+ });
24
+ }
25
+ charToIndex(char) {
26
+ return this.CHARACTER_SET.indexOf(char);
27
+ }
28
+ indexToChar(index) {
29
+ return this.CHARACTER_SET[index % this.CHARACTER_SET_LENGTH];
30
+ }
31
+ keyToSeed(key) {
32
+ let seed = 0;
33
+ for (const char of key) {
34
+ seed = (seed * 31 + char.charCodeAt(0)) % 233280;
35
+ }
36
+ return seed;
37
+ }
38
+ createRandom(seed) {
39
+ return () => {
40
+ seed = (seed * 9301 + 49297) % 233280;
41
+ return seed / 233280;
42
+ };
43
+ }
44
+ createPlugboardMapping(seedKey) {
45
+ const mapping = new Map();
46
+ const random = this.createRandom(this.keyToSeed(seedKey));
47
+ const indices = Array.from({ length: this.CHARACTER_SET_LENGTH }, (_, i) => i);
48
+ while (indices.length > 1) {
49
+ const a = indices.splice(Math.floor(random() * indices.length), 1)[0];
50
+ const b = indices.splice(Math.floor(random() * indices.length), 1)[0];
51
+ mapping.set(a, b);
52
+ mapping.set(b, a);
53
+ }
54
+ return mapping;
55
+ }
56
+ createReflectorMap(seedKey) {
57
+ const random = this.createRandom(this.keyToSeed(seedKey + '_reflector'));
58
+ const indices = Array.from({ length: this.CHARACTER_SET_LENGTH }, (_, i) => i);
59
+ const mapping = new Array(this.CHARACTER_SET_LENGTH);
60
+ while (indices.length > 1) {
61
+ const a = indices.splice(Math.floor(random() * indices.length), 1)[0];
62
+ const b = indices.splice(Math.floor(random() * indices.length), 1)[0];
63
+ mapping[a] = b;
64
+ mapping[b] = a;
65
+ }
66
+ if (indices.length === 1) {
67
+ const remaining = indices[0];
68
+ mapping[remaining] = remaining;
69
+ }
70
+ return mapping;
71
+ }
72
+ createWheels(seedKey) {
73
+ const firstNumberInKey = parseInt(seedKey.match(/\d+/)?.[0] || '0', 10);
74
+ const numWheels = firstNumberInKey + 3;
75
+ return Array.from({ length: numWheels }, (_, i) => {
76
+ const random = this.createRandom(this.keyToSeed(seedKey + i));
77
+ const mapping = Array.from({ length: this.CHARACTER_SET_LENGTH }, (_item, j) => j).sort(() => random() - 0.5);
78
+ const turnover = Math.floor(random() * this.CHARACTER_SET_LENGTH);
79
+ const position = Math.floor(random() * this.CHARACTER_SET_LENGTH);
80
+ return { mapping, turnover, position };
81
+ });
82
+ }
83
+ advanceWheels() {
84
+ for (let i = this.wheels.length - 1; i >= 0; i--) {
85
+ if (i === this.wheels.length - 1 ||
86
+ this.wheels[i + 1].position === this.wheels[i + 1].turnover) {
87
+ this.wheels[i].position = (this.wheels[i].position + 1) % this.CHARACTER_SET_LENGTH;
88
+ }
89
+ else {
90
+ break;
91
+ }
92
+ }
93
+ }
94
+ forwardThroughWheel(index, wheel) {
95
+ const shiftedIndex = (index + wheel.position) % this.CHARACTER_SET_LENGTH;
96
+ return ((wheel.mapping[shiftedIndex] - wheel.position + this.CHARACTER_SET_LENGTH) %
97
+ this.CHARACTER_SET_LENGTH);
98
+ }
99
+ backwardThroughWheel(index, wheel) {
100
+ return ((wheel.mapping.indexOf((index + wheel.position) % this.CHARACTER_SET_LENGTH) -
101
+ wheel.position +
102
+ this.CHARACTER_SET_LENGTH) %
103
+ this.CHARACTER_SET_LENGTH);
104
+ }
105
+ encode(message) {
106
+ this.resetWheels();
107
+ return this.transform(this.toBase64(message));
108
+ }
109
+ decode(message) {
110
+ this.resetWheels();
111
+ return this.fromBase64(this.transform(message));
112
+ }
113
+ transform(message) {
114
+ return message
115
+ .split('')
116
+ .map((char) => {
117
+ if (!this.CHARACTER_SET.includes(char))
118
+ return char;
119
+ let index = this.charToIndex(char);
120
+ this.advanceWheels();
121
+ index = this.plugboardMapping.get(index) ?? index;
122
+ for (const wheel of this.wheels) {
123
+ index = this.forwardThroughWheel(index, wheel);
124
+ }
125
+ index = this.reflectorMap[index];
126
+ for (const wheel of [...this.wheels].reverse()) {
127
+ index = this.backwardThroughWheel(index, wheel);
128
+ }
129
+ index = this.plugboardMapping.get(index) ?? index;
130
+ return this.indexToChar(index);
131
+ })
132
+ .join('');
133
+ }
134
+ }
135
+ exports.CryptoEngine = CryptoEngine;
136
+ //# sourceMappingURL=cryptoEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cryptoEngine.js","sourceRoot":"","sources":["../../../src/encrypt/cryptoEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Hasher } from '../hasher';
2
+ export declare class SodiumHasher extends Hasher {
3
+ constructor(saltLength?: number);
4
+ private hash;
5
+ blake2b(text: string): Promise<string>;
6
+ sha256(text: string): Promise<string>;
7
+ sha512(text: string): Promise<string>;
8
+ }
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SodiumHasher = void 0;
4
+ const hasher_1 = require("../hasher");
5
+ const sodium_initializer_1 = require("../../sodium-initializer");
6
+ class SodiumHasher extends hasher_1.Hasher {
7
+ constructor(saltLength = 16) {
8
+ super(saltLength);
9
+ }
10
+ async hash(text, algorithm) {
11
+ const sodium = await sodium_initializer_1.SodiumInitializer.getSodium();
12
+ if (this.saltToUse.every((byte) => byte === 0)) {
13
+ this.saltToUse = sodium.randombytes_buf(this.saltToUse.length);
14
+ }
15
+ const textBytes = sodium.from_string(text);
16
+ const combined = new Uint8Array(textBytes.length + this.saltToUse.length);
17
+ combined.set(textBytes);
18
+ combined.set(this.saltToUse, textBytes.length);
19
+ let hash;
20
+ switch (algorithm) {
21
+ case 'sha256':
22
+ hash = sodium.crypto_hash_sha256(combined);
23
+ break;
24
+ case 'sha512':
25
+ hash = sodium.crypto_hash_sha512(combined);
26
+ break;
27
+ case 'blake2b':
28
+ hash = sodium.crypto_generichash(sodium.crypto_generichash_BYTES, combined);
29
+ break;
30
+ }
31
+ return sodium.to_hex(hash);
32
+ }
33
+ async blake2b(text) {
34
+ return await this.hash(text, 'blake2b');
35
+ }
36
+ async sha256(text) {
37
+ return await this.hash(text, 'sha256');
38
+ }
39
+ async sha512(text) {
40
+ return await this.hash(text, 'sha512');
41
+ }
42
+ }
43
+ exports.SodiumHasher = SodiumHasher;
44
+ //# sourceMappingURL=sodium-hasher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sodium-hasher.js","sourceRoot":"","sources":["../../../../src/hash/client/sodium-hasher.ts"],"names":[],"mappings":";;;AAAA,sCAAmC;AACnC,iEAA6D;AAE7D,MAAa,YAAa,SAAQ,eAAM;IACtC,YAAY,UAAU,GAAG,EAAE;QACzB,KAAK,CAAC,UAAU,CAAC,CAAC;IACpB,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,SAA0C;QACzE,MAAM,MAAM,GAAG,MAAM,sCAAiB,CAAC,SAAS,EAAE,CAAC;QAGnD,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACjE,CAAC;QAGD,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1E,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxB,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAG/C,IAAI,IAAgB,CAAC;QACrB,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,QAAQ;gBACX,IAAI,GAAG,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;gBAC3C,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,GAAG,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;gBAC3C,MAAM;YACR,KAAK,SAAS;gBACZ,IAAI,GAAG,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC;gBAC5E,MAAM;QACV,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY;QACxB,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY;QACvB,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY;QACvB,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC;CACF;AA9CD,oCA8CC"}
@@ -0,0 +1,4 @@
1
+ import { Hasher } from './hasher';
2
+ export declare class HasherFactory {
3
+ static create(algorithm: string, saltLength?: number): Hasher;
4
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HasherFactory = void 0;
4
+ const sodium_hasher_1 = require("./client/sodium-hasher");
5
+ class HasherFactory {
6
+ static create(algorithm, saltLength = 16) {
7
+ switch (algorithm) {
8
+ case sodium_hasher_1.SodiumHasher.name:
9
+ return new sodium_hasher_1.SodiumHasher(saltLength);
10
+ break;
11
+ default:
12
+ throw new Error(`Unsupported algorithm: ${algorithm}`);
13
+ }
14
+ }
15
+ }
16
+ exports.HasherFactory = HasherFactory;
17
+ //# sourceMappingURL=hasher-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hasher-factory.js","sourceRoot":"","sources":["../../../src/hash/hasher-factory.ts"],"names":[],"mappings":";;;AAAA,0DAAsD;AAGtD,MAAa,aAAa;IACxB,MAAM,CAAC,MAAM,CAAC,SAAiB,EAAE,UAAU,GAAG,EAAE;QAC9C,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,4BAAY,CAAC,IAAI;gBACpB,OAAO,IAAI,4BAAY,CAAC,UAAU,CAAC,CAAC;gBACpC,MAAM;YACR;gBACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;CACF;AAVD,sCAUC"}
@@ -0,0 +1,7 @@
1
+ export declare abstract class Hasher {
2
+ protected saltToUse: Uint8Array;
3
+ constructor(saltLength?: number);
4
+ abstract sha256(text: string): Promise<string>;
5
+ abstract sha512(text: string): Promise<string>;
6
+ abstract blake2b(text: string): Promise<string>;
7
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Hasher = void 0;
4
+ class Hasher {
5
+ constructor(saltLength = 16) {
6
+ if (saltLength <= 0) {
7
+ throw new Error('Salt length must be a positive number.');
8
+ }
9
+ this.saltToUse = new Uint8Array(saltLength);
10
+ }
11
+ }
12
+ exports.Hasher = Hasher;
13
+ //# sourceMappingURL=hasher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hasher.js","sourceRoot":"","sources":["../../../src/hash/hasher.ts"],"names":[],"mappings":";;;AAAA,MAAsB,MAAM;IAG1B,YAAY,UAAU,GAAG,EAAE;QACzB,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;CAOF;AAfD,wBAeC"}
@@ -0,0 +1,9 @@
1
+ export * from './encrypt/cryptoEngine';
2
+ export * from './sign/jwt-data-signer';
3
+ export * from './hash/hasher';
4
+ export * from './hash/hasher-factory';
5
+ export * from './hash/client/sodium-hasher';
6
+ export * from './password-encryptor/password-encryptor-factory';
7
+ export * from './password-encryptor/password-encryptor';
8
+ export * from './password-encryptor/client/bcrypt-password-encryptor';
9
+ export * from './password-encryptor/client/sodium-password-encryptor';
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./encrypt/cryptoEngine"), exports);
18
+ __exportStar(require("./sign/jwt-data-signer"), exports);
19
+ __exportStar(require("./hash/hasher"), exports);
20
+ __exportStar(require("./hash/hasher-factory"), exports);
21
+ __exportStar(require("./hash/client/sodium-hasher"), exports);
22
+ __exportStar(require("./password-encryptor/password-encryptor-factory"), exports);
23
+ __exportStar(require("./password-encryptor/password-encryptor"), exports);
24
+ __exportStar(require("./password-encryptor/client/bcrypt-password-encryptor"), exports);
25
+ __exportStar(require("./password-encryptor/client/sodium-password-encryptor"), exports);
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAuC;AAEvC,yDAAuC;AAEvC,gDAA8B;AAC9B,wDAAsC;AACtC,8DAA4C;AAE5C,kFAAgE;AAChE,0EAAwD;AACxD,wFAAsE;AACtE,wFAAsE"}
@@ -0,0 +1,9 @@
1
+ import { PasswordEncryptor } from '../password-encryptor';
2
+ export declare class BcryptPasswordEncryptor extends PasswordEncryptor {
3
+ private static bcrypt;
4
+ constructor(saltRounds?: number);
5
+ private ensureBcryptAvailable;
6
+ hashPassword(password: string): Promise<string>;
7
+ verifyPassword(password: string, hash: string): Promise<boolean>;
8
+ static isValidHash(hash: string): boolean;
9
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BcryptPasswordEncryptor = void 0;
4
+ const password_encryptor_1 = require("../password-encryptor");
5
+ class BcryptPasswordEncryptor extends password_encryptor_1.PasswordEncryptor {
6
+ constructor(saltRounds = 10) {
7
+ super(saltRounds);
8
+ this.ensureBcryptAvailable();
9
+ }
10
+ ensureBcryptAvailable() {
11
+ if (!BcryptPasswordEncryptor.bcrypt) {
12
+ try {
13
+ BcryptPasswordEncryptor.bcrypt = require('bcrypt');
14
+ }
15
+ catch {
16
+ console.warn('bcrypt is not installed. Password encryption will not be available.');
17
+ throw new Error('bcrypt module is required but not installed.');
18
+ }
19
+ }
20
+ }
21
+ async hashPassword(password) {
22
+ return await BcryptPasswordEncryptor.bcrypt.hash(password, this._saltRounds);
23
+ }
24
+ async verifyPassword(password, hash) {
25
+ return await BcryptPasswordEncryptor.bcrypt.compare(password, hash);
26
+ }
27
+ static isValidHash(hash) {
28
+ const bcryptRegex = /^\$2[aby]?\$\d{2}\$[./A-Za-z0-9]{53}$/;
29
+ return bcryptRegex.test(hash);
30
+ }
31
+ }
32
+ exports.BcryptPasswordEncryptor = BcryptPasswordEncryptor;
33
+ BcryptPasswordEncryptor.bcrypt = null;
34
+ //# sourceMappingURL=bcrypt-password-encryptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bcrypt-password-encryptor.js","sourceRoot":"","sources":["../../../../src/password-encryptor/client/bcrypt-password-encryptor.ts"],"names":[],"mappings":";;;AACA,8DAA0D;AAE1D,MAAa,uBAAwB,SAAQ,sCAAiB;IAO5D,YAAY,UAAU,GAAG,EAAE;QACzB,KAAK,CAAC,UAAU,CAAC,CAAC;QAClB,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC/B,CAAC;IAEO,qBAAqB;QAC3B,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC;YACpC,IAAI,CAAC;gBAEH,uBAAuB,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YACrD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;gBACpF,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;IACH,CAAC;IAOD,KAAK,CAAC,YAAY,CAAC,QAAgB;QACjC,OAAO,MAAM,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/E,CAAC;IAQD,KAAK,CAAC,cAAc,CAAC,QAAgB,EAAE,IAAY;QACjD,OAAO,MAAM,uBAAuB,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACtE,CAAC;IAOD,MAAM,CAAC,WAAW,CAAC,IAAY;QAC7B,MAAM,WAAW,GAAG,uCAAuC,CAAC;QAC5D,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;;AAnDH,0DAoDC;AAnDgB,8BAAM,GAAQ,IAAI,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { PasswordEncryptor } from '../password-encryptor';
2
+ export declare class SodiumPasswordEncryptor extends PasswordEncryptor {
3
+ private getOpsAndMemLimits;
4
+ hashPassword(password: string): Promise<string>;
5
+ verifyPassword(password: string, hash: string): Promise<boolean>;
6
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SodiumPasswordEncryptor = void 0;
4
+ const password_encryptor_1 = require("../password-encryptor");
5
+ const sodium_initializer_1 = require("../../sodium-initializer");
6
+ class SodiumPasswordEncryptor extends password_encryptor_1.PasswordEncryptor {
7
+ getOpsAndMemLimits(sodium) {
8
+ if (this._saltRounds <= 10) {
9
+ return {
10
+ opslimit: sodium.crypto_pwhash_OPSLIMIT_INTERACTIVE,
11
+ memlimit: sodium.crypto_pwhash_MEMLIMIT_INTERACTIVE,
12
+ };
13
+ }
14
+ else if (this._saltRounds <= 20) {
15
+ return {
16
+ opslimit: sodium.crypto_pwhash_OPSLIMIT_MODERATE,
17
+ memlimit: sodium.crypto_pwhash_MEMLIMIT_MODERATE,
18
+ };
19
+ }
20
+ else {
21
+ return {
22
+ opslimit: sodium.crypto_pwhash_OPSLIMIT_SENSITIVE,
23
+ memlimit: sodium.crypto_pwhash_MEMLIMIT_SENSITIVE,
24
+ };
25
+ }
26
+ }
27
+ async hashPassword(password) {
28
+ const sodium = await sodium_initializer_1.SodiumInitializer.getSodium();
29
+ const { opslimit, memlimit } = this.getOpsAndMemLimits(sodium);
30
+ return sodium.crypto_pwhash_str(password, opslimit, memlimit);
31
+ }
32
+ async verifyPassword(password, hash) {
33
+ const sodium = await sodium_initializer_1.SodiumInitializer.getSodium();
34
+ return sodium.crypto_pwhash_str_verify(hash, password);
35
+ }
36
+ }
37
+ exports.SodiumPasswordEncryptor = SodiumPasswordEncryptor;
38
+ //# sourceMappingURL=sodium-password-encryptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sodium-password-encryptor.js","sourceRoot":"","sources":["../../../../src/password-encryptor/client/sodium-password-encryptor.ts"],"names":[],"mappings":";;;AAAA,8DAA0D;AAC1D,iEAA6D;AAE7D,MAAa,uBAAwB,SAAQ,sCAAiB;IACpD,kBAAkB,CAAC,MAAM;QAC/B,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;YAC3B,OAAO;gBACL,QAAQ,EAAE,MAAM,CAAC,kCAAkC;gBACnD,QAAQ,EAAE,MAAM,CAAC,kCAAkC;aACpD,CAAC;QACJ,CAAC;aAAM,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;YAClC,OAAO;gBACL,QAAQ,EAAE,MAAM,CAAC,+BAA+B;gBAChD,QAAQ,EAAE,MAAM,CAAC,+BAA+B;aACjD,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,QAAQ,EAAE,MAAM,CAAC,gCAAgC;gBACjD,QAAQ,EAAE,MAAM,CAAC,gCAAgC;aAClD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAgB;QACjC,MAAM,MAAM,GAAG,MAAM,sCAAiB,CAAC,SAAS,EAAE,CAAC;QACnD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAE/D,OAAO,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,QAAgB,EAAE,IAAY;QACjD,MAAM,MAAM,GAAG,MAAM,sCAAiB,CAAC,SAAS,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACzD,CAAC;CACF;AA/BD,0DA+BC"}
@@ -0,0 +1,4 @@
1
+ import { PasswordEncryptor } from './password-encryptor';
2
+ export declare class PasswordEncryptorFactory {
3
+ static create(algorithm: string, saltRounds?: number): PasswordEncryptor;
4
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PasswordEncryptorFactory = void 0;
4
+ const bcrypt_password_encryptor_1 = require("./client/bcrypt-password-encryptor");
5
+ const sodium_password_encryptor_1 = require("./client/sodium-password-encryptor");
6
+ class PasswordEncryptorFactory {
7
+ static create(algorithm, saltRounds = 10) {
8
+ switch (algorithm) {
9
+ case bcrypt_password_encryptor_1.BcryptPasswordEncryptor.name:
10
+ return new bcrypt_password_encryptor_1.BcryptPasswordEncryptor(saltRounds);
11
+ break;
12
+ case sodium_password_encryptor_1.SodiumPasswordEncryptor.name:
13
+ return new sodium_password_encryptor_1.SodiumPasswordEncryptor(saltRounds);
14
+ break;
15
+ default:
16
+ throw new Error(`Unsupported algorithm: ${algorithm}`);
17
+ }
18
+ }
19
+ }
20
+ exports.PasswordEncryptorFactory = PasswordEncryptorFactory;
21
+ //# sourceMappingURL=password-encryptor-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password-encryptor-factory.js","sourceRoot":"","sources":["../../../src/password-encryptor/password-encryptor-factory.ts"],"names":[],"mappings":";;;AAAA,kFAA6E;AAE7E,kFAA6E;AAE7E,MAAa,wBAAwB;IACnC,MAAM,CAAC,MAAM,CAAC,SAAiB,EAAE,UAAU,GAAG,EAAE;QAC9C,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,mDAAuB,CAAC,IAAI;gBAC/B,OAAO,IAAI,mDAAuB,CAAC,UAAU,CAAC,CAAC;gBAC/C,MAAM;YACR,KAAK,mDAAuB,CAAC,IAAI;gBAC/B,OAAO,IAAI,mDAAuB,CAAC,UAAU,CAAC,CAAC;gBAC/C,MAAM;YACR;gBACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;CACF;AAbD,4DAaC"}
@@ -0,0 +1,6 @@
1
+ export declare abstract class PasswordEncryptor {
2
+ protected readonly _saltRounds: number;
3
+ constructor(saltRounds?: number);
4
+ abstract hashPassword(password: string): Promise<string>;
5
+ abstract verifyPassword(password: string, hash: string): Promise<boolean>;
6
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PasswordEncryptor = void 0;
4
+ class PasswordEncryptor {
5
+ constructor(saltRounds = 10) {
6
+ if (saltRounds < 4 || saltRounds > 31) {
7
+ throw new Error('Salt rounds must be between 4 and 31.');
8
+ }
9
+ this._saltRounds = saltRounds;
10
+ }
11
+ }
12
+ exports.PasswordEncryptor = PasswordEncryptor;
13
+ //# sourceMappingURL=password-encryptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password-encryptor.js","sourceRoot":"","sources":["../../../src/password-encryptor/password-encryptor.ts"],"names":[],"mappings":";;;AAAA,MAAsB,iBAAiB;IAGrC,YAAY,UAAU,GAAG,EAAE;QACzB,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;CAgBF;AAxBD,8CAwBC"}
@@ -0,0 +1,11 @@
1
+ export declare class JWTDataSigner {
2
+ private static jwt;
3
+ private readonly secretKey;
4
+ private readonly signOptions;
5
+ private readonly verifyOptions;
6
+ constructor(secretKey: string, signOptions?: any, verifyOptions?: any);
7
+ private ensureJWTAvailable;
8
+ sign(data: object): string;
9
+ verify(signedData: string): object;
10
+ data(signedData: string): object;
11
+ }
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JWTDataSigner = void 0;
4
+ class JWTDataSigner {
5
+ constructor(secretKey, signOptions = {}, verifyOptions = {}) {
6
+ const MIN_SECRET_KEY_LENGTH = 16;
7
+ this.ensureJWTAvailable();
8
+ if (typeof secretKey !== 'string' || secretKey.length < MIN_SECRET_KEY_LENGTH) {
9
+ throw new Error(`La clave secreta debe ser una cadena de al menos ${MIN_SECRET_KEY_LENGTH} caracteres.`);
10
+ }
11
+ this.secretKey = secretKey;
12
+ this.signOptions = signOptions;
13
+ this.verifyOptions = verifyOptions;
14
+ }
15
+ ensureJWTAvailable() {
16
+ if (!JWTDataSigner.jwt) {
17
+ try {
18
+ JWTDataSigner.jwt = require('jsonwebtoken');
19
+ }
20
+ catch {
21
+ console.warn('jsonwebtoken is not installed. JWT signing functionality will not be available.');
22
+ throw new Error('jsonwebtoken module is required but not installed.');
23
+ }
24
+ }
25
+ }
26
+ sign(data) {
27
+ return JWTDataSigner.jwt.sign(data, this.secretKey, this.signOptions);
28
+ }
29
+ verify(signedData) {
30
+ try {
31
+ const data = JWTDataSigner.jwt.verify(signedData, this.secretKey, this.verifyOptions);
32
+ return data ?? {};
33
+ }
34
+ catch (error) {
35
+ throw new Error(`verify Error: ${error.message}`);
36
+ }
37
+ }
38
+ data(signedData) {
39
+ try {
40
+ const decoded = JWTDataSigner.jwt.decode(signedData);
41
+ return decoded ?? {};
42
+ }
43
+ catch (error) {
44
+ throw new Error(`data Error: ${error.message}`);
45
+ }
46
+ }
47
+ }
48
+ exports.JWTDataSigner = JWTDataSigner;
49
+ JWTDataSigner.jwt = null;
50
+ //# sourceMappingURL=jwt-data-signer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-data-signer.js","sourceRoot":"","sources":["../../../src/sign/jwt-data-signer.ts"],"names":[],"mappings":";;;AAAA,MAAa,aAAa;IAMxB,YAAY,SAAiB,EAAE,cAAmB,EAAE,EAAE,gBAAqB,EAAE;QAC3E,MAAM,qBAAqB,GAAG,EAAE,CAAC;QAEjC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,qBAAqB,EAAE,CAAC;YAC9E,MAAM,IAAI,KAAK,CACb,oDAAoD,qBAAqB,cAAc,CACxF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC;gBAEH,aAAa,CAAC,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;YAC9C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CACV,iFAAiF,CAClF,CAAC;gBACF,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAY;QACf,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,CAAC,UAAkB;QACvB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAE5E,CAAC;YACT,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,iBAAkB,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,IAAI,CAAC,UAAkB;QACrB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAkB,CAAC;YACtE,OAAO,OAAO,IAAI,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,eAAgB,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;;AA1DH,sCA2DC;AA1DgB,iBAAG,GAAQ,IAAI,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare class SodiumInitializer {
2
+ private static initializedPromise;
3
+ private static sodium;
4
+ static ensureInitialized(): Promise<void>;
5
+ static getSodium(): Promise<any>;
6
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SodiumInitializer = void 0;
4
+ class SodiumInitializer {
5
+ static async ensureInitialized() {
6
+ if (!this.initializedPromise) {
7
+ this.sodium = require('libsodium-wrappers-sumo');
8
+ this.initializedPromise = this.sodium.ready
9
+ .then(() => {
10
+ console.debug('Sodium successfully initialized.');
11
+ })
12
+ .catch((error) => {
13
+ console.error('Failed to initialize Sodium:', error);
14
+ throw error;
15
+ });
16
+ }
17
+ await this.initializedPromise;
18
+ }
19
+ static async getSodium() {
20
+ await this.ensureInitialized();
21
+ if (!this.sodium) {
22
+ throw new Error('libsodium-wrappers-sumo is not available. Please install it if needed.');
23
+ }
24
+ return this.sodium;
25
+ }
26
+ }
27
+ exports.SodiumInitializer = SodiumInitializer;
28
+ SodiumInitializer.initializedPromise = null;
29
+ SodiumInitializer.sodium = null;
30
+ //# sourceMappingURL=sodium-initializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sodium-initializer.js","sourceRoot":"","sources":["../../src/sodium-initializer.ts"],"names":[],"mappings":";;;AAAA,MAAa,iBAAiB;IAIrB,MAAM,CAAC,KAAK,CAAC,iBAAiB;QACnC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAE7B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;YACjD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;iBACxC,IAAI,CAAC,GAAG,EAAE;gBACT,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACpD,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;gBACrD,MAAM,KAAK,CAAC;YACd,CAAC,CAAC,CAAC;QACP,CAAC;QACD,MAAM,IAAI,CAAC,kBAAkB,CAAC;IAChC,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,SAAS;QAC3B,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;;AA1BH,8CA2BC;AA1BgB,oCAAkB,GAAyB,IAAI,CAAC;AAChD,wBAAM,GAAQ,IAAI,CAAC"}
@@ -0,0 +1,11 @@
1
+ export declare class SymmetricEncryption {
2
+ private readonly algorithm;
3
+ private static readonly validAlgorithms;
4
+ private readonly key;
5
+ private readonly ivLength;
6
+ constructor(algorithm: (typeof SymmetricEncryption.validAlgorithms)[number], key: string | Buffer);
7
+ private adjustKey;
8
+ private generateHmac;
9
+ encrypt(text: string): string;
10
+ decrypt(encryptedWithIvAndHmac: string): string;
11
+ }