M crypto.rkt => crypto.rkt +1 -1
@@ 19,6 19,6 @@
(gen))))
(let-values ([(p q λn) (gen)])
- (list (* p q) ; n
+ (cons (* p q) ; n
(modular-inverse e λn) ; d
)))
M main.rkt => main.rkt +11 -2
@@ 3,6 3,7 @@
(require racket/random)
(require net/url)
(require json)
+(require math/number-theory)
(require "crypto.rkt")
(define/contract (vohea-url path)
@@ 44,5 45,13 @@
(define M (modulo (* m (expt r e)) n))
-(define S (port->bytes (post-pure-port (vohea-url "/sign")
- (integer->bytes M (/ keylen 8) #f))))
+(define S (bytes->integer
+ (port->bytes (post-pure-port (vohea-url "/sign")
+ (integer->bytes M (/ keylen 8) #f)))
+ #f))
+
+(define s (modulo (* S (modular-inverse r n)) n))
+
+(displayln (list (equal? m (modular-expt s e n))
+ m
+ (modular-expt s e n)))
M server.rkt => server.rkt +5 -3
@@ 6,6 6,7 @@
(require json)
(require "crypto.rkt")
(require binaryio)
+(require math/number-theory)
(define cands (list "ohea" "rtsn" "qfuy"))
(define k (gen-key))
@@ 26,9 27,10 @@
(define (sign req)
(println (request-post-data/raw req))
- (println (request-bindings req))
- (response/xexpr
- '(html (body (p "hello there")))))
+ (let ([m (bytes->integer (request-post-data/raw req) #f)])
+ (response/full
+ 200 #f (current-seconds) #"application/octet-stream"
+ empty (list (integer->bytes (modular-expt m (cdr k) (car k)) (/ keylen 8) #f)))))
(define (key req)
(response/full