jubjub-add.lisp 1.3 KB

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