|
|
@@ -40,21 +40,60 @@
|
|
|
`(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)))
|
|
|
+ `(def! result (alloc-input ~u2v2 (get (last (last (zk-mul ~u2 ~v2))) "result")))
|
|
|
`(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 }
|
|
|
)
|
|
|
))
|
|
|
))
|
|
|
|
|
|
+(defmacro! zk-double (fn* [val1 val2] (
|
|
|
+ (let* [u (gensym)
|
|
|
+ v (gensym)
|
|
|
+ u3 (gensym)
|
|
|
+ v3 (gensym)
|
|
|
+ T (gensym)
|
|
|
+ A (gensym)
|
|
|
+ C (gensym)
|
|
|
+ EDWARDS_D (gensym)] (
|
|
|
+ `(def! ~EDWARDS_D (alloc-const ~EDWARDS_D (scalar "2a9318e74bfa2b48f5fd9207e6bd7fd4292d7f6d37579d2601065fd6d6343eb1")))
|
|
|
+ `(def! ~u (alloc ~u ~val1))
|
|
|
+ `(def! ~v (alloc ~v ~val2))
|
|
|
+ `(def! ~T (alloc ~T (* (+ ~val1 ~val2) (+ ~val1 ~val2))))
|
|
|
+ `(def! ~A (alloc ~A (* ~u ~v)))
|
|
|
+ `(def! ~C (alloc ~C (* (square ~A) ~EDWARDS_D)))
|
|
|
+ `(def! ~u3 (alloc-input ~u3 (/ (double ~A) (+ scalar::one ~C))))
|
|
|
+ ;; double check why t1.invert is needed on ecc.rs code
|
|
|
+ `(def! ~v3 (alloc-input ~v3 (/ (- ~T (double ~A)) (- scalar::one ~C))))
|
|
|
+ `(enforce
|
|
|
+ ((scalar::one ~u) (scalar::one ~v))
|
|
|
+ ((scalar::one ~u) (scalar::one ~v))
|
|
|
+ (scalar::one ~T)
|
|
|
+ )
|
|
|
+ `(enforce
|
|
|
+ (~EDWARDS_D ~A)
|
|
|
+ (scalar::one ~A)
|
|
|
+ (scalar::one ~C)
|
|
|
+ )
|
|
|
+ `(enforce
|
|
|
+ ((scalar::one cs::one) (scalar::one ~C))
|
|
|
+ (scalar::one ~u3)
|
|
|
+ ((scalar::one ~A) (scalar::one ~A))
|
|
|
+ )
|
|
|
+ `(enforce
|
|
|
+ ((scalar::one cs::one) (scalar::one::neg ~C))
|
|
|
+ (scalar::one ~v3)
|
|
|
+ ((scalar::one ~T) (scalar::one::neg ~A) (scalar::one::neg ~A))
|
|
|
+ )
|
|
|
+ ;; `{ "u3" ~u3, "v3" ~v3 }
|
|
|
+ )
|
|
|
+ ))
|
|
|
+))
|
|
|
+
|
|
|
(def! param1 (scalar 3))
|
|
|
(def! param2 (scalar 9))
|
|
|
(def! param-u (scalar "273f910d9ecc1615d8618ed1d15fef4e9472c89ac043042d36183b2cb4d7ef51"))
|
|
|
@@ -63,6 +102,7 @@
|
|
|
(
|
|
|
;; (println (zk-square param1))
|
|
|
;; (println (zk-mul param1 param2))
|
|
|
- (println 'witness (zk-witness param-u param-v))
|
|
|
+ ;; (println 'witness (zk-witness param-u param-v))
|
|
|
+ (println 'double (zk-double param-u param-v))
|
|
|
)
|
|
|
)
|