Files
krypto-teacher/rsa-core.test.mjs
2026-03-01 11:44:12 +01:00

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);
});