| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- (load-file "util.lisp")
- (defmacro! zk-square (fn* [var] (
- (let* [v1 (gensym)
- v2 (gensym)] (
- `(alloc ~v1 ~var)
- `(def! output (alloc-input ~v2 (square ~var)))
- `(enforce
- (scalar::one ~v1)
- (scalar::one ~v1)
- (scalar::one ~v2)
- )
- `{ "v2" output }
- )
- ))
- ))
- (defmacro! zk-mul (fn* [val1 val2] (
- (let* [v1 (gensym)
- v2 (gensym)
- var (gensym)] (
- `(alloc ~v1 ~val1)
- `(alloc ~v2 ~val2)
- `(def! result (alloc-input ~var (* ~val1 ~val2)))
- `(enforce
- (scalar::one ~v1)
- (scalar::one ~v2)
- (scalar::one ~var)
- )
- `{ "result" result }
- )
- ))
- ))
- (defmacro! zk-witness (fn* [val1 val2] (
- (let* [u2 (gensym)
- v2 (gensym)
- u2v2 (gensym)
- EDWARDS_D (gensym)] (
- `(def! ~EDWARDS_D (alloc-const ~EDWARDS_D (scalar "2a9318e74bfa2b48f5fd9207e6bd7fd4292d7f6d37579d2601065fd6d6343eb1")))
- `(def! ~u2 (alloc ~u2 (get (nth (nth (zk-square ~val1) 0) 3) "v2")))
- `(def! ~v2 (alloc ~v2 (get (nth (nth (zk-square ~val2) 0) 3) "v2")))
- ;; `(def! result (alloc-input ~u2v2 (get (last (last (zk-mul ~u2 ~v2))) "result")))
- ;; `(def! ~u2 (alloc ~u2 (square ~val1)))
- ;; `(def! ~v2 (alloc ~v2 (square ~val2)))
- `(def! result (alloc-input ~u2v2 (* ~u2 ~v2)))
- `(enforce
- ((scalar::one::neg ~u2) (scalar::one ~v2))
- (scalar::one cs::one)
- ((scalar::one cs::one) (~EDWARDS_D ~u2v2))
- ;; (scalar::one cs::one)
- )
- `{ "result" result }
- )
- ))
- ))
- (def! param1 (scalar 3))
- (def! param2 (scalar 9))
- (def! param-u (scalar "273f910d9ecc1615d8618ed1d15fef4e9472c89ac043042d36183b2cb4d7ef51"))
- (def! param-v (scalar "466a7e3a82f67ab1d32294fd89774ad6bc3332d0fa1ccd18a77a81f50667c8d7"))
- (prove
- (
- ;; (println (zk-square param1))
- ;; (println (zk-mul param1 param2))
- (println 'witness (zk-witness param-u param-v))
- )
- )
|