M crypto.rkt => crypto.rkt +2 -2
@@ 7,8 7,8 @@
(define e 65537)
(define (gen)
- (let* ([p (random-prime (expt 2 keylen))]
- [q (random-prime (expt 2 keylen))]
+ (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))
M info.rkt => info.rkt +1 -1
@@ 1,6 1,6 @@
#lang info
(define collection "vohea")
-(define deps '("base" "simple-http" "crypto"))
+(define deps '("base" "crypto"))
(define build-deps '("scribble-lib" "racket-doc" "rackunit-lib"))
(define scribblings '(("scribblings/vohea.scrbl" ())))
(define pkg-desc "Description Here")
M main.rkt => main.rkt +12 -5
@@ 1,13 1,15 @@
#lang racket
-(require simple-http)
(require binaryio)
(require "crypto.rkt")
(require racket/random)
+(require net/url)
+(require json)
-(define vohea-server
- (update-port (update-host json-requester "localhost") 5598))
+(define/contract (vohea-url path)
+ (-> string? url?)
+ (string->url (string-append "http://localhost:5598" path)))
-(define candidates (json-response-body (get vohea-server "/candidates")))
+(define candidates (read-json (get-pure-port (vohea-url "/candidates"))))
(define/contract (displayln-und s)
(-> string? void?)
@@ 29,7 31,7 @@
(display "Your ranking: ")
(define ranking (string-split (read-line)))
-(define M (bytes->integer (string->bytes/utf-8 (string-join ranking ":")) #f))
+(define m (bytes->integer (string->bytes/utf-8 (string-join ranking ":")) #f))
(define r
(let gen ([r (bytes->integer
@@ 37,3 39,8 @@
(if (eq? (gcd r n) 1)
r
(gen))))
+
+(define M (modulo (* m (expt r e)) n))
+
+(read (post-pure-port (vohea-url "/sign")
+ (integer->bytes M (/ keylen 8) #f)))
M server.rkt => server.rkt +8 -1
@@ 21,14 21,21 @@
(response/xexpr
'(html (body (p "you're going to vote")))))
+(define (sign req)
+ (println (request-post-data/raw req))
+ (println (request-bindings req))
+ (response/xexpr
+ '(html (body (p "hello there")))))
+
(define-values (dispatcher url-generator)
(dispatch-rules
[("candidates") candidates]
[("vote") vote]
+ [("sign") #:method "post" sign]
[else candidates]))
(serve/servlet dispatcher
#:port 5598
- #:command-line? #f
+ #:command-line? #t
#:servlet-path ""
#:servlet-regexp #rx"")