Ltac eta5 HH :=
  let Hnew := fresh in match type of HH with
  | ?f = (fun a1 a2 a3 a4 a5 => ?e) =>
    assert (forall a1 a2 a3 a4 a5, f a1 a2 a3 a4 a5 = e) as Hnew by (intro; rewrite HH; reflexivity)
  end;
  clear HH; rename Hnew into HH.

(* Specifications: *)
Lemma mbed_tls_initial_round_sublist: forall s ks, 4 <= Zlength ks -> mbed_tls_initial_add_round_key s ks = mbed_tls_initial_add_round_key s (sublist 0 4 ks).
Lemma mbed_tls_fround_sublist: forall i s ks, 0 <= i <= Zlength ks - 4 -> mbed_tls_fround s ks i = mbed_tls_fround s (sublist i (i+4) ks) 0.
Lemma mbed_tls_final_fround_sublist: forall i s ks, 0 <= i <= Zlength ks - 4 -> mbed_tls_final_fround s ks i = mbed_tls_final_fround s (sublist i (i+4) ks) 0.
Lemma HL_equiv_LL_encryption: forall exp_key plaintext, Zlength exp_key = 15 -> (mbed_tls_aes_enc (map Int.unsigned (state_to_list plaintext)) ((blocks_to_Zwords exp_key) ++ (list_repeat (8%nat) 0)) ) = output_four_ints_as_bytes (state_to_four_ints (Cipher exp_key plaintext)).