34 lines
880 B
JavaScript
34 lines
880 B
JavaScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { gcd, isPrime, modInverse, modPow } from "./rsa-core.mjs";
|
|
|
|
test("gcd computes expected values", () => {
|
|
assert.equal(gcd(54, 24), 6);
|
|
assert.equal(gcd(17, 3120), 1);
|
|
});
|
|
|
|
test("modInverse finds RSA example inverse", () => {
|
|
assert.equal(modInverse(17, 3120), 2753);
|
|
});
|
|
|
|
test("modPow encrypt/decrypt roundtrip for classic RSA sample", () => {
|
|
const p = 61;
|
|
const q = 53;
|
|
const n = p * q;
|
|
const phi = (p - 1) * (q - 1);
|
|
const e = 17;
|
|
const d = modInverse(e, phi);
|
|
const m = 65;
|
|
assert.notEqual(d, null);
|
|
const c = modPow(m, e, n);
|
|
const recovered = modPow(c, d, n);
|
|
assert.equal(c, 2790);
|
|
assert.equal(recovered, m);
|
|
});
|
|
|
|
test("isPrime identifies primes and composites", () => {
|
|
assert.equal(isPrime(61), true);
|
|
assert.equal(isPrime(51), false);
|
|
assert.equal(isPrime(1), false);
|
|
});
|