diff options
author | jadep <jade.philipoom@gmail.com> | 2016-10-12 20:06:41 -0400 |
---|---|---|
committer | jadep <jade.philipoom@gmail.com> | 2016-10-12 20:43:53 -0400 |
commit | 72a7997f1142cf81ed95043f34cd640e163af6f5 (patch) | |
tree | f54e35ddadb200983818492f8777aae1947e4298 /src/Specific/GF25519.v | |
parent | 6726ebe2e413b1f135dc968734e902cc12254126 (diff) |
Added top-level modulus comparison operation so field-element decoding can return None if input is greater than modulus
Diffstat (limited to 'src/Specific/GF25519.v')
-rw-r--r-- | src/Specific/GF25519.v | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/Specific/GF25519.v b/src/Specific/GF25519.v index ebaa54080..8f9e1bc59 100644 --- a/src/Specific/GF25519.v +++ b/src/Specific/GF25519.v @@ -129,7 +129,7 @@ Definition zero_subst : zero = zero_ := eq_refl zero_. Definition modulus_digits_ := Eval compute in ModularBaseSystemList.modulus_digits. Definition modulus_digits_subst : ModularBaseSystemList.modulus_digits = modulus_digits_ := eq_refl modulus_digits_. -Local Opaque Z.shiftr Z.shiftl Z.land Z.mul Z.add Z.sub Z.lor Let_In Z.eqb Z.ltb andb. +Local Opaque Z.shiftr Z.shiftl Z.land Z.mul Z.add Z.sub Z.lor Let_In Z.eqb Z.ltb Z.leb andb. Definition app_7 {T} (f : wire_digits) (P : wire_digits -> T) : T. Proof. @@ -361,6 +361,24 @@ Proof. + reflexivity. Qed. +Definition ge_modulus_sig (f : fe25519) : + { b : bool | b = ge_modulus_opt (to_list 10 f) }. +Proof. + cbv [fe25519] in *. + repeat match goal with p : (_ * Z)%type |- _ => destruct p end. + eexists; cbv [ge_modulus_opt]. + rewrite !modulus_digits_subst. + cbv. + reflexivity. +Defined. + +Definition ge_modulus (f : fe25519) : bool + := Eval cbv beta iota delta [proj1_sig ge_modulus_sig] in proj1_sig (ge_modulus_sig f). + +Definition ge_modulus_correct (f : fe25519) : + ge_modulus f = ge_modulus_opt (to_list 10 f) + := Eval cbv beta iota delta [proj2_sig ge_modulus_sig] in proj2_sig (ge_modulus_sig f). + Definition freeze_sig (f : fe25519) : { f' : fe25519 | f' = from_list_default 0 10 (freeze_opt c_ (to_list 10 f)) }. Proof. |