plonk.sage 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import numpy as np
  2. from groth_poly_commit import Scalar, poly_commit, create_proof, verify_proof
  3. K = Scalar
  4. R.<x, y> = LaurentPolynomialRing(K)
  5. var_one = K(1)
  6. var_x = K(4)
  7. var_y = K(6)
  8. var_s = K(1)
  9. var_xy = var_x * var_y
  10. var_x_y = var_x + var_y
  11. var_1_neg_s = var_one - var_s
  12. var_sxy = var_s * var_xy
  13. var_1_neg_s_x_y = var_1_neg_s * var_x_y
  14. #var_s_neg_1 = -var_1_neg_s
  15. var_zero = K(0)
  16. public_value = var_s * (var_x * var_y) + (1 - var_s) * (var_x + var_y)
  17. # x * y = xy
  18. a1 = var_x
  19. b1 = var_y
  20. c1 = var_xy
  21. Ql1 = 0
  22. Qr1 = 0
  23. Qm1 = 1
  24. Qo1 = -1
  25. Qc1 = 0
  26. assert Ql1 * a1 + Qr1 * b1 + Qm1 * a1 * b1 + Qo1 * c1 + Qc1 == 0
  27. # x + y = (x + y)
  28. a2 = var_x
  29. b2 = var_y
  30. c2 = var_x_y
  31. Ql2 = 1
  32. Qr2 = 1
  33. Qm2 = 0
  34. Qo2 = -1
  35. Qc2 = 0
  36. assert Ql2 * a2 + Qr2 * b2 + Qm2 * a2 * b2 + Qo2 * c2 + Qc2 == 0
  37. # 1 - s = (1 - s)
  38. a3 = var_one
  39. b3 = var_s
  40. c3 = var_1_neg_s
  41. Ql3 = 1
  42. Qr3 = -1
  43. Qm3 = 0
  44. Qo3 = -1
  45. Qc3 = 0
  46. assert Ql3 * a3 + Qr3 * b3 + Qm3 * a3 * b3 + Qo3 * c3 + Qc3 == 0
  47. # s * (xy) = sxy
  48. a4 = var_s
  49. b4 = var_xy
  50. c4 = var_sxy
  51. Ql4 = 0
  52. Qr4 = 0
  53. Qm4 = 1
  54. Qo4 = -1
  55. Qc4 = 0
  56. assert Ql4 * a4 + Qr4 * b4 + Qm4 * a4 * b4 + Qo4 * c4 + Qc4 == 0
  57. # (1 - s) * (x + y) = [(1 - s)(x + y)]
  58. a5 = var_1_neg_s
  59. b5 = var_x_y
  60. c5 = var_1_neg_s_x_y
  61. Ql5 = 0
  62. Qr5 = 0
  63. Qm5 = 1
  64. Qo5 = -1
  65. Qc5 = 0
  66. assert Ql5 * a5 + Qr5 * b5 + Qm5 * a5 * b5 + Qo5 * c5 + Qc5 == 0
  67. # (sxy) + [(1 - s)(x + y)] = public_value
  68. a6 = var_sxy
  69. b6 = var_1_neg_s_x_y
  70. # Unused
  71. c6 = var_zero
  72. Ql6 = 1
  73. Qr6 = 1
  74. Qm6 = 0
  75. Qo6 = 0
  76. Qc6 = -public_value
  77. assert Ql6 * a6 + Qr6 * b6 + Qm6 * a6 * b6 + Qo6 * c6 + Qc6 == 0
  78. a = np.array([a1, a2, a3, a4, a5, a6])
  79. b = np.array([b1, b2, b3, b4, b5, b6])
  80. c = np.array([c1, c2, c3, c4, c5, c6])
  81. Ql = np.array([Ql1, Ql2, Ql3, Ql4, Ql5, Ql6])
  82. Qr = np.array([Qr1, Qr2, Qr3, Qr4, Qr5, Qr6])
  83. Qm = np.array([Qm1, Qm2, Qm3, Qm4, Qm5, Qm6])
  84. Qo = np.array([Qo1, Qo2, Qo3, Qo4, Qo5, Qo6])
  85. Qc = np.array([Qc1, Qc2, Qc3, Qc4, Qc5, Qc6])