jubjub-add.lisp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. (println "jubjub-add.lisp")
  2. (def! param4 (scalar "015d8c7f5b43fe33f7891142c001d9251f3abeeb98fad3e87b0dc53c4ebf1891"))
  3. (def! param3 (scalar "15a36d1f0f390d8852a35a8c1908dd87a361ee3fd48fdf77b9819dc82d90607e"))
  4. (def! param2 (scalar "015d8c7f5b43fe33f7891142c001d9251f3abeeb98fad3e87b0dc53c4ebf1891"))
  5. (def! param1 (scalar "15a36d1f0f390d8852a35a8c1908dd87a361ee3fd48fdf77b9819dc82d90607e"))
  6. (
  7. (let* [
  8. u1 (alloc "u1" param1)
  9. v1 (alloc "v1" param2)
  10. u2 (alloc "u2" param3)
  11. v2 (alloc "v2" param4)
  12. EDWARDS_D (alloc-const "EDWARDS_D" (scalar "2a9318e74bfa2b48f5fd9207e6bd7fd4292d7f6d37579d2601065fd6d6343eb1"))
  13. U (alloc "U" (* (+ u1 v1) (+ u2 v2)))
  14. A (alloc "A" (* v2 u1))
  15. B (alloc "B" (* u2 v1))
  16. C (alloc "C" (* EDWARDS_D (* A B)))
  17. u3 (alloc-input "u3" (/ (+ A B) (+ scalar::one C)))
  18. v3 (alloc-input "v3" (/ (- (- U A) B) (- scalar::one C)))
  19. ]
  20. (prove
  21. (setup
  22. (
  23. (enforce
  24. ((scalar::one u1) (scalar::one v1))
  25. ((scalar::one u2) (scalar::one v2))
  26. (scalar::one U)
  27. )
  28. (enforce
  29. (EDWARDS_D A)
  30. (scalar::one B)
  31. (scalar::one C)
  32. )
  33. (enforce
  34. ((scalar::one cs::one)(scalar::one C))
  35. (scalar::one u3)
  36. ((scalar::one A) (scalar::one B))
  37. )
  38. (enforce
  39. ((scalar::one cs::one) (scalar::one::neg C))
  40. (scalar::one v3)
  41. ((scalar::one U) (scalar::one::neg A) (scalar::one::neg B))
  42. )
  43. )
  44. )
  45. )))
  46. ;; (println 'verify (MyCircuit (scalar 27)))