Definition c := (32 * 8)%nat.Definition p := (32 * 8)%nat.Definition b := (c + p)%nat.Definition BlockSize := 64.Definition BlockSize_Bits := BlockSize * 8.Definition sha_iv : Blist :=
  intsToBits SHA256.init_registers.Definition sha_h (regs : Blist) (block : Blist) : Blist :=
  intsToBits (SHA256.hash_block (bitsToInts regs) (bitsToInts block)).Definition sha_splitandpad (msg : Blist) : Blist :=
  bytesToBits (sha_padding_lemmas.pad (bitsToBytes msg)).(* artifact of app_fpad definition *)
Definition fpad_inner (msg : list byte) : list byte :=
  (let n := BlockSize + Zlength msg in
  [Byte.repr 128%Z]
    ++ list_repeat (Z.to_nat (-(n + 9) mod 64)) Byte.zero
    ++ intlist_to_bytelist ([Int.repr (n * 8 / Int.modulus); Int.repr (n * 8)]))%list.

(* Specifications: *)
Lemma fpad_inner_length l (L:length l = p): (length (fpad_inner (bitsToBytes l)) * 8)%nat = p.