@siegesailor/cryptography 2.0.0 → 2.1.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 +3 -4
- package/build/algorithms/baby-step-giant-step/index.js +13 -8
- package/build/algorithms/baby-step-giant-step/index.js.map +1 -1
- package/build/algorithms/blum-blum-shub/index.js +12 -6
- package/build/algorithms/blum-blum-shub/index.js.map +1 -1
- package/build/algorithms/chinese-remainder/index.js +12 -6
- package/build/algorithms/chinese-remainder/index.js.map +1 -1
- package/build/algorithms/euclidean/index.js +7 -5
- package/build/algorithms/euclidean/index.js.map +1 -1
- package/build/algorithms/extended-euclidean/index.js +10 -5
- package/build/algorithms/extended-euclidean/index.js.map +1 -1
- package/build/algorithms/fast-modular-exponentiation/index.js +9 -6
- package/build/algorithms/fast-modular-exponentiation/index.js.map +1 -1
- package/build/algorithms/miller-rabin-primarily-test/index.js +11 -5
- package/build/algorithms/miller-rabin-primarily-test/index.js.map +1 -1
- package/build/algorithms/multiplicative-inverse/index.js +12 -5
- package/build/algorithms/multiplicative-inverse/index.js.map +1 -1
- package/build/algorithms/naor-reingo/index.js +9 -4
- package/build/algorithms/naor-reingo/index.js.map +1 -1
- package/build/algorithms/pollard-p-1-factorization/index.js +11 -4
- package/build/algorithms/pollard-p-1-factorization/index.js.map +1 -1
- package/build/algorithms/pollard-rho/index.js +7 -3
- package/build/algorithms/pollard-rho/index.js.map +1 -1
- package/build/algorithms/primitive-root-search/index.js +39 -15
- package/build/algorithms/primitive-root-search/index.js.map +1 -1
- package/build/algorithms/primitive-root-search/index.test.js +3 -0
- package/build/algorithms/primitive-root-search/index.test.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://github.com/SiegeSailor/Cryptography/actions/workflows/test.yml)
|
|
5
5
|
[](https://github.com/SiegeSailor/Cryptography/actions/workflows/release.yml)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Zero configuration needed. WebAssembly availability is determined at runtime, with a safe fallback to JavaScript with TypeScript support implemented. The library is production-ready, with a focus on security and performance, providing implementations for:
|
|
8
8
|
|
|
9
9
|
| Algorithm | JavaScript | TypeScript | WebAssembly |
|
|
10
10
|
| --------------------------- | ---------- | ---------- | ----------- |
|
|
@@ -21,15 +21,14 @@ This project is inspired by [Boston University MET CS 789 Cryptography](https://
|
|
|
21
21
|
| Pollard Rho | ✅ | ✅ | ✅ |
|
|
22
22
|
| Primitive Root Search | ✅ | ✅ | ✅ |
|
|
23
23
|
|
|
24
|
-
> [!tip]
|
|
25
|
-
> Zero configuration needed. WebAssembly availability is determined at runtime, with a safe fallback to JavaScript with TypeScript support implemented.
|
|
26
|
-
|
|
27
24
|
And, a CLI is available to interact with these algorithms and demonstrate the 3 key encryption flows:
|
|
28
25
|
|
|
29
26
|
- [Diffie Hellman Key Exchange](./source/key-encryptions/DiffieHellman.ts)
|
|
30
27
|
- [ElGamal](./source/key-encryptions/ElGamal.ts)
|
|
31
28
|
- [RSA](./source/key-encryptions/RSA.ts)
|
|
32
29
|
|
|
30
|
+
> 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.
|
|
31
|
+
|
|
33
32
|
## Installation
|
|
34
33
|
|
|
35
34
|
The package is available on NPM:
|
|
@@ -26,16 +26,21 @@ const runWASMBabyStepGiantStep = (0, wasm_1.createWASMInvoker)("baby-step-giant-
|
|
|
26
26
|
return result < 0n ? null : result;
|
|
27
27
|
});
|
|
28
28
|
/**
|
|
29
|
-
* Solves the discrete logarithm problem by finding an exponent x such that
|
|
30
|
-
* generator^x is congruent to base modulo modulo
|
|
29
|
+
* Solves the discrete logarithm problem by finding an exponent `x` such that
|
|
30
|
+
* `generator^x` is congruent to `base` modulo `modulo`.
|
|
31
31
|
*
|
|
32
|
-
* The congruence is evaluated in the multiplicative group modulo modulo
|
|
33
|
-
* generator and base must both be coprime with the modulus.
|
|
32
|
+
* The congruence is evaluated in the multiplicative group modulo `modulo`, so
|
|
33
|
+
* `generator` and `base` must both be coprime with the modulus. The
|
|
34
|
+
* TypeScript fallback uses the baby-step giant-step meet-in-the-middle method,
|
|
35
|
+
* validates those coprimality conditions with the Euclidean algorithm, and
|
|
36
|
+
* builds its collision table with fast modular exponentiation.
|
|
34
37
|
*
|
|
35
|
-
* @param generator
|
|
36
|
-
*
|
|
37
|
-
* @param
|
|
38
|
-
* @
|
|
38
|
+
* @param generator Candidate generator `g` whose powers are searched in the
|
|
39
|
+
* congruence relation.
|
|
40
|
+
* @param base Target residue `h` in the congruence `g^x ≡ h (mod m)`.
|
|
41
|
+
* @param modulo Modulus `m` of the congruence; it must be greater than `1`.
|
|
42
|
+
* @returns An exponent `x` satisfying the congruence when one is found, or
|
|
43
|
+
* `-1n` when no solution is found.
|
|
39
44
|
* @throws {Error} When modulo is not greater than 1.
|
|
40
45
|
* @throws {Error} When generator and modulo are not coprime.
|
|
41
46
|
* @throws {Error} When base and modulo are not coprime.
|
|
@@ -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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"}
|
|
@@ -22,14 +22,20 @@ const runWASMBlumBlumShubNext = (0, wasm_1.createWASMInvoker)("blum-blum-shub",
|
|
|
22
22
|
return wasmExports.blum_blum_shub_next_u64(state, modulus);
|
|
23
23
|
});
|
|
24
24
|
/**
|
|
25
|
-
* Initializes a Blum Blum Shub generator over quadratic residues modulo
|
|
26
|
-
* where p and q are distinct Blum primes
|
|
25
|
+
* Initializes a Blum Blum Shub generator over quadratic residues modulo
|
|
26
|
+
* `M = p * q`, where `p` and `q` are distinct Blum primes satisfying
|
|
27
|
+
* `p ≡ q ≡ 3 (mod 4)`.
|
|
27
28
|
*
|
|
28
|
-
* The returned closure advances the recurrence x_(n+1) = x_n^2 mod M and
|
|
29
|
-
* the next generator state each time it is called.
|
|
29
|
+
* The returned closure advances the recurrence `x_(n+1) = x_n^2 mod M` and
|
|
30
|
+
* yields the next generator state each time it is called. This implementation
|
|
31
|
+
* samples candidate primes with the Miller-Rabin primality test, screens the
|
|
32
|
+
* seed with the Euclidean algorithm so `gcd(seed, M) = 1`, and then iterates
|
|
33
|
+
* the quadratic-residue recurrence.
|
|
30
34
|
*
|
|
31
|
-
* @param bits Bit length used when generating each Blum prime factor
|
|
32
|
-
*
|
|
35
|
+
* @param bits Bit length used when generating each Blum prime factor `p` and
|
|
36
|
+
* `q`.
|
|
37
|
+
* @returns A stateful zero-argument generator function that produces
|
|
38
|
+
* successive pseudorandom states `x_n`.
|
|
33
39
|
* @throws {Error} When bits is not an integer or is smaller than 8.
|
|
34
40
|
*/
|
|
35
41
|
function main(bits) {
|
|
@@ -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":";;;;;AA+CA,uBAkDC;AA+BD,wBAEC;AAlID,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;;;;;;;;;;;;;;;;GAgBG;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"}
|
|
@@ -37,14 +37,20 @@ const runWASMChineseRemainder = (0, wasm_1.createWASMInvoker)("chinese-remainder
|
|
|
37
37
|
return result === wasm_1.MIN_I64 ? null : result;
|
|
38
38
|
});
|
|
39
39
|
/**
|
|
40
|
-
* Solves a system of simultaneous congruences
|
|
40
|
+
* Solves a system of simultaneous congruences `x ≡ r_i (mod m_i)` with the
|
|
41
|
+
* Chinese Remainder Theorem.
|
|
41
42
|
*
|
|
42
|
-
* When the moduli are pairwise coprime, the system has a unique solution
|
|
43
|
-
*
|
|
43
|
+
* When the moduli are pairwise coprime, the system has a unique solution
|
|
44
|
+
* modulo `M = ∏ m_i`, and this function returns its least non-negative
|
|
45
|
+
* representative. The implementation checks pairwise coprimality with the
|
|
46
|
+
* Euclidean algorithm and computes each modular inverse for `M_i = M / m_i`
|
|
47
|
+
* with the Extended Euclidean algorithm.
|
|
44
48
|
*
|
|
45
|
-
* @param arrayOfBase Remainders r_i in congruences of the form
|
|
46
|
-
*
|
|
47
|
-
* @
|
|
49
|
+
* @param arrayOfBase Remainders `r_i` in congruences of the form
|
|
50
|
+
* `x ≡ r_i (mod m_i)`.
|
|
51
|
+
* @param arrayOfModulo Moduli `m_i` that define each congruence.
|
|
52
|
+
* @returns The least non-negative solution `x` modulo `M` as a JavaScript
|
|
53
|
+
* number.
|
|
48
54
|
* @throws {Error} When the remainder and modulus arrays have different lengths.
|
|
49
55
|
* @throws {Error} When the moduli are not pairwise coprime.
|
|
50
56
|
* @throws {Error} When a required modular inverse cannot be computed.
|
|
@@ -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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"}
|
|
@@ -19,13 +19,15 @@ const runWASMGcd = (0, wasm_1.createWASMInvoker)("euclidean", (wasmExports, left
|
|
|
19
19
|
return wasmExports.gcd_u64(left, right);
|
|
20
20
|
});
|
|
21
21
|
/**
|
|
22
|
-
* Computes
|
|
22
|
+
* Computes `gcd(left, right)` with the Euclidean algorithm.
|
|
23
23
|
*
|
|
24
|
-
* The result is the largest integer
|
|
24
|
+
* The result is the largest integer dividing both inputs, and it is `0n` only
|
|
25
|
+
* when both inputs are `0n`. The fallback implementation repeatedly replaces
|
|
26
|
+
* the pair `(a, b)` with `(b, a mod b)` until the remainder becomes `0`.
|
|
25
27
|
*
|
|
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
|
|
28
|
+
* @param left First integer `a` in the `gcd(a, b)` computation.
|
|
29
|
+
* @param right Second integer `b` in the `gcd(a, b)` computation.
|
|
30
|
+
* @returns The greatest common divisor of `left` and `right`.
|
|
29
31
|
*/
|
|
30
32
|
function main(left, right) {
|
|
31
33
|
const wasmResult = runWASMGcd(left, right);
|
|
@@ -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":";;;;;AAmCA,uBAYC;AAiCD,wBAEC;AAlFD,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;;;;;;;;;;GAUG;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"}
|
|
@@ -31,13 +31,18 @@ const runWASMExtendedEuclidean = (0, wasm_1.createWASMInvoker)("extended-euclide
|
|
|
31
31
|
];
|
|
32
32
|
});
|
|
33
33
|
/**
|
|
34
|
-
* Computes
|
|
34
|
+
* Computes `gcd(left, right)` together with Bezout coefficients for two
|
|
35
|
+
* integers.
|
|
35
36
|
*
|
|
36
|
-
* The returned tuple [gcd, x, y] satisfies left * x + right * y = gcd
|
|
37
|
+
* The returned tuple `[gcd, x, y]` satisfies `left * x + right * y = gcd`,
|
|
38
|
+
* which is the standard Bezout identity. The fallback implementation performs
|
|
39
|
+
* recursive Euclidean reduction and back-substitutes the quotients to recover
|
|
40
|
+
* the coefficients.
|
|
37
41
|
*
|
|
38
|
-
* @param left First integer in the
|
|
39
|
-
* @param right Second integer in the
|
|
40
|
-
* @returns A tuple [gcd, x, y] where gcd is the greatest common divisor of
|
|
42
|
+
* @param left First integer `a` in the identity `a * x + b * y = gcd(a, b)`.
|
|
43
|
+
* @param right Second integer `b` in the identity `a * x + b * y = gcd(a, b)`.
|
|
44
|
+
* @returns A tuple `[gcd, x, y]` where `gcd` is the greatest common divisor of
|
|
45
|
+
* the inputs and `x`, `y` are Bezout coefficients.
|
|
41
46
|
*/
|
|
42
47
|
function main(left, right) {
|
|
43
48
|
const wasmResult = runWASMExtendedEuclidean(left, right);
|
|
@@ -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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"}
|
|
@@ -22,14 +22,17 @@ const runWASMPowMod = (0, wasm_1.createWASMInvoker)("fast-modular-exponentiation
|
|
|
22
22
|
return wasmExports.powmod_u64(base, exponent, modulo);
|
|
23
23
|
});
|
|
24
24
|
/**
|
|
25
|
-
* Computes
|
|
25
|
+
* Computes the residue `base^exponent mod modulo` with binary exponentiation.
|
|
26
26
|
*
|
|
27
|
-
* The result is calculated with
|
|
27
|
+
* The result is calculated with repeated squaring, which keeps every
|
|
28
|
+
* intermediate value inside the residue class ring modulo `modulo` and reduces
|
|
29
|
+
* the exponent one bit at a time. The WASM path calls the equivalent modular
|
|
30
|
+
* power routine for the same recurrence.
|
|
28
31
|
*
|
|
29
|
-
* @param base Base
|
|
30
|
-
* @param exponent Non-negative exponent applied to
|
|
31
|
-
* @param modulo Positive modulus that defines the residue class ring.
|
|
32
|
-
* @returns The least non-negative residue of base^exponent
|
|
32
|
+
* @param base Base `a` whose power is computed.
|
|
33
|
+
* @param exponent Non-negative exponent `e` applied to `base`.
|
|
34
|
+
* @param modulo Positive modulus `m` that defines the residue class ring.
|
|
35
|
+
* @returns The least non-negative residue of `base^exponent mod modulo`.
|
|
33
36
|
* @throws {Error} When modulo is not greater than 0.
|
|
34
37
|
* @throws {Error} When exponent is negative.
|
|
35
38
|
*/
|
|
@@ -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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"}
|
|
@@ -21,13 +21,19 @@ const runWASMMillerRabin = (0, wasm_1.createWASMInvoker)("miller-rabin-primarily
|
|
|
21
21
|
return wasmExports.miller_rabin_u64(input, level) === 1;
|
|
22
22
|
});
|
|
23
23
|
/**
|
|
24
|
-
* Performs the Miller-Rabin probable-prime test on an integer
|
|
24
|
+
* Performs the Miller-Rabin probable-prime test on an integer `input`.
|
|
25
25
|
*
|
|
26
|
-
* Each witness round checks whether input behaves like a prime in the
|
|
26
|
+
* Each witness round checks whether `input` behaves like a prime in the
|
|
27
|
+
* multiplicative group modulo `input`, so a true result means `input` is a
|
|
28
|
+
* probable prime rather than a proof of primality. The algorithm decomposes
|
|
29
|
+
* `input - 1 = 2^s d` with odd `d` and uses fast modular exponentiation for
|
|
30
|
+
* each random witness.
|
|
27
31
|
*
|
|
28
|
-
* @param input Integer to classify as composite or probable prime.
|
|
29
|
-
* @param level Number of witness rounds used to reduce the probability of
|
|
30
|
-
*
|
|
32
|
+
* @param input Integer `n` to classify as composite or probable prime.
|
|
33
|
+
* @param level Number of witness rounds `k` used to reduce the probability of
|
|
34
|
+
* a false positive.
|
|
35
|
+
* @returns `false` when a witness proves the number composite, or `true` when
|
|
36
|
+
* all rounds pass.
|
|
31
37
|
* @throws {Error} When level is not a positive integer.
|
|
32
38
|
*/
|
|
33
39
|
function main(input, level) {
|
|
@@ -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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"}
|
|
@@ -25,12 +25,19 @@ const runWASMMultiplicativeInverse = (0, wasm_1.createWASMInvoker)("multiplicati
|
|
|
25
25
|
/**
|
|
26
26
|
* Computes a modular inverse and lists its first positive integer multiples.
|
|
27
27
|
*
|
|
28
|
-
* When gcd(base, modulo) = 1
|
|
28
|
+
* When `gcd(base, modulo) = 1`, the first returned value is the least
|
|
29
|
+
* non-negative `x` such that `base * x ≡ 1 (mod modulo)`, and each later value
|
|
30
|
+
* is the next positive multiple of that inverse. The implementation computes
|
|
31
|
+
* the inverse with the Extended Euclidean algorithm and then normalizes it into
|
|
32
|
+
* the interval `[0, modulo - 1]`.
|
|
29
33
|
*
|
|
30
|
-
* @param base Integer whose multiplicative inverse is computed modulo
|
|
31
|
-
*
|
|
32
|
-
* @param
|
|
33
|
-
*
|
|
34
|
+
* @param base Integer `a` whose multiplicative inverse is computed modulo
|
|
35
|
+
* `modulo`.
|
|
36
|
+
* @param modulo Modulus `m` that defines the congruence relation and must be
|
|
37
|
+
* greater than `1`.
|
|
38
|
+
* @param number Count `k` of positive multiples to return.
|
|
39
|
+
* @returns An array `[inverse, 2 * inverse, ..., k * inverse]` where
|
|
40
|
+
* `inverse` is the least non-negative inverse modulo `m`.
|
|
34
41
|
* @throws {Error} When modulo is not greater than 1.
|
|
35
42
|
* @throws {Error} When number is not a positive integer.
|
|
36
43
|
* @throws {Error} When base and modulo are not coprime.
|
|
@@ -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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"}
|
|
@@ -39,11 +39,16 @@ const runWASMNaorReingo = (0, wasm_1.createWASMInvoker)("naor-reingo", (wasmExpo
|
|
|
39
39
|
/**
|
|
40
40
|
* Generates pseudorandom positive integers with a fixed decimal digit length.
|
|
41
41
|
*
|
|
42
|
-
* Each returned value lies in the interval
|
|
42
|
+
* Each returned value lies in the interval
|
|
43
|
+
* `[10^(digits - 1), 10^digits - 1]`, so every output has exactly the
|
|
44
|
+
* requested number of decimal digits. The TypeScript fallback uses the shared
|
|
45
|
+
* uniform `randomBigIntBetween` sampler, while the WASM path fills the result
|
|
46
|
+
* buffer with the same bounded generation strategy.
|
|
43
47
|
*
|
|
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
|
|
48
|
+
* @param count Number `k` of values to generate.
|
|
49
|
+
* @param digits Decimal digit length `d` required for each generated value.
|
|
50
|
+
* @returns An array of generated values as JavaScript numbers, each having
|
|
51
|
+
* exactly `digits` decimal digits.
|
|
47
52
|
* @throws {Error} When count is not a positive integer.
|
|
48
53
|
* @throws {Error} When digits is not a positive integer.
|
|
49
54
|
*/
|
|
@@ -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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"}
|
|
@@ -23,12 +23,19 @@ const runWASMPollardP1 = (0, wasm_1.createWASMInvoker)("pollard-p-1-factorizatio
|
|
|
23
23
|
return result > 1n ? result : null;
|
|
24
24
|
});
|
|
25
25
|
/**
|
|
26
|
-
* Factors a composite integer by recursively applying Pollard's p - 1
|
|
26
|
+
* Factors a composite integer by recursively applying Pollard's `p - 1`
|
|
27
|
+
* method.
|
|
27
28
|
*
|
|
28
|
-
* The search succeeds quickly when a prime divisor p of the input has a
|
|
29
|
+
* The search succeeds quickly when a prime divisor `p` of the input has a
|
|
30
|
+
* smooth `p - 1`, and the implementation falls back to Pollard rho when that
|
|
31
|
+
* condition does not yield a non-trivial split. The routine combines fast
|
|
32
|
+
* modular exponentiation for the powering steps, the Euclidean algorithm for
|
|
33
|
+
* `gcd(a - 1, n)`, Miller-Rabin to stop recursion on primes, and Pollard rho
|
|
34
|
+
* as a fallback splitter.
|
|
29
35
|
*
|
|
30
|
-
* @param input Composite integer to factor.
|
|
31
|
-
* @returns An array of prime factors
|
|
36
|
+
* @param input Composite integer `n` to factor.
|
|
37
|
+
* @returns An array of prime factors of `n`, including repeated factors, as
|
|
38
|
+
* JavaScript numbers.
|
|
32
39
|
* @throws {Error} When input is not greater than 1.
|
|
33
40
|
* @throws {Error} When input is prime.
|
|
34
41
|
* @throws {Error} When recursive factorization fails to produce non-trivial prime factors.
|
|
@@ -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":"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"}
|
|
@@ -25,10 +25,14 @@ const runWASMPollardRho = (0, wasm_1.createWASMInvoker)("pollard-rho", (wasmExpo
|
|
|
25
25
|
/**
|
|
26
26
|
* Searches for a non-trivial divisor of an integer with Pollard's rho method.
|
|
27
27
|
*
|
|
28
|
-
* The iteration uses the polynomial x^2 + c
|
|
28
|
+
* The iteration uses the polynomial `f(x) = x^2 + c mod input` together with
|
|
29
|
+
* Floyd cycle detection to turn repeated residues into a divisor search. Each
|
|
30
|
+
* step applies the Euclidean algorithm to `|x - y|` and `input`, which can
|
|
31
|
+
* expose a non-trivial factor when the iterates collide modulo a prime divisor.
|
|
29
32
|
*
|
|
30
|
-
* @param input Integer to factor.
|
|
31
|
-
* @returns A non-trivial factor of input
|
|
33
|
+
* @param input Integer `n` to factor.
|
|
34
|
+
* @returns A non-trivial factor of `input`, `2n` for even inputs, or `1n`
|
|
35
|
+
* when no factor is found after the retry limit.
|
|
32
36
|
* @throws {Error} When input is not greater than 1.
|
|
33
37
|
*/
|
|
34
38
|
function main(input) {
|
|
@@ -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,19 +35,47 @@ const runWASMPrimitiveRoots = (0, wasm_1.createWASMInvoker)("primitive-root-sear
|
|
|
35
35
|
}
|
|
36
36
|
return result;
|
|
37
37
|
});
|
|
38
|
+
function listPrimeFactors(value) {
|
|
39
|
+
const factors = [];
|
|
40
|
+
let remainder = value;
|
|
41
|
+
for (let factor = 2; factor * factor <= remainder; factor++) {
|
|
42
|
+
if (remainder % factor !== 0) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
factors.push(factor);
|
|
46
|
+
while (remainder % factor === 0) {
|
|
47
|
+
remainder /= factor;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (remainder > 1) {
|
|
51
|
+
factors.push(remainder);
|
|
52
|
+
}
|
|
53
|
+
return factors;
|
|
54
|
+
}
|
|
38
55
|
/**
|
|
39
|
-
* Enumerates primitive roots modulo a prime and builds the corresponding power
|
|
56
|
+
* Enumerates primitive roots modulo a prime and builds the corresponding power
|
|
57
|
+
* table.
|
|
40
58
|
*
|
|
41
|
-
* For a prime p
|
|
59
|
+
* For a prime `p`, the non-zero residue classes form a cyclic multiplicative
|
|
60
|
+
* group of order `phi = p - 1`; this function identifies the generators of
|
|
61
|
+
* that group by checking `g^(phi / q) ≠ 1 (mod p)` for every prime divisor `q`
|
|
62
|
+
* of `phi`, and it records the power table for every candidate. The
|
|
63
|
+
* implementation validates `p` with the Miller-Rabin test and uses fast
|
|
64
|
+
* modular exponentiation both for the primitive-root checks and for the table
|
|
65
|
+
* entries.
|
|
42
66
|
*
|
|
43
|
-
* @param prime Prime modulus whose multiplicative group is analyzed.
|
|
44
|
-
* @returns A tuple [table, roots] where table[row][column] stores
|
|
67
|
+
* @param prime Prime modulus `p` whose multiplicative group is analyzed.
|
|
68
|
+
* @returns A tuple `[table, roots]` where `table[row][column]` stores
|
|
69
|
+
* `(row + 1)^(column + 1) mod p` and `roots` lists the primitive roots modulo
|
|
70
|
+
* `p`.
|
|
45
71
|
* @throws {Error} When prime is not prime.
|
|
46
72
|
*/
|
|
47
73
|
function main(prime) {
|
|
48
74
|
if (!(0, miller_rabin_primarily_test_1.default)(BigInt(prime), 10))
|
|
49
75
|
throw new Error("The Given number must be prime.");
|
|
76
|
+
const primeBigInt = BigInt(prime);
|
|
50
77
|
const phi = prime - 1;
|
|
78
|
+
const primitiveRootExponents = listPrimeFactors(phi).map((factor) => BigInt(phi / factor));
|
|
51
79
|
const table = Array.from({ length: phi }, () => Array.from({ length: phi }, () => 0));
|
|
52
80
|
const arrayOfResult = [];
|
|
53
81
|
const maybeWASMRoots = runWASMPrimitiveRoots(BigInt(prime));
|
|
@@ -57,26 +85,22 @@ function main(prime) {
|
|
|
57
85
|
}
|
|
58
86
|
for (let indexRow = 0; indexRow < table.length; indexRow++) {
|
|
59
87
|
for (let indexColumn = 0; indexColumn < table[0].length; indexColumn++) {
|
|
60
|
-
const exponent = (0, fast_modular_exponentiation_1.default)(BigInt(indexRow + 1), BigInt(indexColumn + 1),
|
|
88
|
+
const exponent = (0, fast_modular_exponentiation_1.default)(BigInt(indexRow + 1), BigInt(indexColumn + 1), primeBigInt);
|
|
61
89
|
table[indexRow][indexColumn] = Number(exponent);
|
|
62
90
|
}
|
|
63
91
|
}
|
|
64
92
|
return [table, arrayOfResult];
|
|
65
93
|
}
|
|
66
94
|
for (let indexRow = 0; indexRow < table.length; indexRow++) {
|
|
67
|
-
const
|
|
68
|
-
let isPrimitiveRoot = true;
|
|
95
|
+
const candidate = BigInt(indexRow + 1);
|
|
69
96
|
for (let indexColumn = 0; indexColumn < table[0].length; indexColumn++) {
|
|
70
|
-
const exponent = (0, fast_modular_exponentiation_1.default)(
|
|
71
|
-
|
|
72
|
-
table[indexRow][indexColumn] = index;
|
|
73
|
-
if (set.has(index)) {
|
|
74
|
-
isPrimitiveRoot = false;
|
|
75
|
-
}
|
|
76
|
-
set.add(index);
|
|
97
|
+
const exponent = (0, fast_modular_exponentiation_1.default)(candidate, BigInt(indexColumn + 1), primeBigInt);
|
|
98
|
+
table[indexRow][indexColumn] = Number(exponent);
|
|
77
99
|
}
|
|
78
|
-
|
|
100
|
+
const isPrimitiveRoot = primitiveRootExponents.every((primitiveRootExponent) => table[indexRow][Number(primitiveRootExponent) - 1] !== 1);
|
|
101
|
+
if (isPrimitiveRoot) {
|
|
79
102
|
arrayOfResult.push(indexRow + 1);
|
|
103
|
+
}
|
|
80
104
|
}
|
|
81
105
|
return [table, arrayOfResult];
|
|
82
106
|
}
|
|
@@ -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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"}
|
|
@@ -42,5 +42,8 @@ describe("Finding the Primitive Roots of the given numbers", () => {
|
|
|
42
42
|
test("keeps the same error with and without WASM for non-prime input", () => {
|
|
43
43
|
(0, wasm_1.expectSameErrorWithAndWithoutWASM)(() => (0, primitive_root_search_1.default)(21), "The Given number must be prime.");
|
|
44
44
|
});
|
|
45
|
+
test("returns the primitive root table for the smallest prime", () => {
|
|
46
|
+
expect((0, primitive_root_search_1.default)(2)).toEqual([[[1]], [1]]);
|
|
47
|
+
});
|
|
45
48
|
});
|
|
46
49
|
//# sourceMappingURL=index.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../source/algorithms/primitive-root-search/index.test.ts"],"names":[],"mappings":";;;;;AAAA,+FAAqE;AACrE,+DAAuC;AACvC,gDAG+B;AAE/B,QAAQ,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAChE,IAAI,CAAC,IAAI,CAAC;QACR,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5C;YACE,GAAG;YACH;gBACE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;gBACvE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;gBACrE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;aAC3D;SACF;QACD;YACE,EAAE;YACF;gBACE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;gBACrE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;aACf;SACF;QACD,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACnB;YACE,EAAE;YACF;gBACE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;gBACrE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;aACvB;SACF;KACF,CAAC,CACA,qDAAqD,eAAK,CAAC,WAAW,CACpE,IAAI,CACL,EAAE,EACH,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QAChB,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,OAAO,IAAA,+BAAmB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CACvC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAC9B,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CACvB,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAChD,CAAC;QACF,IAAA,yCAAkC,EAAC,OAAO,CAAC,CAAC;IAC9C,CAAC,CACF,CAAC;IAEF,IAAI,CAAC,gEAAgE,EAAE,GAAG,EAAE;QAC1E,IAAA,wCAAiC,EAC/B,GAAG,EAAE,CAAC,IAAA,+BAAmB,EAAC,EAAE,CAAC,EAC7B,iCAAiC,CAClC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../source/algorithms/primitive-root-search/index.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED