~/bend-docscommunity

proofs/crypto/argon2/run.bend checks

raw source on the hub · import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/argon2/run.bend as Run

20 imports
import Base
import ../../../spec/lib/common.bend as SC
import ../../lib/array.bend as AR
import ../../lib/list.bend as LL
import ../../lib/nat.bend as N
import ../../lib/logic.bend as L
import ../../lib/arith.bend as AR2
import ../../lib/lemmas/proofs/nat_algebra.bend as NA
import ../../math/natural/arith.bend as NR
import ../../../src/crypto/blake/blake2b/types.bend as T
import ../../../src/crypto/argon2/types.bend as A
import ../../../src/crypto/argon2/blamka.bend as G
import ../../../src/crypto/argon2/memory.bend as M
import ../../../src/crypto/argon2/argon2.bend as I
import ../../../spec/crypto/argon2/blamka.bend as SG
import ../../../spec/crypto/argon2/argon2.bend as SA
import ./blamka.bend as BL
import ./memory.bend as MEM
import ./hash.bend as HS
import ./fill.bend as F

Definitions

def init_block_eq source · line 28 · raw

@+hh:List<&2, U32> -> @+i:Nat -> @+l:Nat -> {0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/argon2/argon2.block_of(0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/argon2/argon2.hprime(1024n, 0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/argon2/argon2.cat(hh, 0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/argon2/argon2.cat(0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/argon2/argon2.le32(i), 0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/argon2/argon2.le32(l))))) == 0xa7e654f9780078ca65bf9e187da99d3e/spec/crypto/argon2/argon2.block_of(0xa7e654f9780078ca65bf9e187da99d3e/spec/crypto/argon2/argon2.hprime(1024n, 0xa7e654f9780078ca65bf9e187da99d3e/spec/crypto/argon2/argon2.cat(hh, 0xa7e654f9780078ca65bf9e187da99d3e/spec/crypto/argon2/argon2.cat(0xa7e654f9780078ca65bf9e187da99d3e/spec/crypto/argon2/argon2.le32(i), 0xa7e654f9780078ca65bf9e187da99d3e/spec/crypto/argon2/argon2.le32(l))))) : 0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/argon2/types.Block}

def init_len source · line 34 · raw

@+n:Nat -> @+l:Nat -> @+q:Nat -> @+hh:List<&2, U32> -> @+mem:List<&2, 0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/argon2/types.Block> -> {0xa7e654f9780078ca65bf9e187da99d3e/spec/lib/common.length(0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/argon2/types.Block, 0xa7e654f9780078ca65bf9e187da99d3e/spec/crypto/argon2/argon2.init_go(n, l, q, hh, mem)) == 0xa7e654f9780078ca65bf9e187da99d3e/spec/lib/common.length(0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/argon2/types.Block, mem) : Nat}

def lt_first source · line 47 · raw

@+l:Nat -> @+p:Nat -> @+q:Nat -> @+hl:{Nat.is_lt(l, p) == True{} : Bool} -> @+hq2:{Nat.is_le(2n, q) == True{} : Bool} -> {Nat.is_lt(Nat.mul(l, q), Nat.mul(p, q)) == True{} : Bool}

def lt_second source · line 50 · raw

@+l:Nat -> @+p:Nat -> @+q:Nat -> @+hl:{Nat.is_lt(l, p) == True{} : Bool} -> @+hq2:{Nat.is_le(2n, q) == True{} : Bool} -> {Nat.is_lt(Nat.add(Nat.mul(l, q), 1n), Nat.mul(p, q)) == True{} : Bool}

def init_eq source · line 54 · raw

@+d:Nat -> @+n:Nat -> @+l:Nat -> @+p:Nat -> @+q:Nat -> @+hh:List<&2, U32> -> @+mem:List<&2, 0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/argon2/types.Block> -> @+hd:{Nat.is_lt(d, 32n) == True{} : Bool} -> @+hc:{Nat.is_le(Nat.mul(0xa7e654f9780078ca65bf9e187da99d3e/spec/lib/common.length(0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/argon2/types.Block, mem), 256n), 0xa7e654f9780078ca65bf9e187da99d3e/spec/lib/common.pow2(d)) == True{} : Bool} -> @+hlen:{0xa7e654f9780078ca65bf9e187da99d3e/spec/lib/common.length(0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/argon2/types.Block, mem) == Nat.mul(p, q) : Nat} -> @+hq2:{Nat.is_le(2n, q) == True{} : Bool} -> @+hln:{Nat.is_le(Nat.add(l, n), p) == True{} : Bool} -> {0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/argon2/argon2.init_go(n, l, q, hh, 0xa7e654f9780078ca65bf9e187da99d3e/proofs/lib/array.thaw(U32, 0xa7e654f9780078ca65bf9e187da99d3e/proofs/crypto/argon2/memory.mt(d, mem))) == 0xa7e654f9780078ca65bf9e187da99d3e/proofs/lib/array.thaw(U32, 0xa7e654f9780078ca65bf9e187da99d3e/proofs/crypto/argon2/memory.mt(d, 0xa7e654f9780078ca65bf9e187da99d3e/spec/crypto/argon2/argon2.init_go(n, l, q, hh, mem))) : Array<U32>}

B[l][0] and B[l][1] for the lanes l .. l + n - 1.

def final_eq source · line 80 · raw

@+d:Nat -> @+n:Nat -> @+l:Nat -> @+p:Nat -> @+q:Nat -> @+c:0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/argon2/types.Block -> @+b:0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/argon2/types.Block -> @+mem:List<&2, 0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/argon2/types.Block> -> @+hd:{Nat.is_lt(d, 32n) == True{} : Bool} -> @+hc:{Nat.is_le(Nat.mul(0xa7e654f9780078ca65bf9e187da99d3e/spec/lib/common.length(0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/argon2/types.Block, mem), 256n), 0xa7e654f9780078ca65bf9e187da99d3e/spec/lib/common.pow2(d)) == True{} : Bool} -> @+hlen:{0xa7e654f9780078ca65bf9e187da99d3e/spec/lib/common.length(0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/argon2/types.Block, mem) == Nat.mul(p, q) : Nat} -> @+hq1:{Nat.is_le(1n, q) == True{} : Bool} -> @+hln:{Nat.is_lt(Nat.add(l, n), p) == True{} : Bool} -> {0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/argon2/argon2.final_go(n, l, q, c, (0xa7e654f9780078ca65bf9e187da99d3e/proofs/lib/array.thaw(U32, 0xa7e654f9780078ca65bf9e187da99d3e/proofs/crypto/argon2/memory.mt(d, mem)), b)) == 0xa7e654f9780078ca65bf9e187da99d3e/spec/crypto/argon2/argon2.final_go(n, l, q, c, b, mem) : 0xa7e654f9780078ca65bf9e187da99d3e/src/crypto/argon2/types.Block}

C = B[l][q-1] XOR .. for the lanes l .. l + n (b is B[l][q-1]).