val va_codegen_success_Aes_round_4way : round_key:va_operand_xmm -> Tot va_pbool
let va_codegen_success_Aes_round_4way round_key =
  (va_pbool_and (va_codegen_success_AESNI_enc (va_op_xmm_xmm 2) round_key) (va_pbool_and
    (va_codegen_success_AESNI_enc (va_op_xmm_xmm 12) round_key) (va_pbool_and
    (va_codegen_success_AESNI_enc (va_op_xmm_xmm 13) round_key) (va_pbool_and
    (va_codegen_success_AESNI_enc (va_op_xmm_xmm 14) round_key) (va_ttrue ())))))
val va_codegen_success_Aes_round_4way : round_key:va_operand_xmm -> Tot va_pbool
let va_codegen_success_Aes_round_4way round_key =
(va_pbool_and (va_codegen_success_AESNI_enc (va_op_xmm_xmm 2) round_key)
    (va_pbool_and (va_codegen_success_AESNI_enc (va_op_xmm_xmm 12) round_key)
        (va_pbool_and (va_codegen_success_AESNI_enc (va_op_xmm_xmm 13) round_key)
            (va_pbool_and (va_codegen_success_AESNI_enc (va_op_xmm_xmm 14) round_key) (va_ttrue ()))
        )))
Vale.AES.X64.AESCTR.fst.checked
Vale.X64.State.fsti.checked Vale.X64.QuickCodes.fsti.checked Vale.X64.QuickCode.fst.checked Vale.X64.Memory.fsti.checked Vale.X64.Machine_s.fst.checked Vale.X64.InsVector.fsti.checked Vale.X64.InsMem.fsti.checked Vale.X64.InsBasic.fsti.checked Vale.X64.InsAes.fsti.checked Vale.X64.Flags.fsti.checked Vale.X64.Decls.fsti.checked Vale.X64.CPU_Features_s.fst.checked Vale.Poly1305.Math.fsti.checked Vale.Def.Words_s.fsti.checked Vale.Def.Types_s.fst.checked Vale.Def.Prop_s.fst.checked Vale.Def.Opaque_s.fsti.checked Vale.Arch.TypesNative.fsti.checked Vale.Arch.Types.fsti.checked Vale.Arch.HeapImpl.fsti.checked Vale.AES.X64.GHash.fsti.checked Vale.AES.GHash.fsti.checked Vale.AES.GCTR_s.fst.checked Vale.AES.GCTR.fsti.checked Vale.AES.GCM_helpers.fsti.checked Vale.AES.AES_s.fst.checked Vale.AES.AES_helpers.fsti.checked Vale.AES.AES_common_s.fst.checked prims.fst.checked FStar.Seq.Base.fsti.checked FStar.Seq.fst.checked FStar.Pervasives.Native.fst.checked FStar.Pervasives.fsti.checked
Vale.AES.X64.AESCTR.fst
Vale.X64.Decls.va_operand_xmm Vale.X64.Decls.va_pbool_and Vale.X64.InsAes.va_codegen_success_AESNI_enc Vale.X64.Decls.va_op_xmm_xmm Vale.X64.Decls.va_ttrue Vale.X64.Decls.va_pbool
module Vale.AES.X64.AESCTR
open Vale.Def.Prop_s
open Vale.Def.Opaque_s
open Vale.Def.Words_s
open Vale.Def.Types_s
open FStar.Seq
open Vale.Arch.Types
open Vale.Arch.HeapImpl
open Vale.AES.AES_s
open Vale.X64.Machine_s
open Vale.X64.Memory
open Vale.X64.State
open Vale.X64.Decls
open Vale.X64.InsBasic
open Vale.X64.InsMem
open Vale.X64.InsVector
open Vale.X64.InsAes
open Vale.X64.QuickCode
open Vale.X64.QuickCodes
open Vale.AES.AES_helpers
open Vale.Poly1305.Math    // For lemma_poly_bits64()
open Vale.AES.GCM_helpers
open Vale.AES.GCTR_s
open Vale.AES.GCTR
open Vale.Arch.TypesNative
open Vale.AES.X64.GHash
open Vale.AES.GHash
open Vale.X64.CPU_Features_s
//-- finish_aes_encrypt_le


val finish_aes_encrypt_le : alg:algorithm -> input_LE:quad32 -> key:(seq nat32)
  -> Lemma
  (requires (Vale.AES.AES_s.is_aes_key_LE alg key))
  (ensures (Vale.AES.AES_s.aes_encrypt_LE alg key input_LE == Vale.AES.AES_s.eval_cipher alg
    input_LE (Vale.AES.AES_s.key_to_round_keys_LE alg key)))
let finish_aes_encrypt_le alg input_LE key =
  Vale.AES.AES_s.aes_encrypt_LE_reveal ();
  Vale.AES.AES_s.eval_cipher_reveal ();
  ()
//--
//-- Aes_round_4way

val va_code_Aes_round_4way : round_key:va_operand_xmm -> Tot va_code
[@ "opaque_to_smt"]
let va_code_Aes_round_4way round_key =
  (va_Block (va_CCons (va_code_AESNI_enc (va_op_xmm_xmm 2) round_key) (va_CCons (va_code_AESNI_enc
    (va_op_xmm_xmm 12) round_key) (va_CCons (va_code_AESNI_enc (va_op_xmm_xmm 13) round_key)
    (va_CCons (va_code_AESNI_enc (va_op_xmm_xmm 14) round_key) (va_CNil ()))))))

val va_codegen_success_Aes_round_4way : round_key:va_operand_xmm -> Tot va_pbool
[@ "opaque_to_smt"]
val va_codegen_success_Aes_round_4way : round_key:va_operand_xmm -> Tot va_pbool
round_key: Vale.X64.Decls.va_operand_xmm -> Vale.X64.Decls.va_pbool