(let ((ch (fileVal "chRSA")) (eea (fileVal "egcd"))) (lambda (n str) (let* ((ps (ch n str)) (mod-exp (fileVal "mod-exp")) (inv (lambda (a p) (mod-exp a (- p 2) p))) (pq (car ps)) (p (cadr ps)) (q (caddr ps)) (e 17) (mg (let ((P (* p (inv p q)))(Q (* q (inv q p)))) (lambda(a b) (modulo (+ (* b P)(* a Q)) pq)))) (em (* (- p 1)(- q 1)))) (if (> (gcd e em) 1) "Bad" (let* ((d (modulo (car (eea e em)) em)) (pe (modulo d (- p 1)))(qe (modulo d (- q 1)))) (cons (lambda (p) (mod-exp p e pq)) (lambda (c) (mg (mod-exp (modulo c p) pe p) (mod-exp (modulo c q) qe q))))))))) (define t (fileVal "wRSA")) (let ((pair (t 512 "frog"))) ((cdr pair) ((car pair) 374))) => 374 (let ((pair (t 2048 "grenouille"))) ((cdr pair) ((car pair) 374404))) => 374404