proofs/crypto/ed25519/scalar3.bend checks
raw source on the hub · import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/ed25519/scalar3.bend as Scalar3
21 imports
import Base import ../../../spec/lib/common.bend as C import ../../../spec/crypto/curve25519/field.bend as FS import ../../../spec/crypto/ed25519.bend as SE import ../../../src/crypto/curve25519/field.bend as F import ../../../src/crypto/curve25519/x25519.bend as X import ../../../src/crypto/ed25519/scalar.bend as ESC import ../../lib/nat.bend as N import ../../lib/logic.bend as L import ../../lib/word.bend as WD import ../../lib/arith.bend as AR import ../../lib/u32alg.bend as A import ../../lib/lemmas/proofs/nat_algebra.bend as NA import ../../math/natural/arith.bend as NR import ../curve25519/num.bend as M import ../curve25519/limbs.bend as LM import ../curve25519/consts.bend as K import ../curve25519/cong.bend as G import ./adc.bend as AD import ./scalar.bend as SC import ./scalar2.bend as S2
Definitions
def v source · line 27 · raw
@+x:U32 -> Nat
def dlist source · line 31 · raw
List<&2, U32>
2^256 - 2 L
def zeros source · line 35 · raw
List<&2, U32>
def adc1 source · line 38 · raw
{0xa7e654f9780078ca65bf9e187da99d3e/proofs/crypto/ed25519/adc.adc_ok(0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/ed25519/scalar.ell, dlist, 0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/ed25519/scalar.comp_l, 0n, 0n) == True{} : Bool}
def adc2 source · line 41 · raw
{0xa7e654f9780078ca65bf9e187da99d3e/proofs/crypto/ed25519/adc.adc_ok(0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/ed25519/scalar.comp_l, 0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/ed25519/scalar.ell, zeros, 0n, 1n) == True{} : Bool}
def ell_valo source · line 44 · raw
@+one:Nat -> {0xa7e654f9780078ca65bf9e187da99d3e/proofs/crypto/curve25519/consts.valo(one, 0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/ed25519/scalar.ell) == 0xa7e654f9780078ca65bf9e187da99d3e/spec/crypto/ed25519.ell(one) : Nat}
def mmL source · line 47 · raw
@+one:Nat -> Nat
def ell_ge source · line 50 · raw
@+one:Nat -> @+h1:{one == 1n : Nat} -> {Nat.is_le(2n, 0xa7e654f9780078ca65bf9e187da99d3e/spec/crypto/ed25519.ell(one)) == True{} : Bool}
def ell_eq source · line 56 · raw
@+one:Nat -> @+h1:{one == 1n : Nat} -> {1n+mmL(one) == 0xa7e654f9780078ca65bf9e187da99d3e/spec/crypto/ed25519.ell(one) : Nat}
def one_lt source · line 59 · raw
@+one:Nat -> @+h1:{one == 1n : Nat} -> {Nat.is_lt(1n, 1n+mmL(one)) == True{} : Bool}
def cp_okb source · line 62 · raw
{0xa7e654f9780078ca65bf9e187da99d3e/proofs/crypto/curve25519/limbs.okb(32n, 0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/ed25519/scalar.comp_l, 255n) == True{} : Bool}
def zero_vg source · line 65 · raw
@+one:Nat -> @+h1:{one == 1n : Nat} -> {0xa7e654f9780078ca65bf9e187da99d3e/proofs/crypto/curve25519/consts.valo(one, zeros) == 0n : Nat}
def hvL source · line 69 · raw
@+one:Nat -> @+h1:{one == 1n : Nat} -> {Nat.add(0xa7e654f9780078ca65bf9e187da99d3e/proofs/crypto/curve25519/consts.valo(one, 0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/ed25519/scalar.comp_l), 1n+mmL(one)) == 0xa7e654f9780078ca65bf9e187da99d3e/proofs/crypto/ed25519/scalar.T(one) : Nat}(2^256 - L) + L == 2^256
def h2L source · line 80 · raw
@+one:Nat -> @+h1:{one == 1n : Nat} -> {Nat.is_le(Nat.add(1n+mmL(one), 1n+mmL(one)), 0xa7e654f9780078ca65bf9e187da99d3e/proofs/crypto/ed25519/scalar.T(one)) == True{} : Bool}2 L <= 2^256
def reduce_m source · line 94 · raw
@+one:Nat -> @+h1:{one == 1n : Nat} -> @+bs:List<&2, U32> -> @+hb:{0xa7e654f9780078ca65bf9e187da99d3e/proofs/crypto/curve25519/limbs.lea(bs, 255n) == True{} : Bool} -> {0xa7e654f9780078ca65bf9e187da99d3e/spec/crypto/curve25519/field.value(0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/ed25519/scalar.reduce(bs)) == Nat.mod(0xa7e654f9780078ca65bf9e187da99d3e/spec/crypto/curve25519/field.value(bs), 1n+mmL(one)) : Nat}
def mul_add_m source · line 103 · raw
@+one:Nat -> @+h1:{one == 1n : Nat} -> @+k:List<&2, U32> -> @+s:List<&2, U32> -> @+r:List<&2, U32> -> @+hk:{0xa7e654f9780078ca65bf9e187da99d3e/proofs/crypto/curve25519/limbs.lea(k, 255n) == True{} : Bool} -> @+hs:{0xa7e654f9780078ca65bf9e187da99d3e/proofs/crypto/curve25519/limbs.okb(32n, s, 255n) == True{} : Bool} -> @+hr:{0xa7e654f9780078ca65bf9e187da99d3e/proofs/crypto/curve25519/limbs.okb(32n, r, 255n) == True{} : Bool} -> @+ls:{Nat.is_lt(0xa7e654f9780078ca65bf9e187da99d3e/spec/crypto/curve25519/field.value(s), 1n+mmL(one)) == True{} : Bool} -> @+lr:{Nat.is_lt(0xa7e654f9780078ca65bf9e187da99d3e/spec/crypto/curve25519/field.value(r), 1n+mmL(one)) == True{} : Bool} -> {0xa7e654f9780078ca65bf9e187da99d3e/spec/crypto/curve25519/field.value(0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/ed25519/scalar.mul_add(k, s, r)) == Nat.mod(Nat.add(0xa7e654f9780078ca65bf9e187da99d3e/spec/crypto/curve25519/field.value(r), Nat.mul(0xa7e654f9780078ca65bf9e187da99d3e/spec/crypto/curve25519/field.value(k), 0xa7e654f9780078ca65bf9e187da99d3e/spec/crypto/curve25519/field.value(s))), 1n+mmL(one)) : Nat}
def mul_add_lt source · line 123 · raw
@+one:Nat -> @+h1:{one == 1n : Nat} -> @+k:List<&2, U32> -> @+s:List<&2, U32> -> @+r:List<&2, U32> -> @+hk:{0xa7e654f9780078ca65bf9e187da99d3e/proofs/crypto/curve25519/limbs.lea(k, 255n) == True{} : Bool} -> @+hs:{0xa7e654f9780078ca65bf9e187da99d3e/proofs/crypto/curve25519/limbs.okb(32n, s, 255n) == True{} : Bool} -> @+hr:{0xa7e654f9780078ca65bf9e187da99d3e/proofs/crypto/curve25519/limbs.okb(32n, r, 255n) == True{} : Bool} -> @+ls:{Nat.is_lt(0xa7e654f9780078ca65bf9e187da99d3e/spec/crypto/curve25519/field.value(s), 1n+mmL(one)) == True{} : Bool} -> @+lr:{Nat.is_lt(0xa7e654f9780078ca65bf9e187da99d3e/spec/crypto/curve25519/field.value(r), 1n+mmL(one)) == True{} : Bool} -> {0xa7e654f9780078ca65bf9e187da99d3e/proofs/crypto/curve25519/limbs.okb(32n, 0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/ed25519/scalar.mul_add(k, s, r), 255n) == True{} : Bool}
def reduce_okb source · line 131 · raw
@+one:Nat -> @+h1:{one == 1n : Nat} -> @+bs:List<&2, U32> -> @+hb:{0xa7e654f9780078ca65bf9e187da99d3e/proofs/crypto/curve25519/limbs.lea(bs, 255n) == True{} : Bool} -> {0xa7e654f9780078ca65bf9e187da99d3e/proofs/crypto/curve25519/limbs.okb(32n, 0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/ed25519/scalar.reduce(bs), 255n) == True{} : Bool}
def lt_l_m source · line 135 · raw
@+one:Nat -> @+h1:{one == 1n : Nat} -> @+x:List<&2, U32> -> @+hx:{0xa7e654f9780078ca65bf9e187da99d3e/proofs/crypto/curve25519/limbs.okb(32n, x, 255n) == True{} : Bool} -> {0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/ed25519/scalar.lt_l(x) == Nat.is_lt(0xa7e654f9780078ca65bf9e187da99d3e/spec/crypto/curve25519/field.value(x), 1n+mmL(one)) : Bool}