aboutsummaryrefslogtreecommitdiff
path: root/src/Spec/CompleteEdwardsCurve.v
diff options
context:
space:
mode:
Diffstat (limited to 'src/Spec/CompleteEdwardsCurve.v')
-rw-r--r--src/Spec/CompleteEdwardsCurve.v16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/Spec/CompleteEdwardsCurve.v b/src/Spec/CompleteEdwardsCurve.v
index 3348be1d9..2ad3877ac 100644
--- a/src/Spec/CompleteEdwardsCurve.v
+++ b/src/Spec/CompleteEdwardsCurve.v
@@ -5,6 +5,8 @@ Require Crypto.CompleteEdwardsCurve.Pre.
Require Import Crypto.Spec.ModularArithmetic.
Local Open Scope F_scope.
+Global Set Asymmetric Patterns.
+
Class TwistedEdwardsParams := {
q : BinInt.Z;
a : F q;
@@ -19,7 +21,7 @@ Class TwistedEdwardsParams := {
Module E.
Section TwistedEdwardsCurves.
Context {prm:TwistedEdwardsParams}.
-
+
(* Twisted Edwards curves with complete addition laws. References:
* <https://eprint.iacr.org/2008/013.pdf>
* <http://ed25519.cr.yp.to/ed25519-20110926.pdf>
@@ -27,20 +29,20 @@ Module E.
*)
Definition onCurve P := let '(x,y) := P in a*x^2 + y^2 = 1 + d*x^2*y^2.
Definition point := { P | onCurve P}.
-
+
Definition zero : point := exist _ (0, 1) (@Pre.zeroOnCurve _ _ _ prime_q).
-
+
Definition add' P1' P2' :=
let '(x1, y1) := P1' in
let '(x2, y2) := P2' in
(((x1*y2 + y1*x2)/(1 + d*x1*x2*y1*y2)) , ((y1*y2 - a*x1*x2)/(1 - d*x1*x2*y1*y2))).
-
+
Definition add (P1 P2 : point) : point :=
let 'exist P1' pf1 := P1 in
let 'exist P2' pf2 := P2 in
exist _ (add' P1' P2')
(@Pre.unifiedAdd'_onCurve _ _ _ prime_q two_lt_q nonzero_a square_a nonsquare_d _ _ pf1 pf2).
-
+
Fixpoint mul (n:nat) (P : point) : point :=
match n with
| O => zero
@@ -48,7 +50,7 @@ Module E.
end.
End TwistedEdwardsCurves.
End E.
-
+
Delimit Scope E_scope with E.
Infix "+" := E.add : E_scope.
-Infix "*" := E.mul : E_scope. \ No newline at end of file
+Infix "*" := E.mul : E_scope.