M merkle.rkt => merkle.rkt +8 -10
@@ 2,13 2,13 @@
(require/typed sha [sha256 (-> Bytes Bytes)])
(struct merkle-tree
- ([root : merkle-node]
- [leaves : (Vectorof merkle-node)]))
+ ([root : merkle-node]
+ [leaves : (Vectorof merkle-node)]
+ [content : (Vectorof Bytes)]))
(struct merkle-node
([parent : (Option merkle-node)]
- [hsh : Bytes]
- [C : (Option Bytes)])
+ [hsh : Bytes])
#:mutable
#:transparent)
@@ 17,9 17,8 @@
[leaves
(build-vector (+ n (modulo n 2))
(λ ([i : Natural])
- (let ([bstr
- (vector-ref content (min i (sub1 n)))])
- (merkle-node #f (sha256 bstr) bstr))))])
+ (let ([bstr (vector-ref content (min i (sub1 n)))])
+ (merkle-node #f (sha256 bstr)))))])
(let build-level : merkle-tree
([nodes : (Vectorof merkle-node)
leaves])
@@ 33,11 32,10 @@
(merkle-node
#f
(sha256 (bytes-append (merkle-node-hsh left)
- (merkle-node-hsh right)))
- #f)])
+ (merkle-node-hsh right))))])
(set-merkle-node-parent! left new-node)
(set-merkle-node-parent! right new-node)
new-node)))
- (merkle-tree (vector-ref nodes 0) leaves))))))
+ (merkle-tree (vector-ref nodes 0) leaves content))))))
(provide (all-defined-out))
M poly.rkt => poly.rkt +14 -3
@@ 1,11 1,16 @@
-#lang typed/racket
+#lang typed/racket/base
+(require (only-in racket/math natural?))
+(require (only-in racket/vector vector-map))
(require/typed binaryio
[bytes->integer (->* (Bytes Boolean) (Boolean Natural Natural) Integer)]
- [integer->bytes (->* (Integer Natural Boolean) (Boolean Bytes Natural) Bytes)]
- [integer-bytes-length (Integer Boolean -> Natural)])
+ [integer->bytes (->* (Integer Positive-Integer Boolean)
+ (Boolean Bytes Natural) Bytes)]
+ [integer-bytes-length (Integer Boolean -> Positive-Integer)])
(require/typed crypto
[crypto-random-bytes (Natural -> Bytes)])
+(require "merkle.rkt")
+
(define-type Poly (Integer -> Integer))
(define (gen)
@@ 21,4 26,10 @@
(* (expt x (add1 i)) (vector-ref coefficients i))))
Integer))))
+(define (poly-merkle [p : Poly]) : merkle-tree
+ (merkle
+ (vector-map
+ (λ ([x : Integer]) (integer->bytes x (integer-bytes-length x #t) #t))
+ (build-vector 100000 p))))
+
(provide (all-defined-out))