~/bend-docscommunity

LAWS.bend source

LAWS.bend on the hub · documented module

import Baseimport ./src/types.bend as Timport ./src/permutation.bend as Pimport ./spec/permutation.bend as Simport ./src/keccak.bend as Kimport ./spec/sponge.bend as Sponge# Universal permutation refinement; instantiating n=24 and i=0 gives Keccak-f[1600].law permutation_rounds:  for +n: Nat  for +i: Nat  for +s: T.State  {P.rounds(n,i,s) == S.rounds(n,i,s) : T.State}law digest_size:  for s: T.State  {Pair.snd(Array<U32>,U32,Array.size(U32,K.digest(s))) == 8 : U32}law capacity_rejection:  for a: Array<U32>  for +n: Nat  for +capacity: U32  for invalid: {Nat.is_le(n,Nat.mul(4n,U32.to_nat(capacity))) == False{} : Bool}  {K.sized(24n,n,(a,capacity)) == None{} : Maybe<&1,Array<U32>>}law packed_sponge_correct:  for +r: Nat  for a: Array<U32>  for +length: Nat  {K.keccak256_rounds(r,a,length) == Sponge.keccak256_rounds(r,a,length) : Maybe<&1,Array<U32>>}law ethereum_round_count:  for a: Array<U32>  for +length: Nat  {K.keccak256(a,length) == K.keccak256_rounds(24n,a,length) : Maybe<&1,Array<U32>>}law ethereum_keccak256:  for a: Array<U32>  for +length: Nat  {K.keccak256(a,length) == Sponge.keccak256_rounds(24n,a,length) : Maybe<&1,Array<U32>>}