@siegesailor/cryptography 1.0.0
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/LICENSE.md +19 -0
- package/README.md +79 -0
- package/build/algorithms/baby-step-giant-step/index.js +89 -0
- package/build/algorithms/baby-step-giant-step/index.js.map +1 -0
- package/build/algorithms/baby-step-giant-step/index.test.js +32 -0
- package/build/algorithms/baby-step-giant-step/index.test.js.map +1 -0
- package/build/algorithms/blum-blum-shub/index.js +88 -0
- package/build/algorithms/blum-blum-shub/index.js.map +1 -0
- package/build/algorithms/blum-blum-shub/index.test.js +74 -0
- package/build/algorithms/blum-blum-shub/index.test.js.map +1 -0
- package/build/algorithms/chinese-remainder/index.js +111 -0
- package/build/algorithms/chinese-remainder/index.js.map +1 -0
- package/build/algorithms/chinese-remainder/index.test.js +28 -0
- package/build/algorithms/chinese-remainder/index.test.js.map +1 -0
- package/build/algorithms/euclidean/index.js +60 -0
- package/build/algorithms/euclidean/index.js.map +1 -0
- package/build/algorithms/euclidean/index.test.js +22 -0
- package/build/algorithms/euclidean/index.test.js.map +1 -0
- package/build/algorithms/extended-euclidean/index.js +77 -0
- package/build/algorithms/extended-euclidean/index.js.map +1 -0
- package/build/algorithms/extended-euclidean/index.test.js +22 -0
- package/build/algorithms/extended-euclidean/index.test.js.map +1 -0
- package/build/algorithms/fast-modular-exponentiation/index.js +80 -0
- package/build/algorithms/fast-modular-exponentiation/index.js.map +1 -0
- package/build/algorithms/fast-modular-exponentiation/index.test.js +31 -0
- package/build/algorithms/fast-modular-exponentiation/index.test.js.map +1 -0
- package/build/algorithms/miller-rabin-primarily-test/index.js +87 -0
- package/build/algorithms/miller-rabin-primarily-test/index.js.map +1 -0
- package/build/algorithms/miller-rabin-primarily-test/index.test.js +78 -0
- package/build/algorithms/miller-rabin-primarily-test/index.test.js.map +1 -0
- package/build/algorithms/multiplicative-inverse/index.js +83 -0
- package/build/algorithms/multiplicative-inverse/index.js.map +1 -0
- package/build/algorithms/multiplicative-inverse/index.test.js +30 -0
- package/build/algorithms/multiplicative-inverse/index.test.js.map +1 -0
- package/build/algorithms/naor-reingo/index.js +85 -0
- package/build/algorithms/naor-reingo/index.js.map +1 -0
- package/build/algorithms/naor-reingo/index.test.js +27 -0
- package/build/algorithms/naor-reingo/index.test.js.map +1 -0
- package/build/algorithms/pollard-p-1-factorization/index.js +92 -0
- package/build/algorithms/pollard-p-1-factorization/index.js.map +1 -0
- package/build/algorithms/pollard-p-1-factorization/index.test.js +32 -0
- package/build/algorithms/pollard-p-1-factorization/index.test.js.map +1 -0
- package/build/algorithms/pollard-rho/index.js +82 -0
- package/build/algorithms/pollard-rho/index.js.map +1 -0
- package/build/algorithms/pollard-rho/index.test.js +26 -0
- package/build/algorithms/pollard-rho/index.test.js.map +1 -0
- package/build/algorithms/primitive-root-search/index.js +95 -0
- package/build/algorithms/primitive-root-search/index.js.map +1 -0
- package/build/algorithms/primitive-root-search/index.test.js +46 -0
- package/build/algorithms/primitive-root-search/index.test.js.map +1 -0
- package/build/command.js +79 -0
- package/build/command.js.map +1 -0
- package/build/entry-point.js +31 -0
- package/build/entry-point.js.map +1 -0
- package/build/key-encryptions/DiffieHellman.js +56 -0
- package/build/key-encryptions/DiffieHellman.js.map +1 -0
- package/build/key-encryptions/ElGamal.js +83 -0
- package/build/key-encryptions/ElGamal.js.map +1 -0
- package/build/key-encryptions/RSA.js +102 -0
- package/build/key-encryptions/RSA.js.map +1 -0
- package/build/shared/algorithm/math.js +9 -0
- package/build/shared/algorithm/math.js.map +1 -0
- package/build/shared/algorithm/random.js +52 -0
- package/build/shared/algorithm/random.js.map +1 -0
- package/build/shared/algorithm/wasm.js +105 -0
- package/build/shared/algorithm/wasm.js.map +1 -0
- package/build/shared/algorithm/wrap.js +57 -0
- package/build/shared/algorithm/wrap.js.map +1 -0
- package/build/shared/cli/Procedure.js +51 -0
- package/build/shared/cli/Procedure.js.map +1 -0
- package/build/shared/cli/chalk.js +48 -0
- package/build/shared/cli/chalk.js.map +1 -0
- package/build/shared/cli/inquirer.js +13 -0
- package/build/shared/cli/inquirer.js.map +1 -0
- package/build/shared/cli/prompt.js +98 -0
- package/build/shared/cli/prompt.js.map +1 -0
- package/build/shared/cli/utilities.js +145 -0
- package/build/shared/cli/utilities.js.map +1 -0
- package/build/shared/constants.js +21 -0
- package/build/shared/constants.js.map +1 -0
- package/build/shared/testing/wasm.js +78 -0
- package/build/shared/testing/wasm.js.map +1 -0
- package/build/source/algorithms/baby-step-giant-step/main.wasm +0 -0
- package/build/source/algorithms/blum-blum-shub/main.wasm +0 -0
- package/build/source/algorithms/chinese-remainder/main.wasm +0 -0
- package/build/source/algorithms/euclidean/main.wasm +0 -0
- package/build/source/algorithms/extended-euclidean/main.wasm +0 -0
- package/build/source/algorithms/fast-modular-exponentiation/main.wasm +0 -0
- package/build/source/algorithms/miller-rabin-primarily-test/main.wasm +0 -0
- package/build/source/algorithms/multiplicative-inverse/main.wasm +0 -0
- package/build/source/algorithms/naor-reingo/main.wasm +0 -0
- package/build/source/algorithms/pollard-p-1-factorization/main.wasm +0 -0
- package/build/source/algorithms/pollard-rho/main.wasm +0 -0
- package/build/source/algorithms/primitive-root-search/main.wasm +0 -0
- package/package.json +79 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.primitiveRootSearch = exports.pollardRho = exports.pollardP1Factorization = exports.naorReingo = exports.multiplicativeInverse = exports.millerRabinPrimarilyTest = exports.fastModularExponentiation = exports.extendedEuclidean = exports.euclidean = exports.chineseRemainder = exports.blumBlumShub = exports.babyStepGiantStep = void 0;
|
|
7
|
+
var baby_step_giant_step_1 = require("./algorithms/baby-step-giant-step");
|
|
8
|
+
Object.defineProperty(exports, "babyStepGiantStep", { enumerable: true, get: function () { return __importDefault(baby_step_giant_step_1).default; } });
|
|
9
|
+
var blum_blum_shub_1 = require("./algorithms/blum-blum-shub");
|
|
10
|
+
Object.defineProperty(exports, "blumBlumShub", { enumerable: true, get: function () { return __importDefault(blum_blum_shub_1).default; } });
|
|
11
|
+
var chinese_remainder_1 = require("./algorithms/chinese-remainder");
|
|
12
|
+
Object.defineProperty(exports, "chineseRemainder", { enumerable: true, get: function () { return __importDefault(chinese_remainder_1).default; } });
|
|
13
|
+
var euclidean_1 = require("./algorithms/euclidean");
|
|
14
|
+
Object.defineProperty(exports, "euclidean", { enumerable: true, get: function () { return __importDefault(euclidean_1).default; } });
|
|
15
|
+
var extended_euclidean_1 = require("./algorithms/extended-euclidean");
|
|
16
|
+
Object.defineProperty(exports, "extendedEuclidean", { enumerable: true, get: function () { return __importDefault(extended_euclidean_1).default; } });
|
|
17
|
+
var fast_modular_exponentiation_1 = require("./algorithms/fast-modular-exponentiation");
|
|
18
|
+
Object.defineProperty(exports, "fastModularExponentiation", { enumerable: true, get: function () { return __importDefault(fast_modular_exponentiation_1).default; } });
|
|
19
|
+
var miller_rabin_primarily_test_1 = require("./algorithms/miller-rabin-primarily-test");
|
|
20
|
+
Object.defineProperty(exports, "millerRabinPrimarilyTest", { enumerable: true, get: function () { return __importDefault(miller_rabin_primarily_test_1).default; } });
|
|
21
|
+
var multiplicative_inverse_1 = require("./algorithms/multiplicative-inverse");
|
|
22
|
+
Object.defineProperty(exports, "multiplicativeInverse", { enumerable: true, get: function () { return __importDefault(multiplicative_inverse_1).default; } });
|
|
23
|
+
var naor_reingo_1 = require("./algorithms/naor-reingo");
|
|
24
|
+
Object.defineProperty(exports, "naorReingo", { enumerable: true, get: function () { return __importDefault(naor_reingo_1).default; } });
|
|
25
|
+
var pollard_p_1_factorization_1 = require("./algorithms/pollard-p-1-factorization");
|
|
26
|
+
Object.defineProperty(exports, "pollardP1Factorization", { enumerable: true, get: function () { return __importDefault(pollard_p_1_factorization_1).default; } });
|
|
27
|
+
var pollard_rho_1 = require("./algorithms/pollard-rho");
|
|
28
|
+
Object.defineProperty(exports, "pollardRho", { enumerable: true, get: function () { return __importDefault(pollard_rho_1).default; } });
|
|
29
|
+
var primitive_root_search_1 = require("./algorithms/primitive-root-search");
|
|
30
|
+
Object.defineProperty(exports, "primitiveRootSearch", { enumerable: true, get: function () { return __importDefault(primitive_root_search_1).default; } });
|
|
31
|
+
//# sourceMappingURL=entry-point.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-point.js","sourceRoot":"","sources":["../source/entry-point.ts"],"names":[],"mappings":";;;;;;AAAA,0EAAiF;AAAxE,0IAAA,OAAO,OAAqB;AACrC,8DAAsE;AAA7D,+HAAA,OAAO,OAAgB;AAChC,oEAA6E;AAApE,sIAAA,OAAO,OAAoB;AACpC,oDAA8D;AAArD,uHAAA,OAAO,OAAa;AAC7B,sEAA+E;AAAtE,wIAAA,OAAO,OAAqB;AACrC,wFAAgG;AAAvF,yJAAA,OAAO,OAA6B;AAC7C,wFAA+F;AAAtF,wJAAA,OAAO,OAA4B;AAC5C,8EAAuF;AAA9E,gJAAA,OAAO,OAAyB;AACzC,wDAAiE;AAAxD,0HAAA,OAAO,OAAc;AAC9B,oFAA2F;AAAlF,oJAAA,OAAO,OAA0B;AAC1C,wDAAiE;AAAxD,0HAAA,OAAO,OAAc;AAC9B,4EAAoF;AAA3E,6IAAA,OAAO,OAAuB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.prompt = prompt;
|
|
7
|
+
const baby_step_giant_step_1 = __importDefault(require("../algorithms/baby-step-giant-step"));
|
|
8
|
+
const fast_modular_exponentiation_1 = __importDefault(require("../algorithms/fast-modular-exponentiation"));
|
|
9
|
+
const primitive_root_search_1 = __importDefault(require("../algorithms/primitive-root-search"));
|
|
10
|
+
const random_1 = require("../shared/algorithm/random");
|
|
11
|
+
const wrap_1 = require("../shared/algorithm/wrap");
|
|
12
|
+
const chalk_1 = __importDefault(require("../shared/cli/chalk"));
|
|
13
|
+
const utilities_1 = require("../shared/cli/utilities");
|
|
14
|
+
const constants_1 = require("../shared/constants");
|
|
15
|
+
async function prompt() {
|
|
16
|
+
console.log("There are three people in this Diffie-Hellman key exchange process:");
|
|
17
|
+
console.log(`\t${constants_1.ACTORS.ALICE} - Party A\n\t${constants_1.ACTORS.BOB} - Party B\n\t${constants_1.ACTORS.EVE} - Eavesdropper`);
|
|
18
|
+
const [p, g, a, b, publicA, publicB] = await utilities_1.inquire.continue(`${constants_1.ACTORS.ALICE} and ${constants_1.ACTORS.BOB} select a public prime p and primitive root g, then choose private values a and b:`, () => {
|
|
19
|
+
const [p] = wrap_1.wrap.randomize(8, 8, 1);
|
|
20
|
+
const [, roots] = (0, primitive_root_search_1.default)(Number(p));
|
|
21
|
+
const g = BigInt(roots[0]);
|
|
22
|
+
const a = (0, random_1.randomBigIntBetween)(2n, p - 2n);
|
|
23
|
+
const b = (0, random_1.randomBigIntBetween)(2n, p - 2n);
|
|
24
|
+
const publicA = (0, fast_modular_exponentiation_1.default)(g, a, p);
|
|
25
|
+
const publicB = (0, fast_modular_exponentiation_1.default)(g, b, p);
|
|
26
|
+
utilities_1.log.list([
|
|
27
|
+
{ name: "p", value: p },
|
|
28
|
+
{ name: "g", value: g },
|
|
29
|
+
{ name: "a (private)", value: a },
|
|
30
|
+
{ name: "b (private)", value: b },
|
|
31
|
+
{ name: "A = g^a % p", value: publicA },
|
|
32
|
+
{ name: "B = g^b % p", value: publicB },
|
|
33
|
+
]);
|
|
34
|
+
return [p, g, a, b, publicA, publicB];
|
|
35
|
+
});
|
|
36
|
+
await utilities_1.inquire.continue(`${constants_1.ACTORS.ALICE} and ${constants_1.ACTORS.BOB} derive the same shared secret independently:`, () => {
|
|
37
|
+
const secretAlice = (0, fast_modular_exponentiation_1.default)(publicB, a, p);
|
|
38
|
+
const secretBob = (0, fast_modular_exponentiation_1.default)(publicA, b, p);
|
|
39
|
+
utilities_1.log.list([
|
|
40
|
+
{ name: `${constants_1.ACTORS.ALICE}'s secret`, value: secretAlice },
|
|
41
|
+
{ name: `${constants_1.ACTORS.BOB}'s secret`, value: secretBob },
|
|
42
|
+
]);
|
|
43
|
+
console.log(`\n\tShared secret agreement: ${chalk_1.default.gray(secretAlice === secretBob ? "success" : "failed")}`);
|
|
44
|
+
});
|
|
45
|
+
await utilities_1.inquire.continue(`${constants_1.ACTORS.EVE} can also recover the secret for small teaching parameters by solving the discrete log problem:`, () => {
|
|
46
|
+
const aRecovered = (0, baby_step_giant_step_1.default)(g, publicA, p);
|
|
47
|
+
const bRecovered = (0, baby_step_giant_step_1.default)(g, publicB, p);
|
|
48
|
+
const secretEve = (0, fast_modular_exponentiation_1.default)(g, aRecovered * bRecovered, p);
|
|
49
|
+
utilities_1.log.list([
|
|
50
|
+
{ name: "Recovered a", value: aRecovered },
|
|
51
|
+
{ name: "Recovered b", value: bRecovered },
|
|
52
|
+
{ name: `${constants_1.ACTORS.EVE}'s recovered shared secret`, value: secretEve },
|
|
53
|
+
]);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=DiffieHellman.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiffieHellman.js","sourceRoot":"","sources":["../../source/key-encryptions/DiffieHellman.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.prompt = prompt;
|
|
7
|
+
const baby_step_giant_step_1 = __importDefault(require("../algorithms/baby-step-giant-step"));
|
|
8
|
+
const euclidean_1 = __importDefault(require("../algorithms/euclidean"));
|
|
9
|
+
const fast_modular_exponentiation_1 = __importDefault(require("../algorithms/fast-modular-exponentiation"));
|
|
10
|
+
const primitive_root_search_1 = __importDefault(require("../algorithms/primitive-root-search"));
|
|
11
|
+
const random_1 = require("../shared/algorithm/random");
|
|
12
|
+
const wrap_1 = require("../shared/algorithm/wrap");
|
|
13
|
+
const chalk_1 = __importDefault(require("../shared/cli/chalk"));
|
|
14
|
+
const utilities_1 = require("../shared/cli/utilities");
|
|
15
|
+
const constants_1 = require("../shared/constants");
|
|
16
|
+
async function prompt() {
|
|
17
|
+
try {
|
|
18
|
+
console.log("There are three people in this ElGamal encryption process:");
|
|
19
|
+
console.log(`\t${constants_1.ACTORS.ALICE} - Receiver\n\t${constants_1.ACTORS.BOB} - Sender\n\t${constants_1.ACTORS.EVE} - Eavesdropper`);
|
|
20
|
+
const [p, g, r, x, y] = await utilities_1.inquire.continue(`${constants_1.ACTORS.ALICE} is going to pick prime number P, generator g, and random numbers r and x:`, () => {
|
|
21
|
+
const [p] = wrap_1.wrap.randomize(8, 8, 1);
|
|
22
|
+
const [, roots] = (0, primitive_root_search_1.default)(Number(p));
|
|
23
|
+
const g = BigInt(roots[0]);
|
|
24
|
+
let r = (0, random_1.randomBigIntBetween)(2n, p - 2n);
|
|
25
|
+
while ((0, euclidean_1.default)(r, p - 1n) !== 1n) {
|
|
26
|
+
r = (0, random_1.randomBigIntBetween)(2n, p - 2n);
|
|
27
|
+
}
|
|
28
|
+
const x = (0, random_1.randomBigIntBetween)(2n, p - 2n);
|
|
29
|
+
utilities_1.log.list([
|
|
30
|
+
{ name: "P", value: p },
|
|
31
|
+
{ name: "g", value: g },
|
|
32
|
+
{ name: "r", value: r },
|
|
33
|
+
{ name: "x", value: x },
|
|
34
|
+
]);
|
|
35
|
+
console.log(`\n\t${constants_1.ACTORS.ALICE} generates y:`);
|
|
36
|
+
const y = (0, fast_modular_exponentiation_1.default)(g, x, p);
|
|
37
|
+
console.log(`\ty: ${chalk_1.default.gray(y)}`);
|
|
38
|
+
console.log(`\n\t${constants_1.ACTORS.ALICE} sends ${chalk_1.default.bold.bgCyan("(g, r, p, y)")} as the public key to ${constants_1.ACTORS.BOB} and ${constants_1.ACTORS.EVE}.`);
|
|
39
|
+
return [p, g, r, x, y];
|
|
40
|
+
});
|
|
41
|
+
const message = "This is a hardcoded secret message.";
|
|
42
|
+
const [keyEncrypted, arrayOfEncryptedCode] = await utilities_1.inquire.continue(`${constants_1.ACTORS.BOB} encrypts the message and sends it back to ${constants_1.ACTORS.ALICE} (while ${constants_1.ACTORS.EVE} is eavesdropping).`, () => {
|
|
43
|
+
const keyEncrypted = (0, fast_modular_exponentiation_1.default)(g, r, p);
|
|
44
|
+
const sharedSecret = (0, fast_modular_exponentiation_1.default)(y, r, p);
|
|
45
|
+
const arrayOfEncryptedCode = wrap_1.wrap.encrypt(message, (code) => {
|
|
46
|
+
return (BigInt(code) * sharedSecret) % p;
|
|
47
|
+
});
|
|
48
|
+
console.log(`\tEncrypted key: ${chalk_1.default.gray(keyEncrypted)}`);
|
|
49
|
+
console.log(`\tEncrypted message: ${chalk_1.default.gray(arrayOfEncryptedCode)}`);
|
|
50
|
+
const secret = (0, fast_modular_exponentiation_1.default)(keyEncrypted, x, p);
|
|
51
|
+
const inverseSecret = (0, fast_modular_exponentiation_1.default)(secret, p - 2n, p);
|
|
52
|
+
const messageDecrypted = wrap_1.wrap.decrypt(arrayOfEncryptedCode, (codeEncrypted) => {
|
|
53
|
+
return (codeEncrypted * inverseSecret) % p;
|
|
54
|
+
});
|
|
55
|
+
console.log(`\n\t${constants_1.ACTORS.ALICE} can decrypt the message since she has the random number ${chalk_1.default.bold.bgCyan("(x)")}.\n\tDecrypted message: ${chalk_1.default.gray(messageDecrypted)}\n\t${constants_1.ACTORS.ALICE} verifies the message with ${constants_1.ACTORS.BOB} privately.`);
|
|
56
|
+
return [keyEncrypted, arrayOfEncryptedCode];
|
|
57
|
+
});
|
|
58
|
+
await utilities_1.inquire.continue(`${constants_1.ACTORS.EVE} is going to decrypt the secret message.`, () => {
|
|
59
|
+
console.log(`\tNow ${constants_1.ACTORS.EVE} has the following stuff:`);
|
|
60
|
+
utilities_1.log.list([
|
|
61
|
+
{ name: "g", value: g },
|
|
62
|
+
{ name: "r", value: r },
|
|
63
|
+
{ name: "p", value: p },
|
|
64
|
+
{ name: "y", value: y },
|
|
65
|
+
{ name: "secret key", value: keyEncrypted },
|
|
66
|
+
{ name: "secret message", value: arrayOfEncryptedCode },
|
|
67
|
+
]);
|
|
68
|
+
console.log(`\n\t${constants_1.ACTORS.EVE} is going to figure out what the random number x is using Discrete Log with the information she has.`);
|
|
69
|
+
const xEavesdropped = (0, baby_step_giant_step_1.default)(g, y, p);
|
|
70
|
+
console.log(`\tRandom number ${chalk_1.default.bold.bgCyan("(x)")}: ${chalk_1.default.gray(`(${xEavesdropped})`)}`);
|
|
71
|
+
const secret = (0, fast_modular_exponentiation_1.default)(keyEncrypted, xEavesdropped, p);
|
|
72
|
+
const inverseSecret = (0, fast_modular_exponentiation_1.default)(secret, p - 2n, p);
|
|
73
|
+
const messageEavesdropped = wrap_1.wrap.decrypt(arrayOfEncryptedCode, (codeEncrypted) => {
|
|
74
|
+
return (codeEncrypted * inverseSecret) % p;
|
|
75
|
+
});
|
|
76
|
+
console.log(`\tDecrypted message: ${chalk_1.default.gray(messageEavesdropped)}\n\t${constants_1.ACTORS.EVE} verifies the message with ${constants_1.ACTORS.BOB}.`);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=ElGamal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ElGamal.js","sourceRoot":"","sources":["../../source/key-encryptions/ElGamal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.prompt = prompt;
|
|
7
|
+
const euclidean_1 = __importDefault(require("../algorithms/euclidean"));
|
|
8
|
+
const extended_euclidean_1 = __importDefault(require("../algorithms/extended-euclidean"));
|
|
9
|
+
const fast_modular_exponentiation_1 = __importDefault(require("../algorithms/fast-modular-exponentiation"));
|
|
10
|
+
const pollard_p_1_factorization_1 = __importDefault(require("../algorithms/pollard-p-1-factorization"));
|
|
11
|
+
const wrap_1 = require("../shared/algorithm/wrap");
|
|
12
|
+
const chalk_1 = __importDefault(require("../shared/cli/chalk"));
|
|
13
|
+
const utilities_1 = require("../shared/cli/utilities");
|
|
14
|
+
const constants_1 = require("../shared/constants");
|
|
15
|
+
async function prompt() {
|
|
16
|
+
try {
|
|
17
|
+
console.log("There are three people in this RSA encryption process:");
|
|
18
|
+
console.log(`\t${constants_1.ACTORS.ALICE} - Receiver\n\t${constants_1.ACTORS.BOB} - Sender\n\t${constants_1.ACTORS.EVE} - Eavesdropper`);
|
|
19
|
+
const [p, q, n, r] = await utilities_1.inquire.continue(`${constants_1.ACTORS.ALICE} is going to pick prime numbers P and Q, and then generate n with P * Q, r with (P - 1) * (Q - 1):`, () => {
|
|
20
|
+
const [p, q] = wrap_1.wrap.randomize(16, 8, 2);
|
|
21
|
+
const n = p * q;
|
|
22
|
+
const r = (p - BigInt(1)) * (q - BigInt(1));
|
|
23
|
+
utilities_1.log.list([
|
|
24
|
+
{ name: "P", value: p },
|
|
25
|
+
{ name: "Q", value: q },
|
|
26
|
+
{ name: "n", value: n },
|
|
27
|
+
{ name: "r ((P - 1) * (Q - 1))", value: r },
|
|
28
|
+
]);
|
|
29
|
+
return [p, q, n, r];
|
|
30
|
+
});
|
|
31
|
+
const [e, d] = await utilities_1.inquire.continue(`${constants_1.ACTORS.ALICE} selects the public exponent e and computes private exponent d from e * d % r = 1:`, () => {
|
|
32
|
+
const commonExponents = [65537n, 257n, 17n, 5n, 3n];
|
|
33
|
+
const e = commonExponents.find((value) => (0, euclidean_1.default)(value, r) === 1n);
|
|
34
|
+
if (!e) {
|
|
35
|
+
throw new Error("Unable to select a valid public exponent e.");
|
|
36
|
+
}
|
|
37
|
+
const [gcd, coefficient] = (0, extended_euclidean_1.default)(e, r);
|
|
38
|
+
if (gcd !== 1n) {
|
|
39
|
+
throw new Error("Unable to compute private key exponent d.");
|
|
40
|
+
}
|
|
41
|
+
const d = ((coefficient % r) + r) % r;
|
|
42
|
+
utilities_1.log.list([
|
|
43
|
+
{ name: "e", value: e },
|
|
44
|
+
{ name: "d", value: d },
|
|
45
|
+
]);
|
|
46
|
+
return [e, d];
|
|
47
|
+
});
|
|
48
|
+
await utilities_1.inquire.continue(`${constants_1.ACTORS.ALICE} sends e and n as the public key to ${constants_1.ACTORS.BOB} and ${constants_1.ACTORS.EVE}.`, () => {
|
|
49
|
+
console.log(`\t${constants_1.ACTORS.ALICE} has the following numbers:`);
|
|
50
|
+
utilities_1.log.list([
|
|
51
|
+
{ name: "P", value: p },
|
|
52
|
+
{ name: "Q", value: q },
|
|
53
|
+
{ name: "n", value: n },
|
|
54
|
+
{ name: "r", value: r },
|
|
55
|
+
{ name: "e", value: e },
|
|
56
|
+
{ name: "d", value: d },
|
|
57
|
+
]);
|
|
58
|
+
});
|
|
59
|
+
const message = "This is a hardcoded secret message.";
|
|
60
|
+
const arrayOfEncryptedCode = await utilities_1.inquire.continue(`${constants_1.ACTORS.BOB} encrypts the message and sends it back to ${constants_1.ACTORS.ALICE} (while ${constants_1.ACTORS.EVE} is eavesdropping).`, () => {
|
|
61
|
+
const arrayOfEncryptedCode = wrap_1.wrap.encrypt(message, (code) => {
|
|
62
|
+
return (0, fast_modular_exponentiation_1.default)(BigInt(code), e, n);
|
|
63
|
+
});
|
|
64
|
+
console.log(`\tEncrypted message: ${chalk_1.default.gray(arrayOfEncryptedCode)}`);
|
|
65
|
+
const messageDecrypted = wrap_1.wrap.decrypt(arrayOfEncryptedCode, (codeEncrypted) => {
|
|
66
|
+
return (0, fast_modular_exponentiation_1.default)(codeEncrypted, d, n);
|
|
67
|
+
});
|
|
68
|
+
console.log(`\n\t${constants_1.ACTORS.ALICE} can decrypt the message since she has the private key ${chalk_1.default.bold.bgCyan("(d, n)")}.\n\tDecrypted message: ${chalk_1.default.gray(messageDecrypted)}\n\t${constants_1.ACTORS.ALICE} verifies the message with ${constants_1.ACTORS.BOB} privately.`);
|
|
69
|
+
return arrayOfEncryptedCode;
|
|
70
|
+
});
|
|
71
|
+
await utilities_1.inquire.continue(`${constants_1.ACTORS.EVE} is going to decrypt the secret message.`, () => {
|
|
72
|
+
console.log(`\tNow ${constants_1.ACTORS.EVE} has the following stuff:`);
|
|
73
|
+
utilities_1.log.list([
|
|
74
|
+
{ name: "n", value: n },
|
|
75
|
+
{ name: "e", value: e },
|
|
76
|
+
{ name: "secret message", value: arrayOfEncryptedCode },
|
|
77
|
+
]);
|
|
78
|
+
console.log(`\n\t${constants_1.ACTORS.EVE} is going to factor n and derive private key d from the public key ${chalk_1.default.bold.bgCyan("(e, n)")} and other information.`);
|
|
79
|
+
const factors = (0, pollard_p_1_factorization_1.default)(n);
|
|
80
|
+
if (factors.length < 2) {
|
|
81
|
+
throw new Error("Eve failed to factor n.");
|
|
82
|
+
}
|
|
83
|
+
const primeP = BigInt(factors[0]);
|
|
84
|
+
const primeQ = n / primeP;
|
|
85
|
+
const phi = (primeP - 1n) * (primeQ - 1n);
|
|
86
|
+
const [gcd, coefficient] = (0, extended_euclidean_1.default)(e, phi);
|
|
87
|
+
if (gcd !== 1n) {
|
|
88
|
+
throw new Error("Eve failed to derive d from factors.");
|
|
89
|
+
}
|
|
90
|
+
const dEavesdropped = ((coefficient % phi) + phi) % phi;
|
|
91
|
+
console.log(`\tPrivate key ${chalk_1.default.bold.bgCyan("(d, n)")}: ${chalk_1.default.gray(`(${dEavesdropped}, ${n})`)}`);
|
|
92
|
+
const messageEavesdropped = wrap_1.wrap.decrypt(arrayOfEncryptedCode, (codeEncrypted) => {
|
|
93
|
+
return (0, fast_modular_exponentiation_1.default)(codeEncrypted, dEavesdropped, n);
|
|
94
|
+
});
|
|
95
|
+
console.log(`\tDecrypted message: ${chalk_1.default.gray(messageEavesdropped)}\n\t${constants_1.ACTORS.EVE} verifies the message with ${constants_1.ACTORS.BOB}.`);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=RSA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RSA.js","sourceRoot":"","sources":["../../source/key-encryptions/RSA.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math.js","sourceRoot":"","sources":["../../../source/shared/algorithm/math.ts"],"names":[],"mappings":";;;AAAa,QAAA,IAAI,GAAG;IAClB,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;QAC1B,OAAO,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5C,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.randomBigIntBits = randomBigIntBits;
|
|
4
|
+
exports.randomBigIntBetween = randomBigIntBetween;
|
|
5
|
+
const crypto_1 = require("crypto");
|
|
6
|
+
function fillRandom(buffer) {
|
|
7
|
+
const cryptoProvider = globalThis.crypto ?? crypto_1.webcrypto;
|
|
8
|
+
if (cryptoProvider?.getRandomValues) {
|
|
9
|
+
cryptoProvider.getRandomValues(buffer);
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const bytes = (0, crypto_1.randomBytes)(buffer.length);
|
|
13
|
+
buffer.set(bytes);
|
|
14
|
+
}
|
|
15
|
+
function randomBigIntBitsInternal(bits, forceTopBit) {
|
|
16
|
+
if (!Number.isInteger(bits) || bits <= 0) {
|
|
17
|
+
throw new Error("bits must be a positive integer.");
|
|
18
|
+
}
|
|
19
|
+
const byteLength = Math.ceil(bits / 8);
|
|
20
|
+
const bytes = new Uint8Array(byteLength);
|
|
21
|
+
fillRandom(bytes);
|
|
22
|
+
const excessBits = byteLength * 8 - bits;
|
|
23
|
+
if (excessBits > 0) {
|
|
24
|
+
const mask = 0xff >>> excessBits;
|
|
25
|
+
bytes[0] &= mask;
|
|
26
|
+
}
|
|
27
|
+
if (forceTopBit && bits > 1) {
|
|
28
|
+
const topBit = (bits - 1) % 8;
|
|
29
|
+
bytes[0] |= 1 << topBit;
|
|
30
|
+
}
|
|
31
|
+
return BigInt(`0x${Buffer.from(bytes).toString("hex")}`);
|
|
32
|
+
}
|
|
33
|
+
function randomBigIntBits(bits) {
|
|
34
|
+
return randomBigIntBitsInternal(bits, true);
|
|
35
|
+
}
|
|
36
|
+
function randomBigIntBetween(min, max) {
|
|
37
|
+
if (max < min) {
|
|
38
|
+
throw new Error("max must be greater than or equal to min.");
|
|
39
|
+
}
|
|
40
|
+
if (max === min) {
|
|
41
|
+
return min;
|
|
42
|
+
}
|
|
43
|
+
const range = max - min + 1n;
|
|
44
|
+
const bits = range.toString(2).length;
|
|
45
|
+
while (true) {
|
|
46
|
+
const candidate = randomBigIntBitsInternal(bits, false);
|
|
47
|
+
if (candidate < range) {
|
|
48
|
+
return min + candidate;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=random.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"random.js","sourceRoot":"","sources":["../../../source/shared/algorithm/random.ts"],"names":[],"mappings":";;AAoCA,4CAEC;AAED,kDAkBC;AA1DD,mCAAgD;AAEhD,SAAS,UAAU,CAAC,MAAkB;IACpC,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,IAAI,kBAAS,CAAC;IACtD,IAAI,cAAc,EAAE,eAAe,EAAE,CAAC;QACpC,cAAc,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,IAAA,oBAAW,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAY,EAAE,WAAoB;IAClE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;IACzC,UAAU,CAAC,KAAK,CAAC,CAAC;IAElB,MAAM,UAAU,GAAG,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC;IACzC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,IAAI,KAAK,UAAU,CAAC;QACjC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,WAAW,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9B,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;IAC1B,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,OAAO,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,SAAgB,mBAAmB,CAAC,GAAW,EAAE,GAAW;IAC1D,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;QAChB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAEtC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,wBAAwB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxD,IAAI,SAAS,GAAG,KAAK,EAAE,CAAC;YACtB,OAAO,GAAG,GAAG,SAAS,CAAC;QACzB,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_U64 = exports.MAX_I64 = exports.MIN_I64 = exports.I64_BYTES = void 0;
|
|
4
|
+
exports.getAlgorithmWASMExports = getAlgorithmWASMExports;
|
|
5
|
+
exports.withAlgorithmWASM = withAlgorithmWASM;
|
|
6
|
+
exports.createWASMInvoker = createWASMInvoker;
|
|
7
|
+
exports.fitsInI64 = fitsInI64;
|
|
8
|
+
exports.fitsInU64 = fitsInU64;
|
|
9
|
+
exports.normalizeI64 = normalizeI64;
|
|
10
|
+
exports.createI64Allocator = createI64Allocator;
|
|
11
|
+
const fs_1 = require("fs");
|
|
12
|
+
const path_1 = require("path");
|
|
13
|
+
const wasmExportsByAlgorithm = new Map();
|
|
14
|
+
exports.I64_BYTES = 8;
|
|
15
|
+
exports.MIN_I64 = -(1n << 63n);
|
|
16
|
+
exports.MAX_I64 = (1n << 63n) - 1n;
|
|
17
|
+
exports.MAX_U64 = (1n << 64n) - 1n;
|
|
18
|
+
function getAlgorithmWASMExports(key) {
|
|
19
|
+
if (wasmExportsByAlgorithm.has(key)) {
|
|
20
|
+
return wasmExportsByAlgorithm.get(key) ?? null;
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
const wasmPath = (0, path_1.join)(__dirname, "..", "..", "algorithms", key, "main.wasm");
|
|
24
|
+
const wasmBytes = (0, fs_1.readFileSync)(wasmPath);
|
|
25
|
+
const module = new WebAssembly.Module(wasmBytes);
|
|
26
|
+
const instance = new WebAssembly.Instance(module, {});
|
|
27
|
+
const wasmExports = instance.exports;
|
|
28
|
+
if (!wasmExports.memory) {
|
|
29
|
+
wasmExportsByAlgorithm.set(key, null);
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
wasmExportsByAlgorithm.set(key, wasmExports);
|
|
33
|
+
return wasmExports;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
wasmExportsByAlgorithm.set(key, null);
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function withAlgorithmWASM(key, execute) {
|
|
41
|
+
const wasmExports = getAlgorithmWASMExports(key);
|
|
42
|
+
if (!wasmExports) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
return execute(wasmExports);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function createWASMInvoker(key, execute) {
|
|
53
|
+
return (...args) => {
|
|
54
|
+
return withAlgorithmWASM(key, (wasmExports) => execute(wasmExports, ...args));
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function fitsInI64(value) {
|
|
58
|
+
return value >= exports.MIN_I64 && value <= exports.MAX_I64;
|
|
59
|
+
}
|
|
60
|
+
function fitsInU64(value) {
|
|
61
|
+
return value >= 0n && value <= exports.MAX_U64;
|
|
62
|
+
}
|
|
63
|
+
function normalizeI64(value) {
|
|
64
|
+
return BigInt.asIntN(64, value);
|
|
65
|
+
}
|
|
66
|
+
function createI64Allocator(wasmExports) {
|
|
67
|
+
let heapOffset = 4096;
|
|
68
|
+
const ensureMemorySize = (bytesNeeded) => {
|
|
69
|
+
if (!wasmExports?.memory) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
const totalNeeded = heapOffset + bytesNeeded;
|
|
73
|
+
const currentBytes = wasmExports.memory.buffer.byteLength;
|
|
74
|
+
if (totalNeeded <= currentBytes) {
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
const pageSize = 64 * 1024;
|
|
78
|
+
const missing = totalNeeded - currentBytes;
|
|
79
|
+
const pages = Math.ceil(missing / pageSize);
|
|
80
|
+
wasmExports.memory.grow(pages);
|
|
81
|
+
return true;
|
|
82
|
+
};
|
|
83
|
+
return {
|
|
84
|
+
reset() {
|
|
85
|
+
heapOffset = 4096;
|
|
86
|
+
},
|
|
87
|
+
allocate(bytes) {
|
|
88
|
+
const aligned = (heapOffset + 7) & ~7;
|
|
89
|
+
heapOffset = aligned;
|
|
90
|
+
if (!ensureMemorySize(bytes)) {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
const ptr = heapOffset;
|
|
94
|
+
heapOffset += bytes;
|
|
95
|
+
return ptr;
|
|
96
|
+
},
|
|
97
|
+
view() {
|
|
98
|
+
if (!wasmExports?.memory) {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
return new BigInt64Array(wasmExports.memory.buffer);
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=wasm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm.js","sourceRoot":"","sources":["../../../source/shared/algorithm/wasm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.wrap = void 0;
|
|
7
|
+
const miller_rabin_primarily_test_1 = __importDefault(require("../../algorithms/miller-rabin-primarily-test"));
|
|
8
|
+
const random_1 = require("../../shared/algorithm/random");
|
|
9
|
+
exports.wrap = {
|
|
10
|
+
randomize: (bits, level, count) => {
|
|
11
|
+
if (!Number.isInteger(bits) || bits < 8) {
|
|
12
|
+
throw new Error("bits must be an integer and at least 8.");
|
|
13
|
+
}
|
|
14
|
+
const randomOdd = () => {
|
|
15
|
+
let candidate = (0, random_1.randomBigIntBits)(bits);
|
|
16
|
+
if ((candidate & 1n) === 0n) {
|
|
17
|
+
candidate += 1n;
|
|
18
|
+
}
|
|
19
|
+
return candidate;
|
|
20
|
+
};
|
|
21
|
+
const arrayOfPrime = [];
|
|
22
|
+
while (arrayOfPrime.length !== count) {
|
|
23
|
+
const candidate = randomOdd();
|
|
24
|
+
if ((0, miller_rabin_primarily_test_1.default)(candidate, level)) {
|
|
25
|
+
arrayOfPrime.push(candidate);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return arrayOfPrime;
|
|
29
|
+
},
|
|
30
|
+
remain: (modulo, remainder) => {
|
|
31
|
+
if (remainder >= modulo) {
|
|
32
|
+
throw new Error("Desired remainder can't be equal to or larger than the given modulo.");
|
|
33
|
+
}
|
|
34
|
+
const arrayOfResult = [];
|
|
35
|
+
let cache = modulo + remainder;
|
|
36
|
+
for (let i = 0; i < 10; i++) {
|
|
37
|
+
arrayOfResult.push(cache);
|
|
38
|
+
cache = cache + modulo;
|
|
39
|
+
}
|
|
40
|
+
return arrayOfResult;
|
|
41
|
+
},
|
|
42
|
+
encrypt: (message, callback) => {
|
|
43
|
+
return message.split("").map((character) => {
|
|
44
|
+
const code = character.charCodeAt(0);
|
|
45
|
+
return callback(code);
|
|
46
|
+
});
|
|
47
|
+
},
|
|
48
|
+
decrypt: (arrayOfEncryptedCode, callback) => {
|
|
49
|
+
return arrayOfEncryptedCode
|
|
50
|
+
.map((codeEncrypted) => {
|
|
51
|
+
const code = callback(codeEncrypted);
|
|
52
|
+
return String.fromCharCode(Number(code));
|
|
53
|
+
})
|
|
54
|
+
.join("");
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=wrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrap.js","sourceRoot":"","sources":["../../../source/shared/algorithm/wrap.ts"],"names":[],"mappings":";;;;;;AAAA,2GAAgF;AAChF,sDAA6D;AAEhD,QAAA,IAAI,GAAG;IAClB,SAAS,EAAE,CAAC,IAAY,EAAE,KAAa,EAAE,KAAa,EAAE,EAAE;QACxD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,SAAS,GAAG,GAAG,EAAE;YACrB,IAAI,SAAS,GAAG,IAAA,yBAAgB,EAAC,IAAI,CAAC,CAAC;YACvC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;gBAC5B,SAAS,IAAI,EAAE,CAAC;YAClB,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC;QAEF,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,OAAO,YAAY,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC;YAC9B,IAAI,IAAA,qCAAwB,EAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;gBAC/C,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,MAAM,EAAE,CAAC,MAAc,EAAE,SAAiB,EAAE,EAAE;QAC5C,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,sEAAsE,CACvE,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAa,EAAE,CAAC;QAEnC,IAAI,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;QACzB,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,OAAO,EAAE,CAAC,OAAe,EAAE,QAAkC,EAAE,EAAE;QAC/D,OAAO,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;YACzC,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACrC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,CACP,oBAA8B,EAC9B,QAA2C,EAC3C,EAAE;QACF,OAAO,oBAAoB;aACxB,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE;YACrB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;YACrC,OAAO,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC;aACD,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const chalk_1 = __importDefault(require("../../shared/cli/chalk"));
|
|
7
|
+
const constants_1 = require("../../shared/constants");
|
|
8
|
+
const inquirer_1 = require("../../shared/cli/inquirer");
|
|
9
|
+
class Procedure {
|
|
10
|
+
run;
|
|
11
|
+
constructor(name, callback, options = {}) {
|
|
12
|
+
const isRestartable = options.restartable ?? true;
|
|
13
|
+
const runProcedure = async () => {
|
|
14
|
+
const timestamp = Date.now().toString(36).toUpperCase();
|
|
15
|
+
console.log(chalk_1.default.bold(`\tProcedure identifier: ${timestamp}`));
|
|
16
|
+
console.time(chalk_1.default.bold(`\tTime consumed for ${timestamp}`));
|
|
17
|
+
await callback();
|
|
18
|
+
console.timeEnd(chalk_1.default.bold(`\tTime consumed for ${timestamp}`));
|
|
19
|
+
};
|
|
20
|
+
this.run = async function () {
|
|
21
|
+
try {
|
|
22
|
+
console.log(chalk_1.default.bgCyan.bold(`\n ${constants_1.SYMBOLS.ARROW_DOWNLOAD_BOTTOM} ${name} `));
|
|
23
|
+
await runProcedure();
|
|
24
|
+
if (isRestartable) {
|
|
25
|
+
while (true) {
|
|
26
|
+
const inquirer = await (0, inquirer_1.getInquirer)();
|
|
27
|
+
const { _: isRestart } = await inquirer.prompt([
|
|
28
|
+
{
|
|
29
|
+
type: "confirm",
|
|
30
|
+
name: "_",
|
|
31
|
+
message: "Do you want to restart this procedure?",
|
|
32
|
+
default: false,
|
|
33
|
+
},
|
|
34
|
+
]);
|
|
35
|
+
if (isRestart)
|
|
36
|
+
await runProcedure();
|
|
37
|
+
else
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
console.log(chalk_1.default.bgCyan.bold(` ${constants_1.SYMBOLS.ARROW_DOWNLOAD_TOP} ${name} `));
|
|
42
|
+
console.log(chalk_1.default.gray("Going back to the previous menu.\n"));
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.default = Procedure;
|
|
51
|
+
//# sourceMappingURL=Procedure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Procedure.js","sourceRoot":"","sources":["../../../source/shared/cli/Procedure.ts"],"names":[],"mappings":";;;;;AAAA,+DAAuC;AACvC,kDAA6C;AAC7C,oDAAoD;AAMpD,MAAqB,SAAS;IACrB,GAAG,CAAsB;IAEhC,YACE,IAAY,EACZ,QAAgC,EAChC,UAA6B,EAAE;QAE/B,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC;QAElD,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;YAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,uBAAuB,SAAS,EAAE,CAAC,CAAC,CAAC;YAC7D,MAAM,QAAQ,EAAE,CAAC;YACjB,OAAO,CAAC,OAAO,CAAC,eAAK,CAAC,IAAI,CAAC,uBAAuB,SAAS,EAAE,CAAC,CAAC,CAAC;QAClE,CAAC,CAAC;QAEF,IAAI,CAAC,GAAG,GAAG,KAAK;YACd,IAAI,CAAC;gBACH,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,mBAAO,CAAC,qBAAqB,IAAI,IAAI,GAAG,CAAC,CAClE,CAAC;gBACF,MAAM,YAAY,EAAE,CAAC;gBAErB,IAAI,aAAa,EAAE,CAAC;oBAClB,OAAO,IAAI,EAAE,CAAC;wBACZ,MAAM,QAAQ,GAAG,MAAM,IAAA,sBAAW,GAAE,CAAC;wBACrC,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAE3C;4BACD;gCACE,IAAI,EAAE,SAAS;gCACf,IAAI,EAAE,GAAG;gCACT,OAAO,EAAE,wCAAwC;gCACjD,OAAO,EAAE,KAAK;6BACf;yBACF,CAAC,CAAC;wBACH,IAAI,SAAS;4BAAE,MAAM,YAAY,EAAE,CAAC;;4BAC/B,MAAM;oBACb,CAAC;gBACH,CAAC;gBAED,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,mBAAO,CAAC,kBAAkB,IAAI,IAAI,GAAG,CAAC,CAC7D,CAAC;gBACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;YAChE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;CACF;AApDD,4BAoDC"}
|