~/bend-docscommunity

proofs/crypto/blake/blake2s/laws.bend source

proofs/crypto/blake/blake2s/laws.bend on the hub · documented module

import Baseimport ../../../../src/crypto/blake/blake2s/types.bend as Timport ../../../../src/crypto/blake/blake2s/compress.bend as Cimport ../../../../src/crypto/blake/blake2s/blake2s.bend as Kimport ../../../../spec/crypto/blake/blake2s.bend as R# The public API: for every packed input array and every byte length, the# implementation returns exactly what the RFC 7693 specification returns# (Some digest when length <= 4 * capacity, None otherwise).law blake2s:  for a: Array<U32>  for +length: Nat  {K.blake2s(a,length) == R.blake2s(a,length) : Maybe<&1,Array<U32>>}# The unrolled compression function is F with r = 10 rounds, for every# chaining value, message block, counter and final-block flag.law compress:  for +h: T.State  for +m0: U32  for +m1: U32  for +m2: U32  for +m3: U32  for +m4: U32  for +m5: U32  for +m6: U32  for +m7: U32  for +m8: U32  for +m9: U32  for +m10: U32  for +m11: U32  for +m12: U32  for +m13: U32  for +m14: U32  for +m15: U32  for +t0: U32  for +t1: U32  for +last: Bool  {C.compress(h,m0,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,t0,t1,last) == R.compress(10n,h,[m0,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15],t0,t1,last) : 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(n,(a,capacity)) == None{} : Maybe<&1,Array<U32>>}