x 3 лет назад
Родитель
Сommit
6604d52d5c
2 измененных файлов с 97 добавлено и 95 удалено
  1. 0 95
      script/research/zk/ecip/div.sage
  2. 97 0
      script/research/zk/ecip/example-construct-1.sage

+ 0 - 95
script/research/zk/ecip/div2.sage → script/research/zk/ecip/div.sage

@@ -199,98 +199,3 @@ def div_line(P1, P2):
     func = line(P1.P, P2.P)
     return Divisor(func, support)
 
-# Initialize an elliptic curve
-p = 115792089237316195423570985008687907853269984665640564039457584007908834671663
-r = 115792089237316195423570985008687907852837564279074904382605163141518161494337
-Fp = GF(p)  # Base Field
-Fr = GF(r)  # Scalar Field
-A = 0
-B = 7
-E = EllipticCurve(GF(p), [A, B])
-assert(E.cardinality() == r)
-
-K.<x> = PolynomialRing(Fp, implementation="generic")
-L.<y> = PolynomialRing(K, implementation="generic")
-M.<z> = L[]
-eqn = y^2 - x^3 - A * x - B
-
-P0 = LabelPoint(E.random_element(), {"P₀": 1})
-P1 = LabelPoint(E.random_element(), {"P₁": 1})
-P2 = LabelPoint(E.random_element(), {"P₂": 1})
-Q = -int(Fr(5)^-1) * (P0.P + 2*P1.P + 3*P2.P)
-Q = LabelPoint(Q, {"Q": 1})
-
-A0 = LabelPoint(E.random_element(), {"A₀": 1})
-A1 = LabelPoint(E.random_element(), {"A₁": 1})
-X1 = div_line(A0, A1)
-
-# i = 0
-
-L0 = div_line(P0, -P0)
-L1 = div_line(P1, -P1)
-L2 = div_line(P2, -P2)
-L3 = div_line(Q, -Q)
-
-# P₀ + 2P₁ + 3P₂ + 5Q
-
-# i = 1
-D1 = div_line(P1, P1)
-R1 = P1 + P1
-
-D2 = div_line(P2, P2)
-R2 = P2 + P2
-
-D3 = div_line(P2, Q)
-R3 = P2 + Q
-
-D4 = div_line(Q, Q)
-R4 = Q + Q
-
-D5 = D4
-R5 = R4
-
-D6 = L0
-R6 = P0
-
-# i = 2
-
-D1 = D1 + D2 + div_line(R1, R2) - (div_line(R1, -R1) + div_line(R2, -R2))
-R1 = R1 + R2
-
-D2 = D3 + D4 + div_line(R3, R4) - (div_line(R3, -R3) + div_line(R4, -R4))
-R2 = R3 + R4
-
-D3 = D5 + D6 + div_line(R5, R6) - (div_line(R5, -R5) + div_line(R6, -R6))
-R3 = R5 + R6
-
-# i = 3
-
-Dx = D1
-Rx = R1
-
-D1 = D2 + D3 + div_line(R2, R3) - (div_line(R2, -R2) + div_line(R3, -R3))
-R1 = R2 + R3
-
-D2, R2 = Dx, Rx
-
-# i = 4
-
-D = D1 + D2 + div_line(R1, R2) - (div_line(R1, -R1) + div_line(R2, -R2))
-assert D.is_equiv({
-    "P₀": 1,
-    "P₁": 2,
-    "P₂": 3,
-    "Q":  5,
-    "∞": -11
-})
-assert X1.eval(D) == (-1)^D.effective_degree() * D.eval(X1)
-
-f_numer = D.func.numerator().mod(eqn)
-f_denom = D.func.denominator().mod(eqn)
-f = f_numer / f_denom
-assert f.denominator() == 1
-f = f.numerator()
-print(f)
-save([P0.P, P1.P, P2.P, Q.P, f], "div.sobj")
-print("Saved (P₀, P₁, P₂, Q, f)")
-

+ 97 - 0
script/research/zk/ecip/example-construct-1.sage

@@ -0,0 +1,97 @@
+load("div.sage")
+
+# Initialize an elliptic curve
+p = 115792089237316195423570985008687907853269984665640564039457584007908834671663
+r = 115792089237316195423570985008687907852837564279074904382605163141518161494337
+Fp = GF(p)  # Base Field
+Fr = GF(r)  # Scalar Field
+A = 0
+B = 7
+E = EllipticCurve(GF(p), [A, B])
+assert(E.cardinality() == r)
+
+K.<x> = PolynomialRing(Fp, implementation="generic")
+L.<y> = PolynomialRing(K, implementation="generic")
+M.<z> = L[]
+eqn = y^2 - x^3 - A * x - B
+
+P0 = LabelPoint(E.random_element(), {"P₀": 1})
+P1 = LabelPoint(E.random_element(), {"P₁": 1})
+P2 = LabelPoint(E.random_element(), {"P₂": 1})
+Q = -int(Fr(5)^-1) * (P0.P + 2*P1.P + 3*P2.P)
+Q = LabelPoint(Q, {"Q": 1})
+
+A0 = LabelPoint(E.random_element(), {"A₀": 1})
+A1 = LabelPoint(E.random_element(), {"A₁": 1})
+X1 = div_line(A0, A1)
+
+# i = 0
+
+L0 = div_line(P0, -P0)
+L1 = div_line(P1, -P1)
+L2 = div_line(P2, -P2)
+L3 = div_line(Q, -Q)
+
+# P₀ + 2P₁ + 3P₂ + 5Q
+
+# i = 1
+D1 = div_line(P1, P1)
+R1 = P1 + P1
+
+D2 = div_line(P2, P2)
+R2 = P2 + P2
+
+D3 = div_line(P2, Q)
+R3 = P2 + Q
+
+D4 = div_line(Q, Q)
+R4 = Q + Q
+
+D5 = D4
+R5 = R4
+
+D6 = L0
+R6 = P0
+
+# i = 2
+
+D1 = D1 + D2 + div_line(R1, R2) - (div_line(R1, -R1) + div_line(R2, -R2))
+R1 = R1 + R2
+
+D2 = D3 + D4 + div_line(R3, R4) - (div_line(R3, -R3) + div_line(R4, -R4))
+R2 = R3 + R4
+
+D3 = D5 + D6 + div_line(R5, R6) - (div_line(R5, -R5) + div_line(R6, -R6))
+R3 = R5 + R6
+
+# i = 3
+
+Dx = D1
+Rx = R1
+
+D1 = D2 + D3 + div_line(R2, R3) - (div_line(R2, -R2) + div_line(R3, -R3))
+R1 = R2 + R3
+
+D2, R2 = Dx, Rx
+
+# i = 4
+
+D = D1 + D2 + div_line(R1, R2) - (div_line(R1, -R1) + div_line(R2, -R2))
+assert D.is_equiv({
+    "P₀": 1,
+    "P₁": 2,
+    "P₂": 3,
+    "Q":  5,
+    "∞": -11
+})
+assert X1.eval(D) == (-1)^D.effective_degree() * D.eval(X1)
+
+f_numer = D.func.numerator().mod(eqn)
+f_denom = D.func.denominator().mod(eqn)
+f = f_numer / f_denom
+assert f.denominator() == 1
+f = f.numerator()
+print(f)
+save([P0.P, P1.P, P2.P, Q.P, f], "div.sobj")
+print("Saved (P₀, P₁, P₂, Q, f)")
+