1 files changed, 22 insertions(+), 0 deletions(-)
A crypto.rkt
A crypto.rkt => crypto.rkt +22 -0
@@ 0,0 1,22 @@
+#lang racket
+(require math/number-theory)
+
+(provide e p q d)
+
+(define keylen 1024)
+(define e 65537)
+
+(define (gen)
+ (let* ([p (random-prime (expt 2 keylen))]
+ [q (random-prime (expt 2 keylen))]
+ [λn (lcm (sub1 p) (sub1 q))])
+ (if (and (eq? (gcd e λn) 1)
+ (not (eq? (arithmetic-shift (abs (- p q))
+ (- (- (/ keylen 2) 100)))
+ 0)))
+ (values p q λn)
+ (gen))))
+
+(define-values (p q λn) (gen))
+(define n (* p q))
+(define d (modular-inverse e λn))