@siegesailor/cryptography 1.0.0 → 2.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/README.md +4 -2
- package/build/algorithms/baby-step-giant-step/index.js +15 -0
- package/build/algorithms/baby-step-giant-step/index.js.map +1 -1
- package/build/algorithms/blum-blum-shub/index.js +11 -0
- package/build/algorithms/blum-blum-shub/index.js.map +1 -1
- package/build/algorithms/chinese-remainder/index.js +14 -0
- package/build/algorithms/chinese-remainder/index.js.map +1 -1
- package/build/algorithms/euclidean/index.js +9 -0
- package/build/algorithms/euclidean/index.js.map +1 -1
- package/build/algorithms/extended-euclidean/index.js +9 -0
- package/build/algorithms/extended-euclidean/index.js.map +1 -1
- package/build/algorithms/fast-modular-exponentiation/index.js +12 -0
- package/build/algorithms/fast-modular-exponentiation/index.js.map +1 -1
- package/build/algorithms/miller-rabin-primarily-test/index.js +10 -0
- package/build/algorithms/miller-rabin-primarily-test/index.js.map +1 -1
- package/build/algorithms/multiplicative-inverse/index.js +13 -0
- package/build/algorithms/multiplicative-inverse/index.js.map +1 -1
- package/build/algorithms/naor-reingo/index.js +11 -0
- package/build/algorithms/naor-reingo/index.js.map +1 -1
- package/build/algorithms/pollard-p-1-factorization/index.js +11 -0
- package/build/algorithms/pollard-p-1-factorization/index.js.map +1 -1
- package/build/algorithms/pollard-rho/index.js +9 -0
- package/build/algorithms/pollard-rho/index.js.map +1 -1
- package/build/algorithms/primitive-root-search/index.js +9 -0
- package/build/algorithms/primitive-root-search/index.js.map +1 -1
- package/build/command.js +1 -0
- package/build/command.js.map +1 -1
- package/build/shared/algorithm/random.js +1 -1
- package/build/shared/algorithm/random.js.map +1 -1
- package/package.json +8 -13
package/README.md
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
# Cryptography
|
|
2
2
|
|
|
3
|
-
[](https://www.npmjs.com/package/@siegesailor/cryptography)
|
|
4
|
+
[](https://github.com/SiegeSailor/Cryptography/actions/workflows/test.yml)
|
|
5
|
+
[](https://github.com/SiegeSailor/Cryptography/actions/workflows/release.yml)
|
|
4
6
|
|
|
5
|
-
This
|
|
7
|
+
This project is inspired by [Boston University MET CS 789 Cryptography](https://www.bu.edu/academics/met/courses/met-cs-789/) for understanding the implementation of various cryptographic algorithms and their applications in key encryption flows. The library is production-ready, with a focus on security and performance. It includes implementations for:
|
|
6
8
|
|
|
7
9
|
| Algorithm | JavaScript | TypeScript | WebAssembly |
|
|
8
10
|
| --------------------------- | ---------- | ---------- | ----------- |
|
|
@@ -25,6 +25,21 @@ const runWASMBabyStepGiantStep = (0, wasm_1.createWASMInvoker)("baby-step-giant-
|
|
|
25
25
|
const result = wasmExports.baby_step_giant_step_i64(generator, base, modulo, limit);
|
|
26
26
|
return result < 0n ? null : result;
|
|
27
27
|
});
|
|
28
|
+
/**
|
|
29
|
+
* Solves the discrete logarithm problem by finding an exponent x such that
|
|
30
|
+
* generator^x is congruent to base modulo modulo.
|
|
31
|
+
*
|
|
32
|
+
* The congruence is evaluated in the multiplicative group modulo modulo, so the
|
|
33
|
+
* generator and base must both be coprime with the modulus.
|
|
34
|
+
*
|
|
35
|
+
* @param generator Base whose powers are searched in the congruence relation.
|
|
36
|
+
* @param base Target residue in the congruence relation.
|
|
37
|
+
* @param modulo Modulus of the congruence; must be greater than 1.
|
|
38
|
+
* @returns The exponent x when a solution is found, or -1n when no solution is found.
|
|
39
|
+
* @throws {Error} When modulo is not greater than 1.
|
|
40
|
+
* @throws {Error} When generator and modulo are not coprime.
|
|
41
|
+
* @throws {Error} When base and modulo are not coprime.
|
|
42
|
+
*/
|
|
28
43
|
function main(generator, base, modulo) {
|
|
29
44
|
if (modulo <= 1)
|
|
30
45
|
throw new Error("Given modulo must be higher than 1");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/baby-step-giant-step/index.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/baby-step-giant-step/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,17 @@ const runWASMBlumBlumShubNext = (0, wasm_1.createWASMInvoker)("blum-blum-shub",
|
|
|
21
21
|
}
|
|
22
22
|
return wasmExports.blum_blum_shub_next_u64(state, modulus);
|
|
23
23
|
});
|
|
24
|
+
/**
|
|
25
|
+
* Initializes a Blum Blum Shub generator over quadratic residues modulo M = pq,
|
|
26
|
+
* where p and q are distinct Blum primes with p ≡ q ≡ 3 (mod 4).
|
|
27
|
+
*
|
|
28
|
+
* The returned closure advances the recurrence x_(n+1) = x_n^2 mod M and yields
|
|
29
|
+
* the next generator state each time it is called.
|
|
30
|
+
*
|
|
31
|
+
* @param bits Bit length used when generating each Blum prime factor.
|
|
32
|
+
* @returns A stateful zero-argument generator function that produces successive pseudorandom states.
|
|
33
|
+
* @throws {Error} When bits is not an integer or is smaller than 8.
|
|
34
|
+
*/
|
|
24
35
|
function main(bits) {
|
|
25
36
|
if (!Number.isInteger(bits) || bits < 8) {
|
|
26
37
|
throw new Error("Given bits must be an integer and at least 8.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/blum-blum-shub/index.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/blum-blum-shub/index.ts"],"names":[],"mappings":";;;;;AAyCA,uBAkDC;AA+BD,wBAEC;AA5HD,uEAA+C;AAC/C,2GAAgF;AAChF,sDAGmC;AACnC,kDAAuE;AACvE,+DAAuC;AACvC,gDAG6B;AAE7B,MAAM,uBAAuB,GAAG,IAAA,wBAAiB,EAC/C,gBAAgB,EAChB,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAC9B,IACE,CAAC,WAAW,CAAC,uBAAuB;QACpC,KAAK,GAAG,EAAE;QACV,OAAO,IAAI,EAAE;QACb,CAAC,IAAA,gBAAS,EAAC,KAAK,CAAC;QACjB,CAAC,IAAA,gBAAS,EAAC,OAAO,CAAC,EACnB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,WAAW,CAAC,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC7D,CAAC,CACF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,SAAwB,IAAI,CAAC,IAAY;IACvC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE1D,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAE,EAAE;QACzC,IAAI,SAAS,GAAG,IAAA,yBAAgB,EAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,KAAK,EAAE;YAAE,SAAS,IAAI,EAAE,CAAC;QAC7C,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAE,EAAE;QACzC,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,SAAS,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC1B,SAAS,IAAI,CAAC,EAAE,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;YACjD,CAAC;YACD,IAAI,IAAA,qCAAwB,EAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC;gBACnD,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACf,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAEhB,IAAI,IAAI,GAAG,IAAA,4BAAmB,EAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3C,OAAO,IAAA,mBAAS,EAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QACjC,IAAI,GAAG,IAAA,4BAAmB,EAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAE/B,OAAO,GAAG,EAAE;QACV,MAAM,eAAe,GAAG,uBAAuB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC3D,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;YAC7B,MAAM,GAAG,eAAe,CAAC;YACzB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,SAAS,GAAG,IAAA,8BAAqB,EACrC,gBAAgB,EAChB,KAAK,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE;IAC3B,SAAS,CAAC,uDAAuD,CAAC,CAAC;IACnE,SAAS,CACP,eAAK,CAAC,IAAI,CACR,8BAA8B,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAChE,CACF,CAAC;IAEF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAmB;QAC3C;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,SAAS,eAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG;YACzC,OAAO,EAAE,CAAC;SACX;KACF,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC5B,SAAS,CAAC,KAAK,IAAI,YAAY,MAAM,EAAE,CAAC,CAAC;IAEzC,OAAO;QACL,MAAM,EAAE,EAAE,IAAI,EAAE;QAChB,MAAM;KACP,CAAC;AACJ,CAAC,CACF,CAAC;AAEK,KAAK,UAAU,MAAM,CAAC,OAAwB;IACnD,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -36,6 +36,20 @@ const runWASMChineseRemainder = (0, wasm_1.createWASMInvoker)("chinese-remainder
|
|
|
36
36
|
const result = wasmExports.chinese_remainder_i64(remaindersPtr, modulosPtr, remainders.length);
|
|
37
37
|
return result === wasm_1.MIN_I64 ? null : result;
|
|
38
38
|
});
|
|
39
|
+
/**
|
|
40
|
+
* Solves a system of simultaneous congruences with the Chinese Remainder Theorem.
|
|
41
|
+
*
|
|
42
|
+
* When the moduli are pairwise coprime, the system has a unique solution modulo
|
|
43
|
+
* the product of all moduli, and this function returns its least non-negative representative.
|
|
44
|
+
*
|
|
45
|
+
* @param arrayOfBase Remainders r_i in congruences of the form x ≡ r_i (mod m_i).
|
|
46
|
+
* @param arrayOfModulo Moduli m_i that define each congruence.
|
|
47
|
+
* @returns The least non-negative solution as a JavaScript number.
|
|
48
|
+
* @throws {Error} When the remainder and modulus arrays have different lengths.
|
|
49
|
+
* @throws {Error} When the moduli are not pairwise coprime.
|
|
50
|
+
* @throws {Error} When a required modular inverse cannot be computed.
|
|
51
|
+
* @throws {Error} When the result exceeds Number.MAX_SAFE_INTEGER.
|
|
52
|
+
*/
|
|
39
53
|
function main(arrayOfBase, arrayOfModulo) {
|
|
40
54
|
if (arrayOfBase.length !== arrayOfModulo.length)
|
|
41
55
|
throw new Error("The length for the two given arrays should be the same.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/chinese-remainder/index.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/chinese-remainder/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,15 @@ const runWASMGcd = (0, wasm_1.createWASMInvoker)("euclidean", (wasmExports, left
|
|
|
18
18
|
}
|
|
19
19
|
return wasmExports.gcd_u64(left, right);
|
|
20
20
|
});
|
|
21
|
+
/**
|
|
22
|
+
* Computes the greatest common divisor of two integers with the Euclidean algorithm.
|
|
23
|
+
*
|
|
24
|
+
* The result is the largest integer that divides both inputs, and it is 0n only when both inputs are 0n.
|
|
25
|
+
*
|
|
26
|
+
* @param left First integer in the gcd computation.
|
|
27
|
+
* @param right Second integer in the gcd computation.
|
|
28
|
+
* @returns The greatest common divisor of left and right.
|
|
29
|
+
*/
|
|
21
30
|
function main(left, right) {
|
|
22
31
|
const wasmResult = runWASMGcd(left, right);
|
|
23
32
|
if (wasmResult !== null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/euclidean/index.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/euclidean/index.ts"],"names":[],"mappings":";;;;;AAiCA,uBAYC;AAiCD,wBAEC;AAhFD,kDAAuE;AACvE,+DAAuC;AACvC,gDAG6B;AAE7B,MAAM,UAAU,GAAG,IAAA,wBAAiB,EAClC,WAAW,EACX,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;IAC3B,IACE,CAAC,WAAW,CAAC,OAAO;QACpB,IAAI,GAAG,EAAE;QACT,KAAK,GAAG,EAAE;QACV,CAAC,IAAA,gBAAS,EAAC,IAAI,CAAC;QAChB,CAAC,IAAA,gBAAS,EAAC,KAAK,CAAC,EACjB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC1C,CAAC,CACF,CAAC;AAEF;;;;;;;;GAQG;AACH,SAAwB,IAAI,CAAC,IAAY,EAAE,KAAa;IACtD,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3C,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC;QACpB,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;QACrB,IAAI,GAAG,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,SAAS,GAAG,IAAA,8BAAqB,EACrC,WAAW,EACX,KAAK,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE;IAC3B,SAAS,CAAC,6BAA6B,CAAC,CAAC;IACzC,SAAS,CAAC,eAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAE7C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,GAAG,CAAkC;QACjE;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,SAAS,eAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG;YACzC,OAAO,EAAE,CAAC;SACX;QACD;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,SAAS,eAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG;YAC1C,OAAO,EAAE,CAAC;SACX;KACF,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACjD,SAAS,CAAC,SAAS,IAAI,KAAK,KAAK,OAAO,MAAM,EAAE,CAAC,CAAC;IAElD,OAAO;QACL,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACvB,MAAM;KACP,CAAC;AACJ,CAAC,CACF,CAAC;AAEK,KAAK,UAAU,MAAM,CAAC,OAAwB;IACnD,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -30,6 +30,15 @@ const runWASMExtendedEuclidean = (0, wasm_1.createWASMInvoker)("extended-euclide
|
|
|
30
30
|
view[yPtr / wasm_1.I64_BYTES],
|
|
31
31
|
];
|
|
32
32
|
});
|
|
33
|
+
/**
|
|
34
|
+
* Computes the greatest common divisor together with Bezout coefficients for two integers.
|
|
35
|
+
*
|
|
36
|
+
* The returned tuple [gcd, x, y] satisfies left * x + right * y = gcd, which is the standard Bezout identity.
|
|
37
|
+
*
|
|
38
|
+
* @param left First integer in the Bezout identity.
|
|
39
|
+
* @param right Second integer in the Bezout identity.
|
|
40
|
+
* @returns A tuple [gcd, x, y] where gcd is the greatest common divisor of the inputs.
|
|
41
|
+
*/
|
|
33
42
|
function main(left, right) {
|
|
34
43
|
const wasmResult = runWASMExtendedEuclidean(left, right);
|
|
35
44
|
if (wasmResult !== null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/extended-euclidean/index.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/extended-euclidean/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,18 @@ const runWASMPowMod = (0, wasm_1.createWASMInvoker)("fast-modular-exponentiation
|
|
|
21
21
|
}
|
|
22
22
|
return wasmExports.powmod_u64(base, exponent, modulo);
|
|
23
23
|
});
|
|
24
|
+
/**
|
|
25
|
+
* Computes modular exponentiation by evaluating base^exponent modulo modulo.
|
|
26
|
+
*
|
|
27
|
+
* The result is calculated with binary exponentiation, which keeps the intermediate values inside the residue class ring modulo modulo.
|
|
28
|
+
*
|
|
29
|
+
* @param base Base value whose power is computed.
|
|
30
|
+
* @param exponent Non-negative exponent applied to the base.
|
|
31
|
+
* @param modulo Positive modulus that defines the residue class ring.
|
|
32
|
+
* @returns The least non-negative residue of base^exponent modulo modulo.
|
|
33
|
+
* @throws {Error} When modulo is not greater than 0.
|
|
34
|
+
* @throws {Error} When exponent is negative.
|
|
35
|
+
*/
|
|
24
36
|
function main(base, exponent, modulo) {
|
|
25
37
|
if (modulo <= 0n) {
|
|
26
38
|
throw new Error("modulo must be greater than 0.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/fast-modular-exponentiation/index.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/fast-modular-exponentiation/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,16 @@ const runWASMMillerRabin = (0, wasm_1.createWASMInvoker)("miller-rabin-primarily
|
|
|
20
20
|
}
|
|
21
21
|
return wasmExports.miller_rabin_u64(input, level) === 1;
|
|
22
22
|
});
|
|
23
|
+
/**
|
|
24
|
+
* Performs the Miller-Rabin probable-prime test on an integer.
|
|
25
|
+
*
|
|
26
|
+
* Each witness round checks whether input behaves like a prime in the multiplicative group modulo input, so a true result means input is a probable prime rather than a proof of primality.
|
|
27
|
+
*
|
|
28
|
+
* @param input Integer to classify as composite or probable prime.
|
|
29
|
+
* @param level Number of witness rounds used to reduce the probability of a false positive.
|
|
30
|
+
* @returns False when a witness proves the number composite, or true when all rounds pass.
|
|
31
|
+
* @throws {Error} When level is not a positive integer.
|
|
32
|
+
*/
|
|
23
33
|
function main(input, level) {
|
|
24
34
|
if (input <= 1n || input === 4n)
|
|
25
35
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/miller-rabin-primarily-test/index.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/miller-rabin-primarily-test/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,19 @@ const runWASMMultiplicativeInverse = (0, wasm_1.createWASMInvoker)("multiplicati
|
|
|
22
22
|
}
|
|
23
23
|
return value;
|
|
24
24
|
});
|
|
25
|
+
/**
|
|
26
|
+
* Computes a modular inverse and lists its first positive integer multiples.
|
|
27
|
+
*
|
|
28
|
+
* When gcd(base, modulo) = 1, the first returned value is the least non-negative x such that base * x ≡ 1 (mod modulo), and each later value is the next positive multiple of that inverse.
|
|
29
|
+
*
|
|
30
|
+
* @param base Integer whose multiplicative inverse is computed modulo modulo.
|
|
31
|
+
* @param modulo Modulus that defines the congruence relation and must be greater than 1.
|
|
32
|
+
* @param number Count of positive multiples to return.
|
|
33
|
+
* @returns An array whose first element is the modular inverse and whose remaining elements are successive positive multiples of that inverse.
|
|
34
|
+
* @throws {Error} When modulo is not greater than 1.
|
|
35
|
+
* @throws {Error} When number is not a positive integer.
|
|
36
|
+
* @throws {Error} When base and modulo are not coprime.
|
|
37
|
+
*/
|
|
25
38
|
function main(base, modulo, number) {
|
|
26
39
|
if (modulo <= 1n) {
|
|
27
40
|
throw new Error("modulo must be greater than 1.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/multiplicative-inverse/index.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/multiplicative-inverse/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,6 +36,17 @@ const runWASMNaorReingo = (0, wasm_1.createWASMInvoker)("naor-reingo", (wasmExpo
|
|
|
36
36
|
}
|
|
37
37
|
return values;
|
|
38
38
|
});
|
|
39
|
+
/**
|
|
40
|
+
* Generates pseudorandom positive integers with a fixed decimal digit length.
|
|
41
|
+
*
|
|
42
|
+
* Each returned value lies in the interval [10^(digits - 1), 10^digits - 1], so every output has exactly the requested number of decimal digits.
|
|
43
|
+
*
|
|
44
|
+
* @param count Number of values to generate.
|
|
45
|
+
* @param digits Decimal digit length required for each generated value.
|
|
46
|
+
* @returns An array of generated values as JavaScript numbers.
|
|
47
|
+
* @throws {Error} When count is not a positive integer.
|
|
48
|
+
* @throws {Error} When digits is not a positive integer.
|
|
49
|
+
*/
|
|
39
50
|
function main(count, digits) {
|
|
40
51
|
if (!Number.isInteger(count) || count <= 0) {
|
|
41
52
|
throw new Error("count must be a positive integer.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/naor-reingo/index.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/naor-reingo/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,17 @@ const runWASMPollardP1 = (0, wasm_1.createWASMInvoker)("pollard-p-1-factorizatio
|
|
|
22
22
|
const result = wasmExports.pollard_p1_i64(input, maxExponent);
|
|
23
23
|
return result > 1n ? result : null;
|
|
24
24
|
});
|
|
25
|
+
/**
|
|
26
|
+
* Factors a composite integer by recursively applying Pollard's p - 1 method.
|
|
27
|
+
*
|
|
28
|
+
* The search succeeds quickly when a prime divisor p of the input has a smooth p - 1, and the implementation falls back to Pollard rho when that condition does not yield a non-trivial split.
|
|
29
|
+
*
|
|
30
|
+
* @param input Composite integer to factor.
|
|
31
|
+
* @returns An array of prime factors, including repeated factors, as JavaScript numbers.
|
|
32
|
+
* @throws {Error} When input is not greater than 1.
|
|
33
|
+
* @throws {Error} When input is prime.
|
|
34
|
+
* @throws {Error} When recursive factorization fails to produce non-trivial prime factors.
|
|
35
|
+
*/
|
|
25
36
|
function main(input) {
|
|
26
37
|
const pollardPMinusOne = (n) => {
|
|
27
38
|
const maybeWASMFactor = runWASMPollardP1(n, 2500);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/pollard-p-1-factorization/index.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/pollard-p-1-factorization/index.ts"],"names":[],"mappings":";;;;;AAuCA,uBAwDC;AA6BD,wBAEC;AA9HD,uEAA+C;AAC/C,2GAAiF;AACjF,2GAAgF;AAChF,2EAAkD;AAClD,kDAAuE;AACvE,+DAAuC;AACvC,gDAG6B;AAE7B,MAAM,gBAAgB,GAAG,IAAA,wBAAiB,EACxC,2BAA2B,EAC3B,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE;IAClC,IACE,CAAC,WAAW,CAAC,cAAc;QAC3B,CAAC,IAAA,gBAAS,EAAC,KAAK,CAAC;QACjB,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC;QAC9B,WAAW,IAAI,CAAC,EAChB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC9D,OAAO,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACrC,CAAC,CACF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,SAAwB,IAAI,CAAC,KAAa;IACxC,MAAM,gBAAgB,GAAG,CAAC,CAAS,EAAE,EAAE;QACrC,MAAM,eAAe,GAAG,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAClD,IACE,eAAe,KAAK,IAAI;YACxB,eAAe,GAAG,EAAE;YACpB,eAAe,GAAG,CAAC,EACnB,CAAC;YACD,OAAO,eAAe,CAAC;QACzB,CAAC;QAED,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,KAAK,IAAI,QAAQ,GAAG,EAAE,EAAE,QAAQ,GAAG,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC;YACrD,IAAI,GAAG,IAAA,qCAAyB,EAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,IAAA,mBAAS,EAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YACvC,IAAI,MAAM,GAAG,EAAE,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,OAAO,CAAC,EAAE,CAAC;IACb,CAAC,CAAC;IAEF,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,IAAA,qCAAwB,EAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,EAAE;QAC9B,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QACD,IAAI,IAAA,qCAAwB,EAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO;QACT,CAAC;QAED,IAAI,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,CAAC,EAAE,EAAE,CAAC;YACnB,MAAM,GAAG,IAAA,qBAAU,EAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,KAAK,8BAA8B,CAAC,CAAC;QACpE,CAAC;QAED,SAAS,CAAC,MAAM,CAAC,CAAC;QAClB,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;IACxB,CAAC,CAAC;IAEF,SAAS,CAAC,KAAK,CAAC,CAAC;IAEjB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,SAAS,GAAG,IAAA,8BAAqB,EACrC,2BAA2B,EAC3B,KAAK,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE;IAC3B,SAAS,CACP,oEAAoE,CACrE,CAAC;IACF,SAAS,CAAC,eAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC;IAE9D,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,GAAG,CAAoB;QAC7C;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,SAAS,eAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG;YACrD,OAAO,EAAE,IAAI;SACd;KACF,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACnC,SAAS,CAAC,eAAe,MAAM,EAAE,CAAC,CAAC;IAEnC,OAAO;QACL,MAAM,EAAE,EAAE,KAAK,EAAE;QACjB,MAAM;KACP,CAAC;AACJ,CAAC,CACF,CAAC;AAEK,KAAK,UAAU,MAAM,CAAC,OAAwB;IACnD,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -22,6 +22,15 @@ const runWASMPollardRho = (0, wasm_1.createWASMInvoker)("pollard-rho", (wasmExpo
|
|
|
22
22
|
}
|
|
23
23
|
return wasmExports.pollard_rho_i64(input, seed, c, maxIterations);
|
|
24
24
|
});
|
|
25
|
+
/**
|
|
26
|
+
* Searches for a non-trivial divisor of an integer with Pollard's rho method.
|
|
27
|
+
*
|
|
28
|
+
* The iteration uses the polynomial x^2 + c modulo input together with cycle detection to turn repeated residues into a gcd computation that can expose a factor.
|
|
29
|
+
*
|
|
30
|
+
* @param input Integer to factor.
|
|
31
|
+
* @returns A non-trivial factor of input, 2n for even inputs, or 1n when no factor is found after the retry limit.
|
|
32
|
+
* @throws {Error} When input is not greater than 1.
|
|
33
|
+
*/
|
|
25
34
|
function main(input) {
|
|
26
35
|
if (input <= 1n) {
|
|
27
36
|
throw new Error("input must be greater than 1.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/pollard-rho/index.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/pollard-rho/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,6 +35,15 @@ const runWASMPrimitiveRoots = (0, wasm_1.createWASMInvoker)("primitive-root-sear
|
|
|
35
35
|
}
|
|
36
36
|
return result;
|
|
37
37
|
});
|
|
38
|
+
/**
|
|
39
|
+
* Enumerates primitive roots modulo a prime and builds the corresponding power table.
|
|
40
|
+
*
|
|
41
|
+
* For a prime p, the non-zero residue classes form a cyclic multiplicative group of order p - 1; this function identifies the generators of that group and records their powers modulo p.
|
|
42
|
+
*
|
|
43
|
+
* @param prime Prime modulus whose multiplicative group is analyzed.
|
|
44
|
+
* @returns A tuple [table, roots] where table[row][column] stores (row + 1)^(column + 1) mod prime and roots lists the primitive roots modulo prime.
|
|
45
|
+
* @throws {Error} When prime is not prime.
|
|
46
|
+
*/
|
|
38
47
|
function main(prime) {
|
|
39
48
|
if (!(0, miller_rabin_primarily_test_1.default)(BigInt(prime), 10))
|
|
40
49
|
throw new Error("The Given number must be prime.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/primitive-root-search/index.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/algorithms/primitive-root-search/index.ts"],"names":[],"mappings":"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"}
|
package/build/command.js
CHANGED
package/build/command.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../source/command.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../source/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ function randomBigIntBitsInternal(bits, forceTopBit) {
|
|
|
17
17
|
throw new Error("bits must be a positive integer.");
|
|
18
18
|
}
|
|
19
19
|
const byteLength = Math.ceil(bits / 8);
|
|
20
|
-
const bytes = new Uint8Array(byteLength);
|
|
20
|
+
const bytes = new Uint8Array(new ArrayBuffer(byteLength));
|
|
21
21
|
fillRandom(bytes);
|
|
22
22
|
const excessBits = byteLength * 8 - bits;
|
|
23
23
|
if (excessBits > 0) {
|
|
@@ -1 +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,
|
|
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,MAA+B;IACjD,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,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1D,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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"author": "SiegeSailor",
|
|
3
3
|
"bin": {
|
|
4
|
-
"
|
|
4
|
+
"siegesailor-cryptography": "build/command.js"
|
|
5
5
|
},
|
|
6
6
|
"bugs": {
|
|
7
7
|
"url": "https://github.com/SiegeSailor/Cryptography/issues"
|
|
@@ -13,20 +13,15 @@
|
|
|
13
13
|
},
|
|
14
14
|
"description": "Provide a collection of cryptography functions and a CLI.",
|
|
15
15
|
"devDependencies": {
|
|
16
|
-
"@semantic-release/commit-analyzer": "13.0.1",
|
|
17
|
-
"@semantic-release/github": "11.0.6",
|
|
18
|
-
"@semantic-release/npm": "12.0.2",
|
|
19
|
-
"@semantic-release/release-notes-generator": "14.1.0",
|
|
20
16
|
"@types/jest": "30.0.0",
|
|
21
17
|
"@types/node": "25.5.0",
|
|
22
18
|
"conventional-changelog-conventionalcommits": "9.3.1",
|
|
23
19
|
"jest": "30.3.0",
|
|
24
|
-
"
|
|
25
|
-
"ts-jest": "29.4.6",
|
|
20
|
+
"ts-jest": "29.4.9",
|
|
26
21
|
"ts-node": "10.9.2",
|
|
27
22
|
"tsc-alias": "1.8.16",
|
|
28
23
|
"tsconfig-paths": "4.2.0",
|
|
29
|
-
"typescript": "
|
|
24
|
+
"typescript": "6.0.2"
|
|
30
25
|
},
|
|
31
26
|
"engines": {
|
|
32
27
|
"node": ">= 25.2.1",
|
|
@@ -42,7 +37,7 @@
|
|
|
42
37
|
"typescript",
|
|
43
38
|
"webassembly"
|
|
44
39
|
],
|
|
45
|
-
"license": "
|
|
40
|
+
"license": "MIT",
|
|
46
41
|
"main": "./build/source/entry-point.js",
|
|
47
42
|
"publishConfig": {
|
|
48
43
|
"access": "public",
|
|
@@ -69,11 +64,11 @@
|
|
|
69
64
|
"build:wasm-assets": "node ./scripts/copy-wasm.js",
|
|
70
65
|
"build:wasm:check": "node ./scripts/verify-wasm.js",
|
|
71
66
|
"build:wasm:strict": "WASM_STRICT=1 node ./scripts/compile-wasm.js",
|
|
72
|
-
"release": "semantic-release",
|
|
73
|
-
"start
|
|
74
|
-
"start:
|
|
67
|
+
"release": "npx --yes --package semantic-release@25.0.3 --package @semantic-release/commit-analyzer@13.0.1 --package @semantic-release/github@11.0.6 --package @semantic-release/npm@12.0.2 --package @semantic-release/release-notes-generator@14.1.0 semantic-release",
|
|
68
|
+
"start": "clear && ts-node -r tsconfig-paths/register ./source/command.ts",
|
|
69
|
+
"start:compiled": "node ./build/command.js",
|
|
75
70
|
"test": "jest",
|
|
76
71
|
"test:coverage": "jest --coverage"
|
|
77
72
|
},
|
|
78
|
-
"version": "
|
|
73
|
+
"version": "2.0.0"
|
|
79
74
|
}
|