From f172a5dcee37fb24e699193281f14a7b4e6447e9 Mon Sep 17 00:00:00 2001 From: David Florness Date: Sun, 10 Nov 2019 05:46:09 -0700 Subject: [PATCH] Create endpoint to retrieve server's key --- crypto.rkt | 30 ++++++++++++++++-------------- main.rkt | 8 +++++--- server.rkt | 9 +++++++++ 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/crypto.rkt b/crypto.rkt index 2adf34a..674b8df 100644 --- a/crypto.rkt +++ b/crypto.rkt @@ -1,22 +1,24 @@ #lang racket (require math/number-theory) -(provide keylen e p q d n) +(provide keylen e gen-key) (define keylen 1024) (define e 65537) -(define (gen) - (let* ([p (random-prime (expt 2 (/ keylen 2)))] - [q (random-prime (expt 2 (/ keylen 2)))] - [λ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 (gen-key) + (define (gen) + (let* ([p (random-prime (expt 2 (/ keylen 2)))] + [q (random-prime (expt 2 (/ keylen 2)))] + [λ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)) + (let-values ([(p q λn) (gen)]) + (list (* p q) ; n + (modular-inverse e λn) ; d + ))) diff --git a/main.rkt b/main.rkt index f867d53..8ca9130 100644 --- a/main.rkt +++ b/main.rkt @@ -1,9 +1,9 @@ #lang racket (require binaryio) -(require "crypto.rkt") (require racket/random) (require net/url) (require json) +(require "crypto.rkt") (define/contract (vohea-url path) (-> string? url?) @@ -31,6 +31,8 @@ (display "Your ranking: ") (define ranking (string-split (read-line))) +(define n (bytes->integer (port->bytes (get-pure-port (vohea-url "/key"))) #f)) + (define m (bytes->integer (string->bytes/utf-8 (string-join ranking ":")) #f)) (define r @@ -42,5 +44,5 @@ (define M (modulo (* m (expt r e)) n)) -(read (post-pure-port (vohea-url "/sign") - (integer->bytes M (/ keylen 8) #f))) +(define S (port->bytes (post-pure-port (vohea-url "/sign") + (integer->bytes M (/ keylen 8) #f)))) diff --git a/server.rkt b/server.rkt index a247d31..7ed2630 100644 --- a/server.rkt +++ b/server.rkt @@ -4,8 +4,11 @@ web-server/servlet-env web-server/http) (require json) +(require "crypto.rkt") +(require binaryio) (define cands (list "ohea" "rtsn" "qfuy")) +(define k (gen-key)) ; how this is not a provided function is beyond me (define/contract (response/json jsexpr) @@ -27,11 +30,17 @@ (response/xexpr '(html (body (p "hello there"))))) +(define (key req) + (response/full + 200 #f (current-seconds) #"application/octet-stream" + empty (list (integer->bytes (car k) (/ keylen 8) #f)))) + (define-values (dispatcher url-generator) (dispatch-rules [("candidates") candidates] [("vote") vote] [("sign") #:method "post" sign] + [("key") key] [else candidates])) (serve/servlet dispatcher -- 2.38.4