Fixpoint splitAndPad_aux (m:list Blist) (M: Forall (fun x => length x = 512%nat) m):
           list (Bvector b) :=
(match m as l return (Forall (fun x => length x = 512%nat) l) -> list (Bvector b) with
  nil => fun F => nil
|  cons h t => fun F => cons (of_list_length h (Forall_inv F))
                    (splitAndPad_aux t (Forall_tl _ _ _ _ F))
 end) M.

(* Specifications: *)
Lemma splitAndPad_aux_consD h t M: splitAndPad_aux (cons h t) M = (of_list_length h (Forall_inv M)) :: (splitAndPad_aux t (Forall_tl _ _ _ _ M)).
Lemma splitAndPad_aux_nil m M: m=nil -> splitAndPad_aux m M= nil.
Lemma length_splitandpad_inner_aux: forall ssm pf, Forall2 (fun (bv : Vector.t bool b) (bl : list bool) => bl = Vector.to_list bv) (splitAndPad_aux (toBlocks ssm) pf) (toBlocks ssm).