aboutsummaryrefslogtreecommitdiff
path: root/src/Specific/montgomery64_2e285m9
diff options
context:
space:
mode:
Diffstat (limited to 'src/Specific/montgomery64_2e285m9')
-rw-r--r--src/Specific/montgomery64_2e285m9/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e285m9/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e285m9/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e285m9/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e285m9/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e285m9/femul.v14
-rw-r--r--src/Specific/montgomery64_2e285m9/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e285m9/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e285m9/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e285m9/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e285m9/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e285m9/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e285m9/fesubDisplay.v4
13 files changed, 139 insertions, 0 deletions
diff --git a/src/Specific/montgomery64_2e285m9/CurveParameters.v b/src/Specific/montgomery64_2e285m9/CurveParameters.v
new file mode 100644
index 000000000..d275f876f
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^285 - 9
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 64;
+ s := 2^285;
+ c := [(1, 9)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e285m9/Synthesis.v b/src/Specific/montgomery64_2e285m9/Synthesis.v
new file mode 100644
index 000000000..9e8ae81e6
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e285m9.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e285m9/compiler.sh b/src/Specific/montgomery64_2e285m9/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e285m9/feadd.v b/src/Specific/montgomery64_2e285m9/feadd.v
new file mode 100644
index 000000000..609a34356
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e285m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e285m9/feaddDisplay.v b/src/Specific/montgomery64_2e285m9/feaddDisplay.v
new file mode 100644
index 000000000..80b13695b
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e285m9.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e285m9/femul.v b/src/Specific/montgomery64_2e285m9/femul.v
new file mode 100644
index 000000000..9c5d2b9c9
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e285m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e285m9/femulDisplay.v b/src/Specific/montgomery64_2e285m9/femulDisplay.v
new file mode 100644
index 000000000..8d0c35adb
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e285m9.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e285m9/fenz.v b/src/Specific/montgomery64_2e285m9/fenz.v
new file mode 100644
index 000000000..6d6d58784
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e285m9.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e285m9/fenzDisplay.v b/src/Specific/montgomery64_2e285m9/fenzDisplay.v
new file mode 100644
index 000000000..311cc95c7
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e285m9.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e285m9/feopp.v b/src/Specific/montgomery64_2e285m9/feopp.v
new file mode 100644
index 000000000..79a5410af
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e285m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e285m9/feoppDisplay.v b/src/Specific/montgomery64_2e285m9/feoppDisplay.v
new file mode 100644
index 000000000..410accb4e
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e285m9.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e285m9/fesub.v b/src/Specific/montgomery64_2e285m9/fesub.v
new file mode 100644
index 000000000..676c31305
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e285m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e285m9/fesubDisplay.v b/src/Specific/montgomery64_2e285m9/fesubDisplay.v
new file mode 100644
index 000000000..197e1fffe
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e285m9.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.