#!/bin/sh exec /usr/bin/env gp <<'EOF' L(x, n) = (x-1)\n powermod(x,k,m) = lift(Mod(x,m)^k) p = 0xD9F527F669E88B9B q = 0x8FE58598AC79C551 g = 0x897F46E630ACB6605C260D0A90EB9B8887395B7E0A337B89DABFAAC40B1F594 m = 5 r = 0x2FAA538E62D89F9B67DC69356FBFAE62 n = p * q lambda = lcm(p - 1, q - 1) mu = (1/L(powermod(g, lambda, n * n), n)) % n c = (powermod(g, m, n*n) * powermod(r, n, n*n)) % (n*n) d = (L(powermod(c, lambda, n*n), n) * mu) % n print("User input") print("==========") print("p = " p) print("q = " q) print("g = " g) print("r = " r) print("m = " m) print("") print("Key generation") print("==============") print("n = " n) print("n² = " n * n) print("λ = " lambda) print("μ = " mu) print("") print("Ecrypt") print("======") print("c = " c) print("") print("Decrypt") print("=======") /* print("powermod(c, lambda, n*n) = ", powermod(c, lambda, n*n)) print("L(powermod(c, lambda, n*n), n) = ", L(powermod(c, lambda, n*n), n)) print("(L(powermod(c, lambda, n*n), n) * mu) = ", (L(powermod(c, lambda, n*n), n) * mu)) */ print("d = " d) quit EOF