val va_qcode_Gcm_extra_bytes
      (va_mods: va_mods_t)
      (alg: algorithm)
      (inout_b: buffer128)
      (key: (seq nat32))
      (round_keys: (seq quad32))
      (keys_b hkeys_b: buffer128)
      (total_bytes: nat)
      (old_hash: quad32)
      (completed_quads: (seq quad32))
      (h_LE: quad32)
    : (va_quickCode unit (va_code_Gcm_extra_bytes alg))
let va_qcode_Gcm_extra_bytes (va_mods:va_mods_t) (alg:algorithm) (inout_b:buffer128) (key:(seq
  nat32)) (round_keys:(seq quad32)) (keys_b:buffer128) (hkeys_b:buffer128) (total_bytes:nat)
  (old_hash:quad32) (completed_quads:(seq quad32)) (h_LE:quad32) : (va_quickCode unit
  (va_code_Gcm_extra_bytes alg)) =
  (qblock va_mods (fun (va_s:va_state) -> let (va_old_s:va_state) = va_s in let (len:(va_int_range
    1 1)) = 1 in va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 188 column 19 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/x64/Vale.AES.X64.GCMdecryptOpt.vaf *****"
    (va_quick_Load128_buffer (va_op_heaplet_mem_heaplet 5) (va_op_xmm_xmm 0) (va_op_reg_opr64_reg64
    rRax) 0 Secret inout_b 0) (va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 189 column 11 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/x64/Vale.AES.X64.GCMdecryptOpt.vaf *****"
    (va_quick_Mov128 (va_op_xmm_xmm 10) (va_op_xmm_xmm 0)) (fun (va_s:va_state) _ -> let
    (hash_input:quad32) = va_get_xmm 0 va_s in va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 193 column 22 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/x64/Vale.AES.X64.GCMdecryptOpt.vaf *****"
    (va_quick_Ghash_extra_bytes hkeys_b total_bytes old_hash h_LE completed_quads) (fun
    (va_s:va_state) _ -> va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 194 column 5 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/x64/Vale.AES.X64.GCMdecryptOpt.vaf *****"
    (FStar.Seq.Base.equal #Vale.X64.Decls.quad32 (Vale.X64.Decls.s128 (va_get_mem_heaplet 5 va_s)
    inout_b) (FStar.Seq.Base.create #quad32 1 hash_input)) (let (snap:(FStar.Seq.Base.seq
    Vale.X64.Decls.quad32)) = Vale.X64.Decls.s128 (va_get_mem_heaplet 5 va_s) inout_b in va_QSeq
    va_range1
    "***** PRECONDITION NOT MET AT line 198 column 11 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/x64/Vale.AES.X64.GCMdecryptOpt.vaf *****"
    (va_quick_Mov128 (va_op_xmm_xmm 0) (va_op_xmm_xmm 11)) (va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 199 column 11 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/x64/Vale.AES.X64.GCMdecryptOpt.vaf *****"
    (va_quick_Pshufb (va_op_xmm_xmm 0) (va_op_xmm_xmm 9)) (fun (va_s:va_state) _ -> va_QBind
    va_range1
    "***** PRECONDITION NOT MET AT line 200 column 20 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/x64/Vale.AES.X64.GCMdecryptOpt.vaf *****"
    (va_quick_AESEncryptBlock alg (Vale.Def.Types_s.reverse_bytes_quad32 (va_get_xmm 11 va_s)) key
    round_keys keys_b) (fun (va_s:va_state) _ -> va_qPURE va_range1
    "***** PRECONDITION NOT MET AT line 201 column 26 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/x64/Vale.AES.X64.GCMdecryptOpt.vaf *****"
    (fun (_:unit) -> Vale.AES.AES_s.aes_encrypt_LE_reveal ()) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 204 column 9 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/x64/Vale.AES.X64.GCMdecryptOpt.vaf *****"
    (va_quick_Pxor (va_op_xmm_xmm 10) (va_op_xmm_xmm 0)) (va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 205 column 20 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/x64/Vale.AES.X64.GCMdecryptOpt.vaf *****"
    (va_quick_Store128_buffer (va_op_heaplet_mem_heaplet 5) (va_op_reg_opr64_reg64 rRax)
    (va_op_xmm_xmm 10) 0 Secret inout_b 0) (fun (va_s:va_state) _ -> va_qPURE va_range1
    "***** PRECONDITION NOT MET AT line 207 column 24 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/x64/Vale.AES.X64.GCMdecryptOpt.vaf *****"
    (fun (_:unit) -> Vale.AES.GCTR.gctr_partial_reveal ()) (va_QEmpty (()))))))))))))))
val va_qcode_Gcm_extra_bytes
      (va_mods: va_mods_t)
      (alg: algorithm)
      (inout_b: buffer128)
      (key: (seq nat32))
      (round_keys: (seq quad32))
      (keys_b hkeys_b: buffer128)
      (total_bytes: nat)
      (old_hash: quad32)
      (completed_quads: (seq quad32))
      (h_LE: quad32)
    : (va_quickCode unit (va_code_Gcm_extra_bytes alg))
let va_qcode_Gcm_extra_bytes
      (va_mods: va_mods_t)
      (alg: algorithm)
      (inout_b: buffer128)
      (key: (seq nat32))
      (round_keys: (seq quad32))
      (keys_b hkeys_b: buffer128)
      (total_bytes: nat)
      (old_hash: quad32)
      (completed_quads: (seq quad32))
      (h_LE: quad32)
    : (va_quickCode unit (va_code_Gcm_extra_bytes alg)) =
(qblock va_mods
    (fun (va_s: va_state) ->
        let va_old_s:va_state = va_s in
        let len:(va_int_range 1 1) = 1 in
        va_QSeq va_range1
          "***** PRECONDITION NOT MET AT line 188 column 19 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/x64/Vale.AES.X64.GCMdecryptOpt.vaf *****"
          (va_quick_Load128_buffer (va_op_heaplet_mem_heaplet 5)
              (va_op_xmm_xmm 0)
              (va_op_reg_opr64_reg64 rRax)
              0
              Secret
              inout_b
              0)
          (va_QBind va_range1
              "***** PRECONDITION NOT MET AT line 189 column 11 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/x64/Vale.AES.X64.GCMdecryptOpt.vaf *****"
              (va_quick_Mov128 (va_op_xmm_xmm 10) (va_op_xmm_xmm 0))
              (fun (va_s: va_state) _ ->
                  let hash_input:quad32 = va_get_xmm 0 va_s in
                  va_QBind va_range1
                    "***** PRECONDITION NOT MET AT line 193 column 22 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/x64/Vale.AES.X64.GCMdecryptOpt.vaf *****"
                    (va_quick_Ghash_extra_bytes hkeys_b total_bytes old_hash h_LE completed_quads)
                    (fun (va_s: va_state) _ ->
                        va_qAssert va_range1
                          "***** PRECONDITION NOT MET AT line 194 column 5 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/x64/Vale.AES.X64.GCMdecryptOpt.vaf *****"
                          (FStar.Seq.Base.equal #Vale.X64.Decls.quad32
                              (Vale.X64.Decls.s128 (va_get_mem_heaplet 5 va_s) inout_b)
                              (FStar.Seq.Base.create #quad32 1 hash_input))
                          (let snap:(FStar.Seq.Base.seq Vale.X64.Decls.quad32) =
                              Vale.X64.Decls.s128 (va_get_mem_heaplet 5 va_s) inout_b
                            in
                            va_QSeq va_range1
                              "***** PRECONDITION NOT MET AT line 198 column 11 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/x64/Vale.AES.X64.GCMdecryptOpt.vaf *****"
                              (va_quick_Mov128 (va_op_xmm_xmm 0) (va_op_xmm_xmm 11))
                              (va_QBind va_range1
                                  "***** PRECONDITION NOT MET AT line 199 column 11 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/x64/Vale.AES.X64.GCMdecryptOpt.vaf *****"
                                  (va_quick_Pshufb (va_op_xmm_xmm 0) (va_op_xmm_xmm 9))
                                  (fun (va_s: va_state) _ ->
                                      va_QBind va_range1
                                        "***** PRECONDITION NOT MET AT line 200 column 20 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/x64/Vale.AES.X64.GCMdecryptOpt.vaf *****"
                                        (va_quick_AESEncryptBlock alg
                                            (Vale.Def.Types_s.reverse_bytes_quad32 (va_get_xmm 11
                                                    va_s))
                                            key
                                            round_keys
                                            keys_b)
                                        (fun (va_s: va_state) _ ->
                                            va_qPURE va_range1
                                              "***** PRECONDITION NOT MET AT line 201 column 26 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/x64/Vale.AES.X64.GCMdecryptOpt.vaf *****"
                                              (fun (_: unit) ->
                                                  Vale.AES.AES_s.aes_encrypt_LE_reveal ())
                                              (va_QSeq va_range1
                                                  "***** PRECONDITION NOT MET AT line 204 column 9 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/x64/Vale.AES.X64.GCMdecryptOpt.vaf *****"
                                                  (va_quick_Pxor (va_op_xmm_xmm 10)
                                                      (va_op_xmm_xmm 0))
                                                  (va_QBind va_range1
                                                      "***** PRECONDITION NOT MET AT line 205 column 20 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/x64/Vale.AES.X64.GCMdecryptOpt.vaf *****"
                                                      (va_quick_Store128_buffer (va_op_heaplet_mem_heaplet
                                                              5)
                                                          (va_op_reg_opr64_reg64 rRax)
                                                          (va_op_xmm_xmm 10)
                                                          0
                                                          Secret
                                                          inout_b
                                                          0)
                                                      (fun (va_s: va_state) _ ->
                                                          va_qPURE va_range1
                                                            "***** PRECONDITION NOT MET AT line 207 column 24 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/x64/Vale.AES.X64.GCMdecryptOpt.vaf *****"
                                                            (fun (_: unit) ->
                                                                Vale.AES.GCTR.gctr_partial_reveal ()
                                                            )
                                                            (va_QEmpty (()))))))))))))))
Vale.AES.X64.GCMdecryptOpt.fst.checked
Vale.X64.State.fsti.checked Vale.X64.Stack_i.fsti.checked Vale.X64.Stack.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.InsStack.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.Math.Poly2.Bits_s.fsti.checked Vale.Lib.Meta.fsti.checked Vale.Lib.Basic.fsti.checked Vale.Def.Words_s.fsti.checked Vale.Def.Words.Seq_s.fsti.checked Vale.Def.Types_s.fst.checked Vale.Def.Prop_s.fst.checked Vale.Def.Opaque_s.fsti.checked Vale.Arch.Types.fsti.checked Vale.Arch.HeapImpl.fsti.checked Vale.AES.X64.GHash.fsti.checked Vale.AES.X64.GF128_Mul.fsti.checked Vale.AES.X64.GCTR.fsti.checked Vale.AES.X64.GCMencryptOpt.fsti.checked Vale.AES.X64.AESopt2.fsti.checked Vale.AES.X64.AESopt.fsti.checked Vale.AES.X64.AESGCM.fsti.checked Vale.AES.X64.AES.fsti.checked Vale.AES.OptPublic.fsti.checked Vale.AES.GHash_s.fst.checked Vale.AES.GHash.fsti.checked Vale.AES.GF128_s.fsti.checked Vale.AES.GF128.fsti.checked Vale.AES.GCTR_s.fst.checked Vale.AES.GCTR.fsti.checked Vale.AES.GCM_s.fst.checked Vale.AES.GCM_helpers.fsti.checked Vale.AES.GCM.fsti.checked Vale.AES.AES_s.fst.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.GCMdecryptOpt.fst
Vale.X64.QuickCode.va_mods_t Vale.AES.AES_common_s.algorithm Vale.X64.Memory.buffer128 FStar.Seq.Base.seq Vale.X64.Memory.nat32 Vale.X64.Decls.quad32 Prims.nat Vale.X64.QuickCodes.qblock Prims.unit Prims.Cons Vale.X64.Decls.va_code Vale.X64.InsVector.va_code_Load128_buffer Vale.X64.Decls.va_op_heaplet_mem_heaplet Vale.X64.Decls.va_op_xmm_xmm Vale.X64.Decls.va_op_reg_opr64_reg64 Vale.X64.Machine_s.rRax Vale.Arch.HeapTypes_s.Secret Vale.X64.InsVector.va_code_Mov128 Vale.AES.X64.GCMencryptOpt.va_code_Ghash_extra_bytes Vale.X64.InsVector.va_code_Pshufb Vale.AES.X64.AES.va_code_AESEncryptBlock Vale.X64.InsVector.va_code_Pxor Vale.X64.InsVector.va_code_Store128_buffer Prims.Nil Vale.X64.Machine_s.precode Vale.X64.Decls.ins Vale.X64.Decls.ocmp Vale.X64.Decls.va_state Vale.X64.QuickCodes.va_QSeq Vale.X64.QuickCodes.va_range1 Vale.X64.InsVector.va_quick_Load128_buffer Vale.X64.QuickCodes.va_QBind Vale.X64.InsVector.va_quick_Mov128 Vale.AES.X64.GCMencryptOpt.va_quick_Ghash_extra_bytes Vale.X64.QuickCodes.va_qAssert FStar.Seq.Base.equal Vale.X64.Decls.s128 Vale.X64.Decls.va_get_mem_heaplet FStar.Seq.Base.create Vale.X64.InsVector.va_quick_Pshufb Vale.AES.X64.AES.va_quick_AESEncryptBlock Vale.Def.Types_s.reverse_bytes_quad32 Vale.X64.Decls.va_get_xmm Vale.X64.QuickCodes.va_qPURE Prims.pure_post Prims.l_and Prims.l_True Prims.l_Forall Prims.l_imp Prims.eq2 Vale.Def.Words_s.nat32 Vale.Def.Types_s.quad32 Vale.AES.AES_s.is_aes_key_LE Vale.AES.AES_s.aes_encrypt_LE Vale.AES.AES_s.aes_encrypt_LE_def Vale.AES.AES_s.aes_encrypt_LE_reveal Vale.X64.InsVector.va_quick_Pxor Vale.X64.InsVector.va_quick_Store128_buffer Vale.Def.Prop_s.prop0 Vale.AES.GCTR.gctr_partial Vale.AES.GCTR.gctr_partial_def Vale.AES.GCTR.gctr_partial_reveal Vale.X64.QuickCodes.va_QEmpty Vale.X64.QuickCodes.quickCodes Vale.X64.Decls.va_int_range Vale.X64.State.vale_state Vale.X64.QuickCode.va_quickCode Vale.AES.X64.GCMdecryptOpt.va_code_Gcm_extra_bytes
module Vale.AES.X64.GCMdecryptOpt
open Vale.Def.Prop_s
open Vale.Def.Opaque_s
open FStar.Seq
open Vale.Def.Words_s
open Vale.Def.Words.Seq_s
open Vale.Def.Types_s
open Vale.Arch.Types
open Vale.Arch.HeapImpl
open Vale.AES.AES_s
open Vale.AES.GCTR_s
open Vale.AES.GCTR
open Vale.AES.GCM
open Vale.AES.GHash_s
open Vale.AES.GHash
open Vale.AES.GCM_s
open Vale.AES.X64.AES
open Vale.AES.GF128_s
open Vale.AES.GF128
open Vale.Poly1305.Math
open Vale.AES.GCM_helpers
open Vale.AES.X64.GHash
open Vale.AES.X64.GCTR
open Vale.X64.Machine_s
open Vale.X64.Memory
open Vale.X64.Stack_i
open Vale.X64.State
open Vale.X64.Decls
open Vale.X64.InsBasic
open Vale.X64.InsMem
open Vale.X64.InsVector
open Vale.X64.InsStack
open Vale.X64.InsAes
open Vale.X64.QuickCode
open Vale.X64.QuickCodes
open Vale.AES.X64.GF128_Mul
open Vale.X64.Stack
open Vale.X64.CPU_Features_s
open Vale.Math.Poly2.Bits_s
open Vale.AES.X64.AESopt
open Vale.AES.X64.AESGCM
open Vale.AES.X64.AESopt2
open Vale.Lib.Meta
open Vale.AES.X64.GCMencryptOpt
open Vale.AES.OptPublic
open Vale.Lib.Basic
#reset-options "--z3rlimit 20 --max_ifuel 0"
//-- Gcm_extra_bytes

val va_code_Gcm_extra_bytes : alg:algorithm -> Tot va_code
[@ "opaque_to_smt" va_qattr]
let va_code_Gcm_extra_bytes alg =
  (va_Block (va_CCons (va_code_Load128_buffer (va_op_heaplet_mem_heaplet 5) (va_op_xmm_xmm 0)
    (va_op_reg_opr64_reg64 rRax) 0 Secret) (va_CCons (va_code_Mov128 (va_op_xmm_xmm 10)
    (va_op_xmm_xmm 0)) (va_CCons (va_code_Ghash_extra_bytes ()) (va_CCons (va_code_Mov128
    (va_op_xmm_xmm 0) (va_op_xmm_xmm 11)) (va_CCons (va_code_Pshufb (va_op_xmm_xmm 0)
    (va_op_xmm_xmm 9)) (va_CCons (va_code_AESEncryptBlock alg) (va_CCons (va_code_Pxor
    (va_op_xmm_xmm 10) (va_op_xmm_xmm 0)) (va_CCons (va_code_Store128_buffer
    (va_op_heaplet_mem_heaplet 5) (va_op_reg_opr64_reg64 rRax) (va_op_xmm_xmm 10) 0 Secret)
    (va_CNil ()))))))))))

val va_codegen_success_Gcm_extra_bytes : alg:algorithm -> Tot va_pbool
[@ "opaque_to_smt" va_qattr]
let va_codegen_success_Gcm_extra_bytes alg =
  (va_pbool_and (va_codegen_success_Load128_buffer (va_op_heaplet_mem_heaplet 5) (va_op_xmm_xmm 0)
    (va_op_reg_opr64_reg64 rRax) 0 Secret) (va_pbool_and (va_codegen_success_Mov128 (va_op_xmm_xmm
    10) (va_op_xmm_xmm 0)) (va_pbool_and (va_codegen_success_Ghash_extra_bytes ()) (va_pbool_and
    (va_codegen_success_Mov128 (va_op_xmm_xmm 0) (va_op_xmm_xmm 11)) (va_pbool_and
    (va_codegen_success_Pshufb (va_op_xmm_xmm 0) (va_op_xmm_xmm 9)) (va_pbool_and
    (va_codegen_success_AESEncryptBlock alg) (va_pbool_and (va_codegen_success_Pxor (va_op_xmm_xmm
    10) (va_op_xmm_xmm 0)) (va_pbool_and (va_codegen_success_Store128_buffer
    (va_op_heaplet_mem_heaplet 5) (va_op_reg_opr64_reg64 rRax) (va_op_xmm_xmm 10) 0 Secret)
    (va_ttrue ())))))))))

[@ "opaque_to_smt" va_qattr]
let va_qcode_Gcm_extra_bytes (va_mods:va_mods_t) (alg:algorithm) (inout_b:buffer128) (key:(seq
  nat32)) (round_keys:(seq quad32)) (keys_b:buffer128) (hkeys_b:buffer128) (total_bytes:nat)
  (old_hash:quad32) (completed_quads:(seq quad32)) (h_LE:quad32) : (va_quickCode unit
val va_qcode_Gcm_extra_bytes
      (va_mods: va_mods_t)
      (alg: algorithm)
      (inout_b: buffer128)
      (key: (seq nat32))
      (round_keys: (seq quad32))
      (keys_b hkeys_b: buffer128)
      (total_bytes: nat)
      (old_hash: quad32)
      (completed_quads: (seq quad32))
      (h_LE: quad32)
    : (va_quickCode unit (va_code_Gcm_extra_bytes alg))

    va_mods: Vale.X64.QuickCode.va_mods_t ->
    alg: Vale.AES.AES_common_s.algorithm ->
    inout_b: Vale.X64.Memory.buffer128 ->
    key: FStar.Seq.Base.seq Vale.X64.Memory.nat32 ->
    round_keys: FStar.Seq.Base.seq Vale.X64.Decls.quad32 ->
    keys_b: Vale.X64.Memory.buffer128 ->
    hkeys_b: Vale.X64.Memory.buffer128 ->
    total_bytes: Prims.nat ->
    old_hash: Vale.X64.Decls.quad32 ->
    completed_quads: FStar.Seq.Base.seq Vale.X64.Decls.quad32 ->
    h_LE: Vale.X64.Decls.quad32
  -> Vale.X64.QuickCode.va_quickCode Prims.unit
      (Vale.AES.X64.GCMdecryptOpt.va_code_Gcm_extra_bytes alg)