val va_qcode_Loop6x_decrypt
      (va_mods: va_mods_t)
      (alg: algorithm)
      (h_LE y_orig y_prev: quad32)
      (count: nat)
      (iv_b in0_b in_b out_b scratch_b: buffer128)
      (plain_quads: (seq quad32))
      (key_words: (seq nat32))
      (round_keys: (seq quad32))
      (keys_b hkeys_b: buffer128)
      (ctr_BE_orig ctr_BE: quad32)
    : (va_quickCode (quad32) (va_code_Loop6x_decrypt alg))
let va_qcode_Loop6x_decrypt (va_mods:va_mods_t) (alg:algorithm) (h_LE:quad32) (y_orig:quad32)
  (y_prev:quad32) (count:nat) (iv_b:buffer128) (in0_b:buffer128) (in_b:buffer128) (out_b:buffer128)
  (scratch_b:buffer128) (plain_quads:(seq quad32)) (key_words:(seq nat32)) (round_keys:(seq
  quad32)) (keys_b:buffer128) (hkeys_b:buffer128) (ctr_BE_orig:quad32) (ctr_BE:quad32) :
  (va_quickCode (quad32) (va_code_Loop6x_decrypt alg)) =
  (qblock va_mods (fun (va_s:va_state) -> let (va_old_s:va_state) = va_s in let
    (prev:Vale.Math.Poly2_s.poly) = add (add (Vale.Math.Poly2.Bits_s.of_quad32 (va_get_xmm 8 va_s))
    (Vale.Math.Poly2.Bits_s.of_quad32 (va_get_xmm 4 va_s))) (Vale.Math.Poly2.Bits_s.of_quad32
    (Vale.X64.Decls.buffer128_read scratch_b 1 (va_get_mem_heaplet 3 va_s))) in let
    (y_prev:Vale.Def.Types_s.quad32) = Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.Math.Poly2.Bits_s.to_quad32 prev) in va_qAssertSquash va_range1
    "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 449 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    ((fun a_1582 (s_1583:(FStar.Seq.Base.seq a_1582)) (i_1584:Prims.nat) (j_1585:Prims.nat) -> let
    (j_1545:Prims.nat) = j_1585 in Prims.b2t (Prims.op_AmpAmp (Prims.op_LessThanOrEqual i_1584
    j_1545) (Prims.op_LessThanOrEqual j_1545 (FStar.Seq.Base.length #a_1582 s_1583))))
    Vale.X64.Decls.quad32 (Vale.X64.Decls.s128 (va_get_mem_heaplet 6 va_s) in0_b) (count
    `op_Multiply` 6) (count `op_Multiply` 6 + 6)) (fun _ -> let (data:(FStar.Seq.Base.seq
    Vale.X64.Decls.quad32)) = FStar.Seq.Base.slice #Vale.X64.Decls.quad32 (Vale.X64.Decls.s128
    (va_get_mem_heaplet 6 va_s) in0_b) (count `op_Multiply` 6) (count `op_Multiply` 6 + 6) in
    va_qAssertSquash va_range1
    "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 450 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    ((fun a_1582 (s_1583:(FStar.Seq.Base.seq a_1582)) (i_1584:Prims.nat) (j_1585:Prims.nat) -> let
    (j_1545:Prims.nat) = j_1585 in Prims.b2t (Prims.op_AmpAmp (Prims.op_LessThanOrEqual i_1584
    j_1545) (Prims.op_LessThanOrEqual j_1545 (FStar.Seq.Base.length #a_1582 s_1583))))
    Vale.X64.Decls.quad32 (Vale.X64.Decls.s128 (va_get_mem_heaplet 6 va_s) in_b) (count
    `op_Multiply` 6) (count `op_Multiply` 6 + 6)) (fun _ -> va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 450 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (FStar.Seq.Base.equal #Vale.X64.Decls.quad32 data (FStar.Seq.Base.slice #Vale.X64.Decls.quad32
    (Vale.X64.Decls.s128 (va_get_mem_heaplet 6 va_s) in_b) (count `op_Multiply` 6) (count
    `op_Multiply` 6 + 6))) (va_qAssertSquash va_range1
    "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 451 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    ((fun a_1582 (s_1583:(FStar.Seq.Base.seq a_1582)) (i_1584:Prims.nat) (j_1585:Prims.nat) -> let
    (j_1545:Prims.nat) = j_1585 in Prims.b2t (Prims.op_AmpAmp (Prims.op_LessThanOrEqual i_1584
    j_1545) (Prims.op_LessThanOrEqual j_1545 (FStar.Seq.Base.length #a_1582 s_1583))))
    Vale.X64.Decls.quad32 (Vale.X64.Decls.s128 (va_get_mem_heaplet 6 va_s) in_b) (count
    `op_Multiply` 6) (count `op_Multiply` 6 + 6) /\ (fun a_1582 (s_1583:(FStar.Seq.Base.seq
    a_1582)) (i_1584:Prims.nat) (j_1585:Prims.nat) -> let (j_1545:Prims.nat) = j_1585 in Prims.b2t
    (Prims.op_AmpAmp (Prims.op_LessThanOrEqual i_1584 j_1545) (Prims.op_LessThanOrEqual j_1545
    (FStar.Seq.Base.length #a_1582 s_1583)))) quad32 plain_quads (count `op_Multiply` 6) (count
    `op_Multiply` 6 + 6)) (fun _ -> va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 451 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (FStar.Seq.Base.equal #Vale.X64.Decls.quad32 (FStar.Seq.Base.slice #Vale.X64.Decls.quad32
    (Vale.X64.Decls.s128 (va_get_mem_heaplet 6 va_s) in_b) (count `op_Multiply` 6) (count
    `op_Multiply` 6 + 6)) (FStar.Seq.Base.slice #quad32 plain_quads (count `op_Multiply` 6) (count
    `op_Multiply` 6 + 6))) (va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 453 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (Vale.Math.Poly2_s.degree (Vale.Math.Poly2.Bits_s.of_quad32 (va_get_xmm 8 va_s)) < 128)
    (va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 454 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (Vale.Math.Poly2_s.degree (Vale.Math.Poly2.Bits_s.of_quad32 (va_get_xmm 4 va_s)) < 128)
    (va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 455 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (Vale.Math.Poly2_s.degree (Vale.Math.Poly2.Bits_s.of_quad32 (Vale.X64.Decls.buffer128_read
    scratch_b 1 (va_get_mem_heaplet 3 va_s))) < 128) (va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 456 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (Vale.Math.Poly2_s.degree prev < 128) (va_qPURE va_range1
    "***** PRECONDITION NOT MET AT line 457 column 23 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (fun (_:unit) -> Vale.Math.Poly2.Bits.lemma_of_to_quad32 prev) (va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 459 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_Loop6x_partial alg h_LE y_prev data count (va_if (va_get_reg64 rRdx va_s > 6) (fun _
    -> count + 1) (fun _ -> count)) iv_b in0_b in_b scratch_b key_words round_keys keys_b hkeys_b
    ctr_BE) (fun (va_s:va_state) (init:quad32_6) -> let (eventual_Xi:Vale.Math.Poly2_s.poly) = add
    (add (Vale.Math.Poly2.Bits_s.of_quad32 (va_get_xmm 8 va_s)) (Vale.Math.Poly2.Bits_s.of_quad32
    (Vale.X64.Decls.buffer128_read scratch_b 1 (va_get_mem_heaplet 3 va_s))))
    (Vale.Math.Poly2.Bits_s.of_quad32 (va_get_xmm 4 va_s)) in va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 463 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (eventual_Xi == Vale.Math.Poly2.Bits_s.of_quad32 (Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.AES.GHash.ghash_incremental h_LE y_prev data))) (let (ctrs:(six_of
    Vale.Def.Types_s.quad32)) = make_six_of #Vale.Def.Types_s.quad32 (fun (i:(va_int_range 0 5)) ->
    Vale.Def.Types_s.reverse_bytes_quad32 (Vale.AES.GCTR.inc32lite ctr_BE i)) in let
    (plains:(six_of Vale.X64.Decls.quad32)) = make_six_of #Vale.X64.Decls.quad32 (fun
    (i:(va_int_range 0 5)) -> Vale.X64.Decls.buffer128_read in_b (count `op_Multiply` 6 + i)
    (va_get_mem_heaplet 6 va_s)) in va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 468 column 17 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_Loop6x_final alg iv_b scratch_b key_words round_keys keys_b (Vale.AES.GCTR.inc32lite
    ctr_BE 6) init ctrs plains (Vale.X64.Decls.buffer128_read in0_b (va_if (va_get_reg64 rRdx va_s
    > 6) (fun _ -> count + 1) (fun _ -> count) `op_Multiply` 6 + 0) (va_get_mem_heaplet 6 va_s)))
    (va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 471 column 10 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_Sub64 (va_op_dst_opr64_reg64 rRdx) (va_const_opr64 6)) (fun (va_s:va_state) _ ->
    va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 472 column 8 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_qIf va_mods (Cmp_gt (va_op_cmp_reg64 rRdx) (va_const_cmp 6)) (qblock va_mods (fun
    (va_s:va_state) -> va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 474 column 14 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_Add64 (va_op_dst_opr64_reg64 rR14) (va_const_opr64 96)) (va_QEmpty (())))) (qblock
    va_mods (fun (va_s:va_state) -> va_QEmpty (())))) (fun (va_s:va_state) va_g -> let
    (y_new:quad32) = Vale.AES.GHash.ghash_incremental0 h_LE y_prev data in va_qAssertSquash
    va_range1
    "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 479 column 36 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    ((fun a_1582 (s_1583:(FStar.Seq.Base.seq a_1582)) (i_1584:Prims.nat) (j_1585:Prims.nat) -> let
    (j_1545:Prims.nat) = j_1585 in Prims.b2t (Prims.op_AmpAmp (Prims.op_LessThanOrEqual i_1584
    j_1545) (Prims.op_LessThanOrEqual j_1545 (FStar.Seq.Base.length #a_1582 s_1583)))) quad32
    plain_quads 0 (count `op_Multiply` 6)) (fun _ -> let (va_arg104:(FStar.Seq.Base.seq
    Vale.Def.Types_s.quad32)) = data in let (va_arg103:(FStar.Seq.Base.seq
    Vale.Def.Types_s.quad32)) = FStar.Seq.Base.slice #quad32 plain_quads 0 (count `op_Multiply` 6)
    in let (va_arg102:Vale.Def.Types_s.quad32) = y_new in let (va_arg101:Vale.Def.Types_s.quad32) =
    y_orig in let (va_arg100:Vale.Def.Types_s.quad32) = h_LE in va_qPURE va_range1
    "***** PRECONDITION NOT MET AT line 479 column 36 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (fun (_:unit) -> Vale.AES.GHash.lemma_ghash_incremental0_append va_arg100 va_arg101 y_prev
    va_arg102 va_arg103 va_arg104) (va_qAssertSquash va_range1
    "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 480 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    ((fun a_1582 (s_1583:(FStar.Seq.Base.seq a_1582)) (i_1584:Prims.nat) (j_1585:Prims.nat) -> let
    (j_1545:Prims.nat) = j_1585 in Prims.b2t (Prims.op_AmpAmp (Prims.op_LessThanOrEqual i_1584
    j_1545) (Prims.op_LessThanOrEqual j_1545 (FStar.Seq.Base.length #a_1582 s_1583)))) quad32
    plain_quads 0 (count `op_Multiply` 6)) (fun _ -> va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 480 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (y_new == Vale.AES.GHash.ghash_incremental0 h_LE y_orig (FStar.Seq.Base.append #quad32
    (FStar.Seq.Base.slice #quad32 plain_quads 0 (count `op_Multiply` 6)) data)) (va_qAssertSquash
    va_range1
    "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 481 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    ((fun a_1582 (s_1583:(FStar.Seq.Base.seq a_1582)) (i_1584:Prims.nat) (j_1585:Prims.nat) -> let
    (j_1545:Prims.nat) = j_1585 in Prims.b2t (Prims.op_AmpAmp (Prims.op_LessThanOrEqual i_1584
    j_1545) (Prims.op_LessThanOrEqual j_1545 (FStar.Seq.Base.length #a_1582 s_1583)))) quad32
    plain_quads 0 (count `op_Multiply` 6) /\ (fun a_1582 (s_1583:(FStar.Seq.Base.seq a_1582))
    (i_1584:Prims.nat) (j_1585:Prims.nat) -> let (j_1545:Prims.nat) = j_1585 in Prims.b2t
    (Prims.op_AmpAmp (Prims.op_LessThanOrEqual i_1584 j_1545) (Prims.op_LessThanOrEqual j_1545
    (FStar.Seq.Base.length #a_1582 s_1583)))) quad32 plain_quads 0 ((count + 1) `op_Multiply` 6))
    (fun _ -> va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 481 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (FStar.Seq.Base.equal #quad32 (FStar.Seq.Base.append #quad32 (FStar.Seq.Base.slice #quad32
    plain_quads 0 (count `op_Multiply` 6)) data) (FStar.Seq.Base.slice #quad32 plain_quads 0
    ((count + 1) `op_Multiply` 6))) (va_qAssertSquash va_range1
    "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 483 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    ((fun a_1582 (s_1583:(FStar.Seq.Base.seq a_1582)) (i_1584:Prims.nat) (j_1585:Prims.nat) -> let
    (j_1545:Prims.nat) = j_1585 in Prims.b2t (Prims.op_AmpAmp (Prims.op_LessThanOrEqual i_1584
    j_1545) (Prims.op_LessThanOrEqual j_1545 (FStar.Seq.Base.length #a_1582 s_1583)))) quad32
    plain_quads 0 ((count + 1) `op_Multiply` 6)) (fun _ -> va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 483 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (y_new == Vale.AES.GHash.ghash_incremental0 h_LE y_orig (FStar.Seq.Base.slice #quad32
    plain_quads 0 ((count + 1) `op_Multiply` 6))) (va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 486 column 8 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_qIf va_mods (Cmp_gt (va_op_cmp_reg64 rRdx) (va_const_cmp 0)) (qblock va_mods (fun
    (va_s:va_state) -> va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 488 column 27 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_Loop6x_save_output count out_b) (va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 492 column 23 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_Load128_buffer (va_op_heaplet_mem_heaplet 3) (va_op_xmm_xmm 7) (va_op_reg_opr64_reg64
    rRbp) 32 Secret scratch_b 2) (fun (va_s:va_state) _ -> let (plain:(FStar.Seq.Base.seq
    Vale.X64.Decls.quad32)) = Vale.X64.Decls.s128 (va_get_mem_heaplet 6 va_old_s) in_b in let
    (cipher:(FStar.Seq.Base.seq Vale.X64.Decls.quad32)) = Vale.X64.Decls.s128 (va_get_mem_heaplet 6
    va_s) out_b in let (bound:(va_int_at_least 0)) = count `op_Multiply` 6 in va_qAssertSquash
    va_range1
    "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 497 column 44 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (bound >= 0 /\ bound <= 4294967295) (fun _ -> let (va_arg99:Vale.Def.Types_s.quad32) =
    ctr_BE_orig in let (va_arg98:(FStar.Seq.Base.seq Vale.Def.Types_s.nat32)) = key_words in let
    (va_arg97:(FStar.Seq.Base.seq Vale.Def.Types_s.quad32)) = cipher in let
    (va_arg96:(FStar.Seq.Base.seq Vale.Def.Types_s.quad32)) = Vale.X64.Decls.s128
    (va_get_mem_heaplet 6 va_old_s) out_b in let (va_arg95:(FStar.Seq.Base.seq
    Vale.Def.Types_s.quad32)) = plain_quads in let (va_arg94:(FStar.Seq.Base.seq
    Vale.Def.Types_s.quad32)) = plain_quads in let (va_arg93:Vale.Def.Types_s.nat32) = bound in let
    (va_arg92:Vale.AES.AES_common_s.algorithm) = alg in va_qPURE va_range1
    "***** PRECONDITION NOT MET AT line 497 column 44 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (fun (_:unit) -> Vale.AES.GCTR.gctr_partial_opaque_ignores_postfix va_arg92 va_arg93 va_arg94
    va_arg95 va_arg96 va_arg97 va_arg98 va_arg99) (let (va_arg91:Vale.Def.Types_s.quad32) =
    ctr_BE_orig in let (va_arg90:(FStar.Seq.Base.seq Vale.Def.Types_s.nat32)) = key_words in let
    (va_arg89:(FStar.Seq.Base.seq Vale.Def.Types_s.quad32)) = cipher in let
    (va_arg88:(FStar.Seq.Base.seq Vale.Def.Types_s.quad32)) = plain_quads in let
    (va_arg87:Prims.nat) = bound in let (va_arg86:Vale.AES.AES_common_s.algorithm) = alg in
    va_qPURE va_range1
    "***** PRECONDITION NOT MET AT line 499 column 29 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (fun (_:unit) -> Vale.AES.GCTR.gctr_partial_extend6 va_arg86 va_arg87 va_arg88 va_arg89
    va_arg90 va_arg91) (let (va_arg85:Vale.Math.Poly2_s.poly) = Vale.Math.Poly2.Bits_s.of_quad32
    (va_get_xmm 4 va_s) in let (va_arg84:Vale.Math.Poly2_s.poly) = Vale.Math.Poly2.Bits_s.of_quad32
    (Vale.X64.Decls.buffer128_read scratch_b 1 (va_get_mem_heaplet 3 va_s)) in let
    (va_arg83:Vale.Math.Poly2_s.poly) = Vale.Math.Poly2.Bits_s.of_quad32 (va_get_xmm 8 va_s) in
    va_qPURE va_range1
    "***** PRECONDITION NOT MET AT line 501 column 24 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (fun (_:unit) -> Vale.AES.GHash.lemma_add_manip va_arg83 va_arg84 va_arg85) (va_qAssert
    va_range1
    "***** PRECONDITION NOT MET AT line 507 column 9 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (y_new == Vale.Def.Types_s.reverse_bytes_quad32 (Vale.Math.Poly2.Bits_s.to_quad32
    (Vale.Math.Poly2.Bits_s.of_quad32 (Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.AES.GHash.ghash_incremental h_LE y_prev data))))) (va_QEmpty (())))))))))) (qblock
    va_mods (fun (va_s:va_state) -> va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 511 column 9 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (eventual_Xi == Vale.Math.Poly2.Bits_s.of_quad32 (Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.AES.GHash.ghash_incremental h_LE y_prev data))) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 512 column 33 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_Mem128_lemma (va_op_heaplet_mem_heaplet 3) (va_op_reg64_reg64 rRbp) 16 Secret
    scratch_b 1) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 512 column 17 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPolyAdd (va_op_xmm_xmm 8) (va_op_xmm_xmm 8) (va_opr_code_Mem128
    (va_op_heaplet_mem_heaplet 3) (va_op_reg64_reg64 rRbp) 16 Secret)) (va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 513 column 17 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPolyAdd (va_op_xmm_xmm 8) (va_op_xmm_xmm 8) (va_op_opr128_xmm 4)) (fun
    (va_s:va_state) _ -> va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 514 column 9 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (Vale.Math.Poly2.Bits_s.of_quad32 (va_get_xmm 8 va_s) == Vale.Math.Poly2.Bits_s.of_quad32
    (Vale.Def.Types_s.reverse_bytes_quad32 (Vale.AES.GHash.ghash_incremental h_LE y_prev data)))
    (va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 515 column 9 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (Vale.Math.Poly2.Bits_s.to_quad32 (Vale.Math.Poly2.Bits_s.of_quad32 (va_get_xmm 8 va_s)) ==
    Vale.Math.Poly2.Bits_s.to_quad32 (Vale.Math.Poly2.Bits_s.of_quad32
    (Vale.Def.Types_s.reverse_bytes_quad32 (Vale.AES.GHash.ghash_incremental h_LE y_prev data))))
    (va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 516 column 9 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_get_xmm 8 va_s == Vale.Def.Types_s.reverse_bytes_quad32 (Vale.AES.GHash.ghash_incremental
    h_LE y_prev data)) (va_QEmpty (()))))))))))) (fun (va_s:va_state) va_g -> va_qPURE va_range1
    "***** PRECONDITION NOT MET AT line 518 column 26 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (fun (_:unit) -> Vale.AES.GCTR.gctr_registers_reveal ()) (va_QEmpty
    ((y_new)))))))))))))))))))))))))))))
val va_qcode_Loop6x_decrypt
      (va_mods: va_mods_t)
      (alg: algorithm)
      (h_LE y_orig y_prev: quad32)
      (count: nat)
      (iv_b in0_b in_b out_b scratch_b: buffer128)
      (plain_quads: (seq quad32))
      (key_words: (seq nat32))
      (round_keys: (seq quad32))
      (keys_b hkeys_b: buffer128)
      (ctr_BE_orig ctr_BE: quad32)
    : (va_quickCode (quad32) (va_code_Loop6x_decrypt alg))
let va_qcode_Loop6x_decrypt
      (va_mods: va_mods_t)
      (alg: algorithm)
      (h_LE y_orig y_prev: quad32)
      (count: nat)
      (iv_b in0_b in_b out_b scratch_b: buffer128)
      (plain_quads: (seq quad32))
      (key_words: (seq nat32))
      (round_keys: (seq quad32))
      (keys_b hkeys_b: buffer128)
      (ctr_BE_orig ctr_BE: quad32)
    : (va_quickCode (quad32) (va_code_Loop6x_decrypt alg)) =
(qblock va_mods
    (fun (va_s: va_state) ->
        let va_old_s:va_state = va_s in
        let prev:Vale.Math.Poly2_s.poly =
          add (add (Vale.Math.Poly2.Bits_s.of_quad32 (va_get_xmm 8 va_s))
                (Vale.Math.Poly2.Bits_s.of_quad32 (va_get_xmm 4 va_s)))
            (Vale.Math.Poly2.Bits_s.of_quad32 (Vale.X64.Decls.buffer128_read scratch_b
                    1
                    (va_get_mem_heaplet 3 va_s)))
        in
        let y_prev:Vale.Def.Types_s.quad32 =
          Vale.Def.Types_s.reverse_bytes_quad32 (Vale.Math.Poly2.Bits_s.to_quad32 prev)
        in
        va_qAssertSquash va_range1
          "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 449 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
          ((fun
                a_1582
                (s_1583: (FStar.Seq.Base.seq a_1582))
                (i_1584: Prims.nat)
                (j_1585: Prims.nat)
                ->
                let j_1545:Prims.nat = j_1585 in
                Prims.b2t (Prims.op_AmpAmp (Prims.op_LessThanOrEqual i_1584 j_1545)
                      (Prims.op_LessThanOrEqual j_1545 (FStar.Seq.Base.length #a_1582 s_1583)))) Vale.X64.Decls.quad32
              (Vale.X64.Decls.s128 (va_get_mem_heaplet 6 va_s) in0_b)
              (count `op_Multiply` 6)
              (count `op_Multiply` 6 + 6))
          (fun _ ->
              let data:(FStar.Seq.Base.seq Vale.X64.Decls.quad32) =
                FStar.Seq.Base.slice #Vale.X64.Decls.quad32
                  (Vale.X64.Decls.s128 (va_get_mem_heaplet 6 va_s) in0_b)
                  (count `op_Multiply` 6)
                  (count `op_Multiply` 6 + 6)
              in
              va_qAssertSquash va_range1
                "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 450 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                ((fun
                      a_1582
                      (s_1583: (FStar.Seq.Base.seq a_1582))
                      (i_1584: Prims.nat)
                      (j_1585: Prims.nat)
                      ->
                      let j_1545:Prims.nat = j_1585 in
                      Prims.b2t (Prims.op_AmpAmp (Prims.op_LessThanOrEqual i_1584 j_1545)
                            (Prims.op_LessThanOrEqual j_1545 (FStar.Seq.Base.length #a_1582 s_1583))
                        )) Vale.X64.Decls.quad32
                    (Vale.X64.Decls.s128 (va_get_mem_heaplet 6 va_s) in_b)
                    (count `op_Multiply` 6)
                    (count `op_Multiply` 6 + 6))
                (fun _ ->
                    va_qAssert va_range1
                      "***** PRECONDITION NOT MET AT line 450 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                      (FStar.Seq.Base.equal #Vale.X64.Decls.quad32
                          data
                          (FStar.Seq.Base.slice #Vale.X64.Decls.quad32
                              (Vale.X64.Decls.s128 (va_get_mem_heaplet 6 va_s) in_b)
                              (count `op_Multiply` 6)
                              (count `op_Multiply` 6 + 6)))
                      (va_qAssertSquash va_range1
                          "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 451 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                          ((fun
                                a_1582
                                (s_1583: (FStar.Seq.Base.seq a_1582))
                                (i_1584: Prims.nat)
                                (j_1585: Prims.nat)
                                ->
                                let j_1545:Prims.nat = j_1585 in
                                Prims.b2t (Prims.op_AmpAmp (Prims.op_LessThanOrEqual i_1584 j_1545)
                                      (Prims.op_LessThanOrEqual j_1545
                                          (FStar.Seq.Base.length #a_1582 s_1583)))) Vale.X64.Decls.quad32
                              (Vale.X64.Decls.s128 (va_get_mem_heaplet 6 va_s) in_b)
                              (count `op_Multiply` 6)
                              (count `op_Multiply` 6 + 6) /\
                            (fun
                                a_1582
                                (s_1583: (FStar.Seq.Base.seq a_1582))
                                (i_1584: Prims.nat)
                                (j_1585: Prims.nat)
                                ->
                                let j_1545:Prims.nat = j_1585 in
                                Prims.b2t (Prims.op_AmpAmp (Prims.op_LessThanOrEqual i_1584 j_1545)
                                      (Prims.op_LessThanOrEqual j_1545
                                          (FStar.Seq.Base.length #a_1582 s_1583)))) quad32
                              plain_quads
                              (count `op_Multiply` 6)
                              (count `op_Multiply` 6 + 6))
                          (fun _ ->
                              va_qAssert va_range1
                                "***** PRECONDITION NOT MET AT line 451 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                (FStar.Seq.Base.equal #Vale.X64.Decls.quad32
                                    (FStar.Seq.Base.slice #Vale.X64.Decls.quad32
                                        (Vale.X64.Decls.s128 (va_get_mem_heaplet 6 va_s) in_b)
                                        (count `op_Multiply` 6)
                                        (count `op_Multiply` 6 + 6))
                                    (FStar.Seq.Base.slice #quad32
                                        plain_quads
                                        (count `op_Multiply` 6)
                                        (count `op_Multiply` 6 + 6)))
                                (va_qAssert va_range1
                                    "***** PRECONDITION NOT MET AT line 453 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                    (Vale.Math.Poly2_s.degree (Vale.Math.Poly2.Bits_s.of_quad32 (va_get_xmm
                                                8
                                                va_s)) <
                                      128)
                                    (va_qAssert va_range1
                                        "***** PRECONDITION NOT MET AT line 454 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                        (Vale.Math.Poly2_s.degree (Vale.Math.Poly2.Bits_s.of_quad32 (
                                                  va_get_xmm 4 va_s)) <
                                          128)
                                        (va_qAssert va_range1
                                            "***** PRECONDITION NOT MET AT line 455 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                            (Vale.Math.Poly2_s.degree (Vale.Math.Poly2.Bits_s.of_quad32
                                                    (Vale.X64.Decls.buffer128_read scratch_b
                                                        1
                                                        (va_get_mem_heaplet 3 va_s))) <
                                              128)
                                            (va_qAssert va_range1
                                                "***** PRECONDITION NOT MET AT line 456 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                (Vale.Math.Poly2_s.degree prev < 128)
                                                (va_qPURE va_range1
                                                    "***** PRECONDITION NOT MET AT line 457 column 23 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                    (fun (_: unit) ->
                                                        Vale.Math.Poly2.Bits.lemma_of_to_quad32 prev
                                                    )
                                                    (va_QBind va_range1
                                                        "***** PRECONDITION NOT MET AT line 459 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                        (va_quick_Loop6x_partial alg h_LE y_prev
                                                            data count
                                                            (va_if (va_get_reg64 rRdx va_s > 6)
                                                                (fun _ -> count + 1)
                                                                (fun _ -> count)) iv_b in0_b in_b
                                                            scratch_b key_words round_keys keys_b
                                                            hkeys_b ctr_BE)
                                                        (fun (va_s: va_state) (init: quad32_6) ->
                                                            let eventual_Xi:Vale.Math.Poly2_s.poly =
                                                              add (add (Vale.Math.Poly2.Bits_s.of_quad32
                                                                        (va_get_xmm 8 va_s))
                                                                    (Vale.Math.Poly2.Bits_s.of_quad32
                                                                        (Vale.X64.Decls.buffer128_read
                                                                            scratch_b
                                                                            1
                                                                            (va_get_mem_heaplet 3
                                                                                va_s))))
                                                                (Vale.Math.Poly2.Bits_s.of_quad32 (va_get_xmm
                                                                        4
                                                                        va_s))
                                                            in
                                                            va_qAssert va_range1
                                                              "***** PRECONDITION NOT MET AT line 463 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                              (eventual_Xi ==
                                                                Vale.Math.Poly2.Bits_s.of_quad32 (Vale.Def.Types_s.reverse_bytes_quad32
                                                                      (Vale.AES.GHash.ghash_incremental
                                                                          h_LE
                                                                          y_prev
                                                                          data)))
                                                              (let ctrs:(six_of Vale.Def.Types_s.quad32
                                                                  ) =
                                                                  make_six_of #Vale.Def.Types_s.quad32
                                                                    (fun (i: (va_int_range 0 5)) ->
                                                                        Vale.Def.Types_s.reverse_bytes_quad32
                                                                          (Vale.AES.GCTR.inc32lite ctr_BE
                                                                              i))
                                                                in
                                                                let plains:(six_of Vale.X64.Decls.quad32
                                                                  ) =
                                                                  make_six_of #Vale.X64.Decls.quad32
                                                                    (fun (i: (va_int_range 0 5)) ->
                                                                        Vale.X64.Decls.buffer128_read
                                                                          in_b
                                                                          (count `op_Multiply` 6 + i
                                                                          )
                                                                          (va_get_mem_heaplet 6 va_s
                                                                          ))
                                                                in
                                                                va_QSeq va_range1
                                                                  "***** PRECONDITION NOT MET AT line 468 column 17 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                  (va_quick_Loop6x_final alg iv_b
                                                                      scratch_b key_words round_keys
                                                                      keys_b
                                                                      (Vale.AES.GCTR.inc32lite ctr_BE
                                                                          6) init ctrs plains
                                                                      (Vale.X64.Decls.buffer128_read
                                                                          in0_b
                                                                          ((va_if (va_get_reg64 rRdx
                                                                                    va_s >
                                                                                  6)
                                                                                (fun _ -> count + 1)
                                                                                (fun _ -> count))
                                                                            `op_Multiply`
                                                                            6 +
                                                                            0)
                                                                          (va_get_mem_heaplet 6 va_s
                                                                          )))
                                                                  (va_QBind va_range1
                                                                      "***** PRECONDITION NOT MET AT line 471 column 10 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                      (va_quick_Sub64 (va_op_dst_opr64_reg64
                                                                              rRdx)
                                                                          (va_const_opr64 6))
                                                                      (fun (va_s: va_state) _ ->
                                                                          va_QBind va_range1
                                                                            "***** PRECONDITION NOT MET AT line 472 column 8 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                            (va_qIf va_mods
                                                                                (Cmp_gt
                                                                                    (va_op_cmp_reg64
                                                                                        rRdx)
                                                                                    (va_const_cmp 6)
                                                                                )
                                                                                (qblock va_mods
                                                                                    (fun
                                                                                        (va_s:
                                                                                          va_state)
                                                                                        ->
                                                                                        va_QSeq va_range1
                                                                                          "***** PRECONDITION NOT MET AT line 474 column 14 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                          (va_quick_Add64
                                                                                              (va_op_dst_opr64_reg64
                                                                                                  rR14
                                                                                                )
                                                                                              (va_const_opr64
                                                                                                  96
                                                                                              ))
                                                                                          (va_QEmpty
                                                                                              (())))
                                                                                )
                                                                                (qblock va_mods
                                                                                    (fun
                                                                                        (va_s:
                                                                                          va_state)
                                                                                        ->
                                                                                        va_QEmpty (()
                                                                                          ))))
                                                                            (fun
                                                                                (va_s: va_state)
                                                                                va_g
                                                                                ->
                                                                                let y_new:quad32 =
                                                                                  Vale.AES.GHash.ghash_incremental0
                                                                                    h_LE
                                                                                    y_prev
                                                                                    data
                                                                                in
                                                                                va_qAssertSquash va_range1
                                                                                  "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 479 column 36 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                  ((fun
                                                                                        a_1582
                                                                                        (s_1583:
                                                                                          (FStar.Seq.Base.seq
                                                                                              a_1582
                                                                                          ))
                                                                                        (i_1584:
                                                                                          Prims.nat)
                                                                                        (j_1585:
                                                                                          Prims.nat)
                                                                                        ->
                                                                                        let j_1545:Prims.nat
                                                                                        =
                                                                                          j_1585
                                                                                        in
                                                                                        Prims.b2t (Prims.op_AmpAmp
                                                                                              (Prims.op_LessThanOrEqual
                                                                                                  i_1584
                                                                                                  j_1545
                                                                                                )
                                                                                              (Prims.op_LessThanOrEqual
                                                                                                  j_1545
                                                                                                  (FStar.Seq.Base.length
                                                                                                      #a_1582
                                                                                                      s_1583

                                                                                                  ))
                                                                                          )) quad32
                                                                                      plain_quads
                                                                                      0
                                                                                      (count
                                                                                        `op_Multiply`
                                                                                        6))
                                                                                  (fun _ ->
                                                                                      let va_arg104:(
                                                                                        FStar.Seq.Base.seq
                                                                                          Vale.Def.Types_s.quad32
                                                                                        ) =
                                                                                        data
                                                                                      in
                                                                                      let va_arg103:(
                                                                                        FStar.Seq.Base.seq
                                                                                          Vale.Def.Types_s.quad32
                                                                                        ) =
                                                                                        FStar.Seq.Base.slice
                                                                                          #quad32
                                                                                          plain_quads
                                                                                          0
                                                                                          (count
                                                                                            `op_Multiply`
                                                                                            6)
                                                                                      in
                                                                                      let va_arg102:Vale.Def.Types_s.quad32
                                                                                      =
                                                                                        y_new
                                                                                      in
                                                                                      let va_arg101:Vale.Def.Types_s.quad32
                                                                                      =
                                                                                        y_orig
                                                                                      in
                                                                                      let va_arg100:Vale.Def.Types_s.quad32
                                                                                      =
                                                                                        h_LE
                                                                                      in
                                                                                      va_qPURE va_range1
                                                                                        "***** PRECONDITION NOT MET AT line 479 column 36 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                        (fun
                                                                                            (_:
                                                                                              unit)
                                                                                            ->
                                                                                            Vale.AES.GHash.lemma_ghash_incremental0_append
                                                                                              va_arg100
                                                                                              va_arg101
                                                                                              y_prev
                                                                                              va_arg102
                                                                                              va_arg103
                                                                                              va_arg104
                                                                                            )
                                                                                        (va_qAssertSquash
                                                                                            va_range1
                                                                                            "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 480 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                            ((fun
                                                                                                  a_1582
                                                                                                  (s_1583:
                                                                                                    (
                                                                                                      FStar.Seq.Base.seq
                                                                                                        a_1582

                                                                                                    )
                                                                                                  )
                                                                                                  (i_1584:
                                                                                                    Prims.nat
                                                                                                  )
                                                                                                  (j_1585:
                                                                                                    Prims.nat
                                                                                                  )
                                                                                                  ->
                                                                                                  let
                                                                                                  j_1545:Prims.nat
                                                                                                  =
                                                                                                    j_1585
                                                                                                  in
                                                                                                  Prims.b2t
                                                                                                    (
                                                                                                      Prims.op_AmpAmp
                                                                                                        (
                                                                                                          Prims.op_LessThanOrEqual
                                                                                                            i_1584
                                                                                                            j_1545

                                                                                                        )
                                                                                                        (
                                                                                                          Prims.op_LessThanOrEqual
                                                                                                            j_1545
                                                                                                            (
                                                                                                              FStar.Seq.Base.length
                                                                                                                #a_1582
                                                                                                                s_1583

                                                                                                            )

                                                                                                        )

                                                                                                    )
                                                                                                  ) quad32
                                                                                                plain_quads
                                                                                                0
                                                                                                (count
                                                                                                  `op_Multiply`
                                                                                                  6)
                                                                                            )
                                                                                            (fun
                                                                                                _
                                                                                                ->
                                                                                                va_qAssert
                                                                                                  va_range1
                                                                                                  "***** PRECONDITION NOT MET AT line 480 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                                  (y_new ==
                                                                                                    Vale.AES.GHash.ghash_incremental0
                                                                                                      h_LE
                                                                                                      y_orig
                                                                                                      (
                                                                                                        FStar.Seq.Base.append
                                                                                                          #quad32
                                                                                                          (
                                                                                                            FStar.Seq.Base.slice
                                                                                                              #quad32
                                                                                                              plain_quads
                                                                                                              0
                                                                                                              (
                                                                                                                count
                                                                                                                `op_Multiply`
                                                                                                                6
                                                                                                              )

                                                                                                          )
                                                                                                          data

                                                                                                      )

                                                                                                  )
                                                                                                  (va_qAssertSquash
                                                                                                      va_range1
                                                                                                      "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 481 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                                      (
                                                                                                        (
                                                                                                          fun
                                                                                                            a_1582
                                                                                                            (
                                                                                                              s_1583:
                                                                                                              (
                                                                                                                FStar.Seq.Base.seq
                                                                                                                  a_1582

                                                                                                              )
                                                                                                            )
                                                                                                            (
                                                                                                              i_1584:
                                                                                                              Prims.nat
                                                                                                            )
                                                                                                            (
                                                                                                              j_1585:
                                                                                                              Prims.nat
                                                                                                            )
                                                                                                            ->
                                                                                                            let
                                                                                                            j_1545:Prims.nat
                                                                                                            =
                                                                                                              j_1585
                                                                                                            in
                                                                                                            Prims.b2t
                                                                                                              (
                                                                                                                Prims.op_AmpAmp
                                                                                                                  (
                                                                                                                    Prims.op_LessThanOrEqual
                                                                                                                      i_1584
                                                                                                                      j_1545

                                                                                                                  )
                                                                                                                  (
                                                                                                                    Prims.op_LessThanOrEqual
                                                                                                                      j_1545
                                                                                                                      (
                                                                                                                        FStar.Seq.Base.length
                                                                                                                          #a_1582
                                                                                                                          s_1583

                                                                                                                      )

                                                                                                                  )

                                                                                                              )

                                                                                                        )
                                                                                                          quad32
                                                                                                          plain_quads
                                                                                                          0
                                                                                                          (
                                                                                                            count
                                                                                                            `op_Multiply`
                                                                                                            6
                                                                                                          )
                                                                                                         /\
                                                                                                        (
                                                                                                          fun
                                                                                                            a_1582
                                                                                                            (
                                                                                                              s_1583:
                                                                                                              (
                                                                                                                FStar.Seq.Base.seq
                                                                                                                  a_1582

                                                                                                              )
                                                                                                            )
                                                                                                            (
                                                                                                              i_1584:
                                                                                                              Prims.nat
                                                                                                            )
                                                                                                            (
                                                                                                              j_1585:
                                                                                                              Prims.nat
                                                                                                            )
                                                                                                            ->
                                                                                                            let
                                                                                                            j_1545:Prims.nat
                                                                                                            =
                                                                                                              j_1585
                                                                                                            in
                                                                                                            Prims.b2t
                                                                                                              (
                                                                                                                Prims.op_AmpAmp
                                                                                                                  (
                                                                                                                    Prims.op_LessThanOrEqual
                                                                                                                      i_1584
                                                                                                                      j_1545

                                                                                                                  )
                                                                                                                  (
                                                                                                                    Prims.op_LessThanOrEqual
                                                                                                                      j_1545
                                                                                                                      (
                                                                                                                        FStar.Seq.Base.length
                                                                                                                          #a_1582
                                                                                                                          s_1583

                                                                                                                      )

                                                                                                                  )

                                                                                                              )

                                                                                                        )
                                                                                                          quad32
                                                                                                          plain_quads
                                                                                                          0
                                                                                                          (
                                                                                                            (
                                                                                                              count +
                                                                                                              1
                                                                                                            )
                                                                                                            `op_Multiply`
                                                                                                            6
                                                                                                          )

                                                                                                      )
                                                                                                      (
                                                                                                        fun
                                                                                                          _
                                                                                                          ->
                                                                                                          va_qAssert
                                                                                                            va_range1
                                                                                                            "***** PRECONDITION NOT MET AT line 481 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                                            (
                                                                                                              FStar.Seq.Base.equal
                                                                                                                #quad32
                                                                                                                (
                                                                                                                  FStar.Seq.Base.append
                                                                                                                    #quad32
                                                                                                                    (
                                                                                                                      FStar.Seq.Base.slice
                                                                                                                        #quad32
                                                                                                                        plain_quads
                                                                                                                        0
                                                                                                                        (
                                                                                                                          count
                                                                                                                          `op_Multiply`
                                                                                                                          6
                                                                                                                        )

                                                                                                                    )
                                                                                                                    data

                                                                                                                )
                                                                                                                (
                                                                                                                  FStar.Seq.Base.slice
                                                                                                                    #quad32
                                                                                                                    plain_quads
                                                                                                                    0
                                                                                                                    (
                                                                                                                      (
                                                                                                                        count +
                                                                                                                        1
                                                                                                                      )
                                                                                                                      `op_Multiply`
                                                                                                                      6
                                                                                                                    )

                                                                                                                )

                                                                                                            )
                                                                                                            (
                                                                                                              va_qAssertSquash
                                                                                                                va_range1
                                                                                                                "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 483 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                                                (
                                                                                                                  (
                                                                                                                    fun
                                                                                                                      a_1582
                                                                                                                      (
                                                                                                                        s_1583:
                                                                                                                        (
                                                                                                                          FStar.Seq.Base.seq
                                                                                                                            a_1582

                                                                                                                        )
                                                                                                                      )
                                                                                                                      (
                                                                                                                        i_1584:
                                                                                                                        Prims.nat
                                                                                                                      )
                                                                                                                      (
                                                                                                                        j_1585:
                                                                                                                        Prims.nat
                                                                                                                      )
                                                                                                                      ->
                                                                                                                      let
                                                                                                                      j_1545:Prims.nat
                                                                                                                      =
                                                                                                                        j_1585
                                                                                                                      in
                                                                                                                      Prims.b2t
                                                                                                                        (
                                                                                                                          Prims.op_AmpAmp
                                                                                                                            (
                                                                                                                              Prims.op_LessThanOrEqual
                                                                                                                                i_1584
                                                                                                                                j_1545

                                                                                                                            )
                                                                                                                            (
                                                                                                                              Prims.op_LessThanOrEqual
                                                                                                                                j_1545
                                                                                                                                (
                                                                                                                                  FStar.Seq.Base.length
                                                                                                                                    #a_1582
                                                                                                                                    s_1583

                                                                                                                                )

                                                                                                                            )

                                                                                                                        )

                                                                                                                  )
                                                                                                                    quad32
                                                                                                                    plain_quads
                                                                                                                    0
                                                                                                                    (
                                                                                                                      (
                                                                                                                        count +
                                                                                                                        1
                                                                                                                      )
                                                                                                                      `op_Multiply`
                                                                                                                      6
                                                                                                                    )

                                                                                                                )
                                                                                                                (
                                                                                                                  fun
                                                                                                                    _
                                                                                                                    ->
                                                                                                                    va_qAssert
                                                                                                                      va_range1
                                                                                                                      "***** PRECONDITION NOT MET AT line 483 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                                                      (
                                                                                                                        y_new ==
                                                                                                                        Vale.AES.GHash.ghash_incremental0
                                                                                                                          h_LE
                                                                                                                          y_orig
                                                                                                                          (
                                                                                                                            FStar.Seq.Base.slice
                                                                                                                              #quad32
                                                                                                                              plain_quads
                                                                                                                              0
                                                                                                                              (
                                                                                                                                (
                                                                                                                                  count +
                                                                                                                                  1
                                                                                                                                )
                                                                                                                                `op_Multiply`
                                                                                                                                6
                                                                                                                              )

                                                                                                                          )

                                                                                                                      )
                                                                                                                      (
                                                                                                                        va_QBind
                                                                                                                          va_range1
                                                                                                                          "***** PRECONDITION NOT MET AT line 486 column 8 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                                                          (
                                                                                                                            va_qIf
                                                                                                                              va_mods
                                                                                                                              (
                                                                                                                                Cmp_gt
                                                                                                                                  (
                                                                                                                                    va_op_cmp_reg64
                                                                                                                                      rRdx

                                                                                                                                  )
                                                                                                                                  (
                                                                                                                                    va_const_cmp
                                                                                                                                      0

                                                                                                                                  )
                                                                                                                              )
                                                                                                                              (
                                                                                                                                qblock
                                                                                                                                  va_mods
                                                                                                                                  (
                                                                                                                                    fun
                                                                                                                                      (
                                                                                                                                        va_s:
                                                                                                                                        va_state
                                                                                                                                      )
                                                                                                                                      ->
                                                                                                                                      va_QSeq
                                                                                                                                        va_range1
                                                                                                                                        "***** PRECONDITION NOT MET AT line 488 column 27 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                                                                        (
                                                                                                                                          va_quick_Loop6x_save_output
                                                                                                                                            count
                                                                                                                                            out_b

                                                                                                                                        )
                                                                                                                                        (
                                                                                                                                          va_QBind
                                                                                                                                            va_range1
                                                                                                                                            "***** PRECONDITION NOT MET AT line 492 column 23 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                                                                            (
                                                                                                                                              va_quick_Load128_buffer
                                                                                                                                                (
                                                                                                                                                  va_op_heaplet_mem_heaplet
                                                                                                                                                    3

                                                                                                                                                )
                                                                                                                                                (
                                                                                                                                                  va_op_xmm_xmm
                                                                                                                                                    7

                                                                                                                                                )
                                                                                                                                                (
                                                                                                                                                  va_op_reg_opr64_reg64
                                                                                                                                                    rRbp

                                                                                                                                                )
                                                                                                                                                32
                                                                                                                                                Secret
                                                                                                                                                scratch_b
                                                                                                                                                2

                                                                                                                                            )
                                                                                                                                            (
                                                                                                                                              fun
                                                                                                                                                (
                                                                                                                                                  va_s:
                                                                                                                                                  va_state
                                                                                                                                                )
                                                                                                                                                _
                                                                                                                                                ->
                                                                                                                                                let
                                                                                                                                                plain:(
                                                                                                                                                  FStar.Seq.Base.seq
                                                                                                                                                    Vale.X64.Decls.quad32

                                                                                                                                                )
                                                                                                                                                =
                                                                                                                                                  Vale.X64.Decls.s128
                                                                                                                                                    (
                                                                                                                                                      va_get_mem_heaplet
                                                                                                                                                        6
                                                                                                                                                        va_old_s

                                                                                                                                                    )
                                                                                                                                                    in_b

                                                                                                                                                in
                                                                                                                                                let
                                                                                                                                                cipher:(
                                                                                                                                                  FStar.Seq.Base.seq
                                                                                                                                                    Vale.X64.Decls.quad32

                                                                                                                                                )
                                                                                                                                                =
                                                                                                                                                  Vale.X64.Decls.s128
                                                                                                                                                    (
                                                                                                                                                      va_get_mem_heaplet
                                                                                                                                                        6
                                                                                                                                                        va_s

                                                                                                                                                    )
                                                                                                                                                    out_b

                                                                                                                                                in
                                                                                                                                                let
                                                                                                                                                bound:(
                                                                                                                                                  va_int_at_least
                                                                                                                                                    0

                                                                                                                                                )
                                                                                                                                                =
                                                                                                                                                  count
                                                                                                                                                  `op_Multiply`
                                                                                                                                                  6
                                                                                                                                                in
                                                                                                                                                va_qAssertSquash
                                                                                                                                                  va_range1
                                                                                                                                                  "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 497 column 44 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                                                                                  (
                                                                                                                                                    bound >=
                                                                                                                                                    0 /\
                                                                                                                                                    bound <=
                                                                                                                                                    4294967295
                                                                                                                                                  )
                                                                                                                                                  (
                                                                                                                                                    fun
                                                                                                                                                      _
                                                                                                                                                      ->
                                                                                                                                                      let
                                                                                                                                                      va_arg99:Vale.Def.Types_s.quad32
                                                                                                                                                      =
                                                                                                                                                        ctr_BE_orig
                                                                                                                                                      in
                                                                                                                                                      let
                                                                                                                                                      va_arg98:(
                                                                                                                                                        FStar.Seq.Base.seq
                                                                                                                                                          Vale.Def.Types_s.nat32

                                                                                                                                                      )
                                                                                                                                                      =
                                                                                                                                                        key_words
                                                                                                                                                      in
                                                                                                                                                      let
                                                                                                                                                      va_arg97:(
                                                                                                                                                        FStar.Seq.Base.seq
                                                                                                                                                          Vale.Def.Types_s.quad32

                                                                                                                                                      )
                                                                                                                                                      =
                                                                                                                                                        cipher
                                                                                                                                                      in
                                                                                                                                                      let
                                                                                                                                                      va_arg96:(
                                                                                                                                                        FStar.Seq.Base.seq
                                                                                                                                                          Vale.Def.Types_s.quad32

                                                                                                                                                      )
                                                                                                                                                      =
                                                                                                                                                        Vale.X64.Decls.s128
                                                                                                                                                          (
                                                                                                                                                            va_get_mem_heaplet
                                                                                                                                                              6
                                                                                                                                                              va_old_s

                                                                                                                                                          )
                                                                                                                                                          out_b

                                                                                                                                                      in
                                                                                                                                                      let
                                                                                                                                                      va_arg95:(
                                                                                                                                                        FStar.Seq.Base.seq
                                                                                                                                                          Vale.Def.Types_s.quad32

                                                                                                                                                      )
                                                                                                                                                      =
                                                                                                                                                        plain_quads
                                                                                                                                                      in
                                                                                                                                                      let
                                                                                                                                                      va_arg94:(
                                                                                                                                                        FStar.Seq.Base.seq
                                                                                                                                                          Vale.Def.Types_s.quad32

                                                                                                                                                      )
                                                                                                                                                      =
                                                                                                                                                        plain_quads
                                                                                                                                                      in
                                                                                                                                                      let
                                                                                                                                                      va_arg93:Vale.Def.Types_s.nat32
                                                                                                                                                      =
                                                                                                                                                        bound
                                                                                                                                                      in
                                                                                                                                                      let
                                                                                                                                                      va_arg92:Vale.AES.AES_common_s.algorithm
                                                                                                                                                      =
                                                                                                                                                        alg
                                                                                                                                                      in
                                                                                                                                                      va_qPURE
                                                                                                                                                        va_range1
                                                                                                                                                        "***** PRECONDITION NOT MET AT line 497 column 44 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                                                                                        (
                                                                                                                                                          fun
                                                                                                                                                            (
                                                                                                                                                              _:
                                                                                                                                                              unit
                                                                                                                                                            )
                                                                                                                                                            ->
                                                                                                                                                            Vale.AES.GCTR.gctr_partial_opaque_ignores_postfix
                                                                                                                                                              va_arg92
                                                                                                                                                              va_arg93
                                                                                                                                                              va_arg94
                                                                                                                                                              va_arg95
                                                                                                                                                              va_arg96
                                                                                                                                                              va_arg97
                                                                                                                                                              va_arg98
                                                                                                                                                              va_arg99

                                                                                                                                                        )
                                                                                                                                                        (
                                                                                                                                                          let
                                                                                                                                                          va_arg91:Vale.Def.Types_s.quad32
                                                                                                                                                          =
                                                                                                                                                            ctr_BE_orig
                                                                                                                                                          in
                                                                                                                                                          let
                                                                                                                                                          va_arg90:(
                                                                                                                                                            FStar.Seq.Base.seq
                                                                                                                                                              Vale.Def.Types_s.nat32

                                                                                                                                                          )
                                                                                                                                                          =
                                                                                                                                                            key_words
                                                                                                                                                          in
                                                                                                                                                          let
                                                                                                                                                          va_arg89:(
                                                                                                                                                            FStar.Seq.Base.seq
                                                                                                                                                              Vale.Def.Types_s.quad32

                                                                                                                                                          )
                                                                                                                                                          =
                                                                                                                                                            cipher
                                                                                                                                                          in
                                                                                                                                                          let
                                                                                                                                                          va_arg88:(
                                                                                                                                                            FStar.Seq.Base.seq
                                                                                                                                                              Vale.Def.Types_s.quad32

                                                                                                                                                          )
                                                                                                                                                          =
                                                                                                                                                            plain_quads
                                                                                                                                                          in
                                                                                                                                                          let
                                                                                                                                                          va_arg87:Prims.nat
                                                                                                                                                          =
                                                                                                                                                            bound
                                                                                                                                                          in
                                                                                                                                                          let
                                                                                                                                                          va_arg86:Vale.AES.AES_common_s.algorithm
                                                                                                                                                          =
                                                                                                                                                            alg
                                                                                                                                                          in
                                                                                                                                                          va_qPURE
                                                                                                                                                            va_range1
                                                                                                                                                            "***** PRECONDITION NOT MET AT line 499 column 29 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                                                                                            (
                                                                                                                                                              fun
                                                                                                                                                                (
                                                                                                                                                                  _:
                                                                                                                                                                  unit
                                                                                                                                                                )
                                                                                                                                                                ->
                                                                                                                                                                Vale.AES.GCTR.gctr_partial_extend6
                                                                                                                                                                  va_arg86
                                                                                                                                                                  va_arg87
                                                                                                                                                                  va_arg88
                                                                                                                                                                  va_arg89
                                                                                                                                                                  va_arg90
                                                                                                                                                                  va_arg91

                                                                                                                                                            )
                                                                                                                                                            (
                                                                                                                                                              let
                                                                                                                                                              va_arg85:Vale.Math.Poly2_s.poly
                                                                                                                                                              =
                                                                                                                                                                Vale.Math.Poly2.Bits_s.of_quad32
                                                                                                                                                                  (
                                                                                                                                                                    va_get_xmm
                                                                                                                                                                      4
                                                                                                                                                                      va_s

                                                                                                                                                                  )

                                                                                                                                                              in
                                                                                                                                                              let
                                                                                                                                                              va_arg84:Vale.Math.Poly2_s.poly
                                                                                                                                                              =
                                                                                                                                                                Vale.Math.Poly2.Bits_s.of_quad32
                                                                                                                                                                  (
                                                                                                                                                                    Vale.X64.Decls.buffer128_read
                                                                                                                                                                      scratch_b
                                                                                                                                                                      1
                                                                                                                                                                      (
                                                                                                                                                                        va_get_mem_heaplet
                                                                                                                                                                          3
                                                                                                                                                                          va_s

                                                                                                                                                                      )

                                                                                                                                                                  )

                                                                                                                                                              in
                                                                                                                                                              let
                                                                                                                                                              va_arg83:Vale.Math.Poly2_s.poly
                                                                                                                                                              =
                                                                                                                                                                Vale.Math.Poly2.Bits_s.of_quad32
                                                                                                                                                                  (
                                                                                                                                                                    va_get_xmm
                                                                                                                                                                      8
                                                                                                                                                                      va_s

                                                                                                                                                                  )

                                                                                                                                                              in
                                                                                                                                                              va_qPURE
                                                                                                                                                                va_range1
                                                                                                                                                                "***** PRECONDITION NOT MET AT line 501 column 24 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                                                                                                (
                                                                                                                                                                  fun
                                                                                                                                                                    (
                                                                                                                                                                      _:
                                                                                                                                                                      unit
                                                                                                                                                                    )
                                                                                                                                                                    ->
                                                                                                                                                                    Vale.AES.GHash.lemma_add_manip
                                                                                                                                                                      va_arg83
                                                                                                                                                                      va_arg84
                                                                                                                                                                      va_arg85

                                                                                                                                                                )
                                                                                                                                                                (
                                                                                                                                                                  va_qAssert
                                                                                                                                                                    va_range1
                                                                                                                                                                    "***** PRECONDITION NOT MET AT line 507 column 9 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                                                                                                    (
                                                                                                                                                                      y_new ==
                                                                                                                                                                      Vale.Def.Types_s.reverse_bytes_quad32
                                                                                                                                                                        (
                                                                                                                                                                          Vale.Math.Poly2.Bits_s.to_quad32
                                                                                                                                                                            (
                                                                                                                                                                              Vale.Math.Poly2.Bits_s.of_quad32
                                                                                                                                                                                (
                                                                                                                                                                                  Vale.Def.Types_s.reverse_bytes_quad32
                                                                                                                                                                                    (
                                                                                                                                                                                      Vale.AES.GHash.ghash_incremental
                                                                                                                                                                                        h_LE
                                                                                                                                                                                        y_prev
                                                                                                                                                                                        data

                                                                                                                                                                                    )

                                                                                                                                                                                )

                                                                                                                                                                            )

                                                                                                                                                                        )

                                                                                                                                                                    )
                                                                                                                                                                    (
                                                                                                                                                                      va_QEmpty
                                                                                                                                                                        (
                                                                                                                                                                          ()
                                                                                                                                                                        )

                                                                                                                                                                    )

                                                                                                                                                                )

                                                                                                                                                            )

                                                                                                                                                        )

                                                                                                                                                  )

                                                                                                                                            )

                                                                                                                                        )

                                                                                                                                  )

                                                                                                                              )
                                                                                                                              (
                                                                                                                                qblock
                                                                                                                                  va_mods
                                                                                                                                  (
                                                                                                                                    fun
                                                                                                                                      (
                                                                                                                                        va_s:
                                                                                                                                        va_state
                                                                                                                                      )
                                                                                                                                      ->
                                                                                                                                      va_qAssert
                                                                                                                                        va_range1
                                                                                                                                        "***** PRECONDITION NOT MET AT line 511 column 9 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                                                                        (
                                                                                                                                          eventual_Xi ==
                                                                                                                                          Vale.Math.Poly2.Bits_s.of_quad32
                                                                                                                                            (
                                                                                                                                              Vale.Def.Types_s.reverse_bytes_quad32
                                                                                                                                                (
                                                                                                                                                  Vale.AES.GHash.ghash_incremental
                                                                                                                                                    h_LE
                                                                                                                                                    y_prev
                                                                                                                                                    data

                                                                                                                                                )

                                                                                                                                            )

                                                                                                                                        )
                                                                                                                                        (
                                                                                                                                          va_QSeq
                                                                                                                                            va_range1
                                                                                                                                            "***** PRECONDITION NOT MET AT line 512 column 33 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                                                                            (
                                                                                                                                              va_quick_Mem128_lemma
                                                                                                                                                (
                                                                                                                                                  va_op_heaplet_mem_heaplet
                                                                                                                                                    3

                                                                                                                                                )
                                                                                                                                                (
                                                                                                                                                  va_op_reg64_reg64
                                                                                                                                                    rRbp

                                                                                                                                                )
                                                                                                                                                16
                                                                                                                                                Secret
                                                                                                                                                scratch_b
                                                                                                                                                1

                                                                                                                                            )
                                                                                                                                            (
                                                                                                                                              va_QSeq
                                                                                                                                                va_range1
                                                                                                                                                "***** PRECONDITION NOT MET AT line 512 column 17 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                                                                                (
                                                                                                                                                  va_quick_VPolyAdd
                                                                                                                                                    (
                                                                                                                                                      va_op_xmm_xmm
                                                                                                                                                        8

                                                                                                                                                    )
                                                                                                                                                    (
                                                                                                                                                      va_op_xmm_xmm
                                                                                                                                                        8

                                                                                                                                                    )
                                                                                                                                                    (
                                                                                                                                                      va_opr_code_Mem128
                                                                                                                                                        (
                                                                                                                                                          va_op_heaplet_mem_heaplet
                                                                                                                                                            3

                                                                                                                                                        )
                                                                                                                                                        (
                                                                                                                                                          va_op_reg64_reg64
                                                                                                                                                            rRbp

                                                                                                                                                        )
                                                                                                                                                        16
                                                                                                                                                        Secret

                                                                                                                                                    )

                                                                                                                                                )
                                                                                                                                                (
                                                                                                                                                  va_QBind
                                                                                                                                                    va_range1
                                                                                                                                                    "***** PRECONDITION NOT MET AT line 513 column 17 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                                                                                    (
                                                                                                                                                      va_quick_VPolyAdd
                                                                                                                                                        (
                                                                                                                                                          va_op_xmm_xmm
                                                                                                                                                            8

                                                                                                                                                        )
                                                                                                                                                        (
                                                                                                                                                          va_op_xmm_xmm
                                                                                                                                                            8

                                                                                                                                                        )
                                                                                                                                                        (
                                                                                                                                                          va_op_opr128_xmm
                                                                                                                                                            4

                                                                                                                                                        )

                                                                                                                                                    )
                                                                                                                                                    (
                                                                                                                                                      fun
                                                                                                                                                        (
                                                                                                                                                          va_s:
                                                                                                                                                          va_state
                                                                                                                                                        )
                                                                                                                                                        _
                                                                                                                                                        ->
                                                                                                                                                        va_qAssert
                                                                                                                                                          va_range1
                                                                                                                                                          "***** PRECONDITION NOT MET AT line 514 column 9 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                                                                                          (
                                                                                                                                                            Vale.Math.Poly2.Bits_s.of_quad32
                                                                                                                                                              (
                                                                                                                                                                va_get_xmm
                                                                                                                                                                  8
                                                                                                                                                                  va_s

                                                                                                                                                              )
                                                                                                                                                             ==
                                                                                                                                                            Vale.Math.Poly2.Bits_s.of_quad32
                                                                                                                                                              (
                                                                                                                                                                Vale.Def.Types_s.reverse_bytes_quad32
                                                                                                                                                                  (
                                                                                                                                                                    Vale.AES.GHash.ghash_incremental
                                                                                                                                                                      h_LE
                                                                                                                                                                      y_prev
                                                                                                                                                                      data

                                                                                                                                                                  )

                                                                                                                                                              )

                                                                                                                                                          )
                                                                                                                                                          (
                                                                                                                                                            va_qAssert
                                                                                                                                                              va_range1
                                                                                                                                                              "***** PRECONDITION NOT MET AT line 515 column 9 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                                                                                              (
                                                                                                                                                                Vale.Math.Poly2.Bits_s.to_quad32
                                                                                                                                                                  (
                                                                                                                                                                    Vale.Math.Poly2.Bits_s.of_quad32
                                                                                                                                                                      (
                                                                                                                                                                        va_get_xmm
                                                                                                                                                                          8
                                                                                                                                                                          va_s

                                                                                                                                                                      )

                                                                                                                                                                  )
                                                                                                                                                                 ==
                                                                                                                                                                Vale.Math.Poly2.Bits_s.to_quad32
                                                                                                                                                                  (
                                                                                                                                                                    Vale.Math.Poly2.Bits_s.of_quad32
                                                                                                                                                                      (
                                                                                                                                                                        Vale.Def.Types_s.reverse_bytes_quad32
                                                                                                                                                                          (
                                                                                                                                                                            Vale.AES.GHash.ghash_incremental
                                                                                                                                                                              h_LE
                                                                                                                                                                              y_prev
                                                                                                                                                                              data

                                                                                                                                                                          )

                                                                                                                                                                      )

                                                                                                                                                                  )

                                                                                                                                                              )
                                                                                                                                                              (
                                                                                                                                                                va_qAssert
                                                                                                                                                                  va_range1
                                                                                                                                                                  "***** PRECONDITION NOT MET AT line 516 column 9 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                                                                                                  (
                                                                                                                                                                    va_get_xmm
                                                                                                                                                                      8
                                                                                                                                                                      va_s
                                                                                                                                                                     ==
                                                                                                                                                                    Vale.Def.Types_s.reverse_bytes_quad32
                                                                                                                                                                      (
                                                                                                                                                                        Vale.AES.GHash.ghash_incremental
                                                                                                                                                                          h_LE
                                                                                                                                                                          y_prev
                                                                                                                                                                          data

                                                                                                                                                                      )

                                                                                                                                                                  )
                                                                                                                                                                  (
                                                                                                                                                                    va_QEmpty
                                                                                                                                                                      (
                                                                                                                                                                        ()
                                                                                                                                                                      )

                                                                                                                                                                  )

                                                                                                                                                              )

                                                                                                                                                          )

                                                                                                                                                    )

                                                                                                                                                )

                                                                                                                                            )

                                                                                                                                        )

                                                                                                                                  )

                                                                                                                              )

                                                                                                                          )
                                                                                                                          (
                                                                                                                            fun
                                                                                                                              (
                                                                                                                                va_s:
                                                                                                                                va_state
                                                                                                                              )
                                                                                                                              va_g
                                                                                                                              ->
                                                                                                                              va_qPURE
                                                                                                                                va_range1
                                                                                                                                "***** PRECONDITION NOT MET AT line 518 column 26 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
                                                                                                                                (
                                                                                                                                  fun
                                                                                                                                    (
                                                                                                                                      _:
                                                                                                                                      unit
                                                                                                                                    )
                                                                                                                                    ->
                                                                                                                                    Vale.AES.GCTR.gctr_registers_reveal
                                                                                                                                      ()

                                                                                                                                )
                                                                                                                                (
                                                                                                                                  va_QEmpty
                                                                                                                                    (
                                                                                                                                      (
                                                                                                                                        y_new
                                                                                                                                      )
                                                                                                                                    )

                                                                                                                                )

                                                                                                                          )

                                                                                                                      )

                                                                                                                )

                                                                                                            )

                                                                                                      )

                                                                                                  ))
                                                                                        ))))))))))))
                                )))))))
Vale.AES.X64.AESGCM.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.Math.Poly2_s.fsti.checked Vale.Math.Poly2.Words.fsti.checked Vale.Math.Poly2.Lemmas.fsti.checked Vale.Math.Poly2.Bits_s.fsti.checked Vale.Math.Poly2.Bits.fsti.checked Vale.Math.Poly2.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.AES.X64.PolyOps.fsti.checked Vale.AES.X64.AESopt2.fsti.checked Vale.AES.X64.AESopt.fsti.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_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 FStar.Mul.fst.checked
Vale.AES.X64.AESGCM.fst
Vale.X64.QuickCode.va_mods_t Vale.AES.AES_common_s.algorithm Vale.X64.Decls.quad32 Prims.nat Vale.X64.Memory.buffer128 FStar.Seq.Base.seq Vale.X64.Memory.nat32 Vale.X64.QuickCodes.qblock Vale.Def.Types_s.quad32 Prims.Cons Vale.X64.Decls.va_code Vale.X64.Machine_s.Block Vale.X64.Decls.ins Vale.X64.Decls.ocmp Prims.Nil Vale.X64.Machine_s.precode Vale.AES.X64.AESopt.va_code_Loop6x_partial Vale.AES.X64.AESopt.va_code_Loop6x_final Vale.X64.InsBasic.va_code_Sub64 Vale.X64.Decls.va_op_dst_opr64_reg64 Vale.X64.Machine_s.rRdx Vale.X64.Decls.va_const_opr64 Vale.X64.Machine_s.IfElse Vale.X64.QuickCodes.cmp_to_ocmp Vale.X64.QuickCodes.Cmp_gt Vale.X64.Decls.va_op_cmp_reg64 Vale.X64.Decls.va_const_cmp Vale.X64.QuickCodes.block Vale.X64.InsBasic.va_code_Add64 Vale.X64.Machine_s.rR14 Vale.AES.X64.AESopt.va_code_Loop6x_save_output 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.rRbp Vale.Arch.HeapTypes_s.Secret Vale.X64.InsVector.va_code_Mem128_lemma Vale.AES.X64.PolyOps.va_code_VPolyAdd Vale.X64.Decls.va_opr_code_Mem128 Vale.X64.Decls.va_op_reg64_reg64 Vale.X64.Decls.va_op_opr128_xmm Vale.X64.Decls.va_state Vale.X64.QuickCodes.va_qAssertSquash Vale.X64.QuickCodes.va_range1 Prims.b2t Prims.op_AmpAmp Prims.op_LessThanOrEqual Prims.op_Multiply FStar.Seq.Base.length Vale.X64.Decls.s128 Vale.X64.Decls.va_get_mem_heaplet Prims.op_Addition Prims.squash Vale.X64.QuickCodes.va_qAssert FStar.Seq.Base.equal FStar.Seq.Base.slice Prims.l_and Prims.op_LessThan Vale.Math.Poly2_s.degree Vale.Math.Poly2.Bits_s.of_quad32 Vale.X64.Decls.va_get_xmm Vale.X64.Decls.buffer128_read Vale.X64.QuickCodes.va_qPURE Prims.pure_post Prims.unit Prims.l_Forall Prims.l_imp Prims.eq2 Vale.Math.Poly2_s.poly Vale.Math.Poly2.Bits_s.to_quad32 Vale.Math.Poly2.Bits.lemma_of_to_quad32 Vale.X64.QuickCodes.va_QBind Vale.AES.X64.AESopt.quad32_6 Vale.AES.X64.AESopt.va_quick_Loop6x_partial Vale.X64.Decls.va_if Prims.int Prims.op_GreaterThan Vale.X64.Decls.va_get_reg64 Prims.l_not Vale.Def.Types_s.reverse_bytes_quad32 Vale.AES.GHash.ghash_incremental Vale.X64.QuickCodes.va_QSeq Vale.AES.X64.AESopt.va_quick_Loop6x_final Vale.AES.GCTR.inc32lite Vale.X64.InsBasic.va_quick_Sub64 Vale.X64.QuickCodes.va_qIf Vale.X64.InsBasic.va_quick_Add64 Vale.X64.QuickCodes.va_QEmpty Vale.X64.QuickCodes.quickCodes Prims.op_Equality Vale.AES.GHash.ghash_incremental0 FStar.Seq.Base.op_At_Bar Vale.AES.GHash.lemma_ghash_incremental0_append FStar.Seq.Base.append Vale.AES.X64.AESopt.va_quick_Loop6x_save_output Vale.X64.InsVector.va_quick_Load128_buffer Prims.op_GreaterThanOrEqual Vale.AES.AES_s.is_aes_key_LE Prims.l_iff Vale.AES.GCTR.gctr_partial Vale.AES.GCTR.gctr_partial_opaque_ignores_postfix FStar.Seq.Base.index Vale.Def.Types_s.quad32_xor Vale.AES.GCTR.aes_encrypt_BE Vale.AES.GCTR.gctr_partial_extend6 Prims.l_True Vale.Math.Poly2_s.add Vale.AES.GHash.lemma_add_manip Vale.Def.Words_s.nat32 Vale.X64.Decls.va_int_at_least Vale.X64.InsVector.va_quick_Mem128_lemma Vale.AES.X64.PolyOps.va_quick_VPolyAdd Vale.Def.Prop_s.prop0 Vale.AES.GCTR.gctr_registers Vale.AES.GCTR.gctr_registers_def Vale.AES.GCTR.gctr_registers_reveal Vale.AES.X64.AESopt.six_of Vale.AES.X64.AESopt.make_six_of Vale.X64.Decls.va_int_range Vale.X64.State.vale_state Vale.X64.QuickCode.va_quickCode Vale.AES.X64.AESGCM.va_code_Loop6x_decrypt
module Vale.AES.X64.AESGCM
open FStar.Mul
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.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.Arch.Types
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.X64.CPU_Features_s
open Vale.AES.X64.PolyOps
open Vale.Math.Poly2_s
open Vale.Math.Poly2
open Vale.Math.Poly2.Bits_s
open Vale.Math.Poly2.Bits
open Vale.Math.Poly2.Lemmas
open Vale.AES.GF128_s
open Vale.AES.GF128
open Vale.AES.GHash
open Vale.AES.X64.AESopt
open Vale.AES.X64.AESopt2
unfold let lo(x:poly):poly = mask x 64
unfold let hi(x:poly):poly = shift x (-64)

//let scratch_reqs (scratch_b:buffer128) (count:nat) (heap3:vale_heap) (s:seq quad32) (z3:quad32) : prop0 =
//  count * 6 + 6 <= length s /\
//  (let data = slice s (count * 6) (count * 6 + 6) in
//   z3 == reverse_bytes_quad32 (index data 5) /\
//   buffer128_read scratch_b 3 heap3 == reverse_bytes_quad32 (index data 4) /\
//   buffer128_read scratch_b 4 heap3 == reverse_bytes_quad32 (index data 3) /\
//   buffer128_read scratch_b 5 heap3 == reverse_bytes_quad32 (index data 2) /\
//   buffer128_read scratch_b 6 heap3 == reverse_bytes_quad32 (index data 1) /\
//   buffer128_read scratch_b 7 heap3 == reverse_bytes_quad32 (index data 0))


let scratch_reqs_simple (scratch_b:buffer128) (heap3:vale_heap) (data:seq quad32) (z3:quad32) : prop0 =
   length data == 6 /\
   z3 == reverse_bytes_quad32 (index data 5) /\
   buffer128_read scratch_b 3 heap3 == reverse_bytes_quad32 (index data 4) /\
   buffer128_read scratch_b 4 heap3 == reverse_bytes_quad32 (index data 3) /\
   buffer128_read scratch_b 5 heap3 == reverse_bytes_quad32 (index data 2) /\
   buffer128_read scratch_b 6 heap3 == reverse_bytes_quad32 (index data 1) /\
   buffer128_read scratch_b 7 heap3 == reverse_bytes_quad32 (index data 0)
//-- 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 ();
  ()
//--
let va_subscript_FStar__Seq__Base__seq = Seq.index
#reset-options "--z3rlimit 30"
//-- Load_one_msb

val va_code_Load_one_msb : va_dummy:unit -> Tot va_code
[@ "opaque_to_smt" va_qattr]
let va_code_Load_one_msb () =
  (va_Block (va_CCons (va_code_ZeroXmm (va_op_xmm_xmm 2)) (va_CCons (va_code_PinsrqImm
    (va_op_xmm_xmm 2) 72057594037927936 1 (va_op_reg_opr64_reg64 rR11)) (va_CNil ()))))

val va_codegen_success_Load_one_msb : va_dummy:unit -> Tot va_pbool
[@ "opaque_to_smt" va_qattr]
let va_codegen_success_Load_one_msb () =
  (va_pbool_and (va_codegen_success_ZeroXmm (va_op_xmm_xmm 2)) (va_pbool_and
    (va_codegen_success_PinsrqImm (va_op_xmm_xmm 2) 72057594037927936 1 (va_op_reg_opr64_reg64
    rR11)) (va_ttrue ())))

[@ "opaque_to_smt" va_qattr]
let va_qcode_Load_one_msb (va_mods:va_mods_t) : (va_quickCode unit (va_code_Load_one_msb ())) =
  (qblock va_mods (fun (va_s:va_state) -> let (va_old_s:va_state) = va_s in va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 145 column 12 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_ZeroXmm (va_op_xmm_xmm 2)) (fun (va_s:va_state) _ -> va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 146 column 5 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (Vale.Arch.Types.two_to_nat32 (Vale.Def.Words_s.Mktwo #Vale.Def.Words_s.nat32 0 16777216) ==
    72057594037927936) (va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 147 column 14 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_PinsrqImm (va_op_xmm_xmm 2) 72057594037927936 1 (va_op_reg_opr64_reg64 rR11)) (fun
    (va_s:va_state) _ -> va_qPURE va_range1
    "***** PRECONDITION NOT MET AT line 148 column 24 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (fun (_:unit) -> Vale.Def.Types_s.insert_nat64_reveal ()) (va_QEmpty (())))))))


val va_lemma_Load_one_msb : va_b0:va_code -> va_s0:va_state
  -> Ghost (va_state & va_fuel)
  (requires (va_require_total va_b0 (va_code_Load_one_msb ()) va_s0 /\ va_get_ok va_s0 /\
    sse_enabled))
  (ensures (fun (va_sM, va_fM) -> va_ensure_total va_b0 va_s0 va_sM va_fM /\ va_get_ok va_sM /\
    va_get_xmm 2 va_sM == Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 0 0 0 16777216 /\
    va_state_eq va_sM (va_update_flags va_sM (va_update_xmm 2 va_sM (va_update_reg64 rR11 va_sM
    (va_update_ok va_sM va_s0))))))
[@"opaque_to_smt"]
let va_lemma_Load_one_msb va_b0 va_s0 =
  let (va_mods:va_mods_t) = [va_Mod_flags; va_Mod_xmm 2; va_Mod_reg64 rR11; va_Mod_ok] in
  let va_qc = va_qcode_Load_one_msb va_mods in
  let (va_sM, va_fM, va_g) = va_wp_sound_code_norm (va_code_Load_one_msb ()) va_qc va_s0 (fun va_s0
    va_sM va_g -> let () = va_g in label va_range1
    "***** POSTCONDITION NOT MET AT line 138 column 1 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_get_ok va_sM) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 143 column 46 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_get_xmm 2 va_sM == Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 0 0 0 16777216)) in
  assert_norm (va_qc.mods == va_mods);
  va_lemma_norm_mods ([va_Mod_flags; va_Mod_xmm 2; va_Mod_reg64 rR11; va_Mod_ok]) va_sM va_s0;
  (va_sM, va_fM)

[@ va_qattr]
let va_wp_Load_one_msb (va_s0:va_state) (va_k:(va_state -> unit -> Type0)) : Type0 =
  (va_get_ok va_s0 /\ sse_enabled /\ (forall (va_x_r11:nat64) (va_x_xmm2:quad32)
    (va_x_efl:Vale.X64.Flags.t) . let va_sM = va_upd_flags va_x_efl (va_upd_xmm 2 va_x_xmm2
    (va_upd_reg64 rR11 va_x_r11 va_s0)) in va_get_ok va_sM /\ va_get_xmm 2 va_sM ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 0 0 0 16777216 ==> va_k va_sM (())))


val va_wpProof_Load_one_msb : va_s0:va_state -> va_k:(va_state -> unit -> Type0)
  -> Ghost (va_state & va_fuel & unit)
  (requires (va_t_require va_s0 /\ va_wp_Load_one_msb va_s0 va_k))
  (ensures (fun (va_sM, va_f0, va_g) -> va_t_ensure (va_code_Load_one_msb ()) ([va_Mod_flags;
    va_Mod_xmm 2; va_Mod_reg64 rR11]) va_s0 va_k ((va_sM, va_f0, va_g))))
[@"opaque_to_smt"]
let va_wpProof_Load_one_msb va_s0 va_k =
  let (va_sM, va_f0) = va_lemma_Load_one_msb (va_code_Load_one_msb ()) va_s0 in
  va_lemma_upd_update va_sM;
  assert (va_state_eq va_sM (va_update_flags va_sM (va_update_xmm 2 va_sM (va_update_reg64 rR11
    va_sM (va_update_ok va_sM va_s0)))));
  va_lemma_norm_mods ([va_Mod_flags; va_Mod_xmm 2; va_Mod_reg64 rR11]) va_sM va_s0;
  let va_g = () in
  (va_sM, va_f0, va_g)

[@ "opaque_to_smt" va_qattr]
let va_quick_Load_one_msb () : (va_quickCode unit (va_code_Load_one_msb ())) =
  (va_QProc (va_code_Load_one_msb ()) ([va_Mod_flags; va_Mod_xmm 2; va_Mod_reg64 rR11])
    va_wp_Load_one_msb va_wpProof_Load_one_msb)
//--
//-- Ctr32_ghash_6_prelude

val va_code_Ctr32_ghash_6_prelude : alg:algorithm -> Tot va_code
[@ "opaque_to_smt" va_qattr]
let va_code_Ctr32_ghash_6_prelude alg =
  (va_Block (va_CCons (va_code_Load_one_msb ()) (va_CCons (va_code_VPxor (va_op_xmm_xmm 4)
    (va_op_xmm_xmm 4) (va_op_opr128_xmm 4)) (va_CCons (va_code_Load128_buffer
    (va_op_heaplet_mem_heaplet 0) (va_op_xmm_xmm 15) (va_op_reg_opr64_reg64 rRcx) (0 - 128) Secret)
    (va_CCons (va_code_VPaddd (va_op_xmm_xmm 10) (va_op_xmm_xmm 1) (va_op_xmm_xmm 2)) (va_CCons
    (va_code_VPaddd (va_op_xmm_xmm 11) (va_op_xmm_xmm 10) (va_op_xmm_xmm 2)) (va_CCons
    (va_code_VPaddd (va_op_xmm_xmm 12) (va_op_xmm_xmm 11) (va_op_xmm_xmm 2)) (va_CCons
    (va_code_VPaddd (va_op_xmm_xmm 13) (va_op_xmm_xmm 12) (va_op_xmm_xmm 2)) (va_CCons
    (va_code_VPaddd (va_op_xmm_xmm 14) (va_op_xmm_xmm 13) (va_op_xmm_xmm 2)) (va_CCons
    (va_code_VPxor (va_op_xmm_xmm 9) (va_op_xmm_xmm 1) (va_op_opr128_xmm 15)) (va_CCons
    (va_code_Store128_buffer (va_op_heaplet_mem_heaplet 3) (va_op_reg_opr64_reg64 rRbp)
    (va_op_xmm_xmm 4) 16 Secret) (va_CNil ()))))))))))))

val va_codegen_success_Ctr32_ghash_6_prelude : alg:algorithm -> Tot va_pbool
[@ "opaque_to_smt" va_qattr]
let va_codegen_success_Ctr32_ghash_6_prelude alg =
  (va_pbool_and (va_codegen_success_Load_one_msb ()) (va_pbool_and (va_codegen_success_VPxor
    (va_op_xmm_xmm 4) (va_op_xmm_xmm 4) (va_op_opr128_xmm 4)) (va_pbool_and
    (va_codegen_success_Load128_buffer (va_op_heaplet_mem_heaplet 0) (va_op_xmm_xmm 15)
    (va_op_reg_opr64_reg64 rRcx) (0 - 128) Secret) (va_pbool_and (va_codegen_success_VPaddd
    (va_op_xmm_xmm 10) (va_op_xmm_xmm 1) (va_op_xmm_xmm 2)) (va_pbool_and
    (va_codegen_success_VPaddd (va_op_xmm_xmm 11) (va_op_xmm_xmm 10) (va_op_xmm_xmm 2))
    (va_pbool_and (va_codegen_success_VPaddd (va_op_xmm_xmm 12) (va_op_xmm_xmm 11) (va_op_xmm_xmm
    2)) (va_pbool_and (va_codegen_success_VPaddd (va_op_xmm_xmm 13) (va_op_xmm_xmm 12)
    (va_op_xmm_xmm 2)) (va_pbool_and (va_codegen_success_VPaddd (va_op_xmm_xmm 14) (va_op_xmm_xmm
    13) (va_op_xmm_xmm 2)) (va_pbool_and (va_codegen_success_VPxor (va_op_xmm_xmm 9) (va_op_xmm_xmm
    1) (va_op_opr128_xmm 15)) (va_pbool_and (va_codegen_success_Store128_buffer
    (va_op_heaplet_mem_heaplet 3) (va_op_reg_opr64_reg64 rRbp) (va_op_xmm_xmm 4) 16 Secret)
    (va_ttrue ())))))))))))

[@ "opaque_to_smt" va_qattr]
let va_qcode_Ctr32_ghash_6_prelude (va_mods:va_mods_t) (alg:algorithm) (scratch_b:buffer128)
  (key_words:(seq nat32)) (round_keys:(seq quad32)) (keys_b:buffer128) (ctr_orig:quad32) :
  (va_quickCode unit (va_code_Ctr32_ghash_6_prelude alg)) =
  (qblock va_mods (fun (va_s:va_state) -> let (va_old_s:va_state) = va_s in va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 211 column 17 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_Load_one_msb ()) (va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 212 column 10 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPxor (va_op_xmm_xmm 4) (va_op_xmm_xmm 4) (va_op_opr128_xmm 4)) (fun (va_s:va_state)
    _ -> va_qPURE va_range1
    "***** PRECONDITION NOT MET AT line 213 column 21 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (fun (_:unit) -> Vale.Arch.Types.lemma_quad32_xor ()) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 214 column 19 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_Load128_buffer (va_op_heaplet_mem_heaplet 0) (va_op_xmm_xmm 15)
    (va_op_reg_opr64_reg64 rRcx) (0 - 128) Secret keys_b 0) (va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 215 column 11 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPaddd (va_op_xmm_xmm 10) (va_op_xmm_xmm 1) (va_op_xmm_xmm 2)) (fun (va_s:va_state) _
    -> let (va_arg44:Vale.Def.Types_s.quad32) = va_get_xmm 10 va_s in let
    (va_arg43:Vale.Def.Types_s.quad32) = va_get_xmm 1 va_old_s in let
    (va_arg42:Vale.Def.Types_s.quad32) = Vale.AES.GCTR.inc32lite ctr_orig 0 in va_qPURE va_range1
    "***** PRECONDITION NOT MET AT line 215 column 48 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (fun (_:unit) -> Vale.AES.AES_helpers.lemma_incr_msb va_arg42 va_arg43 va_arg44 1) (va_QBind
    va_range1
    "***** PRECONDITION NOT MET AT line 216 column 11 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPaddd (va_op_xmm_xmm 11) (va_op_xmm_xmm 10) (va_op_xmm_xmm 2)) (fun (va_s:va_state)
    _ -> let (va_arg41:Vale.Def.Types_s.quad32) = va_get_xmm 11 va_s in let
    (va_arg40:Vale.Def.Types_s.quad32) = va_get_xmm 1 va_old_s in let
    (va_arg39:Vale.Def.Types_s.quad32) = Vale.AES.GCTR.inc32lite ctr_orig 0 in va_qPURE va_range1
    "***** PRECONDITION NOT MET AT line 216 column 48 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (fun (_:unit) -> Vale.AES.AES_helpers.lemma_incr_msb va_arg39 va_arg40 va_arg41 2) (va_QBind
    va_range1
    "***** PRECONDITION NOT MET AT line 217 column 11 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPaddd (va_op_xmm_xmm 12) (va_op_xmm_xmm 11) (va_op_xmm_xmm 2)) (fun (va_s:va_state)
    _ -> let (va_arg38:Vale.Def.Types_s.quad32) = va_get_xmm 12 va_s in let
    (va_arg37:Vale.Def.Types_s.quad32) = va_get_xmm 1 va_old_s in let
    (va_arg36:Vale.Def.Types_s.quad32) = Vale.AES.GCTR.inc32lite ctr_orig 0 in va_qPURE va_range1
    "***** PRECONDITION NOT MET AT line 217 column 48 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (fun (_:unit) -> Vale.AES.AES_helpers.lemma_incr_msb va_arg36 va_arg37 va_arg38 3) (va_QBind
    va_range1
    "***** PRECONDITION NOT MET AT line 218 column 11 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPaddd (va_op_xmm_xmm 13) (va_op_xmm_xmm 12) (va_op_xmm_xmm 2)) (fun (va_s:va_state)
    _ -> let (va_arg35:Vale.Def.Types_s.quad32) = va_get_xmm 13 va_s in let
    (va_arg34:Vale.Def.Types_s.quad32) = va_get_xmm 1 va_old_s in let
    (va_arg33:Vale.Def.Types_s.quad32) = Vale.AES.GCTR.inc32lite ctr_orig 0 in va_qPURE va_range1
    "***** PRECONDITION NOT MET AT line 218 column 48 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (fun (_:unit) -> Vale.AES.AES_helpers.lemma_incr_msb va_arg33 va_arg34 va_arg35 4) (va_QBind
    va_range1
    "***** PRECONDITION NOT MET AT line 219 column 11 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPaddd (va_op_xmm_xmm 14) (va_op_xmm_xmm 13) (va_op_xmm_xmm 2)) (fun (va_s:va_state)
    _ -> let (va_arg32:Vale.Def.Types_s.quad32) = va_get_xmm 14 va_s in let
    (va_arg31:Vale.Def.Types_s.quad32) = va_get_xmm 1 va_old_s in let
    (va_arg30:Vale.Def.Types_s.quad32) = Vale.AES.GCTR.inc32lite ctr_orig 0 in va_qPURE va_range1
    "***** PRECONDITION NOT MET AT line 219 column 48 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (fun (_:unit) -> Vale.AES.AES_helpers.lemma_incr_msb va_arg30 va_arg31 va_arg32 5) (va_QSeq
    va_range1
    "***** PRECONDITION NOT MET AT line 220 column 10 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPxor (va_op_xmm_xmm 9) (va_op_xmm_xmm 1) (va_op_opr128_xmm 15)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 221 column 20 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_Store128_buffer (va_op_heaplet_mem_heaplet 3) (va_op_reg_opr64_reg64 rRbp)
    (va_op_xmm_xmm 4) 16 Secret scratch_b 1) (va_QEmpty (())))))))))))))))))))


val va_lemma_Ctr32_ghash_6_prelude : va_b0:va_code -> va_s0:va_state -> alg:algorithm ->
  scratch_b:buffer128 -> key_words:(seq nat32) -> round_keys:(seq quad32) -> keys_b:buffer128 ->
  ctr_orig:quad32
  -> Ghost (va_state & va_fuel)
  (requires (va_require_total va_b0 (va_code_Ctr32_ghash_6_prelude alg) va_s0 /\ va_get_ok va_s0 /\
    (sse_enabled /\ Vale.X64.Decls.validDstAddrs128 (va_get_mem_heaplet 3 va_s0) (va_get_reg64 rRbp
    va_s0) scratch_b 8 (va_get_mem_layout va_s0) Secret /\ aes_reqs_offset alg key_words round_keys
    keys_b (va_get_reg64 rRcx va_s0) (va_get_mem_heaplet 0 va_s0) (va_get_mem_layout va_s0) /\
    va_get_xmm 1 va_s0 == Vale.Def.Types_s.reverse_bytes_quad32 (Vale.AES.GCTR.inc32lite ctr_orig
    0))))
  (ensures (fun (va_sM, va_fM) -> va_ensure_total va_b0 va_s0 va_sM va_fM /\ va_get_ok va_sM /\
    (Vale.X64.Decls.modifies_buffer_specific128 scratch_b (va_get_mem_heaplet 3 va_s0)
    (va_get_mem_heaplet 3 va_sM) 1 1 /\ va_get_xmm 2 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 0 0 0 16777216 /\ va_get_xmm 15 va_sM == FStar.Seq.Base.index #quad32
    round_keys 0 /\ va_get_xmm 9 va_sM == Vale.Def.Types_s.quad32_xor
    (Vale.Def.Types_s.reverse_bytes_quad32 (Vale.AES.GCTR.inc32lite ctr_orig 0)) (va_get_xmm 15
    va_sM) /\ (let counter = Vale.Def.Words_s.__proj__Mkfour__item__lo0 ctr_orig `op_Modulus` 256
    in (counter + 6 < 256 ==> va_get_xmm 10 va_sM == Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.AES.GCTR.inc32lite ctr_orig 1)) /\ (counter + 6 < 256 ==> va_get_xmm 11 va_sM ==
    Vale.Def.Types_s.reverse_bytes_quad32 (Vale.AES.GCTR.inc32lite ctr_orig 2)) /\ (counter + 6 <
    256 ==> va_get_xmm 12 va_sM == Vale.Def.Types_s.reverse_bytes_quad32 (Vale.AES.GCTR.inc32lite
    ctr_orig 3)) /\ (counter + 6 < 256 ==> va_get_xmm 13 va_sM ==
    Vale.Def.Types_s.reverse_bytes_quad32 (Vale.AES.GCTR.inc32lite ctr_orig 4)) /\ (counter + 6 <
    256 ==> va_get_xmm 14 va_sM == Vale.Def.Types_s.reverse_bytes_quad32 (Vale.AES.GCTR.inc32lite
    ctr_orig 5)) /\ Vale.X64.Decls.buffer128_read scratch_b 1 (va_get_mem_heaplet 3 va_sM) ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 0 0 0 0 /\ va_get_xmm 4 va_sM ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 0 0 0 0)) /\ va_state_eq va_sM (va_update_flags
    va_sM (va_update_mem_heaplet 3 va_sM (va_update_reg64 rR11 va_sM (va_update_xmm 15 va_sM
    (va_update_xmm 14 va_sM (va_update_xmm 13 va_sM (va_update_xmm 12 va_sM (va_update_xmm 11 va_sM
    (va_update_xmm 10 va_sM (va_update_xmm 9 va_sM (va_update_xmm 4 va_sM (va_update_xmm 2 va_sM
    (va_update_ok va_sM (va_update_mem va_sM va_s0))))))))))))))))
[@"opaque_to_smt"]
let va_lemma_Ctr32_ghash_6_prelude va_b0 va_s0 alg scratch_b key_words round_keys keys_b ctr_orig =
  let (va_mods:va_mods_t) = [va_Mod_flags; va_Mod_mem_heaplet 3; va_Mod_reg64 rR11; va_Mod_xmm 15;
    va_Mod_xmm 14; va_Mod_xmm 13; va_Mod_xmm 12; va_Mod_xmm 11; va_Mod_xmm 10; va_Mod_xmm 9;
    va_Mod_xmm 4; va_Mod_xmm 2; va_Mod_ok; va_Mod_mem] in
  let va_qc = va_qcode_Ctr32_ghash_6_prelude va_mods alg scratch_b key_words round_keys keys_b
    ctr_orig in
  let (va_sM, va_fM, va_g) = va_wp_sound_code_norm (va_code_Ctr32_ghash_6_prelude alg) va_qc va_s0
    (fun va_s0 va_sM va_g -> let () = va_g in label va_range1
    "***** POSTCONDITION NOT MET AT line 151 column 1 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_get_ok va_sM) /\ (label va_range1
    "***** POSTCONDITION NOT MET AT line 194 column 72 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (Vale.X64.Decls.modifies_buffer_specific128 scratch_b (va_get_mem_heaplet 3 va_s0)
    (va_get_mem_heaplet 3 va_sM) 1 1) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 196 column 41 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_get_xmm 2 va_sM == Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 0 0 0 16777216) /\ label
    va_range1
    "***** POSTCONDITION NOT MET AT line 197 column 39 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_get_xmm 15 va_sM == FStar.Seq.Base.index #quad32 round_keys 0) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 199 column 83 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_get_xmm 9 va_sM == Vale.Def.Types_s.quad32_xor (Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.AES.GCTR.inc32lite ctr_orig 0)) (va_get_xmm 15 va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 200 column 9 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (let counter = Vale.Def.Words_s.__proj__Mkfour__item__lo0 ctr_orig `op_Modulus` 256 in label
    va_range1
    "***** POSTCONDITION NOT MET AT line 201 column 85 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (counter + 6 < 256 ==> va_get_xmm 10 va_sM == Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.AES.GCTR.inc32lite ctr_orig 1)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 202 column 85 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (counter + 6 < 256 ==> va_get_xmm 11 va_sM == Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.AES.GCTR.inc32lite ctr_orig 2)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 203 column 85 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (counter + 6 < 256 ==> va_get_xmm 12 va_sM == Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.AES.GCTR.inc32lite ctr_orig 3)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 204 column 85 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (counter + 6 < 256 ==> va_get_xmm 13 va_sM == Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.AES.GCTR.inc32lite ctr_orig 4)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 205 column 85 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (counter + 6 < 256 ==> va_get_xmm 14 va_sM == Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.AES.GCTR.inc32lite ctr_orig 5)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 207 column 66 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (Vale.X64.Decls.buffer128_read scratch_b 1 (va_get_mem_heaplet 3 va_sM) ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 0 0 0 0) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 208 column 33 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_get_xmm 4 va_sM == Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 0 0 0 0)))) in
  assert_norm (va_qc.mods == va_mods);
  va_lemma_norm_mods ([va_Mod_flags; va_Mod_mem_heaplet 3; va_Mod_reg64 rR11; va_Mod_xmm 15;
    va_Mod_xmm 14; va_Mod_xmm 13; va_Mod_xmm 12; va_Mod_xmm 11; va_Mod_xmm 10; va_Mod_xmm 9;
    va_Mod_xmm 4; va_Mod_xmm 2; va_Mod_ok; va_Mod_mem]) va_sM va_s0;
  (va_sM, va_fM)

[@ va_qattr]
let va_wp_Ctr32_ghash_6_prelude (alg:algorithm) (scratch_b:buffer128) (key_words:(seq nat32))
  (round_keys:(seq quad32)) (keys_b:buffer128) (ctr_orig:quad32) (va_s0:va_state) (va_k:(va_state
  -> unit -> Type0)) : Type0 =
  (va_get_ok va_s0 /\ (sse_enabled /\ Vale.X64.Decls.validDstAddrs128 (va_get_mem_heaplet 3 va_s0)
    (va_get_reg64 rRbp va_s0) scratch_b 8 (va_get_mem_layout va_s0) Secret /\ aes_reqs_offset alg
    key_words round_keys keys_b (va_get_reg64 rRcx va_s0) (va_get_mem_heaplet 0 va_s0)
    (va_get_mem_layout va_s0) /\ va_get_xmm 1 va_s0 == Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.AES.GCTR.inc32lite ctr_orig 0)) /\ (forall (va_x_mem:vale_heap) (va_x_xmm2:quad32)
    (va_x_xmm4:quad32) (va_x_xmm9:quad32) (va_x_xmm10:quad32) (va_x_xmm11:quad32)
    (va_x_xmm12:quad32) (va_x_xmm13:quad32) (va_x_xmm14:quad32) (va_x_xmm15:quad32)
    (va_x_r11:nat64) (va_x_heap3:vale_heap) (va_x_efl:Vale.X64.Flags.t) . let va_sM = va_upd_flags
    va_x_efl (va_upd_mem_heaplet 3 va_x_heap3 (va_upd_reg64 rR11 va_x_r11 (va_upd_xmm 15 va_x_xmm15
    (va_upd_xmm 14 va_x_xmm14 (va_upd_xmm 13 va_x_xmm13 (va_upd_xmm 12 va_x_xmm12 (va_upd_xmm 11
    va_x_xmm11 (va_upd_xmm 10 va_x_xmm10 (va_upd_xmm 9 va_x_xmm9 (va_upd_xmm 4 va_x_xmm4
    (va_upd_xmm 2 va_x_xmm2 (va_upd_mem va_x_mem va_s0)))))))))))) in va_get_ok va_sM /\
    (Vale.X64.Decls.modifies_buffer_specific128 scratch_b (va_get_mem_heaplet 3 va_s0)
    (va_get_mem_heaplet 3 va_sM) 1 1 /\ va_get_xmm 2 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 0 0 0 16777216 /\ va_get_xmm 15 va_sM == FStar.Seq.Base.index #quad32
    round_keys 0 /\ va_get_xmm 9 va_sM == Vale.Def.Types_s.quad32_xor
    (Vale.Def.Types_s.reverse_bytes_quad32 (Vale.AES.GCTR.inc32lite ctr_orig 0)) (va_get_xmm 15
    va_sM) /\ (let counter = Vale.Def.Words_s.__proj__Mkfour__item__lo0 ctr_orig `op_Modulus` 256
    in (counter + 6 < 256 ==> va_get_xmm 10 va_sM == Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.AES.GCTR.inc32lite ctr_orig 1)) /\ (counter + 6 < 256 ==> va_get_xmm 11 va_sM ==
    Vale.Def.Types_s.reverse_bytes_quad32 (Vale.AES.GCTR.inc32lite ctr_orig 2)) /\ (counter + 6 <
    256 ==> va_get_xmm 12 va_sM == Vale.Def.Types_s.reverse_bytes_quad32 (Vale.AES.GCTR.inc32lite
    ctr_orig 3)) /\ (counter + 6 < 256 ==> va_get_xmm 13 va_sM ==
    Vale.Def.Types_s.reverse_bytes_quad32 (Vale.AES.GCTR.inc32lite ctr_orig 4)) /\ (counter + 6 <
    256 ==> va_get_xmm 14 va_sM == Vale.Def.Types_s.reverse_bytes_quad32 (Vale.AES.GCTR.inc32lite
    ctr_orig 5)) /\ Vale.X64.Decls.buffer128_read scratch_b 1 (va_get_mem_heaplet 3 va_sM) ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 0 0 0 0 /\ va_get_xmm 4 va_sM ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 0 0 0 0)) ==> va_k va_sM (())))


val va_wpProof_Ctr32_ghash_6_prelude : alg:algorithm -> scratch_b:buffer128 -> key_words:(seq
  nat32) -> round_keys:(seq quad32) -> keys_b:buffer128 -> ctr_orig:quad32 -> va_s0:va_state ->
  va_k:(va_state -> unit -> Type0)
  -> Ghost (va_state & va_fuel & unit)
  (requires (va_t_require va_s0 /\ va_wp_Ctr32_ghash_6_prelude alg scratch_b key_words round_keys
    keys_b ctr_orig va_s0 va_k))
  (ensures (fun (va_sM, va_f0, va_g) -> va_t_ensure (va_code_Ctr32_ghash_6_prelude alg)
    ([va_Mod_flags; va_Mod_mem_heaplet 3; va_Mod_reg64 rR11; va_Mod_xmm 15; va_Mod_xmm 14;
    va_Mod_xmm 13; va_Mod_xmm 12; va_Mod_xmm 11; va_Mod_xmm 10; va_Mod_xmm 9; va_Mod_xmm 4;
    va_Mod_xmm 2; va_Mod_mem]) va_s0 va_k ((va_sM, va_f0, va_g))))
[@"opaque_to_smt"]
let va_wpProof_Ctr32_ghash_6_prelude alg scratch_b key_words round_keys keys_b ctr_orig va_s0 va_k =
  let (va_sM, va_f0) = va_lemma_Ctr32_ghash_6_prelude (va_code_Ctr32_ghash_6_prelude alg) va_s0 alg
    scratch_b key_words round_keys keys_b ctr_orig in
  va_lemma_upd_update va_sM;
  assert (va_state_eq va_sM (va_update_flags va_sM (va_update_mem_heaplet 3 va_sM (va_update_reg64
    rR11 va_sM (va_update_xmm 15 va_sM (va_update_xmm 14 va_sM (va_update_xmm 13 va_sM
    (va_update_xmm 12 va_sM (va_update_xmm 11 va_sM (va_update_xmm 10 va_sM (va_update_xmm 9 va_sM
    (va_update_xmm 4 va_sM (va_update_xmm 2 va_sM (va_update_ok va_sM (va_update_mem va_sM
    va_s0)))))))))))))));
  va_lemma_norm_mods ([va_Mod_flags; va_Mod_mem_heaplet 3; va_Mod_reg64 rR11; va_Mod_xmm 15;
    va_Mod_xmm 14; va_Mod_xmm 13; va_Mod_xmm 12; va_Mod_xmm 11; va_Mod_xmm 10; va_Mod_xmm 9;
    va_Mod_xmm 4; va_Mod_xmm 2; va_Mod_mem]) va_sM va_s0;
  let va_g = () in
  (va_sM, va_f0, va_g)

[@ "opaque_to_smt" va_qattr]
let va_quick_Ctr32_ghash_6_prelude (alg:algorithm) (scratch_b:buffer128) (key_words:(seq nat32))
  (round_keys:(seq quad32)) (keys_b:buffer128) (ctr_orig:quad32) : (va_quickCode unit
  (va_code_Ctr32_ghash_6_prelude alg)) =
  (va_QProc (va_code_Ctr32_ghash_6_prelude alg) ([va_Mod_flags; va_Mod_mem_heaplet 3; va_Mod_reg64
    rR11; va_Mod_xmm 15; va_Mod_xmm 14; va_Mod_xmm 13; va_Mod_xmm 12; va_Mod_xmm 11; va_Mod_xmm 10;
    va_Mod_xmm 9; va_Mod_xmm 4; va_Mod_xmm 2; va_Mod_mem]) (va_wp_Ctr32_ghash_6_prelude alg
    scratch_b key_words round_keys keys_b ctr_orig) (va_wpProof_Ctr32_ghash_6_prelude alg scratch_b
    key_words round_keys keys_b ctr_orig))
//--
//-- Handle_ctr32_2

val va_code_Handle_ctr32_2 : va_dummy:unit -> Tot va_code
[@ "opaque_to_smt" va_qattr]
let va_code_Handle_ctr32_2 () =
  (va_Block (va_CCons (va_code_VPshufb (va_op_xmm_xmm 6) (va_op_xmm_xmm 1) (va_op_xmm_xmm 0))
    (va_CCons (va_code_Load_one_lsb (va_op_xmm_xmm 5)) (va_CCons (va_code_VPaddd (va_op_xmm_xmm 10)
    (va_op_xmm_xmm 6) (va_op_xmm_xmm 5)) (va_CCons (va_code_Load_two_lsb (va_op_xmm_xmm 5))
    (va_CCons (va_code_VPaddd (va_op_xmm_xmm 11) (va_op_xmm_xmm 6) (va_op_xmm_xmm 5)) (va_CCons
    (va_code_VPaddd (va_op_xmm_xmm 12) (va_op_xmm_xmm 10) (va_op_xmm_xmm 5)) (va_CCons
    (va_code_VPshufb (va_op_xmm_xmm 10) (va_op_xmm_xmm 10) (va_op_xmm_xmm 0)) (va_CCons
    (va_code_VPaddd (va_op_xmm_xmm 13) (va_op_xmm_xmm 11) (va_op_xmm_xmm 5)) (va_CCons
    (va_code_VPshufb (va_op_xmm_xmm 11) (va_op_xmm_xmm 11) (va_op_xmm_xmm 0)) (va_CCons
    (va_code_VPxor (va_op_xmm_xmm 10) (va_op_xmm_xmm 10) (va_op_opr128_xmm 4)) (va_CCons
    (va_code_VPaddd (va_op_xmm_xmm 14) (va_op_xmm_xmm 12) (va_op_xmm_xmm 5)) (va_CCons
    (va_code_VPshufb (va_op_xmm_xmm 12) (va_op_xmm_xmm 12) (va_op_xmm_xmm 0)) (va_CCons
    (va_code_VPxor (va_op_xmm_xmm 11) (va_op_xmm_xmm 11) (va_op_opr128_xmm 4)) (va_CCons
    (va_code_VPaddd (va_op_xmm_xmm 1) (va_op_xmm_xmm 13) (va_op_xmm_xmm 5)) (va_CCons
    (va_code_VPshufb (va_op_xmm_xmm 13) (va_op_xmm_xmm 13) (va_op_xmm_xmm 0)) (va_CCons
    (va_code_VPxor (va_op_xmm_xmm 12) (va_op_xmm_xmm 12) (va_op_opr128_xmm 4)) (va_CCons
    (va_code_VPshufb (va_op_xmm_xmm 14) (va_op_xmm_xmm 14) (va_op_xmm_xmm 0)) (va_CCons
    (va_code_VPxor (va_op_xmm_xmm 13) (va_op_xmm_xmm 13) (va_op_opr128_xmm 4)) (va_CCons
    (va_code_VPshufb (va_op_xmm_xmm 1) (va_op_xmm_xmm 1) (va_op_xmm_xmm 0)) (va_CCons
    (va_code_VPxor (va_op_xmm_xmm 14) (va_op_xmm_xmm 14) (va_op_opr128_xmm 4)) (va_CNil
    ()))))))))))))))))))))))

val va_codegen_success_Handle_ctr32_2 : va_dummy:unit -> Tot va_pbool
[@ "opaque_to_smt" va_qattr]
let va_codegen_success_Handle_ctr32_2 () =
  (va_pbool_and (va_codegen_success_VPshufb (va_op_xmm_xmm 6) (va_op_xmm_xmm 1) (va_op_xmm_xmm 0))
    (va_pbool_and (va_codegen_success_Load_one_lsb (va_op_xmm_xmm 5)) (va_pbool_and
    (va_codegen_success_VPaddd (va_op_xmm_xmm 10) (va_op_xmm_xmm 6) (va_op_xmm_xmm 5))
    (va_pbool_and (va_codegen_success_Load_two_lsb (va_op_xmm_xmm 5)) (va_pbool_and
    (va_codegen_success_VPaddd (va_op_xmm_xmm 11) (va_op_xmm_xmm 6) (va_op_xmm_xmm 5))
    (va_pbool_and (va_codegen_success_VPaddd (va_op_xmm_xmm 12) (va_op_xmm_xmm 10) (va_op_xmm_xmm
    5)) (va_pbool_and (va_codegen_success_VPshufb (va_op_xmm_xmm 10) (va_op_xmm_xmm 10)
    (va_op_xmm_xmm 0)) (va_pbool_and (va_codegen_success_VPaddd (va_op_xmm_xmm 13) (va_op_xmm_xmm
    11) (va_op_xmm_xmm 5)) (va_pbool_and (va_codegen_success_VPshufb (va_op_xmm_xmm 11)
    (va_op_xmm_xmm 11) (va_op_xmm_xmm 0)) (va_pbool_and (va_codegen_success_VPxor (va_op_xmm_xmm
    10) (va_op_xmm_xmm 10) (va_op_opr128_xmm 4)) (va_pbool_and (va_codegen_success_VPaddd
    (va_op_xmm_xmm 14) (va_op_xmm_xmm 12) (va_op_xmm_xmm 5)) (va_pbool_and
    (va_codegen_success_VPshufb (va_op_xmm_xmm 12) (va_op_xmm_xmm 12) (va_op_xmm_xmm 0))
    (va_pbool_and (va_codegen_success_VPxor (va_op_xmm_xmm 11) (va_op_xmm_xmm 11) (va_op_opr128_xmm
    4)) (va_pbool_and (va_codegen_success_VPaddd (va_op_xmm_xmm 1) (va_op_xmm_xmm 13)
    (va_op_xmm_xmm 5)) (va_pbool_and (va_codegen_success_VPshufb (va_op_xmm_xmm 13) (va_op_xmm_xmm
    13) (va_op_xmm_xmm 0)) (va_pbool_and (va_codegen_success_VPxor (va_op_xmm_xmm 12)
    (va_op_xmm_xmm 12) (va_op_opr128_xmm 4)) (va_pbool_and (va_codegen_success_VPshufb
    (va_op_xmm_xmm 14) (va_op_xmm_xmm 14) (va_op_xmm_xmm 0)) (va_pbool_and
    (va_codegen_success_VPxor (va_op_xmm_xmm 13) (va_op_xmm_xmm 13) (va_op_opr128_xmm 4))
    (va_pbool_and (va_codegen_success_VPshufb (va_op_xmm_xmm 1) (va_op_xmm_xmm 1) (va_op_xmm_xmm
    0)) (va_pbool_and (va_codegen_success_VPxor (va_op_xmm_xmm 14) (va_op_xmm_xmm 14)
    (va_op_opr128_xmm 4)) (va_ttrue ())))))))))))))))))))))

[@ "opaque_to_smt" va_qattr]
let va_qcode_Handle_ctr32_2 (va_mods:va_mods_t) (ctr_BE:quad32) : (va_quickCode unit
  (va_code_Handle_ctr32_2 ())) =
  (qblock va_mods (fun (va_s:va_state) -> let (va_old_s:va_state) = va_s in va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 253 column 12 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPshufb (va_op_xmm_xmm 6) (va_op_xmm_xmm 1) (va_op_xmm_xmm 0)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 258 column 17 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_Load_one_lsb (va_op_xmm_xmm 5)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 260 column 11 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPaddd (va_op_xmm_xmm 10) (va_op_xmm_xmm 6) (va_op_xmm_xmm 5)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 262 column 17 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_Load_two_lsb (va_op_xmm_xmm 5)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 263 column 11 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPaddd (va_op_xmm_xmm 11) (va_op_xmm_xmm 6) (va_op_xmm_xmm 5)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 265 column 11 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPaddd (va_op_xmm_xmm 12) (va_op_xmm_xmm 10) (va_op_xmm_xmm 5)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 266 column 12 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPshufb (va_op_xmm_xmm 10) (va_op_xmm_xmm 10) (va_op_xmm_xmm 0)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 267 column 11 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPaddd (va_op_xmm_xmm 13) (va_op_xmm_xmm 11) (va_op_xmm_xmm 5)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 268 column 12 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPshufb (va_op_xmm_xmm 11) (va_op_xmm_xmm 11) (va_op_xmm_xmm 0)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 269 column 10 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPxor (va_op_xmm_xmm 10) (va_op_xmm_xmm 10) (va_op_opr128_xmm 4)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 270 column 11 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPaddd (va_op_xmm_xmm 14) (va_op_xmm_xmm 12) (va_op_xmm_xmm 5)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 271 column 12 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPshufb (va_op_xmm_xmm 12) (va_op_xmm_xmm 12) (va_op_xmm_xmm 0)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 272 column 10 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPxor (va_op_xmm_xmm 11) (va_op_xmm_xmm 11) (va_op_opr128_xmm 4)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 273 column 11 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPaddd (va_op_xmm_xmm 1) (va_op_xmm_xmm 13) (va_op_xmm_xmm 5)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 274 column 12 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPshufb (va_op_xmm_xmm 13) (va_op_xmm_xmm 13) (va_op_xmm_xmm 0)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 275 column 10 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPxor (va_op_xmm_xmm 12) (va_op_xmm_xmm 12) (va_op_opr128_xmm 4)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 276 column 12 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPshufb (va_op_xmm_xmm 14) (va_op_xmm_xmm 14) (va_op_xmm_xmm 0)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 277 column 10 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPxor (va_op_xmm_xmm 13) (va_op_xmm_xmm 13) (va_op_opr128_xmm 4)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 278 column 12 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPshufb (va_op_xmm_xmm 1) (va_op_xmm_xmm 1) (va_op_xmm_xmm 0)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 279 column 10 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_quick_VPxor (va_op_xmm_xmm 14) (va_op_xmm_xmm 14) (va_op_opr128_xmm 4)) (va_QEmpty
    (())))))))))))))))))))))))


val va_lemma_Handle_ctr32_2 : va_b0:va_code -> va_s0:va_state -> ctr_BE:quad32
  -> Ghost (va_state & va_fuel)
  (requires (va_require_total va_b0 (va_code_Handle_ctr32_2 ()) va_s0 /\ va_get_ok va_s0 /\
    (avx_enabled /\ sse_enabled /\ va_get_xmm 0 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 202182159 134810123 67438087 66051 /\ va_get_xmm 1 va_s0 ==
    Vale.Def.Types_s.reverse_bytes_quad32 ctr_BE)))
  (ensures (fun (va_sM, va_fM) -> va_ensure_total va_b0 va_s0 va_sM va_fM /\ va_get_ok va_sM /\
    (va_get_xmm 10 va_sM == Vale.Def.Types_s.quad32_xor (Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.AES.GCTR.inc32lite ctr_BE 1)) (va_get_xmm 4 va_sM) /\ va_get_xmm 11 va_sM ==
    Vale.Def.Types_s.quad32_xor (Vale.Def.Types_s.reverse_bytes_quad32 (Vale.AES.GCTR.inc32lite
    ctr_BE 2)) (va_get_xmm 4 va_sM) /\ va_get_xmm 12 va_sM == Vale.Def.Types_s.quad32_xor
    (Vale.Def.Types_s.reverse_bytes_quad32 (Vale.AES.GCTR.inc32lite ctr_BE 3)) (va_get_xmm 4 va_sM)
    /\ va_get_xmm 13 va_sM == Vale.Def.Types_s.quad32_xor (Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.AES.GCTR.inc32lite ctr_BE 4)) (va_get_xmm 4 va_sM) /\ va_get_xmm 14 va_sM ==
    Vale.Def.Types_s.quad32_xor (Vale.Def.Types_s.reverse_bytes_quad32 (Vale.AES.GCTR.inc32lite
    ctr_BE 5)) (va_get_xmm 4 va_sM) /\ va_get_xmm 1 va_sM == Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.AES.GCTR.inc32lite ctr_BE 6)) /\ va_state_eq va_sM (va_update_flags va_sM (va_update_xmm
    14 va_sM (va_update_xmm 13 va_sM (va_update_xmm 12 va_sM (va_update_xmm 11 va_sM (va_update_xmm
    10 va_sM (va_update_xmm 6 va_sM (va_update_xmm 5 va_sM (va_update_xmm 2 va_sM (va_update_xmm 1
    va_sM (va_update_reg64 rR11 va_sM (va_update_ok va_sM va_s0))))))))))))))
[@"opaque_to_smt"]
let va_lemma_Handle_ctr32_2 va_b0 va_s0 ctr_BE =
  let (va_mods:va_mods_t) = [va_Mod_flags; va_Mod_xmm 14; va_Mod_xmm 13; va_Mod_xmm 12; va_Mod_xmm
    11; va_Mod_xmm 10; va_Mod_xmm 6; va_Mod_xmm 5; va_Mod_xmm 2; va_Mod_xmm 1; va_Mod_reg64 rR11;
    va_Mod_ok] in
  let va_qc = va_qcode_Handle_ctr32_2 va_mods ctr_BE in
  let (va_sM, va_fM, va_g) = va_wp_sound_code_norm (va_code_Handle_ctr32_2 ()) va_qc va_s0 (fun
    va_s0 va_sM va_g -> let () = va_g in label va_range1
    "***** POSTCONDITION NOT MET AT line 224 column 1 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_get_ok va_sM) /\ (label va_range1
    "***** POSTCONDITION NOT MET AT line 246 column 77 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_get_xmm 10 va_sM == Vale.Def.Types_s.quad32_xor (Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.AES.GCTR.inc32lite ctr_BE 1)) (va_get_xmm 4 va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 247 column 77 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_get_xmm 11 va_sM == Vale.Def.Types_s.quad32_xor (Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.AES.GCTR.inc32lite ctr_BE 2)) (va_get_xmm 4 va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 248 column 77 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_get_xmm 12 va_sM == Vale.Def.Types_s.quad32_xor (Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.AES.GCTR.inc32lite ctr_BE 3)) (va_get_xmm 4 va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 249 column 77 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_get_xmm 13 va_sM == Vale.Def.Types_s.quad32_xor (Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.AES.GCTR.inc32lite ctr_BE 4)) (va_get_xmm 4 va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 250 column 77 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_get_xmm 14 va_sM == Vale.Def.Types_s.quad32_xor (Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.AES.GCTR.inc32lite ctr_BE 5)) (va_get_xmm 4 va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 251 column 72 of file /home/gebner/everest/hacl-star/vale/code/thirdPartyPorts/OpenSSL/aes/Vale.AES.X64.AESGCM.vaf *****"
    (va_get_xmm 1 va_sM == Vale.Def.Types_s.reverse_bytes_quad32 (Vale.AES.GCTR.inc32lite ctr_BE
    6)))) in
  assert_norm (va_qc.mods == va_mods);
  va_lemma_norm_mods ([va_Mod_flags; va_Mod_xmm 14; va_Mod_xmm 13; va_Mod_xmm 12; va_Mod_xmm 11;
    va_Mod_xmm 10; va_Mod_xmm 6; va_Mod_xmm 5; va_Mod_xmm 2; va_Mod_xmm 1; va_Mod_reg64 rR11;
    va_Mod_ok]) va_sM va_s0;
  (va_sM, va_fM)

[@ va_qattr]
let va_wp_Handle_ctr32_2 (ctr_BE:quad32) (va_s0:va_state) (va_k:(va_state -> unit -> Type0)) :
  Type0 =
  (va_get_ok va_s0 /\ (avx_enabled /\ sse_enabled /\ va_get_xmm 0 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 202182159 134810123 67438087 66051 /\ va_get_xmm 1 va_s0 ==
    Vale.Def.Types_s.reverse_bytes_quad32 ctr_BE) /\ (forall (va_x_r11:nat64) (va_x_xmm1:quad32)
    (va_x_xmm2:quad32) (va_x_xmm5:quad32) (va_x_xmm6:quad32) (va_x_xmm10:quad32)
    (va_x_xmm11:quad32) (va_x_xmm12:quad32) (va_x_xmm13:quad32) (va_x_xmm14:quad32)
    (va_x_efl:Vale.X64.Flags.t) . let va_sM = va_upd_flags va_x_efl (va_upd_xmm 14 va_x_xmm14
    (va_upd_xmm 13 va_x_xmm13 (va_upd_xmm 12 va_x_xmm12 (va_upd_xmm 11 va_x_xmm11 (va_upd_xmm 10
    va_x_xmm10 (va_upd_xmm 6 va_x_xmm6 (va_upd_xmm 5 va_x_xmm5 (va_upd_xmm 2 va_x_xmm2 (va_upd_xmm
    1 va_x_xmm1 (va_upd_reg64 rR11 va_x_r11 va_s0)))))))))) in va_get_ok va_sM /\ (va_get_xmm 10
    va_sM == Vale.Def.Types_s.quad32_xor (Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.AES.GCTR.inc32lite ctr_BE 1)) (va_get_xmm 4 va_sM) /\ va_get_xmm 11 va_sM ==
    Vale.Def.Types_s.quad32_xor (Vale.Def.Types_s.reverse_bytes_quad32 (Vale.AES.GCTR.inc32lite
    ctr_BE 2)) (va_get_xmm 4 va_sM) /\ va_get_xmm 12 va_sM == Vale.Def.Types_s.quad32_xor
    (Vale.Def.Types_s.reverse_bytes_quad32 (Vale.AES.GCTR.inc32lite ctr_BE 3)) (va_get_xmm 4 va_sM)
    /\ va_get_xmm 13 va_sM == Vale.Def.Types_s.quad32_xor (Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.AES.GCTR.inc32lite ctr_BE 4)) (va_get_xmm 4 va_sM) /\ va_get_xmm 14 va_sM ==
    Vale.Def.Types_s.quad32_xor (Vale.Def.Types_s.reverse_bytes_quad32 (Vale.AES.GCTR.inc32lite
    ctr_BE 5)) (va_get_xmm 4 va_sM) /\ va_get_xmm 1 va_sM == Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.AES.GCTR.inc32lite ctr_BE 6)) ==> va_k va_sM (())))


val va_wpProof_Handle_ctr32_2 : ctr_BE:quad32 -> va_s0:va_state -> va_k:(va_state -> unit -> Type0)
  -> Ghost (va_state & va_fuel & unit)
  (requires (va_t_require va_s0 /\ va_wp_Handle_ctr32_2 ctr_BE va_s0 va_k))
  (ensures (fun (va_sM, va_f0, va_g) -> va_t_ensure (va_code_Handle_ctr32_2 ()) ([va_Mod_flags;
    va_Mod_xmm 14; va_Mod_xmm 13; va_Mod_xmm 12; va_Mod_xmm 11; va_Mod_xmm 10; va_Mod_xmm 6;
    va_Mod_xmm 5; va_Mod_xmm 2; va_Mod_xmm 1; va_Mod_reg64 rR11]) va_s0 va_k ((va_sM, va_f0,
    va_g))))
[@"opaque_to_smt"]
let va_wpProof_Handle_ctr32_2 ctr_BE va_s0 va_k =
  let (va_sM, va_f0) = va_lemma_Handle_ctr32_2 (va_code_Handle_ctr32_2 ()) va_s0 ctr_BE in
  va_lemma_upd_update va_sM;
  assert (va_state_eq va_sM (va_update_flags va_sM (va_update_xmm 14 va_sM (va_update_xmm 13 va_sM
    (va_update_xmm 12 va_sM (va_update_xmm 11 va_sM (va_update_xmm 10 va_sM (va_update_xmm 6 va_sM
    (va_update_xmm 5 va_sM (va_update_xmm 2 va_sM (va_update_xmm 1 va_sM (va_update_reg64 rR11
    va_sM (va_update_ok va_sM va_s0)))))))))))));
  va_lemma_norm_mods ([va_Mod_flags; va_Mod_xmm 14; va_Mod_xmm 13; va_Mod_xmm 12; va_Mod_xmm 11;
    va_Mod_xmm 10; va_Mod_xmm 6; va_Mod_xmm 5; va_Mod_xmm 2; va_Mod_xmm 1; va_Mod_reg64 rR11])
    va_sM va_s0;
  let va_g = () in
  (va_sM, va_f0, va_g)

[@ "opaque_to_smt" va_qattr]
let va_quick_Handle_ctr32_2 (ctr_BE:quad32) : (va_quickCode unit (va_code_Handle_ctr32_2 ())) =
  (va_QProc (va_code_Handle_ctr32_2 ()) ([va_Mod_flags; va_Mod_xmm 14; va_Mod_xmm 13; va_Mod_xmm
    12; va_Mod_xmm 11; va_Mod_xmm 10; va_Mod_xmm 6; va_Mod_xmm 5; va_Mod_xmm 2; va_Mod_xmm 1;
    va_Mod_reg64 rR11]) (va_wp_Handle_ctr32_2 ctr_BE) (va_wpProof_Handle_ctr32_2 ctr_BE))
//--
//-- Loop6x_decrypt
#push-options "--z3rlimit 300"

val va_code_Loop6x_decrypt : alg:algorithm -> Tot va_code
[@ "opaque_to_smt" va_qattr]
let va_code_Loop6x_decrypt alg =
  (va_Block (va_CCons (va_Block (va_CNil ())) (va_CCons (va_Block (va_CNil ())) (va_CCons (va_Block
    (va_CNil ())) (va_CCons (va_code_Loop6x_partial alg) (va_CCons (va_code_Loop6x_final alg)
    (va_CCons (va_code_Sub64 (va_op_dst_opr64_reg64 rRdx) (va_const_opr64 6)) (va_CCons (va_IfElse
    (va_cmp_gt (va_op_cmp_reg64 rRdx) (va_const_cmp 6)) (va_Block (va_CCons (va_code_Add64
    (va_op_dst_opr64_reg64 rR14) (va_const_opr64 96)) (va_CNil ()))) (va_Block (va_CNil ())))
    (va_CCons (va_Block (va_CNil ())) (va_CCons (va_Block (va_CNil ())) (va_CCons (va_Block
    (va_CNil ())) (va_CCons (va_Block (va_CNil ())) (va_CCons (va_IfElse (va_cmp_gt
    (va_op_cmp_reg64 rRdx) (va_const_cmp 0)) (va_Block (va_CCons (va_code_Loop6x_save_output ())
    (va_CCons (va_code_Load128_buffer (va_op_heaplet_mem_heaplet 3) (va_op_xmm_xmm 7)
    (va_op_reg_opr64_reg64 rRbp) 32 Secret) (va_CCons (va_Block (va_CNil ())) (va_CNil ())))))
    (va_Block (va_CCons (va_code_Mem128_lemma ()) (va_CCons (va_code_VPolyAdd (va_op_xmm_xmm 8)
    (va_op_xmm_xmm 8) (va_opr_code_Mem128 (va_op_heaplet_mem_heaplet 3) (va_op_reg64_reg64 rRbp) 16
    Secret)) (va_CCons (va_code_VPolyAdd (va_op_xmm_xmm 8) (va_op_xmm_xmm 8) (va_op_opr128_xmm 4))
    (va_CNil ())))))) (va_CNil ()))))))))))))))

val va_codegen_success_Loop6x_decrypt : alg:algorithm -> Tot va_pbool
[@ "opaque_to_smt" va_qattr]
let va_codegen_success_Loop6x_decrypt alg =
  (va_pbool_and (va_codegen_success_Loop6x_partial alg) (va_pbool_and
    (va_codegen_success_Loop6x_final alg) (va_pbool_and (va_codegen_success_Sub64
    (va_op_dst_opr64_reg64 rRdx) (va_const_opr64 6)) (va_pbool_and (va_codegen_success_Add64
    (va_op_dst_opr64_reg64 rR14) (va_const_opr64 96)) (va_pbool_and (va_pbool_and
    (va_codegen_success_Loop6x_save_output ()) (va_pbool_and (va_codegen_success_Load128_buffer
    (va_op_heaplet_mem_heaplet 3) (va_op_xmm_xmm 7) (va_op_reg_opr64_reg64 rRbp) 32 Secret)
    (va_pbool_and (va_codegen_success_Mem128_lemma ()) (va_pbool_and (va_codegen_success_VPolyAdd
    (va_op_xmm_xmm 8) (va_op_xmm_xmm 8) (va_opr_code_Mem128 (va_op_heaplet_mem_heaplet 3)
    (va_op_reg64_reg64 rRbp) 16 Secret)) (va_codegen_success_VPolyAdd (va_op_xmm_xmm 8)
    (va_op_xmm_xmm 8) (va_op_opr128_xmm 4)))))) (va_ttrue ()))))))

[@ "opaque_to_smt" va_qattr]
let va_qcode_Loop6x_decrypt (va_mods:va_mods_t) (alg:algorithm) (h_LE:quad32) (y_orig:quad32)
  (y_prev:quad32) (count:nat) (iv_b:buffer128) (in0_b:buffer128) (in_b:buffer128) (out_b:buffer128)
  (scratch_b:buffer128) (plain_quads:(seq quad32)) (key_words:(seq nat32)) (round_keys:(seq
  quad32)) (keys_b:buffer128) (hkeys_b:buffer128) (ctr_BE_orig:quad32) (ctr_BE:quad32) :
val va_qcode_Loop6x_decrypt
      (va_mods: va_mods_t)
      (alg: algorithm)
      (h_LE y_orig y_prev: quad32)
      (count: nat)
      (iv_b in0_b in_b out_b scratch_b: buffer128)
      (plain_quads: (seq quad32))
      (key_words: (seq nat32))
      (round_keys: (seq quad32))
      (keys_b hkeys_b: buffer128)
      (ctr_BE_orig ctr_BE: quad32)
    : (va_quickCode (quad32) (va_code_Loop6x_decrypt alg))

    va_mods: Vale.X64.QuickCode.va_mods_t ->
    alg: Vale.AES.AES_common_s.algorithm ->
    h_LE: Vale.X64.Decls.quad32 ->
    y_orig: Vale.X64.Decls.quad32 ->
    y_prev: Vale.X64.Decls.quad32 ->
    count: Prims.nat ->
    iv_b: Vale.X64.Memory.buffer128 ->
    in0_b: Vale.X64.Memory.buffer128 ->
    in_b: Vale.X64.Memory.buffer128 ->
    out_b: Vale.X64.Memory.buffer128 ->
    scratch_b: Vale.X64.Memory.buffer128 ->
    plain_quads: FStar.Seq.Base.seq Vale.X64.Decls.quad32 ->
    key_words: 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 ->
    ctr_BE_orig: Vale.X64.Decls.quad32 ->
    ctr_BE: Vale.X64.Decls.quad32
  -> Vale.X64.QuickCode.va_quickCode Vale.X64.Decls.quad32
      (Vale.AES.X64.AESGCM.va_code_Loop6x_decrypt alg)