val va_lemma_Gctr_blocks128 : va_b0:va_code -> va_s0:va_state -> alg:algorithm -> in_b:buffer128 ->
  out_b:buffer128 -> key:(seq nat32) -> round_keys:(seq quad32) -> keys_b:buffer128
  -> Ghost (va_state & va_fuel)
  (requires (va_require_total va_b0 (va_code_Gctr_blocks128 alg) va_s0 /\ va_get_ok va_s0 /\
    ((Vale.PPC64LE.Decls.buffers_disjoint128 in_b out_b \/ in_b == out_b) /\
    Vale.PPC64LE.Decls.validSrcAddrs128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 3 va_s0) in_b
    (va_get_reg 6 va_s0) (va_get_mem_layout va_s0) Secret /\ Vale.PPC64LE.Decls.validDstAddrs128
    (va_get_mem_heaplet 1 va_s0) (va_get_reg 7 va_s0) out_b (va_get_reg 6 va_s0) (va_get_mem_layout
    va_s0) Secret /\ va_get_reg 3 va_s0 + 16 `op_Multiply` va_get_reg 6 va_s0 < pow2_64 /\
    va_get_reg 7 va_s0 + 16 `op_Multiply` va_get_reg 6 va_s0 < pow2_64 /\ l_and
    (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b ==
    Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 out_b)
    (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b < pow2_32) /\ va_get_reg 6
    va_s0 == Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b /\ va_get_reg 6
    va_s0 < pow2_32 /\ aes_reqs alg key round_keys keys_b (va_get_reg 4 va_s0) (va_get_mem_heaplet
    0 va_s0) (va_get_mem_layout va_s0))))
  (ensures (fun (va_sM, va_fM) -> va_ensure_total va_b0 va_s0 va_sM va_fM /\ va_get_ok va_sM /\
    (Vale.PPC64LE.Decls.modifies_buffer128 out_b (va_get_mem_heaplet 1 va_s0) (va_get_mem_heaplet 1
    va_sM) /\ Vale.AES.GCTR_BE.gctr_partial alg (va_get_reg 6 va_s0)
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0)
    in_b)) (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1
    va_sM) out_b)) key (va_get_vec 7 va_s0) /\ va_get_vec 7 va_sM == Vale.AES.GCTR_BE.inc32lite
    (va_get_vec 7 va_s0) (va_get_reg 6 va_s0) /\ (va_get_reg 6 va_s0 == 0 ==>
    Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) out_b == Vale.PPC64LE.Decls.s128
    (va_get_mem_heaplet 1 va_s0) out_b) /\ l_and (l_and (va_get_reg 3 va_sM == va_get_reg 3 va_s0)
    (va_get_reg 7 va_sM == va_get_reg 7 va_s0)) (va_get_reg 6 va_sM == va_get_reg 6 va_s0)) /\
    va_state_eq va_sM (va_update_mem_heaplet 1 va_sM (va_update_cr0 va_sM (va_update_vec 19 va_sM
    (va_update_vec 18 va_sM (va_update_vec 17 va_sM (va_update_vec 16 va_sM (va_update_vec 15 va_sM
    (va_update_vec 14 va_sM (va_update_vec 13 va_sM (va_update_vec 12 va_sM (va_update_vec 11 va_sM
    (va_update_vec 10 va_sM (va_update_vec 9 va_sM (va_update_vec 8 va_sM (va_update_vec 7 va_sM
    (va_update_vec 6 va_sM (va_update_vec 5 va_sM (va_update_vec 4 va_sM (va_update_vec 3 va_sM
    (va_update_vec 2 va_sM (va_update_vec 1 va_sM (va_update_vec 0 va_sM (va_update_reg 31 va_sM
    (va_update_reg 30 va_sM (va_update_reg 29 va_sM (va_update_reg 28 va_sM (va_update_reg 27 va_sM
    (va_update_reg 26 va_sM (va_update_reg 10 va_sM (va_update_reg 9 va_sM (va_update_reg 8 va_sM
    (va_update_reg 6 va_sM (va_update_reg 7 va_sM (va_update_reg 3 va_sM (va_update_ok va_sM
    (va_update_mem va_sM va_s0))))))))))))))))))))))))))))))))))))))
let va_lemma_Gctr_blocks128 va_b0 va_s0 alg in_b out_b key round_keys keys_b =
  let (va_mods:va_mods_t) = [va_Mod_mem_heaplet 1; va_Mod_cr0; va_Mod_vec 19; va_Mod_vec 18;
    va_Mod_vec 17; va_Mod_vec 16; va_Mod_vec 15; va_Mod_vec 14; va_Mod_vec 13; va_Mod_vec 12;
    va_Mod_vec 11; va_Mod_vec 10; va_Mod_vec 9; va_Mod_vec 8; va_Mod_vec 7; va_Mod_vec 6;
    va_Mod_vec 5; va_Mod_vec 4; va_Mod_vec 3; va_Mod_vec 2; va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg
    31; va_Mod_reg 30; va_Mod_reg 29; va_Mod_reg 28; va_Mod_reg 27; va_Mod_reg 26; va_Mod_reg 10;
    va_Mod_reg 9; va_Mod_reg 8; va_Mod_reg 6; va_Mod_reg 7; va_Mod_reg 3; va_Mod_ok; va_Mod_mem] in
  let va_qc = va_qcode_Gctr_blocks128 va_mods alg in_b out_b key round_keys keys_b in
  let (va_sM, va_fM, va_g) = va_wp_sound_code_norm (va_code_Gctr_blocks128 alg) va_qc va_s0 (fun
    va_s0 va_sM va_g -> let () = va_g in label va_range1
    "***** POSTCONDITION NOT MET AT line 585 column 1 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_ok va_sM) /\ (label va_range1
    "***** POSTCONDITION NOT MET AT line 618 column 53 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.modifies_buffer128 out_b (va_get_mem_heaplet 1 va_s0) (va_get_mem_heaplet 1
    va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 621 column 147 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.AES.GCTR_BE.gctr_partial alg (va_get_reg 6 va_s0)
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0)
    in_b)) (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1
    va_sM) out_b)) key (va_get_vec 7 va_s0)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 622 column 45 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 7 va_sM == Vale.AES.GCTR_BE.inc32lite (va_get_vec 7 va_s0) (va_get_reg 6 va_s0)) /\
    label va_range1
    "***** POSTCONDITION NOT MET AT line 623 column 72 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 6 va_s0 == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) out_b ==
    Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0) out_b) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 625 column 76 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (l_and (l_and (va_get_reg 3 va_sM == va_get_reg 3 va_s0) (va_get_reg 7 va_sM == va_get_reg 7
    va_s0)) (va_get_reg 6 va_sM == va_get_reg 6 va_s0)))) in
  assert_norm (va_qc.mods == va_mods);
  va_lemma_norm_mods ([va_Mod_mem_heaplet 1; va_Mod_cr0; va_Mod_vec 19; va_Mod_vec 18; va_Mod_vec
    17; va_Mod_vec 16; va_Mod_vec 15; va_Mod_vec 14; va_Mod_vec 13; va_Mod_vec 12; va_Mod_vec 11;
    va_Mod_vec 10; va_Mod_vec 9; va_Mod_vec 8; va_Mod_vec 7; va_Mod_vec 6; va_Mod_vec 5; va_Mod_vec
    4; va_Mod_vec 3; va_Mod_vec 2; va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg 31; va_Mod_reg 30;
    va_Mod_reg 29; va_Mod_reg 28; va_Mod_reg 27; va_Mod_reg 26; va_Mod_reg 10; va_Mod_reg 9;
    va_Mod_reg 8; va_Mod_reg 6; va_Mod_reg 7; va_Mod_reg 3; va_Mod_ok; va_Mod_mem]) va_sM va_s0;
  (va_sM, va_fM)
val va_lemma_Gctr_blocks128 : va_b0:va_code -> va_s0:va_state -> alg:algorithm -> in_b:buffer128 ->
  out_b:buffer128 -> key:(seq nat32) -> round_keys:(seq quad32) -> keys_b:buffer128
  -> Ghost (va_state & va_fuel)
  (requires (va_require_total va_b0 (va_code_Gctr_blocks128 alg) va_s0 /\ va_get_ok va_s0 /\
    ((Vale.PPC64LE.Decls.buffers_disjoint128 in_b out_b \/ in_b == out_b) /\
    Vale.PPC64LE.Decls.validSrcAddrs128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 3 va_s0) in_b
    (va_get_reg 6 va_s0) (va_get_mem_layout va_s0) Secret /\ Vale.PPC64LE.Decls.validDstAddrs128
    (va_get_mem_heaplet 1 va_s0) (va_get_reg 7 va_s0) out_b (va_get_reg 6 va_s0) (va_get_mem_layout
    va_s0) Secret /\ va_get_reg 3 va_s0 + 16 `op_Multiply` va_get_reg 6 va_s0 < pow2_64 /\
    va_get_reg 7 va_s0 + 16 `op_Multiply` va_get_reg 6 va_s0 < pow2_64 /\ l_and
    (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b ==
    Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 out_b)
    (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b < pow2_32) /\ va_get_reg 6
    va_s0 == Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b /\ va_get_reg 6
    va_s0 < pow2_32 /\ aes_reqs alg key round_keys keys_b (va_get_reg 4 va_s0) (va_get_mem_heaplet
    0 va_s0) (va_get_mem_layout va_s0))))
  (ensures (fun (va_sM, va_fM) -> va_ensure_total va_b0 va_s0 va_sM va_fM /\ va_get_ok va_sM /\
    (Vale.PPC64LE.Decls.modifies_buffer128 out_b (va_get_mem_heaplet 1 va_s0) (va_get_mem_heaplet 1
    va_sM) /\ Vale.AES.GCTR_BE.gctr_partial alg (va_get_reg 6 va_s0)
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0)
    in_b)) (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1
    va_sM) out_b)) key (va_get_vec 7 va_s0) /\ va_get_vec 7 va_sM == Vale.AES.GCTR_BE.inc32lite
    (va_get_vec 7 va_s0) (va_get_reg 6 va_s0) /\ (va_get_reg 6 va_s0 == 0 ==>
    Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) out_b == Vale.PPC64LE.Decls.s128
    (va_get_mem_heaplet 1 va_s0) out_b) /\ l_and (l_and (va_get_reg 3 va_sM == va_get_reg 3 va_s0)
    (va_get_reg 7 va_sM == va_get_reg 7 va_s0)) (va_get_reg 6 va_sM == va_get_reg 6 va_s0)) /\
    va_state_eq va_sM (va_update_mem_heaplet 1 va_sM (va_update_cr0 va_sM (va_update_vec 19 va_sM
    (va_update_vec 18 va_sM (va_update_vec 17 va_sM (va_update_vec 16 va_sM (va_update_vec 15 va_sM
    (va_update_vec 14 va_sM (va_update_vec 13 va_sM (va_update_vec 12 va_sM (va_update_vec 11 va_sM
    (va_update_vec 10 va_sM (va_update_vec 9 va_sM (va_update_vec 8 va_sM (va_update_vec 7 va_sM
    (va_update_vec 6 va_sM (va_update_vec 5 va_sM (va_update_vec 4 va_sM (va_update_vec 3 va_sM
    (va_update_vec 2 va_sM (va_update_vec 1 va_sM (va_update_vec 0 va_sM (va_update_reg 31 va_sM
    (va_update_reg 30 va_sM (va_update_reg 29 va_sM (va_update_reg 28 va_sM (va_update_reg 27 va_sM
    (va_update_reg 26 va_sM (va_update_reg 10 va_sM (va_update_reg 9 va_sM (va_update_reg 8 va_sM
    (va_update_reg 6 va_sM (va_update_reg 7 va_sM (va_update_reg 3 va_sM (va_update_ok va_sM
    (va_update_mem va_sM va_s0))))))))))))))))))))))))))))))))))))))
let va_lemma_Gctr_blocks128 va_b0 va_s0 alg in_b out_b key round_keys keys_b =
let va_mods:va_mods_t =
  [
    va_Mod_mem_heaplet 1; va_Mod_cr0; va_Mod_vec 19; va_Mod_vec 18; va_Mod_vec 17; va_Mod_vec 16;
    va_Mod_vec 15; va_Mod_vec 14; va_Mod_vec 13; va_Mod_vec 12; va_Mod_vec 11; va_Mod_vec 10;
    va_Mod_vec 9; va_Mod_vec 8; va_Mod_vec 7; va_Mod_vec 6; va_Mod_vec 5; va_Mod_vec 4; va_Mod_vec 3;
    va_Mod_vec 2; va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg 31; va_Mod_reg 30; va_Mod_reg 29;
    va_Mod_reg 28; va_Mod_reg 27; va_Mod_reg 26; va_Mod_reg 10; va_Mod_reg 9; va_Mod_reg 8;
    va_Mod_reg 6; va_Mod_reg 7; va_Mod_reg 3; va_Mod_ok; va_Mod_mem
  ]
in
let va_qc = va_qcode_Gctr_blocks128 va_mods alg in_b out_b key round_keys keys_b in
let va_sM, va_fM, va_g =
  va_wp_sound_code_norm (va_code_Gctr_blocks128 alg)
    va_qc
    va_s0
    (fun va_s0 va_sM va_g ->
        let () = va_g in
        label va_range1
          "***** POSTCONDITION NOT MET AT line 585 column 1 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
          (va_get_ok va_sM) /\
        (label va_range1
            "***** POSTCONDITION NOT MET AT line 618 column 53 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
            (Vale.PPC64LE.Decls.modifies_buffer128 out_b
                (va_get_mem_heaplet 1 va_s0)
                (va_get_mem_heaplet 1 va_sM)) /\
          label va_range1
            "***** POSTCONDITION NOT MET AT line 621 column 147 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
            (Vale.AES.GCTR_BE.gctr_partial alg
                (va_get_reg 6 va_s0)
                (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet
                            1
                            va_s0)
                        in_b))
                (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet
                            1
                            va_sM)
                        out_b))
                key
                (va_get_vec 7 va_s0)) /\
          label va_range1
            "***** POSTCONDITION NOT MET AT line 622 column 45 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
            (va_get_vec 7 va_sM ==
              Vale.AES.GCTR_BE.inc32lite (va_get_vec 7 va_s0) (va_get_reg 6 va_s0)) /\
          label va_range1
            "***** POSTCONDITION NOT MET AT line 623 column 72 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
            (va_get_reg 6 va_s0 == 0 ==>
              Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) out_b ==
              Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0) out_b) /\
          label va_range1
            "***** POSTCONDITION NOT MET AT line 625 column 76 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
            (l_and (l_and (va_get_reg 3 va_sM == va_get_reg 3 va_s0)
                    (va_get_reg 7 va_sM == va_get_reg 7 va_s0))
                (va_get_reg 6 va_sM == va_get_reg 6 va_s0))))
in
assert_norm (va_qc.mods == va_mods);
va_lemma_norm_mods ([
      va_Mod_mem_heaplet 1; va_Mod_cr0; va_Mod_vec 19; va_Mod_vec 18; va_Mod_vec 17; va_Mod_vec 16;
      va_Mod_vec 15; va_Mod_vec 14; va_Mod_vec 13; va_Mod_vec 12; va_Mod_vec 11; va_Mod_vec 10;
      va_Mod_vec 9; va_Mod_vec 8; va_Mod_vec 7; va_Mod_vec 6; va_Mod_vec 5; va_Mod_vec 4;
      va_Mod_vec 3; va_Mod_vec 2; va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg 31; va_Mod_reg 30;
      va_Mod_reg 29; va_Mod_reg 28; va_Mod_reg 27; va_Mod_reg 26; va_Mod_reg 10; va_Mod_reg 9;
      va_Mod_reg 8; va_Mod_reg 6; va_Mod_reg 7; va_Mod_reg 3; va_Mod_ok; va_Mod_mem
    ])
  va_sM
  va_s0;
(va_sM, va_fM)
Vale.AES.PPC64LE.GCTR.fst.checked
Vale.PPC64LE.State.fsti.checked Vale.PPC64LE.QuickCodes.fsti.checked Vale.PPC64LE.QuickCode.fst.checked Vale.PPC64LE.Memory.fsti.checked Vale.PPC64LE.Machine_s.fst.checked Vale.PPC64LE.InsVector.fsti.checked Vale.PPC64LE.InsStack.fsti.checked Vale.PPC64LE.InsMem.fsti.checked Vale.PPC64LE.InsBasic.fsti.checked Vale.PPC64LE.Decls.fsti.checked Vale.Poly1305.Math.fsti.checked Vale.Lib.Basic.fsti.checked Vale.Def.Words_s.fsti.checked Vale.Def.Words.Two_s.fsti.checked Vale.Def.Words.Seq_s.fsti.checked Vale.Def.Types_s.fst.checked Vale.Def.Prop_s.fst.checked Vale.Def.Opaque_s.fsti.checked Vale.Arch.Types.fsti.checked Vale.Arch.HeapImpl.fsti.checked Vale.AES.Types_helpers.fsti.checked Vale.AES.PPC64LE.AES.fsti.checked Vale.AES.GCTR_BE_s.fst.checked Vale.AES.GCTR_BE.fsti.checked Vale.AES.GCM_helpers_BE.fsti.checked Vale.AES.AES_common_s.fst.checked Vale.AES.AES_BE_s.fst.checked prims.fst.checked FStar.Seq.Base.fsti.checked FStar.Seq.fst.checked FStar.Pervasives.Native.fst.checked FStar.Pervasives.fsti.checked
Vale.AES.PPC64LE.GCTR.fst
Vale.PPC64LE.Decls.va_code Vale.PPC64LE.Decls.va_state Vale.AES.AES_common_s.algorithm Vale.PPC64LE.Memory.buffer128 FStar.Seq.Base.seq Vale.PPC64LE.Memory.nat32 Vale.PPC64LE.Memory.quad32 Vale.PPC64LE.QuickCodes.fuel Prims.unit FStar.Pervasives.Native.Mktuple2 Vale.PPC64LE.Decls.va_fuel Vale.PPC64LE.QuickCode.va_lemma_norm_mods Prims.Cons Vale.PPC64LE.QuickCode.mod_t Vale.PPC64LE.QuickCode.va_Mod_mem_heaplet Vale.PPC64LE.QuickCode.va_Mod_cr0 Vale.PPC64LE.QuickCode.va_Mod_vec Vale.PPC64LE.QuickCode.va_Mod_reg Vale.PPC64LE.QuickCode.va_Mod_ok Vale.PPC64LE.QuickCode.va_Mod_mem Prims.Nil FStar.Pervasives.assert_norm Prims.eq2 Prims.list Vale.PPC64LE.QuickCode.__proj__QProc__item__mods Vale.AES.PPC64LE.GCTR.va_code_Gctr_blocks128 FStar.Pervasives.Native.tuple2 FStar.Pervasives.Native.tuple3 Vale.PPC64LE.Machine_s.state Vale.PPC64LE.QuickCodes.va_wp_sound_code_norm Prims.l_and Vale.PPC64LE.QuickCodes.label Vale.PPC64LE.QuickCodes.va_range1 Prims.b2t Vale.PPC64LE.Decls.va_get_ok Vale.PPC64LE.Decls.modifies_buffer128 Vale.PPC64LE.Decls.va_get_mem_heaplet Vale.AES.GCTR_BE.gctr_partial Vale.PPC64LE.Decls.va_get_reg Vale.Arch.Types.reverse_bytes_quad32_seq Vale.PPC64LE.Decls.s128 Vale.PPC64LE.Decls.va_get_vec Vale.Def.Types_s.quad32 Vale.AES.GCTR_BE.inc32lite Prims.l_imp Prims.int Vale.PPC64LE.Machine_s.quad32 Vale.PPC64LE.Machine_s.nat64 Vale.PPC64LE.QuickCode.quickCode Vale.AES.PPC64LE.GCTR.va_qcode_Gctr_blocks128
module Vale.AES.PPC64LE.GCTR
open Vale.Def.Prop_s
open Vale.Def.Opaque_s
open Vale.Def.Words_s
open Vale.Def.Types_s
open Vale.Arch.Types
open Vale.Arch.HeapImpl
open FStar.Seq
open Vale.AES.AES_BE_s
open Vale.AES.PPC64LE.AES
open Vale.AES.GCTR_BE_s
open Vale.AES.GCTR_BE
open Vale.AES.GCM_helpers_BE
open Vale.Poly1305.Math
open Vale.Def.Words.Two_s
open Vale.PPC64LE.Machine_s
open Vale.PPC64LE.Memory
open Vale.PPC64LE.State
open Vale.PPC64LE.Decls
open Vale.PPC64LE.InsBasic
open Vale.PPC64LE.InsMem
open Vale.PPC64LE.InsVector
open Vale.PPC64LE.InsStack
open Vale.PPC64LE.QuickCode
open Vale.PPC64LE.QuickCodes
open Vale.AES.Types_helpers
#reset-options "--z3rlimit 30"
open Vale.Lib.Basic
#reset-options "--z3rlimit 20"
//-- Gctr_register

[@ "opaque_to_smt" va_qattr]
let va_code_Gctr_register alg =
  (va_Block (va_CCons (va_code_Vmr (va_op_vec_opr_vec 0) (va_op_vec_opr_vec 7)) (va_CCons
    (va_code_AESEncryptBlock alg) (va_CCons (va_Block (va_CNil ())) (va_CCons (va_code_Vxor
    (va_op_vec_opr_vec 1) (va_op_vec_opr_vec 1) (va_op_vec_opr_vec 0)) (va_CNil ()))))))

[@ "opaque_to_smt" va_qattr]
let va_codegen_success_Gctr_register alg =
  (va_pbool_and (va_codegen_success_Vmr (va_op_vec_opr_vec 0) (va_op_vec_opr_vec 7)) (va_pbool_and
    (va_codegen_success_AESEncryptBlock alg) (va_pbool_and (va_codegen_success_Vxor
    (va_op_vec_opr_vec 1) (va_op_vec_opr_vec 1) (va_op_vec_opr_vec 0)) (va_ttrue ()))))

[@ "opaque_to_smt" va_qattr]
let va_qcode_Gctr_register (va_mods:va_mods_t) (alg:algorithm) (key:(seq nat32)) (round_keys:(seq
  quad32)) (keys_b:buffer128) : (va_quickCode unit (va_code_Gctr_register alg)) =
  (qblock va_mods (fun (va_s:va_state) -> let (va_old_s:va_state) = va_s in va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 99 column 5 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.AES.GCTR_BE_s.inc32 (va_get_vec 7 va_s) 0 == va_get_vec 7 va_s) (va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 100 column 8 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vmr (va_op_vec_opr_vec 0) (va_op_vec_opr_vec 7)) (fun (va_s:va_state) _ -> va_QBind
    va_range1
    "***** PRECONDITION NOT MET AT line 101 column 20 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_AESEncryptBlock alg (va_get_vec 7 va_s) key round_keys keys_b) (fun (va_s:va_state) _
    -> va_qAssertSquash va_range1
    "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 102 column 5 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    ((fun (alg_10536:Vale.AES.AES_common_s.algorithm) (key_10537:(FStar.Seq.Base.seq
    Vale.Def.Types_s.nat32)) (input_10538:Vale.Def.Types_s.quad32) ->
    Vale.AES.AES_BE_s.is_aes_key_word alg_10536 key_10537) alg key (va_get_vec 7 va_s)) (fun _ ->
    va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 102 column 5 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 0 va_s == Vale.AES.AES_BE_s.aes_encrypt_word alg key (va_get_vec 7 va_s)) (va_QBind
    va_range1
    "***** PRECONDITION NOT MET AT line 104 column 9 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vxor (va_op_vec_opr_vec 1) (va_op_vec_opr_vec 1) (va_op_vec_opr_vec 0)) (fun
    (va_s:va_state) _ -> let (va_arg15:(FStar.Seq.Base.seq Vale.Def.Types_s.nat32)) = key in let
    (va_arg14:Vale.AES.AES_common_s.algorithm) = alg in let (va_arg13:Vale.Def.Types_s.quad32) =
    va_get_vec 1 va_old_s in let (va_arg12:Vale.Def.Types_s.quad32) = va_get_vec 7 va_s in va_qPURE
    va_range1
    "***** PRECONDITION NOT MET AT line 107 column 27 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (fun (_:unit) -> Vale.AES.GCTR_BE.gctr_encrypt_one_block va_arg12 va_arg13 va_arg14 va_arg15)
    (va_QEmpty (()))))))))))

[@"opaque_to_smt"]
let va_lemma_Gctr_register va_b0 va_s0 alg key round_keys keys_b =
  let (va_mods:va_mods_t) = [va_Mod_vec 2; va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg 10; va_Mod_ok] in
  let va_qc = va_qcode_Gctr_register va_mods alg key round_keys keys_b in
  let (va_sM, va_fM, va_g) = va_wp_sound_code_norm (va_code_Gctr_register alg) va_qc va_s0 (fun
    va_s0 va_sM va_g -> let () = va_g in label va_range1
    "***** POSTCONDITION NOT MET AT line 80 column 1 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_ok va_sM) /\ (label va_range1
    "***** POSTCONDITION NOT MET AT line 96 column 142 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.Def.Words.Seq_s.seq_nat32_to_seq_nat8_BE (Vale.Def.Words.Seq_s.seq_four_to_seq_BE
    #Vale.Def.Words_s.nat32 (FStar.Seq.Base.create #quad32 1 (va_get_vec 1 va_sM))) ==
    Vale.AES.GCTR_BE_s.gctr_encrypt (va_get_vec 7 va_sM) (Vale.Arch.Types.be_quad32_to_bytes
    (va_get_vec 1 va_s0)) alg key) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 97 column 60 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 1 va_sM == Vale.AES.GCTR_BE_s.gctr_encrypt_block (va_get_vec 7 va_sM) (va_get_vec 1
    va_s0) alg key 0))) in
  assert_norm (va_qc.mods == va_mods);
  va_lemma_norm_mods ([va_Mod_vec 2; va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg 10; va_Mod_ok]) va_sM
    va_s0;
  (va_sM, va_fM)


[@"opaque_to_smt"]
let va_wpProof_Gctr_register alg key round_keys keys_b va_s0 va_k =
  let (va_sM, va_f0) = va_lemma_Gctr_register (va_code_Gctr_register alg) va_s0 alg key round_keys
    keys_b in
  va_lemma_upd_update va_sM;
  assert (va_state_eq va_sM (va_update_vec 2 va_sM (va_update_vec 1 va_sM (va_update_vec 0 va_sM
    (va_update_reg 10 va_sM (va_update_ok va_sM va_s0))))));
  va_lemma_norm_mods ([va_Mod_vec 2; va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg 10]) va_sM va_s0;
  let va_g = () in
  (va_sM, va_f0, va_g)

//--
//-- Gctr_blocks128_body_1way

val va_code_Gctr_blocks128_body_1way : alg:algorithm -> Tot va_code
[@ "opaque_to_smt" va_qattr]
let va_code_Gctr_blocks128_body_1way alg =
  (va_Block (va_CCons (va_Block (va_CNil ())) (va_CCons (va_code_Vmr (va_op_vec_opr_vec 0)
    (va_op_vec_opr_vec 7)) (va_CCons (va_code_AESEncryptBlock alg) (va_CCons
    (va_code_Load128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 2)
    (va_op_reg_opr_reg 3) (va_op_reg_opr_reg 9) Secret) (va_CCons (va_code_Vxor (va_op_vec_opr_vec
    2) (va_op_vec_opr_vec 2) (va_op_vec_opr_vec 0)) (va_CCons (va_code_Store128_byte16_buffer_index
    (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 2) (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 9)
    Secret) (va_CNil ()))))))))

val va_codegen_success_Gctr_blocks128_body_1way : alg:algorithm -> Tot va_pbool
[@ "opaque_to_smt" va_qattr]
let va_codegen_success_Gctr_blocks128_body_1way alg =
  (va_pbool_and (va_codegen_success_Vmr (va_op_vec_opr_vec 0) (va_op_vec_opr_vec 7)) (va_pbool_and
    (va_codegen_success_AESEncryptBlock alg) (va_pbool_and
    (va_codegen_success_Load128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1)
    (va_op_vec_opr_vec 2) (va_op_reg_opr_reg 3) (va_op_reg_opr_reg 9) Secret) (va_pbool_and
    (va_codegen_success_Vxor (va_op_vec_opr_vec 2) (va_op_vec_opr_vec 2) (va_op_vec_opr_vec 0))
    (va_pbool_and (va_codegen_success_Store128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1)
    (va_op_vec_opr_vec 2) (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 9) Secret) (va_ttrue ()))))))

[@ "opaque_to_smt" va_qattr]
let va_qcode_Gctr_blocks128_body_1way (va_mods:va_mods_t) (alg:algorithm) (in_b:buffer128)
  (out_b:buffer128) (count:nat) (old_icb:quad32) (key:(seq nat32)) (round_keys:(seq quad32))
  (keys_b:buffer128) (plain_quads:(seq quad32)) : (va_quickCode unit
  (va_code_Gctr_blocks128_body_1way alg)) =
  (qblock va_mods (fun (va_s:va_state) -> let (va_old_s:va_state) = va_s in va_qAssertSquash
    va_range1
    "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 152 column 5 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    ((fun (alg_10536:Vale.AES.AES_common_s.algorithm) (key_10537:(FStar.Seq.Base.seq
    Vale.Def.Types_s.nat32)) (input_10538:Vale.Def.Types_s.quad32) ->
    Vale.AES.AES_BE_s.is_aes_key_word alg_10536 key_10537) alg key (Vale.AES.GCTR_BE_s.inc32
    old_icb (va_get_reg 6 va_s + count))) (fun _ -> let (ctr_enc:Vale.Def.Types_s.quad32) =
    Vale.Def.Types_s.quad32_xor (Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.PPC64LE.Decls.buffer128_read in_b (va_get_reg 6 va_s + count) (va_get_mem_heaplet 1
    va_s))) (Vale.AES.AES_BE_s.aes_encrypt_word alg key (Vale.AES.GCTR_BE_s.inc32 old_icb
    (va_get_reg 6 va_s + count))) in va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 154 column 8 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vmr (va_op_vec_opr_vec 0) (va_op_vec_opr_vec 7)) (fun (va_s:va_state) _ -> va_QBind
    va_range1
    "***** PRECONDITION NOT MET AT line 155 column 20 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_AESEncryptBlock alg (va_get_vec 7 va_s) key round_keys keys_b) (fun (va_s:va_state) _
    -> va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 157 column 32 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Load128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 2)
    (va_op_reg_opr_reg 3) (va_op_reg_opr_reg 9) Secret in_b (va_get_reg 6 va_s + count)) (va_QBind
    va_range1
    "***** PRECONDITION NOT MET AT line 158 column 9 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vxor (va_op_vec_opr_vec 2) (va_op_vec_opr_vec 2) (va_op_vec_opr_vec 0)) (fun
    (va_s:va_state) _ -> va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 159 column 33 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Store128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 2)
    (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 9) Secret out_b (va_get_reg 6 va_s + count)) (fun
    (va_s:va_state) _ -> va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 160 column 5 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.Def.Types_s.reverse_bytes_quad32 (Vale.PPC64LE.Decls.buffer128_read out_b (va_get_reg 6
    va_s + count) (va_get_mem_heaplet 1 va_s)) == ctr_enc) (let (va_arg24:(FStar.Seq.Base.seq
    Vale.Def.Types_s.nat32)) = key in let (va_arg23:Vale.AES.AES_common_s.algorithm) = alg in let
    (va_arg22:Vale.Def.Types_s.quad32) = old_icb in let (va_arg21:Prims.nat) = va_get_reg 6 va_s +
    count in let (va_arg20:(FStar.Seq.Base.seq Vale.Def.Types_s.quad32)) = plain_quads in let
    (va_arg19:(FStar.Seq.Base.seq Vale.Def.Types_s.quad32)) =
    Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1
    va_old_s) out_b) in let (va_arg18:(FStar.Seq.Base.seq Vale.Def.Types_s.quad32)) =
    Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s)
    out_b) in va_qPURE va_range1
    "***** PRECONDITION NOT MET AT line 162 column 38 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (fun (_:unit) -> Vale.AES.GCTR_BE.lemma_eq_reverse_bytes_quad32_seq va_arg18 va_arg19 va_arg20
    va_arg21 va_arg22 va_arg23 va_arg24) (va_QEmpty (())))))))))))


val va_lemma_Gctr_blocks128_body_1way : va_b0:va_code -> va_s0:va_state -> alg:algorithm ->
  in_b:buffer128 -> out_b:buffer128 -> count:nat -> old_icb:quad32 -> key:(seq nat32) ->
  round_keys:(seq quad32) -> keys_b:buffer128 -> plain_quads:(seq quad32)
  -> Ghost (va_state & va_fuel)
  (requires (va_require_total va_b0 (va_code_Gctr_blocks128_body_1way alg) va_s0 /\ va_get_ok va_s0
    /\ (0 <= count /\ count < va_get_reg 26 va_s0 /\ va_get_reg 9 va_s0 == count `op_Multiply` 16
    /\ Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 3 va_s0)
    in_b (va_get_reg 6 va_s0) (va_get_reg 26 va_s0) (va_get_mem_layout va_s0) Secret /\
    Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 7 va_s0)
    out_b (va_get_reg 6 va_s0) (va_get_reg 26 va_s0) (va_get_mem_layout va_s0) Secret /\
    (Vale.PPC64LE.Decls.buffers_disjoint128 in_b out_b \/ in_b == out_b) /\
    Vale.AES.GCTR_BE.partial_seq_agreement plain_quads (Vale.Arch.Types.reverse_bytes_quad32_seq
    (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0) in_b)) (va_get_reg 6 va_s0 + count)
    (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b) /\
    Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 6 va_s0 + count) plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0)
    out_b)) key old_icb /\ va_get_reg 6 va_s0 + va_get_reg 26 va_s0 < pow2_32 /\ va_get_vec 7 va_s0
    == Vale.AES.GCTR_BE.inc32lite old_icb (va_get_reg 6 va_s0 + count) /\ aes_reqs alg key
    round_keys keys_b (va_get_reg 4 va_s0) (va_get_mem_heaplet 0 va_s0) (va_get_mem_layout va_s0))))
  (ensures (fun (va_sM, va_fM) -> va_ensure_total va_b0 va_s0 va_sM va_fM /\ va_get_ok va_sM /\
    (Vale.PPC64LE.Decls.modifies_buffer128 out_b (va_get_mem_heaplet 1 va_s0) (va_get_mem_heaplet 1
    va_sM) /\ Vale.AES.GCTR_BE.partial_seq_agreement plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    in_b)) (va_get_reg 6 va_sM + count + 1) (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 in_b) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 6
    va_sM + count + 1) plain_quads (Vale.Arch.Types.reverse_bytes_quad32_seq
    (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) out_b)) key old_icb) /\ va_state_eq va_sM
    (va_update_mem_heaplet 1 va_sM (va_update_vec 2 va_sM (va_update_vec 0 va_sM (va_update_reg 10
    va_sM (va_update_ok va_sM (va_update_mem va_sM va_s0))))))))
[@"opaque_to_smt"]
let va_lemma_Gctr_blocks128_body_1way va_b0 va_s0 alg in_b out_b count old_icb key round_keys
  keys_b plain_quads =
  let (va_mods:va_mods_t) = [va_Mod_mem_heaplet 1; va_Mod_vec 2; va_Mod_vec 0; va_Mod_reg 10;
    va_Mod_ok; va_Mod_mem] in
  let va_qc = va_qcode_Gctr_blocks128_body_1way va_mods alg in_b out_b count old_icb key round_keys
    keys_b plain_quads in
  let (va_sM, va_fM, va_g) = va_wp_sound_code_norm (va_code_Gctr_blocks128_body_1way alg) va_qc
    va_s0 (fun va_s0 va_sM va_g -> let () = va_g in label va_range1
    "***** POSTCONDITION NOT MET AT line 110 column 1 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_ok va_sM) /\ (label va_range1
    "***** POSTCONDITION NOT MET AT line 148 column 53 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.modifies_buffer128 out_b (va_get_mem_heaplet 1 va_s0) (va_get_mem_heaplet 1
    va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 149 column 132 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.AES.GCTR_BE.partial_seq_agreement plain_quads (Vale.Arch.Types.reverse_bytes_quad32_seq
    (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) in_b)) (va_get_reg 6 va_sM + count + 1)
    (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 150 column 126 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 6 va_sM + count + 1) plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    out_b)) key old_icb))) in
  assert_norm (va_qc.mods == va_mods);
  va_lemma_norm_mods ([va_Mod_mem_heaplet 1; va_Mod_vec 2; va_Mod_vec 0; va_Mod_reg 10; va_Mod_ok;
    va_Mod_mem]) va_sM va_s0;
  (va_sM, va_fM)

[@ va_qattr]
let va_wp_Gctr_blocks128_body_1way (alg:algorithm) (in_b:buffer128) (out_b:buffer128) (count:nat)
  (old_icb:quad32) (key:(seq nat32)) (round_keys:(seq quad32)) (keys_b:buffer128) (plain_quads:(seq
  quad32)) (va_s0:va_state) (va_k:(va_state -> unit -> Type0)) : Type0 =
  (va_get_ok va_s0 /\ (0 <= count /\ count < va_get_reg 26 va_s0 /\ va_get_reg 9 va_s0 == count
    `op_Multiply` 16 /\ Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_s0)
    (va_get_reg 3 va_s0) in_b (va_get_reg 6 va_s0) (va_get_reg 26 va_s0) (va_get_mem_layout va_s0)
    Secret /\ Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 7
    va_s0) out_b (va_get_reg 6 va_s0) (va_get_reg 26 va_s0) (va_get_mem_layout va_s0) Secret /\
    (Vale.PPC64LE.Decls.buffers_disjoint128 in_b out_b \/ in_b == out_b) /\
    Vale.AES.GCTR_BE.partial_seq_agreement plain_quads (Vale.Arch.Types.reverse_bytes_quad32_seq
    (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0) in_b)) (va_get_reg 6 va_s0 + count)
    (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b) /\
    Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 6 va_s0 + count) plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0)
    out_b)) key old_icb /\ va_get_reg 6 va_s0 + va_get_reg 26 va_s0 < pow2_32 /\ va_get_vec 7 va_s0
    == Vale.AES.GCTR_BE.inc32lite old_icb (va_get_reg 6 va_s0 + count) /\ aes_reqs alg key
    round_keys keys_b (va_get_reg 4 va_s0) (va_get_mem_heaplet 0 va_s0) (va_get_mem_layout va_s0))
    /\ (forall (va_x_mem:vale_heap) (va_x_r10:nat64) (va_x_v0:quad32) (va_x_v2:quad32)
    (va_x_heap1:vale_heap) . let va_sM = va_upd_mem_heaplet 1 va_x_heap1 (va_upd_vec 2 va_x_v2
    (va_upd_vec 0 va_x_v0 (va_upd_reg 10 va_x_r10 (va_upd_mem va_x_mem va_s0)))) in va_get_ok va_sM
    /\ (Vale.PPC64LE.Decls.modifies_buffer128 out_b (va_get_mem_heaplet 1 va_s0)
    (va_get_mem_heaplet 1 va_sM) /\ Vale.AES.GCTR_BE.partial_seq_agreement plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    in_b)) (va_get_reg 6 va_sM + count + 1) (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 in_b) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 6
    va_sM + count + 1) plain_quads (Vale.Arch.Types.reverse_bytes_quad32_seq
    (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) out_b)) key old_icb) ==> va_k va_sM (())))


val va_wpProof_Gctr_blocks128_body_1way : alg:algorithm -> in_b:buffer128 -> out_b:buffer128 ->
  count:nat -> old_icb:quad32 -> key:(seq nat32) -> round_keys:(seq quad32) -> keys_b:buffer128 ->
  plain_quads:(seq 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_Gctr_blocks128_body_1way alg in_b out_b count old_icb key
    round_keys keys_b plain_quads va_s0 va_k))
  (ensures (fun (va_sM, va_f0, va_g) -> va_t_ensure (va_code_Gctr_blocks128_body_1way alg)
    ([va_Mod_mem_heaplet 1; va_Mod_vec 2; va_Mod_vec 0; va_Mod_reg 10; va_Mod_mem]) va_s0 va_k
    ((va_sM, va_f0, va_g))))
[@"opaque_to_smt"]
let va_wpProof_Gctr_blocks128_body_1way alg in_b out_b count old_icb key round_keys keys_b
  plain_quads va_s0 va_k =
  let (va_sM, va_f0) = va_lemma_Gctr_blocks128_body_1way (va_code_Gctr_blocks128_body_1way alg)
    va_s0 alg in_b out_b count old_icb key round_keys keys_b plain_quads in
  va_lemma_upd_update va_sM;
  assert (va_state_eq va_sM (va_update_mem_heaplet 1 va_sM (va_update_vec 2 va_sM (va_update_vec 0
    va_sM (va_update_reg 10 va_sM (va_update_ok va_sM (va_update_mem va_sM va_s0)))))));
  va_lemma_norm_mods ([va_Mod_mem_heaplet 1; va_Mod_vec 2; va_Mod_vec 0; va_Mod_reg 10;
    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_Gctr_blocks128_body_1way (alg:algorithm) (in_b:buffer128) (out_b:buffer128)
  (count:nat) (old_icb:quad32) (key:(seq nat32)) (round_keys:(seq quad32)) (keys_b:buffer128)
  (plain_quads:(seq quad32)) : (va_quickCode unit (va_code_Gctr_blocks128_body_1way alg)) =
  (va_QProc (va_code_Gctr_blocks128_body_1way alg) ([va_Mod_mem_heaplet 1; va_Mod_vec 2; va_Mod_vec
    0; va_Mod_reg 10; va_Mod_mem]) (va_wp_Gctr_blocks128_body_1way alg in_b out_b count old_icb key
    round_keys keys_b plain_quads) (va_wpProof_Gctr_blocks128_body_1way alg in_b out_b count
    old_icb key round_keys keys_b plain_quads))
//--
//-- Mod_cr0

val va_code_Mod_cr0 : va_dummy:unit -> Tot va_code
[@ "opaque_to_smt" va_qattr]
let va_code_Mod_cr0 () =
  (va_Block (va_CNil ()))

val va_codegen_success_Mod_cr0 : va_dummy:unit -> Tot va_pbool
[@ "opaque_to_smt" va_qattr]
let va_codegen_success_Mod_cr0 () =
  (va_ttrue ())

[@ "opaque_to_smt" va_qattr]
let va_qcode_Mod_cr0 (va_mods:va_mods_t) : (va_quickCode unit (va_code_Mod_cr0 ())) =
  (qblock va_mods (fun (va_s:va_state) -> let (va_old_s:va_state) = va_s in va_QEmpty (())))


val va_lemma_Mod_cr0 : va_b0:va_code -> va_s0:va_state
  -> Ghost (va_state & va_fuel)
  (requires (va_require_total va_b0 (va_code_Mod_cr0 ()) va_s0 /\ va_get_ok va_s0))
  (ensures (fun (va_sM, va_fM) -> va_ensure_total va_b0 va_s0 va_sM va_fM /\ va_get_ok va_sM /\
    va_state_eq va_sM (va_update_cr0 va_sM (va_update_ok va_sM va_s0))))
[@"opaque_to_smt"]
let va_lemma_Mod_cr0 va_b0 va_s0 =
  let (va_mods:va_mods_t) = [va_Mod_cr0; va_Mod_ok] in
  let va_qc = va_qcode_Mod_cr0 va_mods in
  let (va_sM, va_fM, va_g) = va_wp_sound_code_norm (va_code_Mod_cr0 ()) va_qc va_s0 (fun va_s0
    va_sM va_g -> let () = va_g in label va_range1
    "***** POSTCONDITION NOT MET AT line 165 column 1 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_ok va_sM)) in
  assert_norm (va_qc.mods == va_mods);
  va_lemma_norm_mods ([va_Mod_cr0; va_Mod_ok]) va_sM va_s0;
  (va_sM, va_fM)

[@ va_qattr]
let va_wp_Mod_cr0 (va_s0:va_state) (va_k:(va_state -> unit -> Type0)) : Type0 =
  (va_get_ok va_s0 /\ (forall (va_x_cr0:cr0_t) . let va_sM = va_upd_cr0 va_x_cr0 va_s0 in va_get_ok
    va_sM ==> va_k va_sM (())))


val va_wpProof_Mod_cr0 : va_s0:va_state -> va_k:(va_state -> unit -> Type0)
  -> Ghost (va_state & va_fuel & unit)
  (requires (va_t_require va_s0 /\ va_wp_Mod_cr0 va_s0 va_k))
  (ensures (fun (va_sM, va_f0, va_g) -> va_t_ensure (va_code_Mod_cr0 ()) ([va_Mod_cr0]) va_s0 va_k
    ((va_sM, va_f0, va_g))))
[@"opaque_to_smt"]
let va_wpProof_Mod_cr0 va_s0 va_k =
  let (va_sM, va_f0) = va_lemma_Mod_cr0 (va_code_Mod_cr0 ()) va_s0 in
  va_lemma_upd_update va_sM;
  assert (va_state_eq va_sM (va_update_cr0 va_sM (va_update_ok va_sM va_s0)));
  va_lemma_norm_mods ([va_Mod_cr0]) va_sM va_s0;
  let va_g = () in
  (va_sM, va_f0, va_g)

[@ "opaque_to_smt" va_qattr]
let va_quick_Mod_cr0 () : (va_quickCode unit (va_code_Mod_cr0 ())) =
  (va_QProc (va_code_Mod_cr0 ()) ([va_Mod_cr0]) va_wp_Mod_cr0 va_wpProof_Mod_cr0)
//--
//-- Gctr_blocks128_1way_body0
#push-options "--z3rlimit 30"

val va_code_Gctr_blocks128_1way_body0 : alg:algorithm -> Tot va_code
[@ "opaque_to_smt" va_qattr]
let va_code_Gctr_blocks128_1way_body0 alg =
  (va_Block (va_CCons (va_code_Mod_cr0 ()) (va_CCons (va_code_Gctr_blocks128_body_1way alg)
    (va_CCons (va_code_AddImm (va_op_reg_opr_reg 8) (va_op_reg_opr_reg 8) 1) (va_CCons
    (va_code_AddImm (va_op_reg_opr_reg 9) (va_op_reg_opr_reg 9) 16) (va_CCons (va_code_Vadduwm
    (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 3)) (va_CNil ())))))))

val va_codegen_success_Gctr_blocks128_1way_body0 : alg:algorithm -> Tot va_pbool
[@ "opaque_to_smt" va_qattr]
let va_codegen_success_Gctr_blocks128_1way_body0 alg =
  (va_pbool_and (va_codegen_success_Mod_cr0 ()) (va_pbool_and
    (va_codegen_success_Gctr_blocks128_body_1way alg) (va_pbool_and (va_codegen_success_AddImm
    (va_op_reg_opr_reg 8) (va_op_reg_opr_reg 8) 1) (va_pbool_and (va_codegen_success_AddImm
    (va_op_reg_opr_reg 9) (va_op_reg_opr_reg 9) 16) (va_pbool_and (va_codegen_success_Vadduwm
    (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 3)) (va_ttrue ()))))))

[@ "opaque_to_smt" va_qattr]
let va_qcode_Gctr_blocks128_1way_body0 (va_mods:va_mods_t) (va_old:va_state) (alg:algorithm)
  (va_in_in_b:buffer128) (va_in_key:(seq nat32)) (va_in_keys_b:buffer128) (va_in_old_icb:quad32)
  (va_in_old_plain:(seq quad32)) (va_in_out_b:buffer128) (va_in_round_keys:(seq quad32)) :
  (va_quickCode unit (va_code_Gctr_blocks128_1way_body0 alg)) =
  (qblock va_mods (fun (va_s:va_state) -> let (va_old_s:va_state) = va_s in let (in_b:buffer128) =
    va_in_in_b in let (key:(seq nat32)) = va_in_key in let (keys_b:buffer128) = va_in_keys_b in let
    (old_icb:quad32) = va_in_old_icb in let (old_plain:(seq quad32)) = va_in_old_plain in let
    (out_b:buffer128) = va_in_out_b in let (round_keys:(seq quad32)) = va_in_round_keys in va_QBind
    va_range1
    "***** PRECONDITION NOT MET AT line 257 column 16 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Mod_cr0 ()) (fun (va_s:va_state) _ -> va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 259 column 33 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Gctr_blocks128_body_1way alg in_b out_b (va_get_reg 8 va_s) old_icb key round_keys
    keys_b old_plain) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 261 column 15 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_AddImm (va_op_reg_opr_reg 8) (va_op_reg_opr_reg 8) 1) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 262 column 15 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_AddImm (va_op_reg_opr_reg 9) (va_op_reg_opr_reg 9) 16) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 263 column 16 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vadduwm (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 3)) (va_QEmpty
    (()))))))))


val va_lemma_Gctr_blocks128_1way_body0 : va_b0:va_code -> va_s0:va_state -> va_old:va_state ->
  alg:algorithm -> va_in_in_b:buffer128 -> va_in_key:(seq nat32) -> va_in_keys_b:buffer128 ->
  va_in_old_icb:quad32 -> va_in_old_plain:(seq quad32) -> va_in_out_b:buffer128 ->
  va_in_round_keys:(seq quad32)
  -> Ghost (va_state & va_fuel)
  (requires (va_require_total va_b0 (va_code_Gctr_blocks128_1way_body0 alg) va_s0 /\ va_get_ok
    va_s0 /\ (0 <= va_get_reg 8 va_s0 /\ va_get_reg 8 va_s0 <= va_get_reg 26 va_s0) /\ va_get_reg 9
    va_s0 == 16 `op_Multiply` va_get_reg 8 va_s0 /\ va_get_vec 7 va_s0 ==
    Vale.AES.GCTR_BE.inc32lite va_in_old_icb (va_get_reg 6 va_s0 + va_get_reg 8 va_s0) /\
    (Vale.PPC64LE.Decls.buffers_disjoint128 va_in_in_b va_in_out_b \/ va_in_in_b == va_in_out_b) /\
    Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 3 va_s0)
    va_in_in_b (va_get_reg 6 va_s0) (va_get_reg 26 va_s0) (va_get_mem_layout va_s0) Secret /\
    Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 7 va_s0)
    va_in_out_b (va_get_reg 6 va_s0) (va_get_reg 26 va_s0) (va_get_mem_layout va_s0) Secret /\
    va_get_reg 3 va_s0 + 16 `op_Multiply` va_get_reg 26 va_s0 < pow2_64 /\ va_get_reg 7 va_s0 + 16
    `op_Multiply` va_get_reg 26 va_s0 < pow2_64 /\ Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b == Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_out_b /\ (va_get_reg 8 va_s0 =!= va_get_reg 26 va_s0 ==>
    Vale.AES.GCTR_BE.partial_seq_agreement va_in_old_plain
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0)
    va_in_in_b)) (va_get_reg 6 va_s0 + va_get_reg 8 va_s0) (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b)) /\ va_get_reg 6 va_s0 + va_get_reg 26 va_s0 <
    pow2_32 /\ aes_reqs alg va_in_key va_in_round_keys va_in_keys_b (va_get_reg 4 va_s0)
    (va_get_mem_heaplet 0 va_s0) (va_get_mem_layout va_s0) /\ va_get_vec 3 va_s0 ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 1 0 0 0 /\
    Vale.PPC64LE.Decls.modifies_buffer128 va_in_out_b (va_get_mem_heaplet 1 va_old)
    (va_get_mem_heaplet 1 va_s0) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 6 va_s0 +
    va_get_reg 8 va_s0) va_in_old_plain (Vale.Arch.Types.reverse_bytes_quad32_seq
    (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0) va_in_out_b)) va_in_key va_in_old_icb /\
    (va_get_reg 6 va_s0 + va_get_reg 26 va_s0 == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet
    1 va_s0) va_in_out_b == Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_old) va_in_out_b) /\
    va_get_reg 8 va_s0 =!= va_get_reg 26 va_s0))
  (ensures (fun (va_sM, va_fM) -> va_ensure_total va_b0 va_s0 va_sM va_fM /\ va_get_ok va_sM /\ (0
    <= va_get_reg 8 va_sM /\ va_get_reg 8 va_sM <= va_get_reg 26 va_sM) /\ va_get_reg 9 va_sM == 16
    `op_Multiply` va_get_reg 8 va_sM /\ va_get_vec 7 va_sM == Vale.AES.GCTR_BE.inc32lite
    va_in_old_icb (va_get_reg 6 va_sM + va_get_reg 8 va_sM) /\
    (Vale.PPC64LE.Decls.buffers_disjoint128 va_in_in_b va_in_out_b \/ va_in_in_b == va_in_out_b) /\
    Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_sM) (va_get_reg 3 va_sM)
    va_in_in_b (va_get_reg 6 va_sM) (va_get_reg 26 va_sM) (va_get_mem_layout va_sM) Secret /\
    Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_sM) (va_get_reg 7 va_sM)
    va_in_out_b (va_get_reg 6 va_sM) (va_get_reg 26 va_sM) (va_get_mem_layout va_sM) Secret /\
    va_get_reg 3 va_sM + 16 `op_Multiply` va_get_reg 26 va_sM < pow2_64 /\ va_get_reg 7 va_sM + 16
    `op_Multiply` va_get_reg 26 va_sM < pow2_64 /\ Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b == Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_out_b /\ (va_get_reg 8 va_sM =!= va_get_reg 26 va_sM ==>
    Vale.AES.GCTR_BE.partial_seq_agreement va_in_old_plain
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    va_in_in_b)) (va_get_reg 6 va_sM + va_get_reg 8 va_sM) (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b)) /\ va_get_reg 6 va_sM + va_get_reg 26 va_sM <
    pow2_32 /\ aes_reqs alg va_in_key va_in_round_keys va_in_keys_b (va_get_reg 4 va_sM)
    (va_get_mem_heaplet 0 va_sM) (va_get_mem_layout va_sM) /\ va_get_vec 3 va_sM ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 1 0 0 0 /\
    Vale.PPC64LE.Decls.modifies_buffer128 va_in_out_b (va_get_mem_heaplet 1 va_old)
    (va_get_mem_heaplet 1 va_sM) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 6 va_sM +
    va_get_reg 8 va_sM) va_in_old_plain (Vale.Arch.Types.reverse_bytes_quad32_seq
    (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) va_in_out_b)) va_in_key va_in_old_icb /\
    (va_get_reg 6 va_sM + va_get_reg 26 va_sM == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet
    1 va_sM) va_in_out_b == Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_old) va_in_out_b) /\
    precedes_wrap (va_get_reg 26 va_sM - va_get_reg 8 va_sM) (va_get_reg 26 va_s0 - va_get_reg 8
    va_s0) /\ va_state_eq va_sM (va_update_vec 7 va_sM (va_update_vec 2 va_sM (va_update_vec 0
    va_sM (va_update_reg 9 va_sM (va_update_reg 8 va_sM (va_update_reg 10 va_sM (va_update_ok va_sM
    (va_update_mem va_sM (va_update_mem_heaplet 1 va_sM (va_update_cr0 va_sM va_s0))))))))))))
[@"opaque_to_smt"]
let va_lemma_Gctr_blocks128_1way_body0 va_b0 va_s0 va_old alg va_in_in_b va_in_key va_in_keys_b
  va_in_old_icb va_in_old_plain va_in_out_b va_in_round_keys =
  let va_old = va_expand_state va_old in
  let (va_mods:va_mods_t) = [va_Mod_vec 7; va_Mod_vec 2; va_Mod_vec 0; va_Mod_reg 9; va_Mod_reg 8;
    va_Mod_reg 10; va_Mod_ok; va_Mod_mem; va_Mod_mem_heaplet 1; va_Mod_cr0] in
  let va_qc = va_qcode_Gctr_blocks128_1way_body0 va_mods va_old alg va_in_in_b va_in_key
    va_in_keys_b va_in_old_icb va_in_old_plain va_in_out_b va_in_round_keys in
  let (va_sM, va_fM, va_g) = va_wp_sound_code_norm (va_code_Gctr_blocks128_1way_body0 alg) va_qc
    va_s0 (fun va_s0 va_sM va_g -> let () = va_g in label va_range1
    "***** POSTCONDITION NOT MET AT line 171 column 1 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_ok va_sM) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 229 column 28 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (0 <= va_get_reg 8 va_sM /\ va_get_reg 8 va_sM <= va_get_reg 26 va_sM) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 230 column 34 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 9 va_sM == 16 `op_Multiply` va_get_reg 8 va_sM) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 231 column 55 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 7 va_sM == Vale.AES.GCTR_BE.inc32lite va_in_old_icb (va_get_reg 6 va_sM +
    va_get_reg 8 va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 235 column 62 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.buffers_disjoint128 va_in_in_b va_in_out_b \/ va_in_in_b == va_in_out_b) /\
    label va_range1
    "***** POSTCONDITION NOT MET AT line 236 column 93 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_sM) (va_get_reg 3 va_sM)
    va_in_in_b (va_get_reg 6 va_sM) (va_get_reg 26 va_sM) (va_get_mem_layout va_sM) Secret) /\
    label va_range1
    "***** POSTCONDITION NOT MET AT line 237 column 93 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_sM) (va_get_reg 7 va_sM)
    va_in_out_b (va_get_reg 6 va_sM) (va_get_reg 26 va_sM) (va_get_mem_layout va_sM) Secret) /\
    label va_range1
    "***** POSTCONDITION NOT MET AT line 238 column 41 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 3 va_sM + 16 `op_Multiply` va_get_reg 26 va_sM < pow2_64) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 239 column 41 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 7 va_sM + 16 `op_Multiply` va_get_reg 26 va_sM < pow2_64) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 240 column 56 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 va_in_in_b ==
    Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 va_in_out_b) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 241 column 143 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 8 va_sM =!= va_get_reg 26 va_sM ==> Vale.AES.GCTR_BE.partial_seq_agreement
    va_in_old_plain (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128
    (va_get_mem_heaplet 1 va_sM) va_in_in_b)) (va_get_reg 6 va_sM + va_get_reg 8 va_sM)
    (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 va_in_in_b)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 242 column 38 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 6 va_sM + va_get_reg 26 va_sM < pow2_32) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 245 column 79 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (aes_reqs alg va_in_key va_in_round_keys va_in_keys_b (va_get_reg 4 va_sM) (va_get_mem_heaplet
    0 va_sM) (va_get_mem_layout va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 248 column 38 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 3 va_sM == Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 1 0 0 0) /\ label
    va_range1
    "***** POSTCONDITION NOT MET AT line 251 column 57 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.modifies_buffer128 va_in_out_b (va_get_mem_heaplet 1 va_old)
    (va_get_mem_heaplet 1 va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 252 column 122 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 6 va_sM + va_get_reg 8 va_sM)
    va_in_old_plain (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128
    (va_get_mem_heaplet 1 va_sM) va_in_out_b)) va_in_key va_in_old_icb) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 253 column 83 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 6 va_sM + va_get_reg 26 va_sM == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet
    1 va_sM) va_in_out_b == Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_old) va_in_out_b) /\
    label va_range1
    "***** POSTCONDITION NOT MET AT line 254 column 9 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (precedes_wrap (va_get_reg 26 va_sM - va_get_reg 8 va_sM) (va_get_reg 26 va_s0 - va_get_reg 8
    va_s0))) in
  assert_norm (va_qc.mods == va_mods);
  va_lemma_norm_mods ([va_Mod_vec 7; va_Mod_vec 2; va_Mod_vec 0; va_Mod_reg 9; va_Mod_reg 8;
    va_Mod_reg 10; va_Mod_ok; va_Mod_mem; va_Mod_mem_heaplet 1; va_Mod_cr0]) va_sM va_s0;
  (va_sM, va_fM)

[@ va_qattr]
let va_wp_Gctr_blocks128_1way_body0 (va_old:va_state) (alg:algorithm) (va_in_in_b:buffer128)
  (va_in_key:(seq nat32)) (va_in_keys_b:buffer128) (va_in_old_icb:quad32) (va_in_old_plain:(seq
  quad32)) (va_in_out_b:buffer128) (va_in_round_keys:(seq quad32)) (va_s0:va_state) (va_k:(va_state
  -> unit -> Type0)) : Type0 =
  (va_get_ok va_s0 /\ (0 <= va_get_reg 8 va_s0 /\ va_get_reg 8 va_s0 <= va_get_reg 26 va_s0) /\
    va_get_reg 9 va_s0 == 16 `op_Multiply` va_get_reg 8 va_s0 /\ va_get_vec 7 va_s0 ==
    Vale.AES.GCTR_BE.inc32lite va_in_old_icb (va_get_reg 6 va_s0 + va_get_reg 8 va_s0) /\
    (Vale.PPC64LE.Decls.buffers_disjoint128 va_in_in_b va_in_out_b \/ va_in_in_b == va_in_out_b) /\
    Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 3 va_s0)
    va_in_in_b (va_get_reg 6 va_s0) (va_get_reg 26 va_s0) (va_get_mem_layout va_s0) Secret /\
    Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 7 va_s0)
    va_in_out_b (va_get_reg 6 va_s0) (va_get_reg 26 va_s0) (va_get_mem_layout va_s0) Secret /\
    va_get_reg 3 va_s0 + 16 `op_Multiply` va_get_reg 26 va_s0 < pow2_64 /\ va_get_reg 7 va_s0 + 16
    `op_Multiply` va_get_reg 26 va_s0 < pow2_64 /\ Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b == Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_out_b /\ (va_get_reg 8 va_s0 =!= va_get_reg 26 va_s0 ==>
    Vale.AES.GCTR_BE.partial_seq_agreement va_in_old_plain
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0)
    va_in_in_b)) (va_get_reg 6 va_s0 + va_get_reg 8 va_s0) (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b)) /\ va_get_reg 6 va_s0 + va_get_reg 26 va_s0 <
    pow2_32 /\ aes_reqs alg va_in_key va_in_round_keys va_in_keys_b (va_get_reg 4 va_s0)
    (va_get_mem_heaplet 0 va_s0) (va_get_mem_layout va_s0) /\ va_get_vec 3 va_s0 ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 1 0 0 0 /\
    Vale.PPC64LE.Decls.modifies_buffer128 va_in_out_b (va_get_mem_heaplet 1 va_old)
    (va_get_mem_heaplet 1 va_s0) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 6 va_s0 +
    va_get_reg 8 va_s0) va_in_old_plain (Vale.Arch.Types.reverse_bytes_quad32_seq
    (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0) va_in_out_b)) va_in_key va_in_old_icb /\
    (va_get_reg 6 va_s0 + va_get_reg 26 va_s0 == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet
    1 va_s0) va_in_out_b == Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_old) va_in_out_b) /\
    va_get_reg 8 va_s0 =!= va_get_reg 26 va_s0 /\ (forall (va_x_cr0:cr0_t) (va_x_heap1:vale_heap)
    (va_x_mem:vale_heap) (va_x_ok:bool) (va_x_r10:nat64) (va_x_r8:nat64) (va_x_r9:nat64)
    (va_x_v0:quad32) (va_x_v2:quad32) (va_x_v7:quad32) . let va_sM = va_upd_vec 7 va_x_v7
    (va_upd_vec 2 va_x_v2 (va_upd_vec 0 va_x_v0 (va_upd_reg 9 va_x_r9 (va_upd_reg 8 va_x_r8
    (va_upd_reg 10 va_x_r10 (va_upd_ok va_x_ok (va_upd_mem va_x_mem (va_upd_mem_heaplet 1
    va_x_heap1 (va_upd_cr0 va_x_cr0 va_s0))))))))) in va_get_ok va_sM /\ (0 <= va_get_reg 8 va_sM
    /\ va_get_reg 8 va_sM <= va_get_reg 26 va_sM) /\ va_get_reg 9 va_sM == 16 `op_Multiply`
    va_get_reg 8 va_sM /\ va_get_vec 7 va_sM == Vale.AES.GCTR_BE.inc32lite va_in_old_icb
    (va_get_reg 6 va_sM + va_get_reg 8 va_sM) /\ (Vale.PPC64LE.Decls.buffers_disjoint128 va_in_in_b
    va_in_out_b \/ va_in_in_b == va_in_out_b) /\ Vale.PPC64LE.Decls.validSrcAddrsOffset128
    (va_get_mem_heaplet 1 va_sM) (va_get_reg 3 va_sM) va_in_in_b (va_get_reg 6 va_sM) (va_get_reg
    26 va_sM) (va_get_mem_layout va_sM) Secret /\ Vale.PPC64LE.Decls.validDstAddrsOffset128
    (va_get_mem_heaplet 1 va_sM) (va_get_reg 7 va_sM) va_in_out_b (va_get_reg 6 va_sM) (va_get_reg
    26 va_sM) (va_get_mem_layout va_sM) Secret /\ va_get_reg 3 va_sM + 16 `op_Multiply` va_get_reg
    26 va_sM < pow2_64 /\ va_get_reg 7 va_sM + 16 `op_Multiply` va_get_reg 26 va_sM < pow2_64 /\
    Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 va_in_in_b ==
    Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 va_in_out_b /\ (va_get_reg 8
    va_sM =!= va_get_reg 26 va_sM ==> Vale.AES.GCTR_BE.partial_seq_agreement va_in_old_plain
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    va_in_in_b)) (va_get_reg 6 va_sM + va_get_reg 8 va_sM) (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b)) /\ va_get_reg 6 va_sM + va_get_reg 26 va_sM <
    pow2_32 /\ aes_reqs alg va_in_key va_in_round_keys va_in_keys_b (va_get_reg 4 va_sM)
    (va_get_mem_heaplet 0 va_sM) (va_get_mem_layout va_sM) /\ va_get_vec 3 va_sM ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 1 0 0 0 /\
    Vale.PPC64LE.Decls.modifies_buffer128 va_in_out_b (va_get_mem_heaplet 1 va_old)
    (va_get_mem_heaplet 1 va_sM) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 6 va_sM +
    va_get_reg 8 va_sM) va_in_old_plain (Vale.Arch.Types.reverse_bytes_quad32_seq
    (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) va_in_out_b)) va_in_key va_in_old_icb /\
    (va_get_reg 6 va_sM + va_get_reg 26 va_sM == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet
    1 va_sM) va_in_out_b == Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_old) va_in_out_b) /\
    precedes_wrap (va_get_reg 26 va_sM - va_get_reg 8 va_sM) (va_get_reg 26 va_s0 - va_get_reg 8
    va_s0) ==> va_k va_sM (())))


val va_wpProof_Gctr_blocks128_1way_body0 : va_old:va_state -> alg:algorithm -> va_in_in_b:buffer128
  -> va_in_key:(seq nat32) -> va_in_keys_b:buffer128 -> va_in_old_icb:quad32 ->
  va_in_old_plain:(seq quad32) -> va_in_out_b:buffer128 -> va_in_round_keys:(seq 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_Gctr_blocks128_1way_body0 va_old alg va_in_in_b va_in_key
    va_in_keys_b va_in_old_icb va_in_old_plain va_in_out_b va_in_round_keys va_s0 va_k))
  (ensures (fun (va_sM, va_f0, va_g) -> va_t_ensure (va_code_Gctr_blocks128_1way_body0 alg)
    ([va_Mod_vec 7; va_Mod_vec 2; va_Mod_vec 0; va_Mod_reg 9; va_Mod_reg 8; va_Mod_reg 10;
    va_Mod_ok; va_Mod_mem; va_Mod_mem_heaplet 1; va_Mod_cr0]) va_s0 va_k ((va_sM, va_f0, va_g))))
[@"opaque_to_smt"]
let va_wpProof_Gctr_blocks128_1way_body0 va_old alg va_in_in_b va_in_key va_in_keys_b va_in_old_icb
  va_in_old_plain va_in_out_b va_in_round_keys va_s0 va_k =
  let (va_sM, va_f0) = va_lemma_Gctr_blocks128_1way_body0 (va_code_Gctr_blocks128_1way_body0 alg)
    va_s0 va_old alg va_in_in_b va_in_key va_in_keys_b va_in_old_icb va_in_old_plain va_in_out_b
    va_in_round_keys in
  va_lemma_upd_update va_sM;
  assert (va_state_eq va_sM (va_update_vec 7 va_sM (va_update_vec 2 va_sM (va_update_vec 0 va_sM
    (va_update_reg 9 va_sM (va_update_reg 8 va_sM (va_update_reg 10 va_sM (va_update_ok va_sM
    (va_update_mem va_sM (va_update_mem_heaplet 1 va_sM (va_update_cr0 va_sM va_s0)))))))))));
  va_lemma_norm_mods ([va_Mod_vec 7; va_Mod_vec 2; va_Mod_vec 0; va_Mod_reg 9; va_Mod_reg 8;
    va_Mod_reg 10; va_Mod_ok; va_Mod_mem; va_Mod_mem_heaplet 1; va_Mod_cr0]) va_sM va_s0;
  let va_g = () in
  (va_sM, va_f0, va_g)

[@ "opaque_to_smt" va_qattr]
let va_quick_Gctr_blocks128_1way_body0 (va_old:va_state) (alg:algorithm) (va_in_in_b:buffer128)
  (va_in_key:(seq nat32)) (va_in_keys_b:buffer128) (va_in_old_icb:quad32) (va_in_old_plain:(seq
  quad32)) (va_in_out_b:buffer128) (va_in_round_keys:(seq quad32)) : (va_quickCode unit
  (va_code_Gctr_blocks128_1way_body0 alg)) =
  (va_QProc (va_code_Gctr_blocks128_1way_body0 alg) ([va_Mod_vec 7; va_Mod_vec 2; va_Mod_vec 0;
    va_Mod_reg 9; va_Mod_reg 8; va_Mod_reg 10; va_Mod_ok; va_Mod_mem; va_Mod_mem_heaplet 1;
    va_Mod_cr0]) (va_wp_Gctr_blocks128_1way_body0 va_old alg va_in_in_b va_in_key va_in_keys_b
    va_in_old_icb va_in_old_plain va_in_out_b va_in_round_keys)
    (va_wpProof_Gctr_blocks128_1way_body0 va_old alg va_in_in_b va_in_key va_in_keys_b
    va_in_old_icb va_in_old_plain va_in_out_b va_in_round_keys))
#pop-options
//--
//-- Gctr_blocks128_1way_while0
#push-options "--z3rlimit 30"

val va_code_Gctr_blocks128_1way_while0 : alg:algorithm -> Tot va_code
[@ "opaque_to_smt" va_qattr]
let va_code_Gctr_blocks128_1way_while0 alg =
  (va_Block (va_CCons (va_While (va_cmp_ne (va_op_cmp_reg 8) (va_op_cmp_reg 26)) (va_Block
    (va_CCons (va_code_Gctr_blocks128_1way_body0 alg) (va_CNil ())))) (va_CNil ())))

val va_codegen_success_Gctr_blocks128_1way_while0 : alg:algorithm -> Tot va_pbool
[@ "opaque_to_smt" va_qattr]
let va_codegen_success_Gctr_blocks128_1way_while0 alg =
  (va_pbool_and (va_codegen_success_Gctr_blocks128_1way_body0 alg) (va_ttrue ()))

[@ "opaque_to_smt" va_qattr]
let va_qcode_Gctr_blocks128_1way_while0 (va_mods:va_mods_t) (va_old:va_state) (alg:algorithm)
  (va_in_in_b:buffer128) (va_in_key:(seq nat32)) (va_in_keys_b:buffer128) (va_in_old_icb:quad32)
  (va_in_old_plain:(seq quad32)) (va_in_out_b:buffer128) (va_in_round_keys:(seq quad32)) :
  (va_quickCode unit (va_code_Gctr_blocks128_1way_while0 alg)) =
  (qblock va_mods (fun (va_s:va_state) -> let (va_old_s:va_state) = va_s in let (in_b:buffer128) =
    va_in_in_b in let (key:(seq nat32)) = va_in_key in let (keys_b:buffer128) = va_in_keys_b in let
    (old_icb:quad32) = va_in_old_icb in let (old_plain:(seq quad32)) = va_in_old_plain in let
    (out_b:buffer128) = va_in_out_b in let (round_keys:(seq quad32)) = va_in_round_keys in va_QBind
    va_range1
    "***** PRECONDITION NOT MET AT line 171 column 1 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_qWhile va_mods (Cmp_ne (va_op_cmp_reg 8) (va_op_cmp_reg 26)) (fun va_g -> qblock va_mods
    (fun (va_s:va_state) -> va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 171 column 1 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Gctr_blocks128_1way_body0 va_old alg in_b key keys_b old_icb old_plain out_b
    round_keys) (va_QEmpty (())))) (fun (va_s:va_state) va_g -> va_get_ok va_s /\ (0 <= va_get_reg
    8 va_s /\ va_get_reg 8 va_s <= va_get_reg 26 va_s) /\ va_get_reg 9 va_s == 16 `op_Multiply`
    va_get_reg 8 va_s /\ va_get_vec 7 va_s == Vale.AES.GCTR_BE.inc32lite old_icb (va_get_reg 6 va_s
    + va_get_reg 8 va_s) /\ (Vale.PPC64LE.Decls.buffers_disjoint128 in_b out_b \/ in_b == out_b) /\
    Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_s) (va_get_reg 3 va_s) in_b
    (va_get_reg 6 va_s) (va_get_reg 26 va_s) (va_get_mem_layout va_s) Secret /\
    Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_s) (va_get_reg 7 va_s) out_b
    (va_get_reg 6 va_s) (va_get_reg 26 va_s) (va_get_mem_layout va_s) Secret /\ va_get_reg 3 va_s +
    16 `op_Multiply` va_get_reg 26 va_s < pow2_64 /\ va_get_reg 7 va_s + 16 `op_Multiply`
    va_get_reg 26 va_s < pow2_64 /\ Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128
    in_b == Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 out_b /\ (va_get_reg 8
    va_s =!= va_get_reg 26 va_s ==> Vale.AES.GCTR_BE.partial_seq_agreement old_plain
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s)
    in_b)) (va_get_reg 6 va_s + va_get_reg 8 va_s) (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 in_b)) /\ va_get_reg 6 va_s + va_get_reg 26 va_s < pow2_32 /\
    aes_reqs alg key round_keys keys_b (va_get_reg 4 va_s) (va_get_mem_heaplet 0 va_s)
    (va_get_mem_layout va_s) /\ va_get_vec 3 va_s == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 1 0 0 0 /\ Vale.PPC64LE.Decls.modifies_buffer128 out_b
    (va_get_mem_heaplet 1 va_old) (va_get_mem_heaplet 1 va_s) /\ Vale.AES.GCTR_BE.gctr_partial_def
    alg (va_get_reg 6 va_s + va_get_reg 8 va_s) old_plain (Vale.Arch.Types.reverse_bytes_quad32_seq
    (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s) out_b)) key old_icb /\ (va_get_reg 6 va_s
    + va_get_reg 26 va_s == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s) out_b ==
    Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_old) out_b)) (fun (va_s:va_state) va_g ->
    va_get_reg 26 va_s - va_get_reg 8 va_s) (())) (fun (va_s:va_state) va_g -> let va_g = () in
    va_QEmpty (()))))


val va_lemma_Gctr_blocks128_1way_while0 : va_b0:va_code -> va_s0:va_state -> va_old:va_state ->
  alg:algorithm -> va_in_in_b:buffer128 -> va_in_key:(seq nat32) -> va_in_keys_b:buffer128 ->
  va_in_old_icb:quad32 -> va_in_old_plain:(seq quad32) -> va_in_out_b:buffer128 ->
  va_in_round_keys:(seq quad32)
  -> Ghost (va_state & va_fuel)
  (requires (va_require_total va_b0 (va_code_Gctr_blocks128_1way_while0 alg) va_s0 /\ va_get_ok
    va_s0 /\ (0 <= va_get_reg 8 va_s0 /\ va_get_reg 8 va_s0 <= va_get_reg 26 va_s0) /\ va_get_reg 9
    va_s0 == 16 `op_Multiply` va_get_reg 8 va_s0 /\ va_get_vec 7 va_s0 ==
    Vale.AES.GCTR_BE.inc32lite va_in_old_icb (va_get_reg 6 va_s0 + va_get_reg 8 va_s0) /\
    (Vale.PPC64LE.Decls.buffers_disjoint128 va_in_in_b va_in_out_b \/ va_in_in_b == va_in_out_b) /\
    Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 3 va_s0)
    va_in_in_b (va_get_reg 6 va_s0) (va_get_reg 26 va_s0) (va_get_mem_layout va_s0) Secret /\
    Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 7 va_s0)
    va_in_out_b (va_get_reg 6 va_s0) (va_get_reg 26 va_s0) (va_get_mem_layout va_s0) Secret /\
    va_get_reg 3 va_s0 + 16 `op_Multiply` va_get_reg 26 va_s0 < pow2_64 /\ va_get_reg 7 va_s0 + 16
    `op_Multiply` va_get_reg 26 va_s0 < pow2_64 /\ Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b == Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_out_b /\ (va_get_reg 8 va_s0 =!= va_get_reg 26 va_s0 ==>
    Vale.AES.GCTR_BE.partial_seq_agreement va_in_old_plain
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0)
    va_in_in_b)) (va_get_reg 6 va_s0 + va_get_reg 8 va_s0) (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b)) /\ va_get_reg 6 va_s0 + va_get_reg 26 va_s0 <
    pow2_32 /\ aes_reqs alg va_in_key va_in_round_keys va_in_keys_b (va_get_reg 4 va_s0)
    (va_get_mem_heaplet 0 va_s0) (va_get_mem_layout va_s0) /\ va_get_vec 3 va_s0 ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 1 0 0 0 /\
    Vale.PPC64LE.Decls.modifies_buffer128 va_in_out_b (va_get_mem_heaplet 1 va_old)
    (va_get_mem_heaplet 1 va_s0) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 6 va_s0 +
    va_get_reg 8 va_s0) va_in_old_plain (Vale.Arch.Types.reverse_bytes_quad32_seq
    (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0) va_in_out_b)) va_in_key va_in_old_icb /\
    (va_get_reg 6 va_s0 + va_get_reg 26 va_s0 == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet
    1 va_s0) va_in_out_b == Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_old) va_in_out_b)))
  (ensures (fun (va_sM, va_fM) -> va_ensure_total va_b0 va_s0 va_sM va_fM /\ va_get_ok va_sM /\ (0
    <= va_get_reg 8 va_sM /\ va_get_reg 8 va_sM <= va_get_reg 26 va_sM) /\ va_get_reg 9 va_sM == 16
    `op_Multiply` va_get_reg 8 va_sM /\ va_get_vec 7 va_sM == Vale.AES.GCTR_BE.inc32lite
    va_in_old_icb (va_get_reg 6 va_sM + va_get_reg 8 va_sM) /\
    (Vale.PPC64LE.Decls.buffers_disjoint128 va_in_in_b va_in_out_b \/ va_in_in_b == va_in_out_b) /\
    Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_sM) (va_get_reg 3 va_sM)
    va_in_in_b (va_get_reg 6 va_sM) (va_get_reg 26 va_sM) (va_get_mem_layout va_sM) Secret /\
    Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_sM) (va_get_reg 7 va_sM)
    va_in_out_b (va_get_reg 6 va_sM) (va_get_reg 26 va_sM) (va_get_mem_layout va_sM) Secret /\
    va_get_reg 3 va_sM + 16 `op_Multiply` va_get_reg 26 va_sM < pow2_64 /\ va_get_reg 7 va_sM + 16
    `op_Multiply` va_get_reg 26 va_sM < pow2_64 /\ Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b == Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_out_b /\ (va_get_reg 8 va_sM =!= va_get_reg 26 va_sM ==>
    Vale.AES.GCTR_BE.partial_seq_agreement va_in_old_plain
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    va_in_in_b)) (va_get_reg 6 va_sM + va_get_reg 8 va_sM) (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b)) /\ va_get_reg 6 va_sM + va_get_reg 26 va_sM <
    pow2_32 /\ aes_reqs alg va_in_key va_in_round_keys va_in_keys_b (va_get_reg 4 va_sM)
    (va_get_mem_heaplet 0 va_sM) (va_get_mem_layout va_sM) /\ va_get_vec 3 va_sM ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 1 0 0 0 /\
    Vale.PPC64LE.Decls.modifies_buffer128 va_in_out_b (va_get_mem_heaplet 1 va_old)
    (va_get_mem_heaplet 1 va_sM) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 6 va_sM +
    va_get_reg 8 va_sM) va_in_old_plain (Vale.Arch.Types.reverse_bytes_quad32_seq
    (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) va_in_out_b)) va_in_key va_in_old_icb /\
    (va_get_reg 6 va_sM + va_get_reg 26 va_sM == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet
    1 va_sM) va_in_out_b == Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_old) va_in_out_b) /\
    ~(va_get_reg 8 va_sM =!= va_get_reg 26 va_sM) /\ va_state_eq va_sM (va_update_vec 7 va_sM
    (va_update_vec 2 va_sM (va_update_vec 0 va_sM (va_update_reg 9 va_sM (va_update_reg 8 va_sM
    (va_update_reg 10 va_sM (va_update_ok va_sM (va_update_mem va_sM (va_update_mem_heaplet 1 va_sM
    (va_update_cr0 va_sM va_s0))))))))))))
[@"opaque_to_smt"]
let va_lemma_Gctr_blocks128_1way_while0 va_b0 va_s0 va_old alg va_in_in_b va_in_key va_in_keys_b
  va_in_old_icb va_in_old_plain va_in_out_b va_in_round_keys =
  let va_old = va_expand_state va_old in
  let (va_mods:va_mods_t) = [va_Mod_vec 7; va_Mod_vec 2; va_Mod_vec 0; va_Mod_reg 9; va_Mod_reg 8;
    va_Mod_reg 10; va_Mod_ok; va_Mod_mem; va_Mod_mem_heaplet 1; va_Mod_cr0] in
  let va_qc = va_qcode_Gctr_blocks128_1way_while0 va_mods va_old alg va_in_in_b va_in_key
    va_in_keys_b va_in_old_icb va_in_old_plain va_in_out_b va_in_round_keys in
  let (va_sM, va_fM, va_g) = va_wp_sound_code_norm (va_code_Gctr_blocks128_1way_while0 alg) va_qc
    va_s0 (fun va_s0 va_sM va_g -> let () = va_g in label va_range1
    "***** POSTCONDITION NOT MET AT line 171 column 1 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_ok va_sM) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 229 column 28 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (0 <= va_get_reg 8 va_sM /\ va_get_reg 8 va_sM <= va_get_reg 26 va_sM) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 230 column 34 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 9 va_sM == 16 `op_Multiply` va_get_reg 8 va_sM) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 231 column 55 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 7 va_sM == Vale.AES.GCTR_BE.inc32lite va_in_old_icb (va_get_reg 6 va_sM +
    va_get_reg 8 va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 235 column 62 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.buffers_disjoint128 va_in_in_b va_in_out_b \/ va_in_in_b == va_in_out_b) /\
    label va_range1
    "***** POSTCONDITION NOT MET AT line 236 column 93 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_sM) (va_get_reg 3 va_sM)
    va_in_in_b (va_get_reg 6 va_sM) (va_get_reg 26 va_sM) (va_get_mem_layout va_sM) Secret) /\
    label va_range1
    "***** POSTCONDITION NOT MET AT line 237 column 93 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_sM) (va_get_reg 7 va_sM)
    va_in_out_b (va_get_reg 6 va_sM) (va_get_reg 26 va_sM) (va_get_mem_layout va_sM) Secret) /\
    label va_range1
    "***** POSTCONDITION NOT MET AT line 238 column 41 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 3 va_sM + 16 `op_Multiply` va_get_reg 26 va_sM < pow2_64) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 239 column 41 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 7 va_sM + 16 `op_Multiply` va_get_reg 26 va_sM < pow2_64) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 240 column 56 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 va_in_in_b ==
    Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 va_in_out_b) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 241 column 143 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 8 va_sM =!= va_get_reg 26 va_sM ==> Vale.AES.GCTR_BE.partial_seq_agreement
    va_in_old_plain (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128
    (va_get_mem_heaplet 1 va_sM) va_in_in_b)) (va_get_reg 6 va_sM + va_get_reg 8 va_sM)
    (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 va_in_in_b)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 242 column 38 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 6 va_sM + va_get_reg 26 va_sM < pow2_32) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 245 column 79 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (aes_reqs alg va_in_key va_in_round_keys va_in_keys_b (va_get_reg 4 va_sM) (va_get_mem_heaplet
    0 va_sM) (va_get_mem_layout va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 248 column 38 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 3 va_sM == Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 1 0 0 0) /\ label
    va_range1
    "***** POSTCONDITION NOT MET AT line 251 column 57 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.modifies_buffer128 va_in_out_b (va_get_mem_heaplet 1 va_old)
    (va_get_mem_heaplet 1 va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 252 column 122 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 6 va_sM + va_get_reg 8 va_sM)
    va_in_old_plain (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128
    (va_get_mem_heaplet 1 va_sM) va_in_out_b)) va_in_key va_in_old_icb) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 253 column 83 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 6 va_sM + va_get_reg 26 va_sM == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet
    1 va_sM) va_in_out_b == Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_old) va_in_out_b) /\
    label va_range1
    "***** POSTCONDITION NOT MET AT line 171 column 1 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (~(va_get_reg 8 va_sM =!= va_get_reg 26 va_sM))) in
  assert_norm (va_qc.mods == va_mods);
  va_lemma_norm_mods ([va_Mod_vec 7; va_Mod_vec 2; va_Mod_vec 0; va_Mod_reg 9; va_Mod_reg 8;
    va_Mod_reg 10; va_Mod_ok; va_Mod_mem; va_Mod_mem_heaplet 1; va_Mod_cr0]) va_sM va_s0;
  (va_sM, va_fM)

[@ va_qattr]
let va_wp_Gctr_blocks128_1way_while0 (va_old:va_state) (alg:algorithm) (va_in_in_b:buffer128)
  (va_in_key:(seq nat32)) (va_in_keys_b:buffer128) (va_in_old_icb:quad32) (va_in_old_plain:(seq
  quad32)) (va_in_out_b:buffer128) (va_in_round_keys:(seq quad32)) (va_s0:va_state) (va_k:(va_state
  -> unit -> Type0)) : Type0 =
  (va_get_ok va_s0 /\ (0 <= va_get_reg 8 va_s0 /\ va_get_reg 8 va_s0 <= va_get_reg 26 va_s0) /\
    va_get_reg 9 va_s0 == 16 `op_Multiply` va_get_reg 8 va_s0 /\ va_get_vec 7 va_s0 ==
    Vale.AES.GCTR_BE.inc32lite va_in_old_icb (va_get_reg 6 va_s0 + va_get_reg 8 va_s0) /\
    (Vale.PPC64LE.Decls.buffers_disjoint128 va_in_in_b va_in_out_b \/ va_in_in_b == va_in_out_b) /\
    Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 3 va_s0)
    va_in_in_b (va_get_reg 6 va_s0) (va_get_reg 26 va_s0) (va_get_mem_layout va_s0) Secret /\
    Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 7 va_s0)
    va_in_out_b (va_get_reg 6 va_s0) (va_get_reg 26 va_s0) (va_get_mem_layout va_s0) Secret /\
    va_get_reg 3 va_s0 + 16 `op_Multiply` va_get_reg 26 va_s0 < pow2_64 /\ va_get_reg 7 va_s0 + 16
    `op_Multiply` va_get_reg 26 va_s0 < pow2_64 /\ Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b == Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_out_b /\ (va_get_reg 8 va_s0 =!= va_get_reg 26 va_s0 ==>
    Vale.AES.GCTR_BE.partial_seq_agreement va_in_old_plain
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0)
    va_in_in_b)) (va_get_reg 6 va_s0 + va_get_reg 8 va_s0) (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b)) /\ va_get_reg 6 va_s0 + va_get_reg 26 va_s0 <
    pow2_32 /\ aes_reqs alg va_in_key va_in_round_keys va_in_keys_b (va_get_reg 4 va_s0)
    (va_get_mem_heaplet 0 va_s0) (va_get_mem_layout va_s0) /\ va_get_vec 3 va_s0 ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 1 0 0 0 /\
    Vale.PPC64LE.Decls.modifies_buffer128 va_in_out_b (va_get_mem_heaplet 1 va_old)
    (va_get_mem_heaplet 1 va_s0) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 6 va_s0 +
    va_get_reg 8 va_s0) va_in_old_plain (Vale.Arch.Types.reverse_bytes_quad32_seq
    (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0) va_in_out_b)) va_in_key va_in_old_icb /\
    (va_get_reg 6 va_s0 + va_get_reg 26 va_s0 == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet
    1 va_s0) va_in_out_b == Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_old) va_in_out_b) /\
    (forall (va_x_cr0:cr0_t) (va_x_heap1:vale_heap) (va_x_mem:vale_heap) (va_x_ok:bool)
    (va_x_r10:nat64) (va_x_r8:nat64) (va_x_r9:nat64) (va_x_v0:quad32) (va_x_v2:quad32)
    (va_x_v7:quad32) . let va_sM = va_upd_vec 7 va_x_v7 (va_upd_vec 2 va_x_v2 (va_upd_vec 0 va_x_v0
    (va_upd_reg 9 va_x_r9 (va_upd_reg 8 va_x_r8 (va_upd_reg 10 va_x_r10 (va_upd_ok va_x_ok
    (va_upd_mem va_x_mem (va_upd_mem_heaplet 1 va_x_heap1 (va_upd_cr0 va_x_cr0 va_s0))))))))) in
    va_get_ok va_sM /\ (0 <= va_get_reg 8 va_sM /\ va_get_reg 8 va_sM <= va_get_reg 26 va_sM) /\
    va_get_reg 9 va_sM == 16 `op_Multiply` va_get_reg 8 va_sM /\ va_get_vec 7 va_sM ==
    Vale.AES.GCTR_BE.inc32lite va_in_old_icb (va_get_reg 6 va_sM + va_get_reg 8 va_sM) /\
    (Vale.PPC64LE.Decls.buffers_disjoint128 va_in_in_b va_in_out_b \/ va_in_in_b == va_in_out_b) /\
    Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_sM) (va_get_reg 3 va_sM)
    va_in_in_b (va_get_reg 6 va_sM) (va_get_reg 26 va_sM) (va_get_mem_layout va_sM) Secret /\
    Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_sM) (va_get_reg 7 va_sM)
    va_in_out_b (va_get_reg 6 va_sM) (va_get_reg 26 va_sM) (va_get_mem_layout va_sM) Secret /\
    va_get_reg 3 va_sM + 16 `op_Multiply` va_get_reg 26 va_sM < pow2_64 /\ va_get_reg 7 va_sM + 16
    `op_Multiply` va_get_reg 26 va_sM < pow2_64 /\ Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b == Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_out_b /\ (va_get_reg 8 va_sM =!= va_get_reg 26 va_sM ==>
    Vale.AES.GCTR_BE.partial_seq_agreement va_in_old_plain
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    va_in_in_b)) (va_get_reg 6 va_sM + va_get_reg 8 va_sM) (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b)) /\ va_get_reg 6 va_sM + va_get_reg 26 va_sM <
    pow2_32 /\ aes_reqs alg va_in_key va_in_round_keys va_in_keys_b (va_get_reg 4 va_sM)
    (va_get_mem_heaplet 0 va_sM) (va_get_mem_layout va_sM) /\ va_get_vec 3 va_sM ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 1 0 0 0 /\
    Vale.PPC64LE.Decls.modifies_buffer128 va_in_out_b (va_get_mem_heaplet 1 va_old)
    (va_get_mem_heaplet 1 va_sM) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 6 va_sM +
    va_get_reg 8 va_sM) va_in_old_plain (Vale.Arch.Types.reverse_bytes_quad32_seq
    (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) va_in_out_b)) va_in_key va_in_old_icb /\
    (va_get_reg 6 va_sM + va_get_reg 26 va_sM == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet
    1 va_sM) va_in_out_b == Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_old) va_in_out_b) /\
    ~(va_get_reg 8 va_sM =!= va_get_reg 26 va_sM) ==> va_k va_sM (())))


val va_wpProof_Gctr_blocks128_1way_while0 : va_old:va_state -> alg:algorithm ->
  va_in_in_b:buffer128 -> va_in_key:(seq nat32) -> va_in_keys_b:buffer128 -> va_in_old_icb:quad32
  -> va_in_old_plain:(seq quad32) -> va_in_out_b:buffer128 -> va_in_round_keys:(seq 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_Gctr_blocks128_1way_while0 va_old alg va_in_in_b va_in_key
    va_in_keys_b va_in_old_icb va_in_old_plain va_in_out_b va_in_round_keys va_s0 va_k))
  (ensures (fun (va_sM, va_f0, va_g) -> va_t_ensure (va_code_Gctr_blocks128_1way_while0 alg)
    ([va_Mod_vec 7; va_Mod_vec 2; va_Mod_vec 0; va_Mod_reg 9; va_Mod_reg 8; va_Mod_reg 10;
    va_Mod_ok; va_Mod_mem; va_Mod_mem_heaplet 1; va_Mod_cr0]) va_s0 va_k ((va_sM, va_f0, va_g))))
[@"opaque_to_smt"]
let va_wpProof_Gctr_blocks128_1way_while0 va_old alg va_in_in_b va_in_key va_in_keys_b
  va_in_old_icb va_in_old_plain va_in_out_b va_in_round_keys va_s0 va_k =
  let (va_sM, va_f0) = va_lemma_Gctr_blocks128_1way_while0 (va_code_Gctr_blocks128_1way_while0 alg)
    va_s0 va_old alg va_in_in_b va_in_key va_in_keys_b va_in_old_icb va_in_old_plain va_in_out_b
    va_in_round_keys in
  va_lemma_upd_update va_sM;
  assert (va_state_eq va_sM (va_update_vec 7 va_sM (va_update_vec 2 va_sM (va_update_vec 0 va_sM
    (va_update_reg 9 va_sM (va_update_reg 8 va_sM (va_update_reg 10 va_sM (va_update_ok va_sM
    (va_update_mem va_sM (va_update_mem_heaplet 1 va_sM (va_update_cr0 va_sM va_s0)))))))))));
  va_lemma_norm_mods ([va_Mod_vec 7; va_Mod_vec 2; va_Mod_vec 0; va_Mod_reg 9; va_Mod_reg 8;
    va_Mod_reg 10; va_Mod_ok; va_Mod_mem; va_Mod_mem_heaplet 1; va_Mod_cr0]) va_sM va_s0;
  let va_g = () in
  (va_sM, va_f0, va_g)

[@ "opaque_to_smt" va_qattr]
let va_quick_Gctr_blocks128_1way_while0 (va_old:va_state) (alg:algorithm) (va_in_in_b:buffer128)
  (va_in_key:(seq nat32)) (va_in_keys_b:buffer128) (va_in_old_icb:quad32) (va_in_old_plain:(seq
  quad32)) (va_in_out_b:buffer128) (va_in_round_keys:(seq quad32)) : (va_quickCode unit
  (va_code_Gctr_blocks128_1way_while0 alg)) =
  (va_QProc (va_code_Gctr_blocks128_1way_while0 alg) ([va_Mod_vec 7; va_Mod_vec 2; va_Mod_vec 0;
    va_Mod_reg 9; va_Mod_reg 8; va_Mod_reg 10; va_Mod_ok; va_Mod_mem; va_Mod_mem_heaplet 1;
    va_Mod_cr0]) (va_wp_Gctr_blocks128_1way_while0 va_old alg va_in_in_b va_in_key va_in_keys_b
    va_in_old_icb va_in_old_plain va_in_out_b va_in_round_keys)
    (va_wpProof_Gctr_blocks128_1way_while0 va_old alg va_in_in_b va_in_key va_in_keys_b
    va_in_old_icb va_in_old_plain va_in_out_b va_in_round_keys))
#pop-options
//--
//-- Gctr_blocks128_1way
#push-options "--z3rlimit 30"

val va_code_Gctr_blocks128_1way : alg:algorithm -> Tot va_code
[@ "opaque_to_smt" va_qattr]
let va_code_Gctr_blocks128_1way alg =
  (va_Block (va_CCons (va_code_Vspltisw (va_op_vec_opr_vec 3) 1) (va_CCons (va_code_Vspltisw
    (va_op_vec_opr_vec 4) 0) (va_CCons (va_code_Vsldoi (va_op_vec_opr_vec 3) (va_op_vec_opr_vec 4)
    (va_op_vec_opr_vec 3) 4) (va_CCons (va_code_LoadImm64 (va_op_reg_opr_reg 8) 0) (va_CCons
    (va_code_LoadImm64 (va_op_reg_opr_reg 9) 0) (va_CCons (va_code_Gctr_blocks128_1way_while0 alg)
    (va_CNil ()))))))))

val va_codegen_success_Gctr_blocks128_1way : alg:algorithm -> Tot va_pbool
[@ "opaque_to_smt" va_qattr]
let va_codegen_success_Gctr_blocks128_1way alg =
  (va_pbool_and (va_codegen_success_Vspltisw (va_op_vec_opr_vec 3) 1) (va_pbool_and
    (va_codegen_success_Vspltisw (va_op_vec_opr_vec 4) 0) (va_pbool_and (va_codegen_success_Vsldoi
    (va_op_vec_opr_vec 3) (va_op_vec_opr_vec 4) (va_op_vec_opr_vec 3) 4) (va_pbool_and
    (va_codegen_success_LoadImm64 (va_op_reg_opr_reg 8) 0) (va_pbool_and
    (va_codegen_success_LoadImm64 (va_op_reg_opr_reg 9) 0) (va_pbool_and
    (va_codegen_success_Gctr_blocks128_1way_while0 alg) (va_ttrue ())))))))

[@ "opaque_to_smt" va_qattr]
let va_qcode_Gctr_blocks128_1way (va_mods:va_mods_t) (alg:algorithm) (in_b:buffer128)
  (out_b:buffer128) (old_icb:quad32) (old_plain:(seq quad32)) (key:(seq nat32)) (round_keys:(seq
  quad32)) (keys_b:buffer128) : (va_quickCode unit (va_code_Gctr_blocks128_1way 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 219 column 13 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vspltisw (va_op_vec_opr_vec 3) 1) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 220 column 13 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vspltisw (va_op_vec_opr_vec 4) 0) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 221 column 11 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vsldoi (va_op_vec_opr_vec 3) (va_op_vec_opr_vec 4) (va_op_vec_opr_vec 3) 4) (va_QSeq
    va_range1
    "***** PRECONDITION NOT MET AT line 223 column 14 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_LoadImm64 (va_op_reg_opr_reg 8) 0) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 224 column 14 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_LoadImm64 (va_op_reg_opr_reg 9) 0) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 226 column 5 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Gctr_blocks128_1way_while0 va_old_s alg in_b key keys_b old_icb old_plain out_b
    round_keys) (va_QEmpty (())))))))))


val va_lemma_Gctr_blocks128_1way : va_b0:va_code -> va_s0:va_state -> alg:algorithm ->
  in_b:buffer128 -> out_b:buffer128 -> old_icb:quad32 -> old_plain:(seq quad32) -> key:(seq nat32)
  -> round_keys:(seq quad32) -> keys_b:buffer128
  -> Ghost (va_state & va_fuel)
  (requires (va_require_total va_b0 (va_code_Gctr_blocks128_1way alg) va_s0 /\ va_get_ok va_s0 /\
    ((Vale.PPC64LE.Decls.buffers_disjoint128 in_b out_b \/ in_b == out_b) /\
    Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 3 va_s0)
    in_b (va_get_reg 6 va_s0) (va_get_reg 26 va_s0) (va_get_mem_layout va_s0) Secret /\
    Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 7 va_s0)
    out_b (va_get_reg 6 va_s0) (va_get_reg 26 va_s0) (va_get_mem_layout va_s0) Secret /\ va_get_reg
    3 va_s0 + 16 `op_Multiply` va_get_reg 26 va_s0 < pow2_64 /\ va_get_reg 7 va_s0 + 16
    `op_Multiply` va_get_reg 26 va_s0 < pow2_64 /\ l_and (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 in_b == Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 out_b) (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 in_b < pow2_32) /\ va_get_reg 6 va_s0 + va_get_reg 26 va_s0 ==
    Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b /\ va_get_reg 6 va_s0 +
    va_get_reg 26 va_s0 < pow2_32 /\ aes_reqs alg key round_keys keys_b (va_get_reg 4 va_s0)
    (va_get_mem_heaplet 0 va_s0) (va_get_mem_layout va_s0) /\
    Vale.AES.GCTR_BE.partial_seq_agreement old_plain (Vale.Arch.Types.reverse_bytes_quad32_seq
    (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0) in_b)) (va_get_reg 6 va_s0)
    (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b) /\ va_get_vec 7 va_s0 ==
    Vale.AES.GCTR_BE.inc32lite old_icb (va_get_reg 6 va_s0) /\ Vale.AES.GCTR_BE.gctr_partial_def
    alg (va_get_reg 6 va_s0) old_plain (Vale.Arch.Types.reverse_bytes_quad32_seq
    (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0) out_b)) key old_icb)))
  (ensures (fun (va_sM, va_fM) -> va_ensure_total va_b0 va_s0 va_sM va_fM /\ va_get_ok va_sM /\
    (Vale.PPC64LE.Decls.modifies_buffer128 out_b (va_get_mem_heaplet 1 va_s0) (va_get_mem_heaplet 1
    va_sM) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 6 va_sM + va_get_reg 26 va_sM)
    old_plain (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128
    (va_get_mem_heaplet 1 va_sM) out_b)) key old_icb /\ va_get_vec 7 va_sM ==
    Vale.AES.GCTR_BE.inc32lite old_icb (va_get_reg 6 va_sM + va_get_reg 26 va_sM) /\ (va_get_reg 6
    va_sM + va_get_reg 26 va_sM == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) out_b
    == Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0) out_b)) /\ va_state_eq va_sM
    (va_update_mem_heaplet 1 va_sM (va_update_cr0 va_sM (va_update_vec 7 va_sM (va_update_vec 4
    va_sM (va_update_vec 3 va_sM (va_update_vec 2 va_sM (va_update_vec 0 va_sM (va_update_reg 10
    va_sM (va_update_reg 9 va_sM (va_update_reg 8 va_sM (va_update_ok va_sM (va_update_mem va_sM
    va_s0))))))))))))))
[@"opaque_to_smt"]
let va_lemma_Gctr_blocks128_1way va_b0 va_s0 alg in_b out_b old_icb old_plain key round_keys keys_b
  =
  let (va_mods:va_mods_t) = [va_Mod_mem_heaplet 1; va_Mod_cr0; va_Mod_vec 7; va_Mod_vec 4;
    va_Mod_vec 3; va_Mod_vec 2; va_Mod_vec 0; va_Mod_reg 10; va_Mod_reg 9; va_Mod_reg 8; va_Mod_ok;
    va_Mod_mem] in
  let va_qc = va_qcode_Gctr_blocks128_1way va_mods alg in_b out_b old_icb old_plain key round_keys
    keys_b in
  let (va_sM, va_fM, va_g) = va_wp_sound_code_norm (va_code_Gctr_blocks128_1way alg) va_qc va_s0
    (fun va_s0 va_sM va_g -> let () = va_g in label va_range1
    "***** POSTCONDITION NOT MET AT line 171 column 1 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_ok va_sM) /\ (label va_range1
    "***** POSTCONDITION NOT MET AT line 212 column 53 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.modifies_buffer128 out_b (va_get_mem_heaplet 1 va_s0) (va_get_mem_heaplet 1
    va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 215 column 118 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 6 va_sM + va_get_reg 26 va_sM) old_plain
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    out_b)) key old_icb) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 216 column 51 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 7 va_sM == Vale.AES.GCTR_BE.inc32lite old_icb (va_get_reg 6 va_sM + va_get_reg 26
    va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 217 column 79 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 6 va_sM + va_get_reg 26 va_sM == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet
    1 va_sM) out_b == Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0) out_b))) in
  assert_norm (va_qc.mods == va_mods);
  va_lemma_norm_mods ([va_Mod_mem_heaplet 1; va_Mod_cr0; va_Mod_vec 7; va_Mod_vec 4; va_Mod_vec 3;
    va_Mod_vec 2; va_Mod_vec 0; va_Mod_reg 10; va_Mod_reg 9; va_Mod_reg 8; va_Mod_ok; va_Mod_mem])
    va_sM va_s0;
  (va_sM, va_fM)

[@ va_qattr]
let va_wp_Gctr_blocks128_1way (alg:algorithm) (in_b:buffer128) (out_b:buffer128) (old_icb:quad32)
  (old_plain:(seq quad32)) (key:(seq nat32)) (round_keys:(seq quad32)) (keys_b:buffer128)
  (va_s0:va_state) (va_k:(va_state -> unit -> Type0)) : Type0 =
  (va_get_ok va_s0 /\ ((Vale.PPC64LE.Decls.buffers_disjoint128 in_b out_b \/ in_b == out_b) /\
    Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 3 va_s0)
    in_b (va_get_reg 6 va_s0) (va_get_reg 26 va_s0) (va_get_mem_layout va_s0) Secret /\
    Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 7 va_s0)
    out_b (va_get_reg 6 va_s0) (va_get_reg 26 va_s0) (va_get_mem_layout va_s0) Secret /\ va_get_reg
    3 va_s0 + 16 `op_Multiply` va_get_reg 26 va_s0 < pow2_64 /\ va_get_reg 7 va_s0 + 16
    `op_Multiply` va_get_reg 26 va_s0 < pow2_64 /\ l_and (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 in_b == Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 out_b) (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 in_b < pow2_32) /\ va_get_reg 6 va_s0 + va_get_reg 26 va_s0 ==
    Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b /\ va_get_reg 6 va_s0 +
    va_get_reg 26 va_s0 < pow2_32 /\ aes_reqs alg key round_keys keys_b (va_get_reg 4 va_s0)
    (va_get_mem_heaplet 0 va_s0) (va_get_mem_layout va_s0) /\
    Vale.AES.GCTR_BE.partial_seq_agreement old_plain (Vale.Arch.Types.reverse_bytes_quad32_seq
    (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0) in_b)) (va_get_reg 6 va_s0)
    (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b) /\ va_get_vec 7 va_s0 ==
    Vale.AES.GCTR_BE.inc32lite old_icb (va_get_reg 6 va_s0) /\ Vale.AES.GCTR_BE.gctr_partial_def
    alg (va_get_reg 6 va_s0) old_plain (Vale.Arch.Types.reverse_bytes_quad32_seq
    (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0) out_b)) key old_icb) /\ (forall
    (va_x_mem:vale_heap) (va_x_r8:nat64) (va_x_r9:nat64) (va_x_r10:nat64) (va_x_v0:quad32)
    (va_x_v2:quad32) (va_x_v3:quad32) (va_x_v4:quad32) (va_x_v7:quad32) (va_x_cr0:cr0_t)
    (va_x_heap1:vale_heap) . let va_sM = va_upd_mem_heaplet 1 va_x_heap1 (va_upd_cr0 va_x_cr0
    (va_upd_vec 7 va_x_v7 (va_upd_vec 4 va_x_v4 (va_upd_vec 3 va_x_v3 (va_upd_vec 2 va_x_v2
    (va_upd_vec 0 va_x_v0 (va_upd_reg 10 va_x_r10 (va_upd_reg 9 va_x_r9 (va_upd_reg 8 va_x_r8
    (va_upd_mem va_x_mem va_s0)))))))))) in va_get_ok va_sM /\
    (Vale.PPC64LE.Decls.modifies_buffer128 out_b (va_get_mem_heaplet 1 va_s0) (va_get_mem_heaplet 1
    va_sM) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 6 va_sM + va_get_reg 26 va_sM)
    old_plain (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128
    (va_get_mem_heaplet 1 va_sM) out_b)) key old_icb /\ va_get_vec 7 va_sM ==
    Vale.AES.GCTR_BE.inc32lite old_icb (va_get_reg 6 va_sM + va_get_reg 26 va_sM) /\ (va_get_reg 6
    va_sM + va_get_reg 26 va_sM == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) out_b
    == Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0) out_b)) ==> va_k va_sM (())))


val va_wpProof_Gctr_blocks128_1way : alg:algorithm -> in_b:buffer128 -> out_b:buffer128 ->
  old_icb:quad32 -> old_plain:(seq quad32) -> key:(seq nat32) -> round_keys:(seq quad32) ->
  keys_b:buffer128 -> va_s0:va_state -> va_k:(va_state -> unit -> Type0)
  -> Ghost (va_state & va_fuel & unit)
  (requires (va_t_require va_s0 /\ va_wp_Gctr_blocks128_1way alg in_b out_b old_icb old_plain key
    round_keys keys_b va_s0 va_k))
  (ensures (fun (va_sM, va_f0, va_g) -> va_t_ensure (va_code_Gctr_blocks128_1way alg)
    ([va_Mod_mem_heaplet 1; va_Mod_cr0; va_Mod_vec 7; va_Mod_vec 4; va_Mod_vec 3; va_Mod_vec 2;
    va_Mod_vec 0; va_Mod_reg 10; va_Mod_reg 9; va_Mod_reg 8; va_Mod_mem]) va_s0 va_k ((va_sM,
    va_f0, va_g))))
[@"opaque_to_smt"]
let va_wpProof_Gctr_blocks128_1way alg in_b out_b old_icb old_plain key round_keys keys_b va_s0
  va_k =
  let (va_sM, va_f0) = va_lemma_Gctr_blocks128_1way (va_code_Gctr_blocks128_1way alg) va_s0 alg
    in_b out_b old_icb old_plain key round_keys keys_b in
  va_lemma_upd_update va_sM;
  assert (va_state_eq va_sM (va_update_mem_heaplet 1 va_sM (va_update_cr0 va_sM (va_update_vec 7
    va_sM (va_update_vec 4 va_sM (va_update_vec 3 va_sM (va_update_vec 2 va_sM (va_update_vec 0
    va_sM (va_update_reg 10 va_sM (va_update_reg 9 va_sM (va_update_reg 8 va_sM (va_update_ok va_sM
    (va_update_mem va_sM va_s0)))))))))))));
  va_lemma_norm_mods ([va_Mod_mem_heaplet 1; va_Mod_cr0; va_Mod_vec 7; va_Mod_vec 4; va_Mod_vec 3;
    va_Mod_vec 2; va_Mod_vec 0; va_Mod_reg 10; va_Mod_reg 9; va_Mod_reg 8; 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_Gctr_blocks128_1way (alg:algorithm) (in_b:buffer128) (out_b:buffer128)
  (old_icb:quad32) (old_plain:(seq quad32)) (key:(seq nat32)) (round_keys:(seq quad32))
  (keys_b:buffer128) : (va_quickCode unit (va_code_Gctr_blocks128_1way alg)) =
  (va_QProc (va_code_Gctr_blocks128_1way alg) ([va_Mod_mem_heaplet 1; va_Mod_cr0; va_Mod_vec 7;
    va_Mod_vec 4; va_Mod_vec 3; va_Mod_vec 2; va_Mod_vec 0; va_Mod_reg 10; va_Mod_reg 9; va_Mod_reg
    8; va_Mod_mem]) (va_wp_Gctr_blocks128_1way alg in_b out_b old_icb old_plain key round_keys
    keys_b) (va_wpProof_Gctr_blocks128_1way alg in_b out_b old_icb old_plain key round_keys keys_b))
#pop-options
//--
//-- Store_3blocks128_1

val va_code_Store_3blocks128_1 : va_dummy:unit -> Tot va_code
[@ "opaque_to_smt" va_qattr]
let va_code_Store_3blocks128_1 () =
  (va_Block (va_CCons (va_code_Store128_byte16_buffer (va_op_heaplet_mem_heaplet 1)
    (va_op_vec_opr_vec 0) (va_op_reg_opr_reg 7) Secret) (va_CCons
    (va_code_Store128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 1)
    (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 27) Secret) (va_CCons
    (va_code_Store128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 2)
    (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 28) Secret) (va_CNil ())))))

val va_codegen_success_Store_3blocks128_1 : va_dummy:unit -> Tot va_pbool
[@ "opaque_to_smt" va_qattr]
let va_codegen_success_Store_3blocks128_1 () =
  (va_pbool_and (va_codegen_success_Store128_byte16_buffer (va_op_heaplet_mem_heaplet 1)
    (va_op_vec_opr_vec 0) (va_op_reg_opr_reg 7) Secret) (va_pbool_and
    (va_codegen_success_Store128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1)
    (va_op_vec_opr_vec 1) (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 27) Secret) (va_pbool_and
    (va_codegen_success_Store128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1)
    (va_op_vec_opr_vec 2) (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 28) Secret) (va_ttrue ()))))

[@ "opaque_to_smt" va_qattr]
let va_qcode_Store_3blocks128_1 (va_mods:va_mods_t) (out_b:buffer128) : (va_quickCode unit
  (va_code_Store_3blocks128_1 ())) =
  (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 287 column 27 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Store128_byte16_buffer (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 0)
    (va_op_reg_opr_reg 7) Secret out_b (va_get_reg 8 va_s)) (fun (va_s:va_state) _ -> va_QBind
    va_range1
    "***** PRECONDITION NOT MET AT line 288 column 33 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Store128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 1)
    (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 27) Secret out_b (va_get_reg 8 va_s + 1)) (fun
    (va_s:va_state) _ -> va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 289 column 33 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Store128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 2)
    (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 28) Secret out_b (va_get_reg 8 va_s + 2)) (va_QEmpty
    (()))))))


val va_lemma_Store_3blocks128_1 : va_b0:va_code -> va_s0:va_state -> out_b:buffer128
  -> Ghost (va_state & va_fuel)
  (requires (va_require_total va_b0 (va_code_Store_3blocks128_1 ()) va_s0 /\ va_get_ok va_s0 /\
    (va_get_reg 8 va_s0 + 5 < va_get_reg 6 va_s0 /\ Vale.PPC64LE.Decls.validDstAddrsOffset128
    (va_get_mem_heaplet 1 va_s0) (va_get_reg 7 va_s0) out_b (va_get_reg 8 va_s0) (va_get_reg 6
    va_s0 - va_get_reg 8 va_s0) (va_get_mem_layout va_s0) Secret /\ va_get_reg 27 va_s0 == 1
    `op_Multiply` 16 /\ va_get_reg 28 va_s0 == 2 `op_Multiply` 16)))
  (ensures (fun (va_sM, va_fM) -> va_ensure_total va_b0 va_s0 va_sM va_fM /\ va_get_ok va_sM /\
    (Vale.PPC64LE.Decls.modifies_buffer_specific128 out_b (va_get_mem_heaplet 1 va_s0)
    (va_get_mem_heaplet 1 va_sM) (va_get_reg 8 va_sM) (va_get_reg 8 va_sM + 2) /\
    Vale.PPC64LE.Decls.buffer128_read out_b (va_get_reg 8 va_sM) (va_get_mem_heaplet 1 va_sM) ==
    Vale.Def.Types_s.reverse_bytes_quad32 (va_get_vec 0 va_sM) /\ Vale.PPC64LE.Decls.buffer128_read
    out_b (va_get_reg 8 va_sM + 1) (va_get_mem_heaplet 1 va_sM) ==
    Vale.Def.Types_s.reverse_bytes_quad32 (va_get_vec 1 va_sM) /\ Vale.PPC64LE.Decls.buffer128_read
    out_b (va_get_reg 8 va_sM + 2) (va_get_mem_heaplet 1 va_sM) ==
    Vale.Def.Types_s.reverse_bytes_quad32 (va_get_vec 2 va_sM)) /\ va_state_eq va_sM
    (va_update_mem_heaplet 1 va_sM (va_update_ok va_sM (va_update_mem va_sM va_s0)))))
[@"opaque_to_smt"]
let va_lemma_Store_3blocks128_1 va_b0 va_s0 out_b =
  let (va_mods:va_mods_t) = [va_Mod_mem_heaplet 1; va_Mod_ok; va_Mod_mem] in
  let va_qc = va_qcode_Store_3blocks128_1 va_mods out_b in
  let (va_sM, va_fM, va_g) = va_wp_sound_code_norm (va_code_Store_3blocks128_1 ()) va_qc va_s0 (fun
    va_s0 va_sM va_g -> let () = va_g in label va_range1
    "***** POSTCONDITION NOT MET AT line 267 column 1 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_ok va_sM) /\ (label va_range1
    "***** POSTCONDITION NOT MET AT line 282 column 76 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.modifies_buffer_specific128 out_b (va_get_mem_heaplet 1 va_s0)
    (va_get_mem_heaplet 1 va_sM) (va_get_reg 8 va_sM) (va_get_reg 8 va_sM + 2)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 283 column 70 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.buffer128_read out_b (va_get_reg 8 va_sM) (va_get_mem_heaplet 1 va_sM) ==
    Vale.Def.Types_s.reverse_bytes_quad32 (va_get_vec 0 va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 284 column 74 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.buffer128_read out_b (va_get_reg 8 va_sM + 1) (va_get_mem_heaplet 1 va_sM)
    == Vale.Def.Types_s.reverse_bytes_quad32 (va_get_vec 1 va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 285 column 74 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.buffer128_read out_b (va_get_reg 8 va_sM + 2) (va_get_mem_heaplet 1 va_sM)
    == Vale.Def.Types_s.reverse_bytes_quad32 (va_get_vec 2 va_sM)))) in
  assert_norm (va_qc.mods == va_mods);
  va_lemma_norm_mods ([va_Mod_mem_heaplet 1; va_Mod_ok; va_Mod_mem]) va_sM va_s0;
  (va_sM, va_fM)

[@ va_qattr]
let va_wp_Store_3blocks128_1 (out_b:buffer128) (va_s0:va_state) (va_k:(va_state -> unit -> Type0))
  : Type0 =
  (va_get_ok va_s0 /\ (va_get_reg 8 va_s0 + 5 < va_get_reg 6 va_s0 /\
    Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 7 va_s0)
    out_b (va_get_reg 8 va_s0) (va_get_reg 6 va_s0 - va_get_reg 8 va_s0) (va_get_mem_layout va_s0)
    Secret /\ va_get_reg 27 va_s0 == 1 `op_Multiply` 16 /\ va_get_reg 28 va_s0 == 2 `op_Multiply`
    16) /\ (forall (va_x_mem:vale_heap) (va_x_heap1:vale_heap) . let va_sM = va_upd_mem_heaplet 1
    va_x_heap1 (va_upd_mem va_x_mem va_s0) in va_get_ok va_sM /\
    (Vale.PPC64LE.Decls.modifies_buffer_specific128 out_b (va_get_mem_heaplet 1 va_s0)
    (va_get_mem_heaplet 1 va_sM) (va_get_reg 8 va_sM) (va_get_reg 8 va_sM + 2) /\
    Vale.PPC64LE.Decls.buffer128_read out_b (va_get_reg 8 va_sM) (va_get_mem_heaplet 1 va_sM) ==
    Vale.Def.Types_s.reverse_bytes_quad32 (va_get_vec 0 va_sM) /\ Vale.PPC64LE.Decls.buffer128_read
    out_b (va_get_reg 8 va_sM + 1) (va_get_mem_heaplet 1 va_sM) ==
    Vale.Def.Types_s.reverse_bytes_quad32 (va_get_vec 1 va_sM) /\ Vale.PPC64LE.Decls.buffer128_read
    out_b (va_get_reg 8 va_sM + 2) (va_get_mem_heaplet 1 va_sM) ==
    Vale.Def.Types_s.reverse_bytes_quad32 (va_get_vec 2 va_sM)) ==> va_k va_sM (())))


val va_wpProof_Store_3blocks128_1 : out_b:buffer128 -> va_s0:va_state -> va_k:(va_state -> unit ->
  Type0)
  -> Ghost (va_state & va_fuel & unit)
  (requires (va_t_require va_s0 /\ va_wp_Store_3blocks128_1 out_b va_s0 va_k))
  (ensures (fun (va_sM, va_f0, va_g) -> va_t_ensure (va_code_Store_3blocks128_1 ())
    ([va_Mod_mem_heaplet 1; va_Mod_mem]) va_s0 va_k ((va_sM, va_f0, va_g))))
[@"opaque_to_smt"]
let va_wpProof_Store_3blocks128_1 out_b va_s0 va_k =
  let (va_sM, va_f0) = va_lemma_Store_3blocks128_1 (va_code_Store_3blocks128_1 ()) va_s0 out_b in
  va_lemma_upd_update va_sM;
  assert (va_state_eq va_sM (va_update_mem_heaplet 1 va_sM (va_update_ok va_sM (va_update_mem va_sM
    va_s0))));
  va_lemma_norm_mods ([va_Mod_mem_heaplet 1; 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_Store_3blocks128_1 (out_b:buffer128) : (va_quickCode unit (va_code_Store_3blocks128_1
  ())) =
  (va_QProc (va_code_Store_3blocks128_1 ()) ([va_Mod_mem_heaplet 1; va_Mod_mem])
    (va_wp_Store_3blocks128_1 out_b) (va_wpProof_Store_3blocks128_1 out_b))
//--
//-- Store_3blocks128_2

val va_code_Store_3blocks128_2 : va_dummy:unit -> Tot va_code
[@ "opaque_to_smt" va_qattr]
let va_code_Store_3blocks128_2 () =
  (va_Block (va_CCons (va_code_Store128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1)
    (va_op_vec_opr_vec 3) (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 29) Secret) (va_CCons
    (va_code_Store128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 4)
    (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 30) Secret) (va_CCons
    (va_code_Store128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 5)
    (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 31) Secret) (va_CNil ())))))

val va_codegen_success_Store_3blocks128_2 : va_dummy:unit -> Tot va_pbool
[@ "opaque_to_smt" va_qattr]
let va_codegen_success_Store_3blocks128_2 () =
  (va_pbool_and (va_codegen_success_Store128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1)
    (va_op_vec_opr_vec 3) (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 29) Secret) (va_pbool_and
    (va_codegen_success_Store128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1)
    (va_op_vec_opr_vec 4) (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 30) Secret) (va_pbool_and
    (va_codegen_success_Store128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1)
    (va_op_vec_opr_vec 5) (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 31) Secret) (va_ttrue ()))))

[@ "opaque_to_smt" va_qattr]
let va_qcode_Store_3blocks128_2 (va_mods:va_mods_t) (out_b:buffer128) : (va_quickCode unit
  (va_code_Store_3blocks128_2 ())) =
  (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 313 column 33 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Store128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 3)
    (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 29) Secret out_b (va_get_reg 8 va_s + 3)) (fun
    (va_s:va_state) _ -> va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 314 column 33 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Store128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 4)
    (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 30) Secret out_b (va_get_reg 8 va_s + 4)) (fun
    (va_s:va_state) _ -> va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 315 column 33 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Store128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 5)
    (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 31) Secret out_b (va_get_reg 8 va_s + 5)) (va_QEmpty
    (()))))))


val va_lemma_Store_3blocks128_2 : va_b0:va_code -> va_s0:va_state -> out_b:buffer128
  -> Ghost (va_state & va_fuel)
  (requires (va_require_total va_b0 (va_code_Store_3blocks128_2 ()) va_s0 /\ va_get_ok va_s0 /\
    (va_get_reg 8 va_s0 + 5 < va_get_reg 6 va_s0 /\ Vale.PPC64LE.Decls.validDstAddrsOffset128
    (va_get_mem_heaplet 1 va_s0) (va_get_reg 7 va_s0) out_b (va_get_reg 8 va_s0) (va_get_reg 6
    va_s0 - va_get_reg 8 va_s0) (va_get_mem_layout va_s0) Secret /\ va_get_reg 29 va_s0 == 3
    `op_Multiply` 16 /\ va_get_reg 30 va_s0 == 4 `op_Multiply` 16 /\ va_get_reg 31 va_s0 == 5
    `op_Multiply` 16)))
  (ensures (fun (va_sM, va_fM) -> va_ensure_total va_b0 va_s0 va_sM va_fM /\ va_get_ok va_sM /\
    (Vale.PPC64LE.Decls.modifies_buffer_specific128 out_b (va_get_mem_heaplet 1 va_s0)
    (va_get_mem_heaplet 1 va_sM) (va_get_reg 8 va_sM + 3) (va_get_reg 8 va_sM + 5) /\
    Vale.PPC64LE.Decls.buffer128_read out_b (va_get_reg 8 va_sM + 3) (va_get_mem_heaplet 1 va_sM)
    == Vale.Def.Types_s.reverse_bytes_quad32 (va_get_vec 3 va_sM) /\
    Vale.PPC64LE.Decls.buffer128_read out_b (va_get_reg 8 va_sM + 4) (va_get_mem_heaplet 1 va_sM)
    == Vale.Def.Types_s.reverse_bytes_quad32 (va_get_vec 4 va_sM) /\
    Vale.PPC64LE.Decls.buffer128_read out_b (va_get_reg 8 va_sM + 5) (va_get_mem_heaplet 1 va_sM)
    == Vale.Def.Types_s.reverse_bytes_quad32 (va_get_vec 5 va_sM)) /\ va_state_eq va_sM
    (va_update_mem_heaplet 1 va_sM (va_update_ok va_sM (va_update_mem va_sM va_s0)))))
[@"opaque_to_smt"]
let va_lemma_Store_3blocks128_2 va_b0 va_s0 out_b =
  let (va_mods:va_mods_t) = [va_Mod_mem_heaplet 1; va_Mod_ok; va_Mod_mem] in
  let va_qc = va_qcode_Store_3blocks128_2 va_mods out_b in
  let (va_sM, va_fM, va_g) = va_wp_sound_code_norm (va_code_Store_3blocks128_2 ()) va_qc va_s0 (fun
    va_s0 va_sM va_g -> let () = va_g in label va_range1
    "***** POSTCONDITION NOT MET AT line 292 column 1 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_ok va_sM) /\ (label va_range1
    "***** POSTCONDITION NOT MET AT line 308 column 80 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.modifies_buffer_specific128 out_b (va_get_mem_heaplet 1 va_s0)
    (va_get_mem_heaplet 1 va_sM) (va_get_reg 8 va_sM + 3) (va_get_reg 8 va_sM + 5)) /\ label
    va_range1
    "***** POSTCONDITION NOT MET AT line 309 column 74 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.buffer128_read out_b (va_get_reg 8 va_sM + 3) (va_get_mem_heaplet 1 va_sM)
    == Vale.Def.Types_s.reverse_bytes_quad32 (va_get_vec 3 va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 310 column 74 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.buffer128_read out_b (va_get_reg 8 va_sM + 4) (va_get_mem_heaplet 1 va_sM)
    == Vale.Def.Types_s.reverse_bytes_quad32 (va_get_vec 4 va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 311 column 74 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.buffer128_read out_b (va_get_reg 8 va_sM + 5) (va_get_mem_heaplet 1 va_sM)
    == Vale.Def.Types_s.reverse_bytes_quad32 (va_get_vec 5 va_sM)))) in
  assert_norm (va_qc.mods == va_mods);
  va_lemma_norm_mods ([va_Mod_mem_heaplet 1; va_Mod_ok; va_Mod_mem]) va_sM va_s0;
  (va_sM, va_fM)

[@ va_qattr]
let va_wp_Store_3blocks128_2 (out_b:buffer128) (va_s0:va_state) (va_k:(va_state -> unit -> Type0))
  : Type0 =
  (va_get_ok va_s0 /\ (va_get_reg 8 va_s0 + 5 < va_get_reg 6 va_s0 /\
    Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 7 va_s0)
    out_b (va_get_reg 8 va_s0) (va_get_reg 6 va_s0 - va_get_reg 8 va_s0) (va_get_mem_layout va_s0)
    Secret /\ va_get_reg 29 va_s0 == 3 `op_Multiply` 16 /\ va_get_reg 30 va_s0 == 4 `op_Multiply`
    16 /\ va_get_reg 31 va_s0 == 5 `op_Multiply` 16) /\ (forall (va_x_mem:vale_heap)
    (va_x_heap1:vale_heap) . let va_sM = va_upd_mem_heaplet 1 va_x_heap1 (va_upd_mem va_x_mem
    va_s0) in va_get_ok va_sM /\ (Vale.PPC64LE.Decls.modifies_buffer_specific128 out_b
    (va_get_mem_heaplet 1 va_s0) (va_get_mem_heaplet 1 va_sM) (va_get_reg 8 va_sM + 3) (va_get_reg
    8 va_sM + 5) /\ Vale.PPC64LE.Decls.buffer128_read out_b (va_get_reg 8 va_sM + 3)
    (va_get_mem_heaplet 1 va_sM) == Vale.Def.Types_s.reverse_bytes_quad32 (va_get_vec 3 va_sM) /\
    Vale.PPC64LE.Decls.buffer128_read out_b (va_get_reg 8 va_sM + 4) (va_get_mem_heaplet 1 va_sM)
    == Vale.Def.Types_s.reverse_bytes_quad32 (va_get_vec 4 va_sM) /\
    Vale.PPC64LE.Decls.buffer128_read out_b (va_get_reg 8 va_sM + 5) (va_get_mem_heaplet 1 va_sM)
    == Vale.Def.Types_s.reverse_bytes_quad32 (va_get_vec 5 va_sM)) ==> va_k va_sM (())))


val va_wpProof_Store_3blocks128_2 : out_b:buffer128 -> va_s0:va_state -> va_k:(va_state -> unit ->
  Type0)
  -> Ghost (va_state & va_fuel & unit)
  (requires (va_t_require va_s0 /\ va_wp_Store_3blocks128_2 out_b va_s0 va_k))
  (ensures (fun (va_sM, va_f0, va_g) -> va_t_ensure (va_code_Store_3blocks128_2 ())
    ([va_Mod_mem_heaplet 1; va_Mod_mem]) va_s0 va_k ((va_sM, va_f0, va_g))))
[@"opaque_to_smt"]
let va_wpProof_Store_3blocks128_2 out_b va_s0 va_k =
  let (va_sM, va_f0) = va_lemma_Store_3blocks128_2 (va_code_Store_3blocks128_2 ()) va_s0 out_b in
  va_lemma_upd_update va_sM;
  assert (va_state_eq va_sM (va_update_mem_heaplet 1 va_sM (va_update_ok va_sM (va_update_mem va_sM
    va_s0))));
  va_lemma_norm_mods ([va_Mod_mem_heaplet 1; 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_Store_3blocks128_2 (out_b:buffer128) : (va_quickCode unit (va_code_Store_3blocks128_2
  ())) =
  (va_QProc (va_code_Store_3blocks128_2 ()) ([va_Mod_mem_heaplet 1; va_Mod_mem])
    (va_wp_Store_3blocks128_2 out_b) (va_wpProof_Store_3blocks128_2 out_b))
//--
//-- Gctr_blocks128_6way_body

val va_code_Gctr_blocks128_6way_body : alg:algorithm -> Tot va_code
[@ "opaque_to_smt" va_qattr]
let va_code_Gctr_blocks128_6way_body alg =
  (va_Block (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_Block (va_CNil ())) (va_CCons
    (va_Block (va_CNil ())) (va_CCons (va_code_Vmr (va_op_vec_opr_vec 0) (va_op_vec_opr_vec 7))
    (va_CCons (va_code_Vadduwm (va_op_vec_opr_vec 1) (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 8))
    (va_CCons (va_code_Vadduwm (va_op_vec_opr_vec 2) (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 9))
    (va_CCons (va_code_Vadduwm (va_op_vec_opr_vec 3) (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 10))
    (va_CCons (va_code_Vadduwm (va_op_vec_opr_vec 4) (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 11))
    (va_CCons (va_code_Vadduwm (va_op_vec_opr_vec 5) (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 12))
    (va_CCons (va_code_AESEncryptBlock_6way alg) (va_CCons (va_code_Load128_byte16_buffer
    (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 14) (va_op_reg_opr_reg 3) Secret) (va_CCons
    (va_code_Load128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 15)
    (va_op_reg_opr_reg 3) (va_op_reg_opr_reg 27) Secret) (va_CCons
    (va_code_Load128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 16)
    (va_op_reg_opr_reg 3) (va_op_reg_opr_reg 28) Secret) (va_CCons
    (va_code_Load128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 17)
    (va_op_reg_opr_reg 3) (va_op_reg_opr_reg 29) Secret) (va_CCons
    (va_code_Load128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 18)
    (va_op_reg_opr_reg 3) (va_op_reg_opr_reg 30) Secret) (va_CCons
    (va_code_Load128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 19)
    (va_op_reg_opr_reg 3) (va_op_reg_opr_reg 31) Secret) (va_CCons (va_code_Vxor (va_op_vec_opr_vec
    0) (va_op_vec_opr_vec 14) (va_op_vec_opr_vec 0)) (va_CCons (va_code_Vxor (va_op_vec_opr_vec 1)
    (va_op_vec_opr_vec 15) (va_op_vec_opr_vec 1)) (va_CCons (va_code_Vxor (va_op_vec_opr_vec 2)
    (va_op_vec_opr_vec 16) (va_op_vec_opr_vec 2)) (va_CCons (va_code_Vxor (va_op_vec_opr_vec 3)
    (va_op_vec_opr_vec 17) (va_op_vec_opr_vec 3)) (va_CCons (va_code_Vxor (va_op_vec_opr_vec 4)
    (va_op_vec_opr_vec 18) (va_op_vec_opr_vec 4)) (va_CCons (va_code_Vxor (va_op_vec_opr_vec 5)
    (va_op_vec_opr_vec 19) (va_op_vec_opr_vec 5)) (va_CCons (va_code_Store_3blocks128_1 ())
    (va_CCons (va_code_Store_3blocks128_2 ()) (va_CCons (va_code_AddImm (va_op_reg_opr_reg 8)
    (va_op_reg_opr_reg 8) 6) (va_CCons (va_code_AddImm (va_op_reg_opr_reg 3) (va_op_reg_opr_reg 3)
    (6 `op_Multiply` 16)) (va_CCons (va_code_AddImm (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 7) (6
    `op_Multiply` 16)) (va_CCons (va_code_Vadduwm (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 7)
    (va_op_vec_opr_vec 13)) (va_CNil ())))))))))))))))))))))))))))))))))

val va_codegen_success_Gctr_blocks128_6way_body : alg:algorithm -> Tot va_pbool
[@ "opaque_to_smt" va_qattr]
let va_codegen_success_Gctr_blocks128_6way_body alg =
  (va_pbool_and (va_codegen_success_Vmr (va_op_vec_opr_vec 0) (va_op_vec_opr_vec 7)) (va_pbool_and
    (va_codegen_success_Vadduwm (va_op_vec_opr_vec 1) (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 8))
    (va_pbool_and (va_codegen_success_Vadduwm (va_op_vec_opr_vec 2) (va_op_vec_opr_vec 7)
    (va_op_vec_opr_vec 9)) (va_pbool_and (va_codegen_success_Vadduwm (va_op_vec_opr_vec 3)
    (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 10)) (va_pbool_and (va_codegen_success_Vadduwm
    (va_op_vec_opr_vec 4) (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 11)) (va_pbool_and
    (va_codegen_success_Vadduwm (va_op_vec_opr_vec 5) (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 12))
    (va_pbool_and (va_codegen_success_AESEncryptBlock_6way alg) (va_pbool_and
    (va_codegen_success_Load128_byte16_buffer (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 14)
    (va_op_reg_opr_reg 3) Secret) (va_pbool_and (va_codegen_success_Load128_byte16_buffer_index
    (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 15) (va_op_reg_opr_reg 3) (va_op_reg_opr_reg
    27) Secret) (va_pbool_and (va_codegen_success_Load128_byte16_buffer_index
    (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 16) (va_op_reg_opr_reg 3) (va_op_reg_opr_reg
    28) Secret) (va_pbool_and (va_codegen_success_Load128_byte16_buffer_index
    (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 17) (va_op_reg_opr_reg 3) (va_op_reg_opr_reg
    29) Secret) (va_pbool_and (va_codegen_success_Load128_byte16_buffer_index
    (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 18) (va_op_reg_opr_reg 3) (va_op_reg_opr_reg
    30) Secret) (va_pbool_and (va_codegen_success_Load128_byte16_buffer_index
    (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 19) (va_op_reg_opr_reg 3) (va_op_reg_opr_reg
    31) Secret) (va_pbool_and (va_codegen_success_Vxor (va_op_vec_opr_vec 0) (va_op_vec_opr_vec 14)
    (va_op_vec_opr_vec 0)) (va_pbool_and (va_codegen_success_Vxor (va_op_vec_opr_vec 1)
    (va_op_vec_opr_vec 15) (va_op_vec_opr_vec 1)) (va_pbool_and (va_codegen_success_Vxor
    (va_op_vec_opr_vec 2) (va_op_vec_opr_vec 16) (va_op_vec_opr_vec 2)) (va_pbool_and
    (va_codegen_success_Vxor (va_op_vec_opr_vec 3) (va_op_vec_opr_vec 17) (va_op_vec_opr_vec 3))
    (va_pbool_and (va_codegen_success_Vxor (va_op_vec_opr_vec 4) (va_op_vec_opr_vec 18)
    (va_op_vec_opr_vec 4)) (va_pbool_and (va_codegen_success_Vxor (va_op_vec_opr_vec 5)
    (va_op_vec_opr_vec 19) (va_op_vec_opr_vec 5)) (va_pbool_and
    (va_codegen_success_Store_3blocks128_1 ()) (va_pbool_and (va_codegen_success_Store_3blocks128_2
    ()) (va_pbool_and (va_codegen_success_AddImm (va_op_reg_opr_reg 8) (va_op_reg_opr_reg 8) 6)
    (va_pbool_and (va_codegen_success_AddImm (va_op_reg_opr_reg 3) (va_op_reg_opr_reg 3) (6
    `op_Multiply` 16)) (va_pbool_and (va_codegen_success_AddImm (va_op_reg_opr_reg 7)
    (va_op_reg_opr_reg 7) (6 `op_Multiply` 16)) (va_pbool_and (va_codegen_success_Vadduwm
    (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 13)) (va_ttrue
    ()))))))))))))))))))))))))))

[@ "opaque_to_smt" va_qattr]
let va_qcode_Gctr_blocks128_6way_body (va_mods:va_mods_t) (alg:algorithm) (in_b:buffer128)
  (out_b:buffer128) (old_icb:quad32) (key:(seq nat32)) (round_keys:(seq quad32)) (keys_b:buffer128)
  (plain_quads:(seq quad32)) : (va_quickCode unit (va_code_Gctr_blocks128_6way_body alg)) =
  (qblock va_mods (fun (va_s:va_state) -> let (va_old_s:va_state) = va_s in va_qAssertSquash
    va_range1
    "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 383 column 5 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    ((fun (alg_10536:Vale.AES.AES_common_s.algorithm) (key_10537:(FStar.Seq.Base.seq
    Vale.Def.Types_s.nat32)) (input_10538:Vale.Def.Types_s.quad32) ->
    Vale.AES.AES_BE_s.is_aes_key_word alg_10536 key_10537) alg key (Vale.AES.GCTR_BE_s.inc32
    old_icb (va_get_reg 8 va_s))) (fun _ -> let (ctr_enc_0:Vale.Def.Types_s.quad32) =
    Vale.Def.Types_s.quad32_xor (Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.PPC64LE.Decls.buffer128_read in_b (va_get_reg 8 va_s) (va_get_mem_heaplet 1 va_s)))
    (Vale.AES.AES_BE_s.aes_encrypt_word alg key (Vale.AES.GCTR_BE_s.inc32 old_icb (va_get_reg 8
    va_s))) in va_qAssertSquash va_range1
    "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 384 column 5 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    ((fun (alg_10536:Vale.AES.AES_common_s.algorithm) (key_10537:(FStar.Seq.Base.seq
    Vale.Def.Types_s.nat32)) (input_10538:Vale.Def.Types_s.quad32) ->
    Vale.AES.AES_BE_s.is_aes_key_word alg_10536 key_10537) alg key (Vale.AES.GCTR_BE_s.inc32
    old_icb (va_get_reg 8 va_s + 1))) (fun _ -> let (ctr_enc_1:Vale.Def.Types_s.quad32) =
    Vale.Def.Types_s.quad32_xor (Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.PPC64LE.Decls.buffer128_read in_b (va_get_reg 8 va_s + 1) (va_get_mem_heaplet 1 va_s)))
    (Vale.AES.AES_BE_s.aes_encrypt_word alg key (Vale.AES.GCTR_BE_s.inc32 old_icb (va_get_reg 8
    va_s + 1))) in va_qAssertSquash va_range1
    "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 385 column 5 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    ((fun (alg_10536:Vale.AES.AES_common_s.algorithm) (key_10537:(FStar.Seq.Base.seq
    Vale.Def.Types_s.nat32)) (input_10538:Vale.Def.Types_s.quad32) ->
    Vale.AES.AES_BE_s.is_aes_key_word alg_10536 key_10537) alg key (Vale.AES.GCTR_BE_s.inc32
    old_icb (va_get_reg 8 va_s + 2))) (fun _ -> let (ctr_enc_2:Vale.Def.Types_s.quad32) =
    Vale.Def.Types_s.quad32_xor (Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.PPC64LE.Decls.buffer128_read in_b (va_get_reg 8 va_s + 2) (va_get_mem_heaplet 1 va_s)))
    (Vale.AES.AES_BE_s.aes_encrypt_word alg key (Vale.AES.GCTR_BE_s.inc32 old_icb (va_get_reg 8
    va_s + 2))) in va_qAssertSquash va_range1
    "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 386 column 5 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    ((fun (alg_10536:Vale.AES.AES_common_s.algorithm) (key_10537:(FStar.Seq.Base.seq
    Vale.Def.Types_s.nat32)) (input_10538:Vale.Def.Types_s.quad32) ->
    Vale.AES.AES_BE_s.is_aes_key_word alg_10536 key_10537) alg key (Vale.AES.GCTR_BE_s.inc32
    old_icb (va_get_reg 8 va_s + 3))) (fun _ -> let (ctr_enc_3:Vale.Def.Types_s.quad32) =
    Vale.Def.Types_s.quad32_xor (Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.PPC64LE.Decls.buffer128_read in_b (va_get_reg 8 va_s + 3) (va_get_mem_heaplet 1 va_s)))
    (Vale.AES.AES_BE_s.aes_encrypt_word alg key (Vale.AES.GCTR_BE_s.inc32 old_icb (va_get_reg 8
    va_s + 3))) in va_qAssertSquash va_range1
    "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 387 column 5 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    ((fun (alg_10536:Vale.AES.AES_common_s.algorithm) (key_10537:(FStar.Seq.Base.seq
    Vale.Def.Types_s.nat32)) (input_10538:Vale.Def.Types_s.quad32) ->
    Vale.AES.AES_BE_s.is_aes_key_word alg_10536 key_10537) alg key (Vale.AES.GCTR_BE_s.inc32
    old_icb (va_get_reg 8 va_s + 4))) (fun _ -> let (ctr_enc_4:Vale.Def.Types_s.quad32) =
    Vale.Def.Types_s.quad32_xor (Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.PPC64LE.Decls.buffer128_read in_b (va_get_reg 8 va_s + 4) (va_get_mem_heaplet 1 va_s)))
    (Vale.AES.AES_BE_s.aes_encrypt_word alg key (Vale.AES.GCTR_BE_s.inc32 old_icb (va_get_reg 8
    va_s + 4))) in va_qAssertSquash va_range1
    "***** EXPRESSION PRECONDITIONS NOT MET WITHIN line 388 column 5 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    ((fun (alg_10536:Vale.AES.AES_common_s.algorithm) (key_10537:(FStar.Seq.Base.seq
    Vale.Def.Types_s.nat32)) (input_10538:Vale.Def.Types_s.quad32) ->
    Vale.AES.AES_BE_s.is_aes_key_word alg_10536 key_10537) alg key (Vale.AES.GCTR_BE_s.inc32
    old_icb (va_get_reg 8 va_s + 5))) (fun _ -> let (ctr_enc_5:Vale.Def.Types_s.quad32) =
    Vale.Def.Types_s.quad32_xor (Vale.Def.Types_s.reverse_bytes_quad32
    (Vale.PPC64LE.Decls.buffer128_read in_b (va_get_reg 8 va_s + 5) (va_get_mem_heaplet 1 va_s)))
    (Vale.AES.AES_BE_s.aes_encrypt_word alg key (Vale.AES.GCTR_BE_s.inc32 old_icb (va_get_reg 8
    va_s + 5))) in va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 390 column 8 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vmr (va_op_vec_opr_vec 0) (va_op_vec_opr_vec 7)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 391 column 12 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vadduwm (va_op_vec_opr_vec 1) (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 8)) (va_QSeq
    va_range1
    "***** PRECONDITION NOT MET AT line 392 column 12 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vadduwm (va_op_vec_opr_vec 2) (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 9)) (va_QSeq
    va_range1
    "***** PRECONDITION NOT MET AT line 393 column 12 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vadduwm (va_op_vec_opr_vec 3) (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 10)) (va_QSeq
    va_range1
    "***** PRECONDITION NOT MET AT line 394 column 12 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vadduwm (va_op_vec_opr_vec 4) (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 11)) (va_QBind
    va_range1
    "***** PRECONDITION NOT MET AT line 395 column 12 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vadduwm (va_op_vec_opr_vec 5) (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 12)) (fun
    (va_s:va_state) _ -> va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 397 column 25 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_AESEncryptBlock_6way alg (va_get_vec 7 va_s) (Vale.AES.GCTR_BE.inc32lite (va_get_vec
    7 va_s) 1) (Vale.AES.GCTR_BE.inc32lite (va_get_vec 7 va_s) 2) (Vale.AES.GCTR_BE.inc32lite
    (va_get_vec 7 va_s) 3) (Vale.AES.GCTR_BE.inc32lite (va_get_vec 7 va_s) 4)
    (Vale.AES.GCTR_BE.inc32lite (va_get_vec 7 va_s) 5) key round_keys keys_b) (fun (va_s:va_state)
    _ -> va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 399 column 26 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Load128_byte16_buffer (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 14)
    (va_op_reg_opr_reg 3) Secret in_b (va_get_reg 8 va_s)) (fun (va_s:va_state) _ -> va_QBind
    va_range1
    "***** PRECONDITION NOT MET AT line 400 column 32 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Load128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 15)
    (va_op_reg_opr_reg 3) (va_op_reg_opr_reg 27) Secret in_b (va_get_reg 8 va_s + 1)) (fun
    (va_s:va_state) _ -> va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 401 column 32 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Load128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 16)
    (va_op_reg_opr_reg 3) (va_op_reg_opr_reg 28) Secret in_b (va_get_reg 8 va_s + 2)) (fun
    (va_s:va_state) _ -> va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 402 column 32 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Load128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 17)
    (va_op_reg_opr_reg 3) (va_op_reg_opr_reg 29) Secret in_b (va_get_reg 8 va_s + 3)) (fun
    (va_s:va_state) _ -> va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 403 column 32 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Load128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 18)
    (va_op_reg_opr_reg 3) (va_op_reg_opr_reg 30) Secret in_b (va_get_reg 8 va_s + 4)) (fun
    (va_s:va_state) _ -> va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 404 column 32 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Load128_byte16_buffer_index (va_op_heaplet_mem_heaplet 1) (va_op_vec_opr_vec 19)
    (va_op_reg_opr_reg 3) (va_op_reg_opr_reg 31) Secret in_b (va_get_reg 8 va_s + 5)) (va_QSeq
    va_range1
    "***** PRECONDITION NOT MET AT line 406 column 9 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vxor (va_op_vec_opr_vec 0) (va_op_vec_opr_vec 14) (va_op_vec_opr_vec 0)) (va_QSeq
    va_range1
    "***** PRECONDITION NOT MET AT line 407 column 9 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vxor (va_op_vec_opr_vec 1) (va_op_vec_opr_vec 15) (va_op_vec_opr_vec 1)) (va_QSeq
    va_range1
    "***** PRECONDITION NOT MET AT line 408 column 9 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vxor (va_op_vec_opr_vec 2) (va_op_vec_opr_vec 16) (va_op_vec_opr_vec 2)) (va_QSeq
    va_range1
    "***** PRECONDITION NOT MET AT line 409 column 9 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vxor (va_op_vec_opr_vec 3) (va_op_vec_opr_vec 17) (va_op_vec_opr_vec 3)) (va_QSeq
    va_range1
    "***** PRECONDITION NOT MET AT line 410 column 9 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vxor (va_op_vec_opr_vec 4) (va_op_vec_opr_vec 18) (va_op_vec_opr_vec 4)) (va_QSeq
    va_range1
    "***** PRECONDITION NOT MET AT line 411 column 9 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vxor (va_op_vec_opr_vec 5) (va_op_vec_opr_vec 19) (va_op_vec_opr_vec 5)) (va_QSeq
    va_range1
    "***** PRECONDITION NOT MET AT line 413 column 23 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Store_3blocks128_1 out_b) (va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 414 column 23 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Store_3blocks128_2 out_b) (fun (va_s:va_state) _ -> va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 415 column 5 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.Def.Types_s.reverse_bytes_quad32 (Vale.PPC64LE.Decls.buffer128_read out_b (va_get_reg 8
    va_s) (va_get_mem_heaplet 1 va_s)) == ctr_enc_0) (va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 416 column 5 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.Def.Types_s.reverse_bytes_quad32 (Vale.PPC64LE.Decls.buffer128_read out_b (va_get_reg 8
    va_s + 1) (va_get_mem_heaplet 1 va_s)) == ctr_enc_1) (va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 417 column 5 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.Def.Types_s.reverse_bytes_quad32 (Vale.PPC64LE.Decls.buffer128_read out_b (va_get_reg 8
    va_s + 2) (va_get_mem_heaplet 1 va_s)) == ctr_enc_2) (va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 418 column 5 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.Def.Types_s.reverse_bytes_quad32 (Vale.PPC64LE.Decls.buffer128_read out_b (va_get_reg 8
    va_s + 3) (va_get_mem_heaplet 1 va_s)) == ctr_enc_3) (va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 419 column 5 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.Def.Types_s.reverse_bytes_quad32 (Vale.PPC64LE.Decls.buffer128_read out_b (va_get_reg 8
    va_s + 4) (va_get_mem_heaplet 1 va_s)) == ctr_enc_4) (va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 420 column 5 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.Def.Types_s.reverse_bytes_quad32 (Vale.PPC64LE.Decls.buffer128_read out_b (va_get_reg 8
    va_s + 5) (va_get_mem_heaplet 1 va_s)) == ctr_enc_5) (let (va_arg64:(FStar.Seq.Base.seq
    Vale.Def.Types_s.nat32)) = key in let (va_arg63:Vale.AES.AES_common_s.algorithm) = alg in let
    (va_arg62:Vale.Def.Types_s.quad32) = old_icb in let (va_arg61:Prims.nat) = va_get_reg 8 va_s in
    let (va_arg60:(FStar.Seq.Base.seq Vale.Def.Types_s.quad32)) = plain_quads in let
    (va_arg59:(FStar.Seq.Base.seq Vale.Def.Types_s.quad32)) =
    Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1
    va_old_s) out_b) in let (va_arg58:(FStar.Seq.Base.seq Vale.Def.Types_s.quad32)) =
    Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s)
    out_b) in va_qPURE va_range1
    "***** PRECONDITION NOT MET AT line 422 column 38 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (fun (_:unit) -> Vale.AES.GCTR_BE.lemma_eq_reverse_bytes_quad32_seq va_arg58 va_arg59 va_arg60
    va_arg61 va_arg62 va_arg63 va_arg64) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 424 column 11 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_AddImm (va_op_reg_opr_reg 8) (va_op_reg_opr_reg 8) 6) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 425 column 11 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_AddImm (va_op_reg_opr_reg 3) (va_op_reg_opr_reg 3) (6 `op_Multiply` 16)) (va_QSeq
    va_range1
    "***** PRECONDITION NOT MET AT line 426 column 11 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_AddImm (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 7) (6 `op_Multiply` 16)) (va_QSeq
    va_range1
    "***** PRECONDITION NOT MET AT line 427 column 12 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vadduwm (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 7) (va_op_vec_opr_vec 13))
    (va_QEmpty (())))))))))))))))))))))))))))))))))))))))))


val va_lemma_Gctr_blocks128_6way_body : va_b0:va_code -> va_s0:va_state -> alg:algorithm ->
  in_b:buffer128 -> out_b:buffer128 -> old_icb:quad32 -> key:(seq nat32) -> round_keys:(seq quad32)
  -> keys_b:buffer128 -> plain_quads:(seq quad32)
  -> Ghost (va_state & va_fuel)
  (requires (va_require_total va_b0 (va_code_Gctr_blocks128_6way_body alg) va_s0 /\ va_get_ok va_s0
    /\ (va_get_reg 8 va_s0 + 5 < va_get_reg 6 va_s0 /\ Vale.PPC64LE.Decls.validSrcAddrsOffset128
    (va_get_mem_heaplet 1 va_s0) (va_get_reg 3 va_s0) in_b (va_get_reg 8 va_s0) (va_get_reg 6 va_s0
    - va_get_reg 8 va_s0) (va_get_mem_layout va_s0) Secret /\
    Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 7 va_s0)
    out_b (va_get_reg 8 va_s0) (va_get_reg 6 va_s0 - va_get_reg 8 va_s0) (va_get_mem_layout va_s0)
    Secret /\ va_get_reg 3 va_s0 + 6 `op_Multiply` 16 < pow2_64 /\ va_get_reg 7 va_s0 + 6
    `op_Multiply` 16 < pow2_64 /\ (Vale.PPC64LE.Decls.buffers_disjoint128 in_b out_b \/ in_b ==
    out_b) /\ Vale.AES.GCTR_BE.partial_seq_agreement plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0)
    in_b)) (va_get_reg 8 va_s0) (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128
    in_b) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 8 va_s0) plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0)
    out_b)) key old_icb /\ va_get_reg 6 va_s0 < pow2_32 /\ va_get_vec 7 va_s0 ==
    Vale.AES.GCTR_BE.inc32lite old_icb (va_get_reg 8 va_s0) /\ va_get_vec 8 va_s0 ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 1 0 0 0 /\ va_get_vec 9 va_s0 ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 2 0 0 0 /\ va_get_vec 10 va_s0 ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 3 0 0 0 /\ va_get_vec 11 va_s0 ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 4 0 0 0 /\ va_get_vec 12 va_s0 ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 5 0 0 0 /\ va_get_vec 13 va_s0 ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 6 0 0 0 /\ va_get_reg 27 va_s0 == 1
    `op_Multiply` 16 /\ va_get_reg 28 va_s0 == 2 `op_Multiply` 16 /\ va_get_reg 29 va_s0 == 3
    `op_Multiply` 16 /\ va_get_reg 30 va_s0 == 4 `op_Multiply` 16 /\ va_get_reg 31 va_s0 == 5
    `op_Multiply` 16 /\ aes_reqs alg key round_keys keys_b (va_get_reg 4 va_s0) (va_get_mem_heaplet
    0 va_s0) (va_get_mem_layout va_s0))))
  (ensures (fun (va_sM, va_fM) -> va_ensure_total va_b0 va_s0 va_sM va_fM /\ va_get_ok va_sM /\
    (Vale.PPC64LE.Decls.modifies_buffer128 out_b (va_get_mem_heaplet 1 va_s0) (va_get_mem_heaplet 1
    va_sM) /\ Vale.AES.GCTR_BE.partial_seq_agreement plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    in_b)) (va_get_reg 8 va_sM) (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128
    in_b) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 8 va_sM) plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    out_b)) key old_icb /\ va_get_reg 8 va_sM == va_get_reg 8 va_s0 + 6 /\ va_get_reg 3 va_sM ==
    va_get_reg 3 va_s0 + 16 `op_Multiply` 6 /\ va_get_reg 7 va_sM == va_get_reg 7 va_s0 + 16
    `op_Multiply` 6 /\ va_get_vec 7 va_sM == Vale.AES.GCTR_BE.inc32lite old_icb (va_get_reg 8
    va_sM)) /\ va_state_eq va_sM (va_update_mem_heaplet 1 va_sM (va_update_vec 19 va_sM
    (va_update_vec 18 va_sM (va_update_vec 17 va_sM (va_update_vec 16 va_sM (va_update_vec 15 va_sM
    (va_update_vec 14 va_sM (va_update_vec 7 va_sM (va_update_vec 6 va_sM (va_update_vec 5 va_sM
    (va_update_vec 4 va_sM (va_update_vec 3 va_sM (va_update_vec 2 va_sM (va_update_vec 1 va_sM
    (va_update_vec 0 va_sM (va_update_reg 10 va_sM (va_update_reg 8 va_sM (va_update_reg 7 va_sM
    (va_update_reg 3 va_sM (va_update_ok va_sM (va_update_mem va_sM va_s0)))))))))))))))))))))))
[@"opaque_to_smt"]
let va_lemma_Gctr_blocks128_6way_body va_b0 va_s0 alg in_b out_b old_icb key round_keys keys_b
  plain_quads =
  let (va_mods:va_mods_t) = [va_Mod_mem_heaplet 1; va_Mod_vec 19; va_Mod_vec 18; va_Mod_vec 17;
    va_Mod_vec 16; va_Mod_vec 15; va_Mod_vec 14; va_Mod_vec 7; va_Mod_vec 6; va_Mod_vec 5;
    va_Mod_vec 4; va_Mod_vec 3; va_Mod_vec 2; va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg 10; va_Mod_reg
    8; va_Mod_reg 7; va_Mod_reg 3; va_Mod_ok; va_Mod_mem] in
  let va_qc = va_qcode_Gctr_blocks128_6way_body va_mods alg in_b out_b old_icb key round_keys
    keys_b plain_quads in
  let (va_sM, va_fM, va_g) = va_wp_sound_code_norm (va_code_Gctr_blocks128_6way_body alg) va_qc
    va_s0 (fun va_s0 va_sM va_g -> let () = va_g in label va_range1
    "***** POSTCONDITION NOT MET AT line 318 column 1 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_ok va_sM) /\ (label va_range1
    "***** POSTCONDITION NOT MET AT line 374 column 53 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.modifies_buffer128 out_b (va_get_mem_heaplet 1 va_s0) (va_get_mem_heaplet 1
    va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 375 column 114 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.AES.GCTR_BE.partial_seq_agreement plain_quads (Vale.Arch.Types.reverse_bytes_quad32_seq
    (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) in_b)) (va_get_reg 8 va_sM)
    (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 376 column 108 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 8 va_sM) plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    out_b)) key old_icb) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 378 column 28 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 8 va_sM == va_get_reg 8 va_s0 + 6) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 379 column 37 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 3 va_sM == va_get_reg 3 va_s0 + 16 `op_Multiply` 6) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 380 column 39 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 7 va_sM == va_get_reg 7 va_s0 + 16 `op_Multiply` 6) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 381 column 39 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 7 va_sM == Vale.AES.GCTR_BE.inc32lite old_icb (va_get_reg 8 va_sM)))) in
  assert_norm (va_qc.mods == va_mods);
  va_lemma_norm_mods ([va_Mod_mem_heaplet 1; va_Mod_vec 19; va_Mod_vec 18; va_Mod_vec 17;
    va_Mod_vec 16; va_Mod_vec 15; va_Mod_vec 14; va_Mod_vec 7; va_Mod_vec 6; va_Mod_vec 5;
    va_Mod_vec 4; va_Mod_vec 3; va_Mod_vec 2; va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg 10; va_Mod_reg
    8; va_Mod_reg 7; va_Mod_reg 3; va_Mod_ok; va_Mod_mem]) va_sM va_s0;
  (va_sM, va_fM)

[@ va_qattr]
let va_wp_Gctr_blocks128_6way_body (alg:algorithm) (in_b:buffer128) (out_b:buffer128)
  (old_icb:quad32) (key:(seq nat32)) (round_keys:(seq quad32)) (keys_b:buffer128) (plain_quads:(seq
  quad32)) (va_s0:va_state) (va_k:(va_state -> unit -> Type0)) : Type0 =
  (va_get_ok va_s0 /\ (va_get_reg 8 va_s0 + 5 < va_get_reg 6 va_s0 /\
    Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 3 va_s0)
    in_b (va_get_reg 8 va_s0) (va_get_reg 6 va_s0 - va_get_reg 8 va_s0) (va_get_mem_layout va_s0)
    Secret /\ Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 7
    va_s0) out_b (va_get_reg 8 va_s0) (va_get_reg 6 va_s0 - va_get_reg 8 va_s0) (va_get_mem_layout
    va_s0) Secret /\ va_get_reg 3 va_s0 + 6 `op_Multiply` 16 < pow2_64 /\ va_get_reg 7 va_s0 + 6
    `op_Multiply` 16 < pow2_64 /\ (Vale.PPC64LE.Decls.buffers_disjoint128 in_b out_b \/ in_b ==
    out_b) /\ Vale.AES.GCTR_BE.partial_seq_agreement plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0)
    in_b)) (va_get_reg 8 va_s0) (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128
    in_b) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 8 va_s0) plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0)
    out_b)) key old_icb /\ va_get_reg 6 va_s0 < pow2_32 /\ va_get_vec 7 va_s0 ==
    Vale.AES.GCTR_BE.inc32lite old_icb (va_get_reg 8 va_s0) /\ va_get_vec 8 va_s0 ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 1 0 0 0 /\ va_get_vec 9 va_s0 ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 2 0 0 0 /\ va_get_vec 10 va_s0 ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 3 0 0 0 /\ va_get_vec 11 va_s0 ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 4 0 0 0 /\ va_get_vec 12 va_s0 ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 5 0 0 0 /\ va_get_vec 13 va_s0 ==
    Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 6 0 0 0 /\ va_get_reg 27 va_s0 == 1
    `op_Multiply` 16 /\ va_get_reg 28 va_s0 == 2 `op_Multiply` 16 /\ va_get_reg 29 va_s0 == 3
    `op_Multiply` 16 /\ va_get_reg 30 va_s0 == 4 `op_Multiply` 16 /\ va_get_reg 31 va_s0 == 5
    `op_Multiply` 16 /\ aes_reqs alg key round_keys keys_b (va_get_reg 4 va_s0) (va_get_mem_heaplet
    0 va_s0) (va_get_mem_layout va_s0)) /\ (forall (va_x_mem:vale_heap) (va_x_r3:nat64)
    (va_x_r7:nat64) (va_x_r8:nat64) (va_x_r10:nat64) (va_x_v0:quad32) (va_x_v1:quad32)
    (va_x_v2:quad32) (va_x_v3:quad32) (va_x_v4:quad32) (va_x_v5:quad32) (va_x_v6:quad32)
    (va_x_v7:quad32) (va_x_v14:quad32) (va_x_v15:quad32) (va_x_v16:quad32) (va_x_v17:quad32)
    (va_x_v18:quad32) (va_x_v19:quad32) (va_x_heap1:vale_heap) . let va_sM = va_upd_mem_heaplet 1
    va_x_heap1 (va_upd_vec 19 va_x_v19 (va_upd_vec 18 va_x_v18 (va_upd_vec 17 va_x_v17 (va_upd_vec
    16 va_x_v16 (va_upd_vec 15 va_x_v15 (va_upd_vec 14 va_x_v14 (va_upd_vec 7 va_x_v7 (va_upd_vec 6
    va_x_v6 (va_upd_vec 5 va_x_v5 (va_upd_vec 4 va_x_v4 (va_upd_vec 3 va_x_v3 (va_upd_vec 2 va_x_v2
    (va_upd_vec 1 va_x_v1 (va_upd_vec 0 va_x_v0 (va_upd_reg 10 va_x_r10 (va_upd_reg 8 va_x_r8
    (va_upd_reg 7 va_x_r7 (va_upd_reg 3 va_x_r3 (va_upd_mem va_x_mem va_s0))))))))))))))))))) in
    va_get_ok va_sM /\ (Vale.PPC64LE.Decls.modifies_buffer128 out_b (va_get_mem_heaplet 1 va_s0)
    (va_get_mem_heaplet 1 va_sM) /\ Vale.AES.GCTR_BE.partial_seq_agreement plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    in_b)) (va_get_reg 8 va_sM) (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128
    in_b) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 8 va_sM) plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    out_b)) key old_icb /\ va_get_reg 8 va_sM == va_get_reg 8 va_s0 + 6 /\ va_get_reg 3 va_sM ==
    va_get_reg 3 va_s0 + 16 `op_Multiply` 6 /\ va_get_reg 7 va_sM == va_get_reg 7 va_s0 + 16
    `op_Multiply` 6 /\ va_get_vec 7 va_sM == Vale.AES.GCTR_BE.inc32lite old_icb (va_get_reg 8
    va_sM)) ==> va_k va_sM (())))


val va_wpProof_Gctr_blocks128_6way_body : alg:algorithm -> in_b:buffer128 -> out_b:buffer128 ->
  old_icb:quad32 -> key:(seq nat32) -> round_keys:(seq quad32) -> keys_b:buffer128 ->
  plain_quads:(seq 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_Gctr_blocks128_6way_body alg in_b out_b old_icb key
    round_keys keys_b plain_quads va_s0 va_k))
  (ensures (fun (va_sM, va_f0, va_g) -> va_t_ensure (va_code_Gctr_blocks128_6way_body alg)
    ([va_Mod_mem_heaplet 1; va_Mod_vec 19; va_Mod_vec 18; va_Mod_vec 17; va_Mod_vec 16; va_Mod_vec
    15; va_Mod_vec 14; va_Mod_vec 7; va_Mod_vec 6; va_Mod_vec 5; va_Mod_vec 4; va_Mod_vec 3;
    va_Mod_vec 2; va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg 10; va_Mod_reg 8; va_Mod_reg 7; va_Mod_reg
    3; va_Mod_mem]) va_s0 va_k ((va_sM, va_f0, va_g))))
[@"opaque_to_smt"]
let va_wpProof_Gctr_blocks128_6way_body alg in_b out_b old_icb key round_keys keys_b plain_quads
  va_s0 va_k =
  let (va_sM, va_f0) = va_lemma_Gctr_blocks128_6way_body (va_code_Gctr_blocks128_6way_body alg)
    va_s0 alg in_b out_b old_icb key round_keys keys_b plain_quads in
  va_lemma_upd_update va_sM;
  assert (va_state_eq va_sM (va_update_mem_heaplet 1 va_sM (va_update_vec 19 va_sM (va_update_vec
    18 va_sM (va_update_vec 17 va_sM (va_update_vec 16 va_sM (va_update_vec 15 va_sM (va_update_vec
    14 va_sM (va_update_vec 7 va_sM (va_update_vec 6 va_sM (va_update_vec 5 va_sM (va_update_vec 4
    va_sM (va_update_vec 3 va_sM (va_update_vec 2 va_sM (va_update_vec 1 va_sM (va_update_vec 0
    va_sM (va_update_reg 10 va_sM (va_update_reg 8 va_sM (va_update_reg 7 va_sM (va_update_reg 3
    va_sM (va_update_ok va_sM (va_update_mem va_sM va_s0))))))))))))))))))))));
  va_lemma_norm_mods ([va_Mod_mem_heaplet 1; va_Mod_vec 19; va_Mod_vec 18; va_Mod_vec 17;
    va_Mod_vec 16; va_Mod_vec 15; va_Mod_vec 14; va_Mod_vec 7; va_Mod_vec 6; va_Mod_vec 5;
    va_Mod_vec 4; va_Mod_vec 3; va_Mod_vec 2; va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg 10; va_Mod_reg
    8; va_Mod_reg 7; va_Mod_reg 3; 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_Gctr_blocks128_6way_body (alg:algorithm) (in_b:buffer128) (out_b:buffer128)
  (old_icb:quad32) (key:(seq nat32)) (round_keys:(seq quad32)) (keys_b:buffer128) (plain_quads:(seq
  quad32)) : (va_quickCode unit (va_code_Gctr_blocks128_6way_body alg)) =
  (va_QProc (va_code_Gctr_blocks128_6way_body alg) ([va_Mod_mem_heaplet 1; va_Mod_vec 19;
    va_Mod_vec 18; va_Mod_vec 17; va_Mod_vec 16; va_Mod_vec 15; va_Mod_vec 14; va_Mod_vec 7;
    va_Mod_vec 6; va_Mod_vec 5; va_Mod_vec 4; va_Mod_vec 3; va_Mod_vec 2; va_Mod_vec 1; va_Mod_vec
    0; va_Mod_reg 10; va_Mod_reg 8; va_Mod_reg 7; va_Mod_reg 3; va_Mod_mem])
    (va_wp_Gctr_blocks128_6way_body alg in_b out_b old_icb key round_keys keys_b plain_quads)
    (va_wpProof_Gctr_blocks128_6way_body alg in_b out_b old_icb key round_keys keys_b plain_quads))
//--
//-- Gctr_blocks128_6way_body0
#push-options "--z3rlimit 30"

val va_code_Gctr_blocks128_6way_body0 : alg:algorithm -> Tot va_code
[@ "opaque_to_smt" va_qattr]
let va_code_Gctr_blocks128_6way_body0 alg =
  (va_Block (va_CCons (va_code_Mod_cr0 ()) (va_CCons (va_code_Gctr_blocks128_6way_body alg)
    (va_CNil ()))))

val va_codegen_success_Gctr_blocks128_6way_body0 : alg:algorithm -> Tot va_pbool
[@ "opaque_to_smt" va_qattr]
let va_codegen_success_Gctr_blocks128_6way_body0 alg =
  (va_pbool_and (va_codegen_success_Mod_cr0 ()) (va_pbool_and
    (va_codegen_success_Gctr_blocks128_6way_body alg) (va_ttrue ())))

[@ "opaque_to_smt" va_qattr]
let va_qcode_Gctr_blocks128_6way_body0 (va_mods:va_mods_t) (va_old:va_state) (alg:algorithm)
  (va_in_in_b:buffer128) (va_in_key:(seq nat32)) (va_in_keys_b:buffer128) (va_in_out_b:buffer128)
  (va_in_plain_quads:(seq quad32)) (va_in_round_keys:(seq quad32)) : (va_quickCode unit
  (va_code_Gctr_blocks128_6way_body0 alg)) =
  (qblock va_mods (fun (va_s:va_state) -> let (va_old_s:va_state) = va_s in let (in_b:buffer128) =
    va_in_in_b in let (key:(seq nat32)) = va_in_key in let (keys_b:buffer128) = va_in_keys_b in let
    (out_b:buffer128) = va_in_out_b in let (plain_quads:(seq quad32)) = va_in_plain_quads in let
    (round_keys:(seq quad32)) = va_in_round_keys in va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 548 column 16 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Mod_cr0 ()) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 550 column 33 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Gctr_blocks128_6way_body alg in_b out_b (va_get_vec 7 va_old) key round_keys keys_b
    plain_quads) (va_QEmpty (())))))


val va_lemma_Gctr_blocks128_6way_body0 : va_b0:va_code -> va_s0:va_state -> va_old:va_state ->
  alg:algorithm -> va_in_in_b:buffer128 -> va_in_key:(seq nat32) -> va_in_keys_b:buffer128 ->
  va_in_out_b:buffer128 -> va_in_plain_quads:(seq quad32) -> va_in_round_keys:(seq quad32)
  -> Ghost (va_state & va_fuel)
  (requires (va_require_total va_b0 (va_code_Gctr_blocks128_6way_body0 alg) va_s0 /\ va_get_ok
    va_s0 /\ (va_get_reg 6 va_s0 - va_get_reg 8 va_s0) `op_Modulus` 6 == 0 /\ (0 <= va_get_reg 8
    va_s0 /\ va_get_reg 8 va_s0 <= va_get_reg 6 va_s0) /\ va_get_vec 7 va_s0 ==
    Vale.AES.GCTR_BE.inc32lite (va_get_vec 7 va_old) (va_get_reg 8 va_s0) /\
    (Vale.PPC64LE.Decls.buffers_disjoint128 va_in_in_b va_in_out_b \/ va_in_in_b == va_in_out_b) /\
    Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 3 va_s0)
    va_in_in_b (va_get_reg 8 va_s0) (va_get_reg 6 va_s0 - va_get_reg 8 va_s0) (va_get_mem_layout
    va_s0) Secret /\ Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_s0)
    (va_get_reg 7 va_s0) va_in_out_b (va_get_reg 8 va_s0) (va_get_reg 6 va_s0 - va_get_reg 8 va_s0)
    (va_get_mem_layout va_s0) Secret /\ va_get_reg 3 va_s0 + 16 `op_Multiply` (va_get_reg 6 va_s0 -
    va_get_reg 8 va_s0) < pow2_64 /\ va_get_reg 7 va_s0 + 16 `op_Multiply` (va_get_reg 6 va_s0 -
    va_get_reg 8 va_s0) < pow2_64 /\ Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128
    va_in_in_b == Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 va_in_out_b /\
    Vale.AES.GCTR_BE.partial_seq_agreement va_in_plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0)
    va_in_in_b)) (va_get_reg 8 va_s0) (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b) /\ va_get_reg 6 va_s0 < pow2_32 /\ aes_reqs alg
    va_in_key va_in_round_keys va_in_keys_b (va_get_reg 4 va_s0) (va_get_mem_heaplet 0 va_s0)
    (va_get_mem_layout va_s0) /\ va_get_vec 8 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 1 0 0 0 /\ va_get_vec 9 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 2 0 0 0 /\ va_get_vec 10 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 3 0 0 0 /\ va_get_vec 11 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 4 0 0 0 /\ va_get_vec 12 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 5 0 0 0 /\ va_get_vec 13 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 6 0 0 0 /\ va_get_reg 27 va_s0 == 1 `op_Multiply` 16 /\ va_get_reg 28
    va_s0 == 2 `op_Multiply` 16 /\ va_get_reg 29 va_s0 == 3 `op_Multiply` 16 /\ va_get_reg 30 va_s0
    == 4 `op_Multiply` 16 /\ va_get_reg 31 va_s0 == 5 `op_Multiply` 16 /\
    Vale.PPC64LE.Decls.modifies_buffer128 va_in_out_b (va_get_mem_heaplet 1 va_old)
    (va_get_mem_heaplet 1 va_s0) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 8 va_s0)
    va_in_plain_quads (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128
    (va_get_mem_heaplet 1 va_s0) va_in_out_b)) va_in_key (va_get_vec 7 va_old) /\ (va_get_reg 6
    va_s0 == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0) va_in_out_b ==
    Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_old) va_in_out_b) /\ va_get_reg 3 va_s0 ==
    va_get_reg 3 va_old + 16 `op_Multiply` va_get_reg 8 va_s0 /\ va_get_reg 7 va_s0 == va_get_reg 7
    va_old + 16 `op_Multiply` va_get_reg 8 va_s0 /\ va_get_reg 8 va_s0 =!= va_get_reg 6 va_s0))
  (ensures (fun (va_sM, va_fM) -> va_ensure_total va_b0 va_s0 va_sM va_fM /\ va_get_ok va_sM /\
    (va_get_reg 6 va_sM - va_get_reg 8 va_sM) `op_Modulus` 6 == 0 /\ (0 <= va_get_reg 8 va_sM /\
    va_get_reg 8 va_sM <= va_get_reg 6 va_sM) /\ va_get_vec 7 va_sM == Vale.AES.GCTR_BE.inc32lite
    (va_get_vec 7 va_old) (va_get_reg 8 va_sM) /\ (Vale.PPC64LE.Decls.buffers_disjoint128
    va_in_in_b va_in_out_b \/ va_in_in_b == va_in_out_b) /\
    Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_sM) (va_get_reg 3 va_sM)
    va_in_in_b (va_get_reg 8 va_sM) (va_get_reg 6 va_sM - va_get_reg 8 va_sM) (va_get_mem_layout
    va_sM) Secret /\ Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_sM)
    (va_get_reg 7 va_sM) va_in_out_b (va_get_reg 8 va_sM) (va_get_reg 6 va_sM - va_get_reg 8 va_sM)
    (va_get_mem_layout va_sM) Secret /\ va_get_reg 3 va_sM + 16 `op_Multiply` (va_get_reg 6 va_sM -
    va_get_reg 8 va_sM) < pow2_64 /\ va_get_reg 7 va_sM + 16 `op_Multiply` (va_get_reg 6 va_sM -
    va_get_reg 8 va_sM) < pow2_64 /\ Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128
    va_in_in_b == Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 va_in_out_b /\
    Vale.AES.GCTR_BE.partial_seq_agreement va_in_plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    va_in_in_b)) (va_get_reg 8 va_sM) (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b) /\ va_get_reg 6 va_sM < pow2_32 /\ aes_reqs alg
    va_in_key va_in_round_keys va_in_keys_b (va_get_reg 4 va_sM) (va_get_mem_heaplet 0 va_sM)
    (va_get_mem_layout va_sM) /\ va_get_vec 8 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 1 0 0 0 /\ va_get_vec 9 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 2 0 0 0 /\ va_get_vec 10 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 3 0 0 0 /\ va_get_vec 11 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 4 0 0 0 /\ va_get_vec 12 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 5 0 0 0 /\ va_get_vec 13 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 6 0 0 0 /\ va_get_reg 27 va_sM == 1 `op_Multiply` 16 /\ va_get_reg 28
    va_sM == 2 `op_Multiply` 16 /\ va_get_reg 29 va_sM == 3 `op_Multiply` 16 /\ va_get_reg 30 va_sM
    == 4 `op_Multiply` 16 /\ va_get_reg 31 va_sM == 5 `op_Multiply` 16 /\
    Vale.PPC64LE.Decls.modifies_buffer128 va_in_out_b (va_get_mem_heaplet 1 va_old)
    (va_get_mem_heaplet 1 va_sM) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 8 va_sM)
    va_in_plain_quads (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128
    (va_get_mem_heaplet 1 va_sM) va_in_out_b)) va_in_key (va_get_vec 7 va_old) /\ (va_get_reg 6
    va_sM == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) va_in_out_b ==
    Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_old) va_in_out_b) /\ va_get_reg 3 va_sM ==
    va_get_reg 3 va_old + 16 `op_Multiply` va_get_reg 8 va_sM /\ va_get_reg 7 va_sM == va_get_reg 7
    va_old + 16 `op_Multiply` va_get_reg 8 va_sM /\ precedes_wrap (va_get_reg 6 va_sM - va_get_reg
    8 va_sM) (va_get_reg 6 va_s0 - va_get_reg 8 va_s0) /\ va_state_eq va_sM (va_update_vec 7 va_sM
    (va_update_vec 6 va_sM (va_update_vec 5 va_sM (va_update_vec 4 va_sM (va_update_vec 3 va_sM
    (va_update_vec 2 va_sM (va_update_vec 19 va_sM (va_update_vec 18 va_sM (va_update_vec 17 va_sM
    (va_update_vec 16 va_sM (va_update_vec 15 va_sM (va_update_vec 14 va_sM (va_update_vec 1 va_sM
    (va_update_vec 0 va_sM (va_update_reg 8 va_sM (va_update_reg 7 va_sM (va_update_reg 3 va_sM
    (va_update_reg 10 va_sM (va_update_ok va_sM (va_update_mem va_sM (va_update_mem_heaplet 1 va_sM
    (va_update_cr0 va_sM va_s0))))))))))))))))))))))))
[@"opaque_to_smt"]
let va_lemma_Gctr_blocks128_6way_body0 va_b0 va_s0 va_old alg va_in_in_b va_in_key va_in_keys_b
  va_in_out_b va_in_plain_quads va_in_round_keys =
  let va_old = va_expand_state va_old in
  let (va_mods:va_mods_t) = [va_Mod_vec 7; va_Mod_vec 6; va_Mod_vec 5; va_Mod_vec 4; va_Mod_vec 3;
    va_Mod_vec 2; va_Mod_vec 19; va_Mod_vec 18; va_Mod_vec 17; va_Mod_vec 16; va_Mod_vec 15;
    va_Mod_vec 14; va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg 8; va_Mod_reg 7; va_Mod_reg 3; va_Mod_reg
    10; va_Mod_ok; va_Mod_mem; va_Mod_mem_heaplet 1; va_Mod_cr0] in
  let va_qc = va_qcode_Gctr_blocks128_6way_body0 va_mods va_old alg va_in_in_b va_in_key
    va_in_keys_b va_in_out_b va_in_plain_quads va_in_round_keys in
  let (va_sM, va_fM, va_g) = va_wp_sound_code_norm (va_code_Gctr_blocks128_6way_body0 alg) va_qc
    va_s0 (fun va_s0 va_sM va_g -> let () = va_g in label va_range1
    "***** POSTCONDITION NOT MET AT line 430 column 1 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_ok va_sM) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 506 column 33 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    ((va_get_reg 6 va_sM - va_get_reg 8 va_sM) `op_Modulus` 6 == 0) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 507 column 28 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (0 <= va_get_reg 8 va_sM /\ va_get_reg 8 va_sM <= va_get_reg 6 va_sM) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 508 column 44 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 7 va_sM == Vale.AES.GCTR_BE.inc32lite (va_get_vec 7 va_old) (va_get_reg 8 va_sM))
    /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 512 column 62 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.buffers_disjoint128 va_in_in_b va_in_out_b \/ va_in_in_b == va_in_out_b) /\
    label va_range1
    "***** POSTCONDITION NOT MET AT line 513 column 93 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_sM) (va_get_reg 3 va_sM)
    va_in_in_b (va_get_reg 8 va_sM) (va_get_reg 6 va_sM - va_get_reg 8 va_sM) (va_get_mem_layout
    va_sM) Secret) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 514 column 93 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_sM) (va_get_reg 7 va_sM)
    va_in_out_b (va_get_reg 8 va_sM) (va_get_reg 6 va_sM - va_get_reg 8 va_sM) (va_get_mem_layout
    va_sM) Secret) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 515 column 49 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 3 va_sM + 16 `op_Multiply` (va_get_reg 6 va_sM - va_get_reg 8 va_sM) < pow2_64) /\
    label va_range1
    "***** POSTCONDITION NOT MET AT line 516 column 49 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 7 va_sM + 16 `op_Multiply` (va_get_reg 6 va_sM - va_get_reg 8 va_sM) < pow2_64) /\
    label va_range1
    "***** POSTCONDITION NOT MET AT line 517 column 56 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 va_in_in_b ==
    Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 va_in_out_b) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 518 column 118 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.AES.GCTR_BE.partial_seq_agreement va_in_plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    va_in_in_b)) (va_get_reg 8 va_sM) (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 519 column 26 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 6 va_sM < pow2_32) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 522 column 79 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (aes_reqs alg va_in_key va_in_round_keys va_in_keys_b (va_get_reg 4 va_sM) (va_get_mem_heaplet
    0 va_sM) (va_get_mem_layout va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 525 column 38 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 8 va_sM == Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 1 0 0 0) /\ label
    va_range1
    "***** POSTCONDITION NOT MET AT line 526 column 38 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 9 va_sM == Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 2 0 0 0) /\ label
    va_range1
    "***** POSTCONDITION NOT MET AT line 527 column 40 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 10 va_sM == Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 3 0 0 0) /\ label
    va_range1
    "***** POSTCONDITION NOT MET AT line 528 column 39 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 11 va_sM == Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 4 0 0 0) /\ label
    va_range1
    "***** POSTCONDITION NOT MET AT line 529 column 39 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 12 va_sM == Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 5 0 0 0) /\ label
    va_range1
    "***** POSTCONDITION NOT MET AT line 530 column 38 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 13 va_sM == Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 6 0 0 0) /\ label
    va_range1
    "***** POSTCONDITION NOT MET AT line 532 column 24 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 27 va_sM == 1 `op_Multiply` 16) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 533 column 24 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 28 va_sM == 2 `op_Multiply` 16) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 534 column 24 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 29 va_sM == 3 `op_Multiply` 16) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 535 column 24 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 30 va_sM == 4 `op_Multiply` 16) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 536 column 24 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 31 va_sM == 5 `op_Multiply` 16) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 539 column 57 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.modifies_buffer128 va_in_out_b (va_get_mem_heaplet 1 va_old)
    (va_get_mem_heaplet 1 va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 540 column 113 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 8 va_sM) va_in_plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    va_in_out_b)) va_in_key (va_get_vec 7 va_old)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 541 column 71 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 6 va_sM == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) va_in_out_b
    == Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_old) va_in_out_b) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 543 column 43 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 3 va_sM == va_get_reg 3 va_old + 16 `op_Multiply` va_get_reg 8 va_sM) /\ label
    va_range1
    "***** POSTCONDITION NOT MET AT line 544 column 45 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 7 va_sM == va_get_reg 7 va_old + 16 `op_Multiply` va_get_reg 8 va_sM) /\ label
    va_range1
    "***** POSTCONDITION NOT MET AT line 545 column 9 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (precedes_wrap (va_get_reg 6 va_sM - va_get_reg 8 va_sM) (va_get_reg 6 va_s0 - va_get_reg 8
    va_s0))) in
  assert_norm (va_qc.mods == va_mods);
  va_lemma_norm_mods ([va_Mod_vec 7; va_Mod_vec 6; va_Mod_vec 5; va_Mod_vec 4; va_Mod_vec 3;
    va_Mod_vec 2; va_Mod_vec 19; va_Mod_vec 18; va_Mod_vec 17; va_Mod_vec 16; va_Mod_vec 15;
    va_Mod_vec 14; va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg 8; va_Mod_reg 7; va_Mod_reg 3; va_Mod_reg
    10; va_Mod_ok; va_Mod_mem; va_Mod_mem_heaplet 1; va_Mod_cr0]) va_sM va_s0;
  (va_sM, va_fM)

[@ va_qattr]
let va_wp_Gctr_blocks128_6way_body0 (va_old:va_state) (alg:algorithm) (va_in_in_b:buffer128)
  (va_in_key:(seq nat32)) (va_in_keys_b:buffer128) (va_in_out_b:buffer128) (va_in_plain_quads:(seq
  quad32)) (va_in_round_keys:(seq quad32)) (va_s0:va_state) (va_k:(va_state -> unit -> Type0)) :
  Type0 =
  (va_get_ok va_s0 /\ (va_get_reg 6 va_s0 - va_get_reg 8 va_s0) `op_Modulus` 6 == 0 /\ (0 <=
    va_get_reg 8 va_s0 /\ va_get_reg 8 va_s0 <= va_get_reg 6 va_s0) /\ va_get_vec 7 va_s0 ==
    Vale.AES.GCTR_BE.inc32lite (va_get_vec 7 va_old) (va_get_reg 8 va_s0) /\
    (Vale.PPC64LE.Decls.buffers_disjoint128 va_in_in_b va_in_out_b \/ va_in_in_b == va_in_out_b) /\
    Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 3 va_s0)
    va_in_in_b (va_get_reg 8 va_s0) (va_get_reg 6 va_s0 - va_get_reg 8 va_s0) (va_get_mem_layout
    va_s0) Secret /\ Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_s0)
    (va_get_reg 7 va_s0) va_in_out_b (va_get_reg 8 va_s0) (va_get_reg 6 va_s0 - va_get_reg 8 va_s0)
    (va_get_mem_layout va_s0) Secret /\ va_get_reg 3 va_s0 + 16 `op_Multiply` (va_get_reg 6 va_s0 -
    va_get_reg 8 va_s0) < pow2_64 /\ va_get_reg 7 va_s0 + 16 `op_Multiply` (va_get_reg 6 va_s0 -
    va_get_reg 8 va_s0) < pow2_64 /\ Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128
    va_in_in_b == Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 va_in_out_b /\
    Vale.AES.GCTR_BE.partial_seq_agreement va_in_plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0)
    va_in_in_b)) (va_get_reg 8 va_s0) (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b) /\ va_get_reg 6 va_s0 < pow2_32 /\ aes_reqs alg
    va_in_key va_in_round_keys va_in_keys_b (va_get_reg 4 va_s0) (va_get_mem_heaplet 0 va_s0)
    (va_get_mem_layout va_s0) /\ va_get_vec 8 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 1 0 0 0 /\ va_get_vec 9 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 2 0 0 0 /\ va_get_vec 10 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 3 0 0 0 /\ va_get_vec 11 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 4 0 0 0 /\ va_get_vec 12 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 5 0 0 0 /\ va_get_vec 13 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 6 0 0 0 /\ va_get_reg 27 va_s0 == 1 `op_Multiply` 16 /\ va_get_reg 28
    va_s0 == 2 `op_Multiply` 16 /\ va_get_reg 29 va_s0 == 3 `op_Multiply` 16 /\ va_get_reg 30 va_s0
    == 4 `op_Multiply` 16 /\ va_get_reg 31 va_s0 == 5 `op_Multiply` 16 /\
    Vale.PPC64LE.Decls.modifies_buffer128 va_in_out_b (va_get_mem_heaplet 1 va_old)
    (va_get_mem_heaplet 1 va_s0) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 8 va_s0)
    va_in_plain_quads (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128
    (va_get_mem_heaplet 1 va_s0) va_in_out_b)) va_in_key (va_get_vec 7 va_old) /\ (va_get_reg 6
    va_s0 == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0) va_in_out_b ==
    Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_old) va_in_out_b) /\ va_get_reg 3 va_s0 ==
    va_get_reg 3 va_old + 16 `op_Multiply` va_get_reg 8 va_s0 /\ va_get_reg 7 va_s0 == va_get_reg 7
    va_old + 16 `op_Multiply` va_get_reg 8 va_s0 /\ va_get_reg 8 va_s0 =!= va_get_reg 6 va_s0 /\
    (forall (va_x_cr0:cr0_t) (va_x_heap1:vale_heap) (va_x_mem:vale_heap) (va_x_ok:bool)
    (va_x_r10:nat64) (va_x_r3:nat64) (va_x_r7:nat64) (va_x_r8:nat64) (va_x_v0:quad32)
    (va_x_v1:quad32) (va_x_v14:quad32) (va_x_v15:quad32) (va_x_v16:quad32) (va_x_v17:quad32)
    (va_x_v18:quad32) (va_x_v19:quad32) (va_x_v2:quad32) (va_x_v3:quad32) (va_x_v4:quad32)
    (va_x_v5:quad32) (va_x_v6:quad32) (va_x_v7:quad32) . let va_sM = va_upd_vec 7 va_x_v7
    (va_upd_vec 6 va_x_v6 (va_upd_vec 5 va_x_v5 (va_upd_vec 4 va_x_v4 (va_upd_vec 3 va_x_v3
    (va_upd_vec 2 va_x_v2 (va_upd_vec 19 va_x_v19 (va_upd_vec 18 va_x_v18 (va_upd_vec 17 va_x_v17
    (va_upd_vec 16 va_x_v16 (va_upd_vec 15 va_x_v15 (va_upd_vec 14 va_x_v14 (va_upd_vec 1 va_x_v1
    (va_upd_vec 0 va_x_v0 (va_upd_reg 8 va_x_r8 (va_upd_reg 7 va_x_r7 (va_upd_reg 3 va_x_r3
    (va_upd_reg 10 va_x_r10 (va_upd_ok va_x_ok (va_upd_mem va_x_mem (va_upd_mem_heaplet 1
    va_x_heap1 (va_upd_cr0 va_x_cr0 va_s0))))))))))))))))))))) in va_get_ok va_sM /\ (va_get_reg 6
    va_sM - va_get_reg 8 va_sM) `op_Modulus` 6 == 0 /\ (0 <= va_get_reg 8 va_sM /\ va_get_reg 8
    va_sM <= va_get_reg 6 va_sM) /\ va_get_vec 7 va_sM == Vale.AES.GCTR_BE.inc32lite (va_get_vec 7
    va_old) (va_get_reg 8 va_sM) /\ (Vale.PPC64LE.Decls.buffers_disjoint128 va_in_in_b va_in_out_b
    \/ va_in_in_b == va_in_out_b) /\ Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet
    1 va_sM) (va_get_reg 3 va_sM) va_in_in_b (va_get_reg 8 va_sM) (va_get_reg 6 va_sM - va_get_reg
    8 va_sM) (va_get_mem_layout va_sM) Secret /\ Vale.PPC64LE.Decls.validDstAddrsOffset128
    (va_get_mem_heaplet 1 va_sM) (va_get_reg 7 va_sM) va_in_out_b (va_get_reg 8 va_sM) (va_get_reg
    6 va_sM - va_get_reg 8 va_sM) (va_get_mem_layout va_sM) Secret /\ va_get_reg 3 va_sM + 16
    `op_Multiply` (va_get_reg 6 va_sM - va_get_reg 8 va_sM) < pow2_64 /\ va_get_reg 7 va_sM + 16
    `op_Multiply` (va_get_reg 6 va_sM - va_get_reg 8 va_sM) < pow2_64 /\
    Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 va_in_in_b ==
    Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 va_in_out_b /\
    Vale.AES.GCTR_BE.partial_seq_agreement va_in_plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    va_in_in_b)) (va_get_reg 8 va_sM) (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b) /\ va_get_reg 6 va_sM < pow2_32 /\ aes_reqs alg
    va_in_key va_in_round_keys va_in_keys_b (va_get_reg 4 va_sM) (va_get_mem_heaplet 0 va_sM)
    (va_get_mem_layout va_sM) /\ va_get_vec 8 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 1 0 0 0 /\ va_get_vec 9 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 2 0 0 0 /\ va_get_vec 10 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 3 0 0 0 /\ va_get_vec 11 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 4 0 0 0 /\ va_get_vec 12 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 5 0 0 0 /\ va_get_vec 13 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 6 0 0 0 /\ va_get_reg 27 va_sM == 1 `op_Multiply` 16 /\ va_get_reg 28
    va_sM == 2 `op_Multiply` 16 /\ va_get_reg 29 va_sM == 3 `op_Multiply` 16 /\ va_get_reg 30 va_sM
    == 4 `op_Multiply` 16 /\ va_get_reg 31 va_sM == 5 `op_Multiply` 16 /\
    Vale.PPC64LE.Decls.modifies_buffer128 va_in_out_b (va_get_mem_heaplet 1 va_old)
    (va_get_mem_heaplet 1 va_sM) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 8 va_sM)
    va_in_plain_quads (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128
    (va_get_mem_heaplet 1 va_sM) va_in_out_b)) va_in_key (va_get_vec 7 va_old) /\ (va_get_reg 6
    va_sM == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) va_in_out_b ==
    Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_old) va_in_out_b) /\ va_get_reg 3 va_sM ==
    va_get_reg 3 va_old + 16 `op_Multiply` va_get_reg 8 va_sM /\ va_get_reg 7 va_sM == va_get_reg 7
    va_old + 16 `op_Multiply` va_get_reg 8 va_sM /\ precedes_wrap (va_get_reg 6 va_sM - va_get_reg
    8 va_sM) (va_get_reg 6 va_s0 - va_get_reg 8 va_s0) ==> va_k va_sM (())))


val va_wpProof_Gctr_blocks128_6way_body0 : va_old:va_state -> alg:algorithm -> va_in_in_b:buffer128
  -> va_in_key:(seq nat32) -> va_in_keys_b:buffer128 -> va_in_out_b:buffer128 ->
  va_in_plain_quads:(seq quad32) -> va_in_round_keys:(seq 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_Gctr_blocks128_6way_body0 va_old alg va_in_in_b va_in_key
    va_in_keys_b va_in_out_b va_in_plain_quads va_in_round_keys va_s0 va_k))
  (ensures (fun (va_sM, va_f0, va_g) -> va_t_ensure (va_code_Gctr_blocks128_6way_body0 alg)
    ([va_Mod_vec 7; va_Mod_vec 6; va_Mod_vec 5; va_Mod_vec 4; va_Mod_vec 3; va_Mod_vec 2;
    va_Mod_vec 19; va_Mod_vec 18; va_Mod_vec 17; va_Mod_vec 16; va_Mod_vec 15; va_Mod_vec 14;
    va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg 8; va_Mod_reg 7; va_Mod_reg 3; va_Mod_reg 10; va_Mod_ok;
    va_Mod_mem; va_Mod_mem_heaplet 1; va_Mod_cr0]) va_s0 va_k ((va_sM, va_f0, va_g))))
[@"opaque_to_smt"]
let va_wpProof_Gctr_blocks128_6way_body0 va_old alg va_in_in_b va_in_key va_in_keys_b va_in_out_b
  va_in_plain_quads va_in_round_keys va_s0 va_k =
  let (va_sM, va_f0) = va_lemma_Gctr_blocks128_6way_body0 (va_code_Gctr_blocks128_6way_body0 alg)
    va_s0 va_old alg va_in_in_b va_in_key va_in_keys_b va_in_out_b va_in_plain_quads
    va_in_round_keys in
  va_lemma_upd_update va_sM;
  assert (va_state_eq va_sM (va_update_vec 7 va_sM (va_update_vec 6 va_sM (va_update_vec 5 va_sM
    (va_update_vec 4 va_sM (va_update_vec 3 va_sM (va_update_vec 2 va_sM (va_update_vec 19 va_sM
    (va_update_vec 18 va_sM (va_update_vec 17 va_sM (va_update_vec 16 va_sM (va_update_vec 15 va_sM
    (va_update_vec 14 va_sM (va_update_vec 1 va_sM (va_update_vec 0 va_sM (va_update_reg 8 va_sM
    (va_update_reg 7 va_sM (va_update_reg 3 va_sM (va_update_reg 10 va_sM (va_update_ok va_sM
    (va_update_mem va_sM (va_update_mem_heaplet 1 va_sM (va_update_cr0 va_sM
    va_s0)))))))))))))))))))))));
  va_lemma_norm_mods ([va_Mod_vec 7; va_Mod_vec 6; va_Mod_vec 5; va_Mod_vec 4; va_Mod_vec 3;
    va_Mod_vec 2; va_Mod_vec 19; va_Mod_vec 18; va_Mod_vec 17; va_Mod_vec 16; va_Mod_vec 15;
    va_Mod_vec 14; va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg 8; va_Mod_reg 7; va_Mod_reg 3; va_Mod_reg
    10; va_Mod_ok; va_Mod_mem; va_Mod_mem_heaplet 1; va_Mod_cr0]) va_sM va_s0;
  let va_g = () in
  (va_sM, va_f0, va_g)

[@ "opaque_to_smt" va_qattr]
let va_quick_Gctr_blocks128_6way_body0 (va_old:va_state) (alg:algorithm) (va_in_in_b:buffer128)
  (va_in_key:(seq nat32)) (va_in_keys_b:buffer128) (va_in_out_b:buffer128) (va_in_plain_quads:(seq
  quad32)) (va_in_round_keys:(seq quad32)) : (va_quickCode unit (va_code_Gctr_blocks128_6way_body0
  alg)) =
  (va_QProc (va_code_Gctr_blocks128_6way_body0 alg) ([va_Mod_vec 7; va_Mod_vec 6; va_Mod_vec 5;
    va_Mod_vec 4; va_Mod_vec 3; va_Mod_vec 2; va_Mod_vec 19; va_Mod_vec 18; va_Mod_vec 17;
    va_Mod_vec 16; va_Mod_vec 15; va_Mod_vec 14; va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg 8;
    va_Mod_reg 7; va_Mod_reg 3; va_Mod_reg 10; va_Mod_ok; va_Mod_mem; va_Mod_mem_heaplet 1;
    va_Mod_cr0]) (va_wp_Gctr_blocks128_6way_body0 va_old alg va_in_in_b va_in_key va_in_keys_b
    va_in_out_b va_in_plain_quads va_in_round_keys) (va_wpProof_Gctr_blocks128_6way_body0 va_old
    alg va_in_in_b va_in_key va_in_keys_b va_in_out_b va_in_plain_quads va_in_round_keys))
#pop-options
//--
//-- Gctr_blocks128_6way_while0
#push-options "--z3rlimit 30"

val va_code_Gctr_blocks128_6way_while0 : alg:algorithm -> Tot va_code
[@ "opaque_to_smt" va_qattr]
let va_code_Gctr_blocks128_6way_while0 alg =
  (va_Block (va_CCons (va_While (va_cmp_ne (va_op_cmp_reg 8) (va_op_cmp_reg 6)) (va_Block (va_CCons
    (va_code_Gctr_blocks128_6way_body0 alg) (va_CNil ())))) (va_CNil ())))

val va_codegen_success_Gctr_blocks128_6way_while0 : alg:algorithm -> Tot va_pbool
[@ "opaque_to_smt" va_qattr]
let va_codegen_success_Gctr_blocks128_6way_while0 alg =
  (va_pbool_and (va_codegen_success_Gctr_blocks128_6way_body0 alg) (va_ttrue ()))

[@ "opaque_to_smt" va_qattr]
let va_qcode_Gctr_blocks128_6way_while0 (va_mods:va_mods_t) (va_old:va_state) (alg:algorithm)
  (va_in_in_b:buffer128) (va_in_key:(seq nat32)) (va_in_keys_b:buffer128) (va_in_out_b:buffer128)
  (va_in_plain_quads:(seq quad32)) (va_in_round_keys:(seq quad32)) : (va_quickCode unit
  (va_code_Gctr_blocks128_6way_while0 alg)) =
  (qblock va_mods (fun (va_s:va_state) -> let (va_old_s:va_state) = va_s in let (in_b:buffer128) =
    va_in_in_b in let (key:(seq nat32)) = va_in_key in let (keys_b:buffer128) = va_in_keys_b in let
    (out_b:buffer128) = va_in_out_b in let (plain_quads:(seq quad32)) = va_in_plain_quads in let
    (round_keys:(seq quad32)) = va_in_round_keys in va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 430 column 1 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_qWhile va_mods (Cmp_ne (va_op_cmp_reg 8) (va_op_cmp_reg 6)) (fun va_g -> qblock va_mods
    (fun (va_s:va_state) -> va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 430 column 1 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Gctr_blocks128_6way_body0 va_old alg in_b key keys_b out_b plain_quads round_keys)
    (va_QEmpty (())))) (fun (va_s:va_state) va_g -> va_get_ok va_s /\ (va_get_reg 6 va_s -
    va_get_reg 8 va_s) `op_Modulus` 6 == 0 /\ (0 <= va_get_reg 8 va_s /\ va_get_reg 8 va_s <=
    va_get_reg 6 va_s) /\ va_get_vec 7 va_s == Vale.AES.GCTR_BE.inc32lite (va_get_vec 7 va_old)
    (va_get_reg 8 va_s) /\ (Vale.PPC64LE.Decls.buffers_disjoint128 in_b out_b \/ in_b == out_b) /\
    Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_s) (va_get_reg 3 va_s) in_b
    (va_get_reg 8 va_s) (va_get_reg 6 va_s - va_get_reg 8 va_s) (va_get_mem_layout va_s) Secret /\
    Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_s) (va_get_reg 7 va_s) out_b
    (va_get_reg 8 va_s) (va_get_reg 6 va_s - va_get_reg 8 va_s) (va_get_mem_layout va_s) Secret /\
    va_get_reg 3 va_s + 16 `op_Multiply` (va_get_reg 6 va_s - va_get_reg 8 va_s) < pow2_64 /\
    va_get_reg 7 va_s + 16 `op_Multiply` (va_get_reg 6 va_s - va_get_reg 8 va_s) < pow2_64 /\
    Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b ==
    Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 out_b /\
    Vale.AES.GCTR_BE.partial_seq_agreement plain_quads (Vale.Arch.Types.reverse_bytes_quad32_seq
    (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s) in_b)) (va_get_reg 8 va_s)
    (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b) /\ va_get_reg 6 va_s <
    pow2_32 /\ aes_reqs alg key round_keys keys_b (va_get_reg 4 va_s) (va_get_mem_heaplet 0 va_s)
    (va_get_mem_layout va_s) /\ va_get_vec 8 va_s == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 1 0 0 0 /\ va_get_vec 9 va_s == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 2 0 0 0 /\ va_get_vec 10 va_s == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 3 0 0 0 /\ va_get_vec 11 va_s == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 4 0 0 0 /\ va_get_vec 12 va_s == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 5 0 0 0 /\ va_get_vec 13 va_s == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 6 0 0 0 /\ va_get_reg 27 va_s == 1 `op_Multiply` 16 /\ va_get_reg 28
    va_s == 2 `op_Multiply` 16 /\ va_get_reg 29 va_s == 3 `op_Multiply` 16 /\ va_get_reg 30 va_s ==
    4 `op_Multiply` 16 /\ va_get_reg 31 va_s == 5 `op_Multiply` 16 /\
    Vale.PPC64LE.Decls.modifies_buffer128 out_b (va_get_mem_heaplet 1 va_old) (va_get_mem_heaplet 1
    va_s) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 8 va_s) plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s)
    out_b)) key (va_get_vec 7 va_old) /\ (va_get_reg 6 va_s == 0 ==> Vale.PPC64LE.Decls.s128
    (va_get_mem_heaplet 1 va_s) out_b == Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_old)
    out_b) /\ va_get_reg 3 va_s == va_get_reg 3 va_old + 16 `op_Multiply` va_get_reg 8 va_s /\
    va_get_reg 7 va_s == va_get_reg 7 va_old + 16 `op_Multiply` va_get_reg 8 va_s) (fun
    (va_s:va_state) va_g -> va_get_reg 6 va_s - va_get_reg 8 va_s) (())) (fun (va_s:va_state) va_g
    -> let va_g = () in va_QEmpty (()))))


val va_lemma_Gctr_blocks128_6way_while0 : va_b0:va_code -> va_s0:va_state -> va_old:va_state ->
  alg:algorithm -> va_in_in_b:buffer128 -> va_in_key:(seq nat32) -> va_in_keys_b:buffer128 ->
  va_in_out_b:buffer128 -> va_in_plain_quads:(seq quad32) -> va_in_round_keys:(seq quad32)
  -> Ghost (va_state & va_fuel)
  (requires (va_require_total va_b0 (va_code_Gctr_blocks128_6way_while0 alg) va_s0 /\ va_get_ok
    va_s0 /\ (va_get_reg 6 va_s0 - va_get_reg 8 va_s0) `op_Modulus` 6 == 0 /\ (0 <= va_get_reg 8
    va_s0 /\ va_get_reg 8 va_s0 <= va_get_reg 6 va_s0) /\ va_get_vec 7 va_s0 ==
    Vale.AES.GCTR_BE.inc32lite (va_get_vec 7 va_old) (va_get_reg 8 va_s0) /\
    (Vale.PPC64LE.Decls.buffers_disjoint128 va_in_in_b va_in_out_b \/ va_in_in_b == va_in_out_b) /\
    Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 3 va_s0)
    va_in_in_b (va_get_reg 8 va_s0) (va_get_reg 6 va_s0 - va_get_reg 8 va_s0) (va_get_mem_layout
    va_s0) Secret /\ Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_s0)
    (va_get_reg 7 va_s0) va_in_out_b (va_get_reg 8 va_s0) (va_get_reg 6 va_s0 - va_get_reg 8 va_s0)
    (va_get_mem_layout va_s0) Secret /\ va_get_reg 3 va_s0 + 16 `op_Multiply` (va_get_reg 6 va_s0 -
    va_get_reg 8 va_s0) < pow2_64 /\ va_get_reg 7 va_s0 + 16 `op_Multiply` (va_get_reg 6 va_s0 -
    va_get_reg 8 va_s0) < pow2_64 /\ Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128
    va_in_in_b == Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 va_in_out_b /\
    Vale.AES.GCTR_BE.partial_seq_agreement va_in_plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0)
    va_in_in_b)) (va_get_reg 8 va_s0) (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b) /\ va_get_reg 6 va_s0 < pow2_32 /\ aes_reqs alg
    va_in_key va_in_round_keys va_in_keys_b (va_get_reg 4 va_s0) (va_get_mem_heaplet 0 va_s0)
    (va_get_mem_layout va_s0) /\ va_get_vec 8 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 1 0 0 0 /\ va_get_vec 9 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 2 0 0 0 /\ va_get_vec 10 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 3 0 0 0 /\ va_get_vec 11 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 4 0 0 0 /\ va_get_vec 12 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 5 0 0 0 /\ va_get_vec 13 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 6 0 0 0 /\ va_get_reg 27 va_s0 == 1 `op_Multiply` 16 /\ va_get_reg 28
    va_s0 == 2 `op_Multiply` 16 /\ va_get_reg 29 va_s0 == 3 `op_Multiply` 16 /\ va_get_reg 30 va_s0
    == 4 `op_Multiply` 16 /\ va_get_reg 31 va_s0 == 5 `op_Multiply` 16 /\
    Vale.PPC64LE.Decls.modifies_buffer128 va_in_out_b (va_get_mem_heaplet 1 va_old)
    (va_get_mem_heaplet 1 va_s0) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 8 va_s0)
    va_in_plain_quads (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128
    (va_get_mem_heaplet 1 va_s0) va_in_out_b)) va_in_key (va_get_vec 7 va_old) /\ (va_get_reg 6
    va_s0 == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0) va_in_out_b ==
    Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_old) va_in_out_b) /\ va_get_reg 3 va_s0 ==
    va_get_reg 3 va_old + 16 `op_Multiply` va_get_reg 8 va_s0 /\ va_get_reg 7 va_s0 == va_get_reg 7
    va_old + 16 `op_Multiply` va_get_reg 8 va_s0))
  (ensures (fun (va_sM, va_fM) -> va_ensure_total va_b0 va_s0 va_sM va_fM /\ va_get_ok va_sM /\
    (va_get_reg 6 va_sM - va_get_reg 8 va_sM) `op_Modulus` 6 == 0 /\ (0 <= va_get_reg 8 va_sM /\
    va_get_reg 8 va_sM <= va_get_reg 6 va_sM) /\ va_get_vec 7 va_sM == Vale.AES.GCTR_BE.inc32lite
    (va_get_vec 7 va_old) (va_get_reg 8 va_sM) /\ (Vale.PPC64LE.Decls.buffers_disjoint128
    va_in_in_b va_in_out_b \/ va_in_in_b == va_in_out_b) /\
    Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_sM) (va_get_reg 3 va_sM)
    va_in_in_b (va_get_reg 8 va_sM) (va_get_reg 6 va_sM - va_get_reg 8 va_sM) (va_get_mem_layout
    va_sM) Secret /\ Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_sM)
    (va_get_reg 7 va_sM) va_in_out_b (va_get_reg 8 va_sM) (va_get_reg 6 va_sM - va_get_reg 8 va_sM)
    (va_get_mem_layout va_sM) Secret /\ va_get_reg 3 va_sM + 16 `op_Multiply` (va_get_reg 6 va_sM -
    va_get_reg 8 va_sM) < pow2_64 /\ va_get_reg 7 va_sM + 16 `op_Multiply` (va_get_reg 6 va_sM -
    va_get_reg 8 va_sM) < pow2_64 /\ Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128
    va_in_in_b == Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 va_in_out_b /\
    Vale.AES.GCTR_BE.partial_seq_agreement va_in_plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    va_in_in_b)) (va_get_reg 8 va_sM) (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b) /\ va_get_reg 6 va_sM < pow2_32 /\ aes_reqs alg
    va_in_key va_in_round_keys va_in_keys_b (va_get_reg 4 va_sM) (va_get_mem_heaplet 0 va_sM)
    (va_get_mem_layout va_sM) /\ va_get_vec 8 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 1 0 0 0 /\ va_get_vec 9 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 2 0 0 0 /\ va_get_vec 10 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 3 0 0 0 /\ va_get_vec 11 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 4 0 0 0 /\ va_get_vec 12 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 5 0 0 0 /\ va_get_vec 13 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 6 0 0 0 /\ va_get_reg 27 va_sM == 1 `op_Multiply` 16 /\ va_get_reg 28
    va_sM == 2 `op_Multiply` 16 /\ va_get_reg 29 va_sM == 3 `op_Multiply` 16 /\ va_get_reg 30 va_sM
    == 4 `op_Multiply` 16 /\ va_get_reg 31 va_sM == 5 `op_Multiply` 16 /\
    Vale.PPC64LE.Decls.modifies_buffer128 va_in_out_b (va_get_mem_heaplet 1 va_old)
    (va_get_mem_heaplet 1 va_sM) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 8 va_sM)
    va_in_plain_quads (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128
    (va_get_mem_heaplet 1 va_sM) va_in_out_b)) va_in_key (va_get_vec 7 va_old) /\ (va_get_reg 6
    va_sM == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) va_in_out_b ==
    Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_old) va_in_out_b) /\ va_get_reg 3 va_sM ==
    va_get_reg 3 va_old + 16 `op_Multiply` va_get_reg 8 va_sM /\ va_get_reg 7 va_sM == va_get_reg 7
    va_old + 16 `op_Multiply` va_get_reg 8 va_sM /\ ~(va_get_reg 8 va_sM =!= va_get_reg 6 va_sM) /\
    va_state_eq va_sM (va_update_vec 7 va_sM (va_update_vec 6 va_sM (va_update_vec 5 va_sM
    (va_update_vec 4 va_sM (va_update_vec 3 va_sM (va_update_vec 2 va_sM (va_update_vec 19 va_sM
    (va_update_vec 18 va_sM (va_update_vec 17 va_sM (va_update_vec 16 va_sM (va_update_vec 15 va_sM
    (va_update_vec 14 va_sM (va_update_vec 1 va_sM (va_update_vec 0 va_sM (va_update_reg 8 va_sM
    (va_update_reg 7 va_sM (va_update_reg 3 va_sM (va_update_reg 10 va_sM (va_update_ok va_sM
    (va_update_mem va_sM (va_update_mem_heaplet 1 va_sM (va_update_cr0 va_sM
    va_s0))))))))))))))))))))))))
[@"opaque_to_smt"]
let va_lemma_Gctr_blocks128_6way_while0 va_b0 va_s0 va_old alg va_in_in_b va_in_key va_in_keys_b
  va_in_out_b va_in_plain_quads va_in_round_keys =
  let va_old = va_expand_state va_old in
  let (va_mods:va_mods_t) = [va_Mod_vec 7; va_Mod_vec 6; va_Mod_vec 5; va_Mod_vec 4; va_Mod_vec 3;
    va_Mod_vec 2; va_Mod_vec 19; va_Mod_vec 18; va_Mod_vec 17; va_Mod_vec 16; va_Mod_vec 15;
    va_Mod_vec 14; va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg 8; va_Mod_reg 7; va_Mod_reg 3; va_Mod_reg
    10; va_Mod_ok; va_Mod_mem; va_Mod_mem_heaplet 1; va_Mod_cr0] in
  let va_qc = va_qcode_Gctr_blocks128_6way_while0 va_mods va_old alg va_in_in_b va_in_key
    va_in_keys_b va_in_out_b va_in_plain_quads va_in_round_keys in
  let (va_sM, va_fM, va_g) = va_wp_sound_code_norm (va_code_Gctr_blocks128_6way_while0 alg) va_qc
    va_s0 (fun va_s0 va_sM va_g -> let () = va_g in label va_range1
    "***** POSTCONDITION NOT MET AT line 430 column 1 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_ok va_sM) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 506 column 33 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    ((va_get_reg 6 va_sM - va_get_reg 8 va_sM) `op_Modulus` 6 == 0) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 507 column 28 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (0 <= va_get_reg 8 va_sM /\ va_get_reg 8 va_sM <= va_get_reg 6 va_sM) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 508 column 44 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 7 va_sM == Vale.AES.GCTR_BE.inc32lite (va_get_vec 7 va_old) (va_get_reg 8 va_sM))
    /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 512 column 62 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.buffers_disjoint128 va_in_in_b va_in_out_b \/ va_in_in_b == va_in_out_b) /\
    label va_range1
    "***** POSTCONDITION NOT MET AT line 513 column 93 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_sM) (va_get_reg 3 va_sM)
    va_in_in_b (va_get_reg 8 va_sM) (va_get_reg 6 va_sM - va_get_reg 8 va_sM) (va_get_mem_layout
    va_sM) Secret) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 514 column 93 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_sM) (va_get_reg 7 va_sM)
    va_in_out_b (va_get_reg 8 va_sM) (va_get_reg 6 va_sM - va_get_reg 8 va_sM) (va_get_mem_layout
    va_sM) Secret) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 515 column 49 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 3 va_sM + 16 `op_Multiply` (va_get_reg 6 va_sM - va_get_reg 8 va_sM) < pow2_64) /\
    label va_range1
    "***** POSTCONDITION NOT MET AT line 516 column 49 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 7 va_sM + 16 `op_Multiply` (va_get_reg 6 va_sM - va_get_reg 8 va_sM) < pow2_64) /\
    label va_range1
    "***** POSTCONDITION NOT MET AT line 517 column 56 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 va_in_in_b ==
    Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 va_in_out_b) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 518 column 118 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.AES.GCTR_BE.partial_seq_agreement va_in_plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    va_in_in_b)) (va_get_reg 8 va_sM) (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 519 column 26 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 6 va_sM < pow2_32) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 522 column 79 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (aes_reqs alg va_in_key va_in_round_keys va_in_keys_b (va_get_reg 4 va_sM) (va_get_mem_heaplet
    0 va_sM) (va_get_mem_layout va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 525 column 38 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 8 va_sM == Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 1 0 0 0) /\ label
    va_range1
    "***** POSTCONDITION NOT MET AT line 526 column 38 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 9 va_sM == Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 2 0 0 0) /\ label
    va_range1
    "***** POSTCONDITION NOT MET AT line 527 column 40 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 10 va_sM == Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 3 0 0 0) /\ label
    va_range1
    "***** POSTCONDITION NOT MET AT line 528 column 39 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 11 va_sM == Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 4 0 0 0) /\ label
    va_range1
    "***** POSTCONDITION NOT MET AT line 529 column 39 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 12 va_sM == Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 5 0 0 0) /\ label
    va_range1
    "***** POSTCONDITION NOT MET AT line 530 column 38 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 13 va_sM == Vale.Def.Words_s.Mkfour #Vale.Def.Types_s.nat32 6 0 0 0) /\ label
    va_range1
    "***** POSTCONDITION NOT MET AT line 532 column 24 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 27 va_sM == 1 `op_Multiply` 16) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 533 column 24 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 28 va_sM == 2 `op_Multiply` 16) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 534 column 24 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 29 va_sM == 3 `op_Multiply` 16) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 535 column 24 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 30 va_sM == 4 `op_Multiply` 16) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 536 column 24 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 31 va_sM == 5 `op_Multiply` 16) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 539 column 57 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.modifies_buffer128 va_in_out_b (va_get_mem_heaplet 1 va_old)
    (va_get_mem_heaplet 1 va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 540 column 113 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 8 va_sM) va_in_plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    va_in_out_b)) va_in_key (va_get_vec 7 va_old)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 541 column 71 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 6 va_sM == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) va_in_out_b
    == Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_old) va_in_out_b) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 543 column 43 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 3 va_sM == va_get_reg 3 va_old + 16 `op_Multiply` va_get_reg 8 va_sM) /\ label
    va_range1
    "***** POSTCONDITION NOT MET AT line 544 column 45 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 7 va_sM == va_get_reg 7 va_old + 16 `op_Multiply` va_get_reg 8 va_sM) /\ label
    va_range1
    "***** POSTCONDITION NOT MET AT line 430 column 1 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (~(va_get_reg 8 va_sM =!= va_get_reg 6 va_sM))) in
  assert_norm (va_qc.mods == va_mods);
  va_lemma_norm_mods ([va_Mod_vec 7; va_Mod_vec 6; va_Mod_vec 5; va_Mod_vec 4; va_Mod_vec 3;
    va_Mod_vec 2; va_Mod_vec 19; va_Mod_vec 18; va_Mod_vec 17; va_Mod_vec 16; va_Mod_vec 15;
    va_Mod_vec 14; va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg 8; va_Mod_reg 7; va_Mod_reg 3; va_Mod_reg
    10; va_Mod_ok; va_Mod_mem; va_Mod_mem_heaplet 1; va_Mod_cr0]) va_sM va_s0;
  (va_sM, va_fM)

[@ va_qattr]
let va_wp_Gctr_blocks128_6way_while0 (va_old:va_state) (alg:algorithm) (va_in_in_b:buffer128)
  (va_in_key:(seq nat32)) (va_in_keys_b:buffer128) (va_in_out_b:buffer128) (va_in_plain_quads:(seq
  quad32)) (va_in_round_keys:(seq quad32)) (va_s0:va_state) (va_k:(va_state -> unit -> Type0)) :
  Type0 =
  (va_get_ok va_s0 /\ (va_get_reg 6 va_s0 - va_get_reg 8 va_s0) `op_Modulus` 6 == 0 /\ (0 <=
    va_get_reg 8 va_s0 /\ va_get_reg 8 va_s0 <= va_get_reg 6 va_s0) /\ va_get_vec 7 va_s0 ==
    Vale.AES.GCTR_BE.inc32lite (va_get_vec 7 va_old) (va_get_reg 8 va_s0) /\
    (Vale.PPC64LE.Decls.buffers_disjoint128 va_in_in_b va_in_out_b \/ va_in_in_b == va_in_out_b) /\
    Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 3 va_s0)
    va_in_in_b (va_get_reg 8 va_s0) (va_get_reg 6 va_s0 - va_get_reg 8 va_s0) (va_get_mem_layout
    va_s0) Secret /\ Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_s0)
    (va_get_reg 7 va_s0) va_in_out_b (va_get_reg 8 va_s0) (va_get_reg 6 va_s0 - va_get_reg 8 va_s0)
    (va_get_mem_layout va_s0) Secret /\ va_get_reg 3 va_s0 + 16 `op_Multiply` (va_get_reg 6 va_s0 -
    va_get_reg 8 va_s0) < pow2_64 /\ va_get_reg 7 va_s0 + 16 `op_Multiply` (va_get_reg 6 va_s0 -
    va_get_reg 8 va_s0) < pow2_64 /\ Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128
    va_in_in_b == Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 va_in_out_b /\
    Vale.AES.GCTR_BE.partial_seq_agreement va_in_plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0)
    va_in_in_b)) (va_get_reg 8 va_s0) (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b) /\ va_get_reg 6 va_s0 < pow2_32 /\ aes_reqs alg
    va_in_key va_in_round_keys va_in_keys_b (va_get_reg 4 va_s0) (va_get_mem_heaplet 0 va_s0)
    (va_get_mem_layout va_s0) /\ va_get_vec 8 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 1 0 0 0 /\ va_get_vec 9 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 2 0 0 0 /\ va_get_vec 10 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 3 0 0 0 /\ va_get_vec 11 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 4 0 0 0 /\ va_get_vec 12 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 5 0 0 0 /\ va_get_vec 13 va_s0 == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 6 0 0 0 /\ va_get_reg 27 va_s0 == 1 `op_Multiply` 16 /\ va_get_reg 28
    va_s0 == 2 `op_Multiply` 16 /\ va_get_reg 29 va_s0 == 3 `op_Multiply` 16 /\ va_get_reg 30 va_s0
    == 4 `op_Multiply` 16 /\ va_get_reg 31 va_s0 == 5 `op_Multiply` 16 /\
    Vale.PPC64LE.Decls.modifies_buffer128 va_in_out_b (va_get_mem_heaplet 1 va_old)
    (va_get_mem_heaplet 1 va_s0) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 8 va_s0)
    va_in_plain_quads (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128
    (va_get_mem_heaplet 1 va_s0) va_in_out_b)) va_in_key (va_get_vec 7 va_old) /\ (va_get_reg 6
    va_s0 == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0) va_in_out_b ==
    Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_old) va_in_out_b) /\ va_get_reg 3 va_s0 ==
    va_get_reg 3 va_old + 16 `op_Multiply` va_get_reg 8 va_s0 /\ va_get_reg 7 va_s0 == va_get_reg 7
    va_old + 16 `op_Multiply` va_get_reg 8 va_s0 /\ (forall (va_x_cr0:cr0_t) (va_x_heap1:vale_heap)
    (va_x_mem:vale_heap) (va_x_ok:bool) (va_x_r10:nat64) (va_x_r3:nat64) (va_x_r7:nat64)
    (va_x_r8:nat64) (va_x_v0:quad32) (va_x_v1:quad32) (va_x_v14:quad32) (va_x_v15:quad32)
    (va_x_v16:quad32) (va_x_v17:quad32) (va_x_v18:quad32) (va_x_v19:quad32) (va_x_v2:quad32)
    (va_x_v3:quad32) (va_x_v4:quad32) (va_x_v5:quad32) (va_x_v6:quad32) (va_x_v7:quad32) . let
    va_sM = va_upd_vec 7 va_x_v7 (va_upd_vec 6 va_x_v6 (va_upd_vec 5 va_x_v5 (va_upd_vec 4 va_x_v4
    (va_upd_vec 3 va_x_v3 (va_upd_vec 2 va_x_v2 (va_upd_vec 19 va_x_v19 (va_upd_vec 18 va_x_v18
    (va_upd_vec 17 va_x_v17 (va_upd_vec 16 va_x_v16 (va_upd_vec 15 va_x_v15 (va_upd_vec 14 va_x_v14
    (va_upd_vec 1 va_x_v1 (va_upd_vec 0 va_x_v0 (va_upd_reg 8 va_x_r8 (va_upd_reg 7 va_x_r7
    (va_upd_reg 3 va_x_r3 (va_upd_reg 10 va_x_r10 (va_upd_ok va_x_ok (va_upd_mem va_x_mem
    (va_upd_mem_heaplet 1 va_x_heap1 (va_upd_cr0 va_x_cr0 va_s0))))))))))))))))))))) in va_get_ok
    va_sM /\ (va_get_reg 6 va_sM - va_get_reg 8 va_sM) `op_Modulus` 6 == 0 /\ (0 <= va_get_reg 8
    va_sM /\ va_get_reg 8 va_sM <= va_get_reg 6 va_sM) /\ va_get_vec 7 va_sM ==
    Vale.AES.GCTR_BE.inc32lite (va_get_vec 7 va_old) (va_get_reg 8 va_sM) /\
    (Vale.PPC64LE.Decls.buffers_disjoint128 va_in_in_b va_in_out_b \/ va_in_in_b == va_in_out_b) /\
    Vale.PPC64LE.Decls.validSrcAddrsOffset128 (va_get_mem_heaplet 1 va_sM) (va_get_reg 3 va_sM)
    va_in_in_b (va_get_reg 8 va_sM) (va_get_reg 6 va_sM - va_get_reg 8 va_sM) (va_get_mem_layout
    va_sM) Secret /\ Vale.PPC64LE.Decls.validDstAddrsOffset128 (va_get_mem_heaplet 1 va_sM)
    (va_get_reg 7 va_sM) va_in_out_b (va_get_reg 8 va_sM) (va_get_reg 6 va_sM - va_get_reg 8 va_sM)
    (va_get_mem_layout va_sM) Secret /\ va_get_reg 3 va_sM + 16 `op_Multiply` (va_get_reg 6 va_sM -
    va_get_reg 8 va_sM) < pow2_64 /\ va_get_reg 7 va_sM + 16 `op_Multiply` (va_get_reg 6 va_sM -
    va_get_reg 8 va_sM) < pow2_64 /\ Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128
    va_in_in_b == Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 va_in_out_b /\
    Vale.AES.GCTR_BE.partial_seq_agreement va_in_plain_quads
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    va_in_in_b)) (va_get_reg 8 va_sM) (Vale.PPC64LE.Decls.buffer_length
    #Vale.PPC64LE.Memory.vuint128 va_in_in_b) /\ va_get_reg 6 va_sM < pow2_32 /\ aes_reqs alg
    va_in_key va_in_round_keys va_in_keys_b (va_get_reg 4 va_sM) (va_get_mem_heaplet 0 va_sM)
    (va_get_mem_layout va_sM) /\ va_get_vec 8 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 1 0 0 0 /\ va_get_vec 9 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 2 0 0 0 /\ va_get_vec 10 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 3 0 0 0 /\ va_get_vec 11 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 4 0 0 0 /\ va_get_vec 12 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 5 0 0 0 /\ va_get_vec 13 va_sM == Vale.Def.Words_s.Mkfour
    #Vale.Def.Types_s.nat32 6 0 0 0 /\ va_get_reg 27 va_sM == 1 `op_Multiply` 16 /\ va_get_reg 28
    va_sM == 2 `op_Multiply` 16 /\ va_get_reg 29 va_sM == 3 `op_Multiply` 16 /\ va_get_reg 30 va_sM
    == 4 `op_Multiply` 16 /\ va_get_reg 31 va_sM == 5 `op_Multiply` 16 /\
    Vale.PPC64LE.Decls.modifies_buffer128 va_in_out_b (va_get_mem_heaplet 1 va_old)
    (va_get_mem_heaplet 1 va_sM) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 8 va_sM)
    va_in_plain_quads (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128
    (va_get_mem_heaplet 1 va_sM) va_in_out_b)) va_in_key (va_get_vec 7 va_old) /\ (va_get_reg 6
    va_sM == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) va_in_out_b ==
    Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_old) va_in_out_b) /\ va_get_reg 3 va_sM ==
    va_get_reg 3 va_old + 16 `op_Multiply` va_get_reg 8 va_sM /\ va_get_reg 7 va_sM == va_get_reg 7
    va_old + 16 `op_Multiply` va_get_reg 8 va_sM /\ ~(va_get_reg 8 va_sM =!= va_get_reg 6 va_sM)
    ==> va_k va_sM (())))


val va_wpProof_Gctr_blocks128_6way_while0 : va_old:va_state -> alg:algorithm ->
  va_in_in_b:buffer128 -> va_in_key:(seq nat32) -> va_in_keys_b:buffer128 -> va_in_out_b:buffer128
  -> va_in_plain_quads:(seq quad32) -> va_in_round_keys:(seq 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_Gctr_blocks128_6way_while0 va_old alg va_in_in_b va_in_key
    va_in_keys_b va_in_out_b va_in_plain_quads va_in_round_keys va_s0 va_k))
  (ensures (fun (va_sM, va_f0, va_g) -> va_t_ensure (va_code_Gctr_blocks128_6way_while0 alg)
    ([va_Mod_vec 7; va_Mod_vec 6; va_Mod_vec 5; va_Mod_vec 4; va_Mod_vec 3; va_Mod_vec 2;
    va_Mod_vec 19; va_Mod_vec 18; va_Mod_vec 17; va_Mod_vec 16; va_Mod_vec 15; va_Mod_vec 14;
    va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg 8; va_Mod_reg 7; va_Mod_reg 3; va_Mod_reg 10; va_Mod_ok;
    va_Mod_mem; va_Mod_mem_heaplet 1; va_Mod_cr0]) va_s0 va_k ((va_sM, va_f0, va_g))))
[@"opaque_to_smt"]
let va_wpProof_Gctr_blocks128_6way_while0 va_old alg va_in_in_b va_in_key va_in_keys_b va_in_out_b
  va_in_plain_quads va_in_round_keys va_s0 va_k =
  let (va_sM, va_f0) = va_lemma_Gctr_blocks128_6way_while0 (va_code_Gctr_blocks128_6way_while0 alg)
    va_s0 va_old alg va_in_in_b va_in_key va_in_keys_b va_in_out_b va_in_plain_quads
    va_in_round_keys in
  va_lemma_upd_update va_sM;
  assert (va_state_eq va_sM (va_update_vec 7 va_sM (va_update_vec 6 va_sM (va_update_vec 5 va_sM
    (va_update_vec 4 va_sM (va_update_vec 3 va_sM (va_update_vec 2 va_sM (va_update_vec 19 va_sM
    (va_update_vec 18 va_sM (va_update_vec 17 va_sM (va_update_vec 16 va_sM (va_update_vec 15 va_sM
    (va_update_vec 14 va_sM (va_update_vec 1 va_sM (va_update_vec 0 va_sM (va_update_reg 8 va_sM
    (va_update_reg 7 va_sM (va_update_reg 3 va_sM (va_update_reg 10 va_sM (va_update_ok va_sM
    (va_update_mem va_sM (va_update_mem_heaplet 1 va_sM (va_update_cr0 va_sM
    va_s0)))))))))))))))))))))));
  va_lemma_norm_mods ([va_Mod_vec 7; va_Mod_vec 6; va_Mod_vec 5; va_Mod_vec 4; va_Mod_vec 3;
    va_Mod_vec 2; va_Mod_vec 19; va_Mod_vec 18; va_Mod_vec 17; va_Mod_vec 16; va_Mod_vec 15;
    va_Mod_vec 14; va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg 8; va_Mod_reg 7; va_Mod_reg 3; va_Mod_reg
    10; va_Mod_ok; va_Mod_mem; va_Mod_mem_heaplet 1; va_Mod_cr0]) va_sM va_s0;
  let va_g = () in
  (va_sM, va_f0, va_g)

[@ "opaque_to_smt" va_qattr]
let va_quick_Gctr_blocks128_6way_while0 (va_old:va_state) (alg:algorithm) (va_in_in_b:buffer128)
  (va_in_key:(seq nat32)) (va_in_keys_b:buffer128) (va_in_out_b:buffer128) (va_in_plain_quads:(seq
  quad32)) (va_in_round_keys:(seq quad32)) : (va_quickCode unit (va_code_Gctr_blocks128_6way_while0
  alg)) =
  (va_QProc (va_code_Gctr_blocks128_6way_while0 alg) ([va_Mod_vec 7; va_Mod_vec 6; va_Mod_vec 5;
    va_Mod_vec 4; va_Mod_vec 3; va_Mod_vec 2; va_Mod_vec 19; va_Mod_vec 18; va_Mod_vec 17;
    va_Mod_vec 16; va_Mod_vec 15; va_Mod_vec 14; va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg 8;
    va_Mod_reg 7; va_Mod_reg 3; va_Mod_reg 10; va_Mod_ok; va_Mod_mem; va_Mod_mem_heaplet 1;
    va_Mod_cr0]) (va_wp_Gctr_blocks128_6way_while0 va_old alg va_in_in_b va_in_key va_in_keys_b
    va_in_out_b va_in_plain_quads va_in_round_keys) (va_wpProof_Gctr_blocks128_6way_while0 va_old
    alg va_in_in_b va_in_key va_in_keys_b va_in_out_b va_in_plain_quads va_in_round_keys))
#pop-options
//--
//-- Gctr_blocks128_6way
#push-options "--z3rlimit 30"

val va_code_Gctr_blocks128_6way : alg:algorithm -> Tot va_code
[@ "opaque_to_smt" va_qattr]
let va_code_Gctr_blocks128_6way alg =
  (va_Block (va_CCons (va_code_Vspltisw (va_op_vec_opr_vec 8) 1) (va_CCons (va_code_Vspltisw
    (va_op_vec_opr_vec 9) 2) (va_CCons (va_code_Vspltisw (va_op_vec_opr_vec 10) 3) (va_CCons
    (va_code_Vspltisw (va_op_vec_opr_vec 11) 4) (va_CCons (va_code_Vspltisw (va_op_vec_opr_vec 12)
    5) (va_CCons (va_code_Vspltisw (va_op_vec_opr_vec 13) 6) (va_CCons (va_code_Vspltisw
    (va_op_vec_opr_vec 14) 0) (va_CCons (va_code_Vsldoi (va_op_vec_opr_vec 8) (va_op_vec_opr_vec
    14) (va_op_vec_opr_vec 8) 4) (va_CCons (va_code_Vsldoi (va_op_vec_opr_vec 9) (va_op_vec_opr_vec
    14) (va_op_vec_opr_vec 9) 4) (va_CCons (va_code_Vsldoi (va_op_vec_opr_vec 10)
    (va_op_vec_opr_vec 14) (va_op_vec_opr_vec 10) 4) (va_CCons (va_code_Vsldoi (va_op_vec_opr_vec
    11) (va_op_vec_opr_vec 14) (va_op_vec_opr_vec 11) 4) (va_CCons (va_code_Vsldoi
    (va_op_vec_opr_vec 12) (va_op_vec_opr_vec 14) (va_op_vec_opr_vec 12) 4) (va_CCons
    (va_code_Vsldoi (va_op_vec_opr_vec 13) (va_op_vec_opr_vec 14) (va_op_vec_opr_vec 13) 4)
    (va_CCons (va_code_LoadImm64 (va_op_reg_opr_reg 27) (1 `op_Multiply` 16)) (va_CCons
    (va_code_LoadImm64 (va_op_reg_opr_reg 28) (2 `op_Multiply` 16)) (va_CCons (va_code_LoadImm64
    (va_op_reg_opr_reg 29) (3 `op_Multiply` 16)) (va_CCons (va_code_LoadImm64 (va_op_reg_opr_reg
    30) (4 `op_Multiply` 16)) (va_CCons (va_code_LoadImm64 (va_op_reg_opr_reg 31) (5 `op_Multiply`
    16)) (va_CCons (va_code_LoadImm64 (va_op_reg_opr_reg 8) 0) (va_CCons
    (va_code_Gctr_blocks128_6way_while0 alg) (va_CNil ()))))))))))))))))))))))

val va_codegen_success_Gctr_blocks128_6way : alg:algorithm -> Tot va_pbool
[@ "opaque_to_smt" va_qattr]
let va_codegen_success_Gctr_blocks128_6way alg =
  (va_pbool_and (va_codegen_success_Vspltisw (va_op_vec_opr_vec 8) 1) (va_pbool_and
    (va_codegen_success_Vspltisw (va_op_vec_opr_vec 9) 2) (va_pbool_and
    (va_codegen_success_Vspltisw (va_op_vec_opr_vec 10) 3) (va_pbool_and
    (va_codegen_success_Vspltisw (va_op_vec_opr_vec 11) 4) (va_pbool_and
    (va_codegen_success_Vspltisw (va_op_vec_opr_vec 12) 5) (va_pbool_and
    (va_codegen_success_Vspltisw (va_op_vec_opr_vec 13) 6) (va_pbool_and
    (va_codegen_success_Vspltisw (va_op_vec_opr_vec 14) 0) (va_pbool_and (va_codegen_success_Vsldoi
    (va_op_vec_opr_vec 8) (va_op_vec_opr_vec 14) (va_op_vec_opr_vec 8) 4) (va_pbool_and
    (va_codegen_success_Vsldoi (va_op_vec_opr_vec 9) (va_op_vec_opr_vec 14) (va_op_vec_opr_vec 9)
    4) (va_pbool_and (va_codegen_success_Vsldoi (va_op_vec_opr_vec 10) (va_op_vec_opr_vec 14)
    (va_op_vec_opr_vec 10) 4) (va_pbool_and (va_codegen_success_Vsldoi (va_op_vec_opr_vec 11)
    (va_op_vec_opr_vec 14) (va_op_vec_opr_vec 11) 4) (va_pbool_and (va_codegen_success_Vsldoi
    (va_op_vec_opr_vec 12) (va_op_vec_opr_vec 14) (va_op_vec_opr_vec 12) 4) (va_pbool_and
    (va_codegen_success_Vsldoi (va_op_vec_opr_vec 13) (va_op_vec_opr_vec 14) (va_op_vec_opr_vec 13)
    4) (va_pbool_and (va_codegen_success_LoadImm64 (va_op_reg_opr_reg 27) (1 `op_Multiply` 16))
    (va_pbool_and (va_codegen_success_LoadImm64 (va_op_reg_opr_reg 28) (2 `op_Multiply` 16))
    (va_pbool_and (va_codegen_success_LoadImm64 (va_op_reg_opr_reg 29) (3 `op_Multiply` 16))
    (va_pbool_and (va_codegen_success_LoadImm64 (va_op_reg_opr_reg 30) (4 `op_Multiply` 16))
    (va_pbool_and (va_codegen_success_LoadImm64 (va_op_reg_opr_reg 31) (5 `op_Multiply` 16))
    (va_pbool_and (va_codegen_success_LoadImm64 (va_op_reg_opr_reg 8) 0) (va_pbool_and
    (va_codegen_success_Gctr_blocks128_6way_while0 alg) (va_ttrue ())))))))))))))))))))))

[@ "opaque_to_smt" va_qattr]
let va_qcode_Gctr_blocks128_6way (va_mods:va_mods_t) (alg:algorithm) (in_b:buffer128)
  (out_b:buffer128) (key:(seq nat32)) (round_keys:(seq quad32)) (keys_b:buffer128) : (va_quickCode
  unit (va_code_Gctr_blocks128_6way 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 479 column 13 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vspltisw (va_op_vec_opr_vec 8) 1) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 480 column 13 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vspltisw (va_op_vec_opr_vec 9) 2) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 481 column 13 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vspltisw (va_op_vec_opr_vec 10) 3) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 482 column 13 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vspltisw (va_op_vec_opr_vec 11) 4) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 483 column 13 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vspltisw (va_op_vec_opr_vec 12) 5) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 484 column 13 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vspltisw (va_op_vec_opr_vec 13) 6) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 485 column 13 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vspltisw (va_op_vec_opr_vec 14) 0) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 486 column 11 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vsldoi (va_op_vec_opr_vec 8) (va_op_vec_opr_vec 14) (va_op_vec_opr_vec 8) 4) (va_QSeq
    va_range1
    "***** PRECONDITION NOT MET AT line 487 column 11 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vsldoi (va_op_vec_opr_vec 9) (va_op_vec_opr_vec 14) (va_op_vec_opr_vec 9) 4) (va_QSeq
    va_range1
    "***** PRECONDITION NOT MET AT line 488 column 11 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vsldoi (va_op_vec_opr_vec 10) (va_op_vec_opr_vec 14) (va_op_vec_opr_vec 10) 4)
    (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 489 column 11 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vsldoi (va_op_vec_opr_vec 11) (va_op_vec_opr_vec 14) (va_op_vec_opr_vec 11) 4)
    (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 490 column 11 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vsldoi (va_op_vec_opr_vec 12) (va_op_vec_opr_vec 14) (va_op_vec_opr_vec 12) 4)
    (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 491 column 11 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Vsldoi (va_op_vec_opr_vec 13) (va_op_vec_opr_vec 14) (va_op_vec_opr_vec 13) 4)
    (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 493 column 14 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_LoadImm64 (va_op_reg_opr_reg 27) (1 `op_Multiply` 16)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 494 column 14 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_LoadImm64 (va_op_reg_opr_reg 28) (2 `op_Multiply` 16)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 495 column 14 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_LoadImm64 (va_op_reg_opr_reg 29) (3 `op_Multiply` 16)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 496 column 14 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_LoadImm64 (va_op_reg_opr_reg 30) (4 `op_Multiply` 16)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 497 column 14 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_LoadImm64 (va_op_reg_opr_reg 31) (5 `op_Multiply` 16)) (va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 499 column 14 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_LoadImm64 (va_op_reg_opr_reg 8) 0) (fun (va_s:va_state) _ -> let (plain_quads:(seq
    quad32)) = Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128
    (va_get_mem_heaplet 1 va_s) in_b) in va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 503 column 5 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Gctr_blocks128_6way_while0 va_old_s alg in_b key keys_b out_b plain_quads round_keys)
    (va_QEmpty (())))))))))))))))))))))))


val va_lemma_Gctr_blocks128_6way : va_b0:va_code -> va_s0:va_state -> alg:algorithm ->
  in_b:buffer128 -> out_b:buffer128 -> key:(seq nat32) -> round_keys:(seq quad32) ->
  keys_b:buffer128
  -> Ghost (va_state & va_fuel)
  (requires (va_require_total va_b0 (va_code_Gctr_blocks128_6way alg) va_s0 /\ va_get_ok va_s0 /\
    (va_get_reg 6 va_s0 `op_Modulus` 6 == 0 /\ (Vale.PPC64LE.Decls.buffers_disjoint128 in_b out_b
    \/ in_b == out_b) /\ Vale.PPC64LE.Decls.validSrcAddrs128 (va_get_mem_heaplet 1 va_s0)
    (va_get_reg 3 va_s0) in_b (va_get_reg 6 va_s0) (va_get_mem_layout va_s0) Secret /\
    Vale.PPC64LE.Decls.validDstAddrs128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 7 va_s0) out_b
    (va_get_reg 6 va_s0) (va_get_mem_layout va_s0) Secret /\ va_get_reg 3 va_s0 + 16 `op_Multiply`
    va_get_reg 6 va_s0 < pow2_64 /\ va_get_reg 7 va_s0 + 16 `op_Multiply` va_get_reg 6 va_s0 <
    pow2_64 /\ l_and (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b ==
    Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 out_b)
    (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b < pow2_32) /\ va_get_reg 6
    va_s0 <= Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b /\ va_get_reg 6
    va_s0 < pow2_32 /\ aes_reqs alg key round_keys keys_b (va_get_reg 4 va_s0) (va_get_mem_heaplet
    0 va_s0) (va_get_mem_layout va_s0))))
  (ensures (fun (va_sM, va_fM) -> va_ensure_total va_b0 va_s0 va_sM va_fM /\ va_get_ok va_sM /\
    (Vale.PPC64LE.Decls.modifies_buffer128 out_b (va_get_mem_heaplet 1 va_s0) (va_get_mem_heaplet 1
    va_sM) /\ Vale.AES.GCTR_BE.partial_seq_agreement (Vale.Arch.Types.reverse_bytes_quad32_seq
    (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0) in_b))
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    in_b)) (va_get_reg 6 va_sM) (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128
    in_b) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 6 va_sM)
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0)
    in_b)) (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1
    va_sM) out_b)) key (va_get_vec 7 va_s0) /\ va_get_vec 7 va_sM == Vale.AES.GCTR_BE.inc32lite
    (va_get_vec 7 va_s0) (va_get_reg 6 va_s0) /\ (va_get_reg 6 va_sM == 0 ==>
    Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) out_b == Vale.PPC64LE.Decls.s128
    (va_get_mem_heaplet 1 va_s0) out_b) /\ va_get_reg 3 va_sM == va_get_reg 3 va_s0 + 16
    `op_Multiply` va_get_reg 6 va_sM /\ va_get_reg 7 va_sM == va_get_reg 7 va_s0 + 16 `op_Multiply`
    va_get_reg 6 va_sM) /\ va_state_eq va_sM (va_update_mem_heaplet 1 va_sM (va_update_cr0 va_sM
    (va_update_vec 19 va_sM (va_update_vec 18 va_sM (va_update_vec 17 va_sM (va_update_vec 16 va_sM
    (va_update_vec 15 va_sM (va_update_vec 14 va_sM (va_update_vec 13 va_sM (va_update_vec 12 va_sM
    (va_update_vec 11 va_sM (va_update_vec 10 va_sM (va_update_vec 9 va_sM (va_update_vec 8 va_sM
    (va_update_vec 7 va_sM (va_update_vec 6 va_sM (va_update_vec 5 va_sM (va_update_vec 4 va_sM
    (va_update_vec 3 va_sM (va_update_vec 2 va_sM (va_update_vec 1 va_sM (va_update_vec 0 va_sM
    (va_update_reg 31 va_sM (va_update_reg 30 va_sM (va_update_reg 29 va_sM (va_update_reg 28 va_sM
    (va_update_reg 27 va_sM (va_update_reg 10 va_sM (va_update_reg 8 va_sM (va_update_reg 7 va_sM
    (va_update_reg 3 va_sM (va_update_ok va_sM (va_update_mem va_sM
    va_s0)))))))))))))))))))))))))))))))))))
[@"opaque_to_smt"]
let va_lemma_Gctr_blocks128_6way va_b0 va_s0 alg in_b out_b key round_keys keys_b =
  let (va_mods:va_mods_t) = [va_Mod_mem_heaplet 1; va_Mod_cr0; va_Mod_vec 19; va_Mod_vec 18;
    va_Mod_vec 17; va_Mod_vec 16; va_Mod_vec 15; va_Mod_vec 14; va_Mod_vec 13; va_Mod_vec 12;
    va_Mod_vec 11; va_Mod_vec 10; va_Mod_vec 9; va_Mod_vec 8; va_Mod_vec 7; va_Mod_vec 6;
    va_Mod_vec 5; va_Mod_vec 4; va_Mod_vec 3; va_Mod_vec 2; va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg
    31; va_Mod_reg 30; va_Mod_reg 29; va_Mod_reg 28; va_Mod_reg 27; va_Mod_reg 10; va_Mod_reg 8;
    va_Mod_reg 7; va_Mod_reg 3; va_Mod_ok; va_Mod_mem] in
  let va_qc = va_qcode_Gctr_blocks128_6way va_mods alg in_b out_b key round_keys keys_b in
  let (va_sM, va_fM, va_g) = va_wp_sound_code_norm (va_code_Gctr_blocks128_6way alg) va_qc va_s0
    (fun va_s0 va_sM va_g -> let () = va_g in label va_range1
    "***** POSTCONDITION NOT MET AT line 430 column 1 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_ok va_sM) /\ (label va_range1
    "***** POSTCONDITION NOT MET AT line 467 column 53 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.PPC64LE.Decls.modifies_buffer128 out_b (va_get_mem_heaplet 1 va_s0) (va_get_mem_heaplet 1
    va_sM)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 469 column 151 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.AES.GCTR_BE.partial_seq_agreement (Vale.Arch.Types.reverse_bytes_quad32_seq
    (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0) in_b))
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    in_b)) (va_get_reg 6 va_sM) (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128
    in_b)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 472 column 146 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 6 va_sM)
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0)
    in_b)) (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1
    va_sM) out_b)) key (va_get_vec 7 va_s0)) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 473 column 45 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_vec 7 va_sM == Vale.AES.GCTR_BE.inc32lite (va_get_vec 7 va_s0) (va_get_reg 6 va_s0)) /\
    label va_range1
    "***** POSTCONDITION NOT MET AT line 474 column 67 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 6 va_sM == 0 ==> Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) out_b ==
    Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0) out_b) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 476 column 39 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 3 va_sM == va_get_reg 3 va_s0 + 16 `op_Multiply` va_get_reg 6 va_sM) /\ label
    va_range1
    "***** POSTCONDITION NOT MET AT line 477 column 41 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 7 va_sM == va_get_reg 7 va_s0 + 16 `op_Multiply` va_get_reg 6 va_sM))) in
  assert_norm (va_qc.mods == va_mods);
  va_lemma_norm_mods ([va_Mod_mem_heaplet 1; va_Mod_cr0; va_Mod_vec 19; va_Mod_vec 18; va_Mod_vec
    17; va_Mod_vec 16; va_Mod_vec 15; va_Mod_vec 14; va_Mod_vec 13; va_Mod_vec 12; va_Mod_vec 11;
    va_Mod_vec 10; va_Mod_vec 9; va_Mod_vec 8; va_Mod_vec 7; va_Mod_vec 6; va_Mod_vec 5; va_Mod_vec
    4; va_Mod_vec 3; va_Mod_vec 2; va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg 31; va_Mod_reg 30;
    va_Mod_reg 29; va_Mod_reg 28; va_Mod_reg 27; va_Mod_reg 10; va_Mod_reg 8; va_Mod_reg 7;
    va_Mod_reg 3; va_Mod_ok; va_Mod_mem]) va_sM va_s0;
  (va_sM, va_fM)

[@ va_qattr]
let va_wp_Gctr_blocks128_6way (alg:algorithm) (in_b:buffer128) (out_b:buffer128) (key:(seq nat32))
  (round_keys:(seq quad32)) (keys_b:buffer128) (va_s0:va_state) (va_k:(va_state -> unit -> Type0))
  : Type0 =
  (va_get_ok va_s0 /\ (va_get_reg 6 va_s0 `op_Modulus` 6 == 0 /\
    (Vale.PPC64LE.Decls.buffers_disjoint128 in_b out_b \/ in_b == out_b) /\
    Vale.PPC64LE.Decls.validSrcAddrs128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 3 va_s0) in_b
    (va_get_reg 6 va_s0) (va_get_mem_layout va_s0) Secret /\ Vale.PPC64LE.Decls.validDstAddrs128
    (va_get_mem_heaplet 1 va_s0) (va_get_reg 7 va_s0) out_b (va_get_reg 6 va_s0) (va_get_mem_layout
    va_s0) Secret /\ va_get_reg 3 va_s0 + 16 `op_Multiply` va_get_reg 6 va_s0 < pow2_64 /\
    va_get_reg 7 va_s0 + 16 `op_Multiply` va_get_reg 6 va_s0 < pow2_64 /\ l_and
    (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b ==
    Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 out_b)
    (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b < pow2_32) /\ va_get_reg 6
    va_s0 <= Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b /\ va_get_reg 6
    va_s0 < pow2_32 /\ aes_reqs alg key round_keys keys_b (va_get_reg 4 va_s0) (va_get_mem_heaplet
    0 va_s0) (va_get_mem_layout va_s0)) /\ (forall (va_x_mem:vale_heap) (va_x_r3:nat64)
    (va_x_r7:nat64) (va_x_r8:nat64) (va_x_r10:nat64) (va_x_r27:nat64) (va_x_r28:nat64)
    (va_x_r29:nat64) (va_x_r30:nat64) (va_x_r31:nat64) (va_x_v0:quad32) (va_x_v1:quad32)
    (va_x_v2:quad32) (va_x_v3:quad32) (va_x_v4:quad32) (va_x_v5:quad32) (va_x_v6:quad32)
    (va_x_v7:quad32) (va_x_v8:quad32) (va_x_v9:quad32) (va_x_v10:quad32) (va_x_v11:quad32)
    (va_x_v12:quad32) (va_x_v13:quad32) (va_x_v14:quad32) (va_x_v15:quad32) (va_x_v16:quad32)
    (va_x_v17:quad32) (va_x_v18:quad32) (va_x_v19:quad32) (va_x_cr0:cr0_t) (va_x_heap1:vale_heap) .
    let va_sM = va_upd_mem_heaplet 1 va_x_heap1 (va_upd_cr0 va_x_cr0 (va_upd_vec 19 va_x_v19
    (va_upd_vec 18 va_x_v18 (va_upd_vec 17 va_x_v17 (va_upd_vec 16 va_x_v16 (va_upd_vec 15 va_x_v15
    (va_upd_vec 14 va_x_v14 (va_upd_vec 13 va_x_v13 (va_upd_vec 12 va_x_v12 (va_upd_vec 11 va_x_v11
    (va_upd_vec 10 va_x_v10 (va_upd_vec 9 va_x_v9 (va_upd_vec 8 va_x_v8 (va_upd_vec 7 va_x_v7
    (va_upd_vec 6 va_x_v6 (va_upd_vec 5 va_x_v5 (va_upd_vec 4 va_x_v4 (va_upd_vec 3 va_x_v3
    (va_upd_vec 2 va_x_v2 (va_upd_vec 1 va_x_v1 (va_upd_vec 0 va_x_v0 (va_upd_reg 31 va_x_r31
    (va_upd_reg 30 va_x_r30 (va_upd_reg 29 va_x_r29 (va_upd_reg 28 va_x_r28 (va_upd_reg 27 va_x_r27
    (va_upd_reg 10 va_x_r10 (va_upd_reg 8 va_x_r8 (va_upd_reg 7 va_x_r7 (va_upd_reg 3 va_x_r3
    (va_upd_mem va_x_mem va_s0))))))))))))))))))))))))))))))) in va_get_ok va_sM /\
    (Vale.PPC64LE.Decls.modifies_buffer128 out_b (va_get_mem_heaplet 1 va_s0) (va_get_mem_heaplet 1
    va_sM) /\ Vale.AES.GCTR_BE.partial_seq_agreement (Vale.Arch.Types.reverse_bytes_quad32_seq
    (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0) in_b))
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM)
    in_b)) (va_get_reg 6 va_sM) (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128
    in_b) /\ Vale.AES.GCTR_BE.gctr_partial_def alg (va_get_reg 6 va_sM)
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0)
    in_b)) (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1
    va_sM) out_b)) key (va_get_vec 7 va_s0) /\ va_get_vec 7 va_sM == Vale.AES.GCTR_BE.inc32lite
    (va_get_vec 7 va_s0) (va_get_reg 6 va_s0) /\ (va_get_reg 6 va_sM == 0 ==>
    Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) out_b == Vale.PPC64LE.Decls.s128
    (va_get_mem_heaplet 1 va_s0) out_b) /\ va_get_reg 3 va_sM == va_get_reg 3 va_s0 + 16
    `op_Multiply` va_get_reg 6 va_sM /\ va_get_reg 7 va_sM == va_get_reg 7 va_s0 + 16 `op_Multiply`
    va_get_reg 6 va_sM) ==> va_k va_sM (())))


val va_wpProof_Gctr_blocks128_6way : alg:algorithm -> in_b:buffer128 -> out_b:buffer128 -> key:(seq
  nat32) -> round_keys:(seq quad32) -> keys_b:buffer128 -> va_s0:va_state -> va_k:(va_state -> unit
  -> Type0)
  -> Ghost (va_state & va_fuel & unit)
  (requires (va_t_require va_s0 /\ va_wp_Gctr_blocks128_6way alg in_b out_b key round_keys keys_b
    va_s0 va_k))
  (ensures (fun (va_sM, va_f0, va_g) -> va_t_ensure (va_code_Gctr_blocks128_6way alg)
    ([va_Mod_mem_heaplet 1; va_Mod_cr0; va_Mod_vec 19; va_Mod_vec 18; va_Mod_vec 17; va_Mod_vec 16;
    va_Mod_vec 15; va_Mod_vec 14; va_Mod_vec 13; va_Mod_vec 12; va_Mod_vec 11; va_Mod_vec 10;
    va_Mod_vec 9; va_Mod_vec 8; va_Mod_vec 7; va_Mod_vec 6; va_Mod_vec 5; va_Mod_vec 4; va_Mod_vec
    3; va_Mod_vec 2; va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg 31; va_Mod_reg 30; va_Mod_reg 29;
    va_Mod_reg 28; va_Mod_reg 27; va_Mod_reg 10; va_Mod_reg 8; va_Mod_reg 7; va_Mod_reg 3;
    va_Mod_mem]) va_s0 va_k ((va_sM, va_f0, va_g))))
[@"opaque_to_smt"]
let va_wpProof_Gctr_blocks128_6way alg in_b out_b key round_keys keys_b va_s0 va_k =
  let (va_sM, va_f0) = va_lemma_Gctr_blocks128_6way (va_code_Gctr_blocks128_6way alg) va_s0 alg
    in_b out_b key round_keys keys_b in
  va_lemma_upd_update va_sM;
  assert (va_state_eq va_sM (va_update_mem_heaplet 1 va_sM (va_update_cr0 va_sM (va_update_vec 19
    va_sM (va_update_vec 18 va_sM (va_update_vec 17 va_sM (va_update_vec 16 va_sM (va_update_vec 15
    va_sM (va_update_vec 14 va_sM (va_update_vec 13 va_sM (va_update_vec 12 va_sM (va_update_vec 11
    va_sM (va_update_vec 10 va_sM (va_update_vec 9 va_sM (va_update_vec 8 va_sM (va_update_vec 7
    va_sM (va_update_vec 6 va_sM (va_update_vec 5 va_sM (va_update_vec 4 va_sM (va_update_vec 3
    va_sM (va_update_vec 2 va_sM (va_update_vec 1 va_sM (va_update_vec 0 va_sM (va_update_reg 31
    va_sM (va_update_reg 30 va_sM (va_update_reg 29 va_sM (va_update_reg 28 va_sM (va_update_reg 27
    va_sM (va_update_reg 10 va_sM (va_update_reg 8 va_sM (va_update_reg 7 va_sM (va_update_reg 3
    va_sM (va_update_ok va_sM (va_update_mem va_sM va_s0))))))))))))))))))))))))))))))))));
  va_lemma_norm_mods ([va_Mod_mem_heaplet 1; va_Mod_cr0; va_Mod_vec 19; va_Mod_vec 18; va_Mod_vec
    17; va_Mod_vec 16; va_Mod_vec 15; va_Mod_vec 14; va_Mod_vec 13; va_Mod_vec 12; va_Mod_vec 11;
    va_Mod_vec 10; va_Mod_vec 9; va_Mod_vec 8; va_Mod_vec 7; va_Mod_vec 6; va_Mod_vec 5; va_Mod_vec
    4; va_Mod_vec 3; va_Mod_vec 2; va_Mod_vec 1; va_Mod_vec 0; va_Mod_reg 31; va_Mod_reg 30;
    va_Mod_reg 29; va_Mod_reg 28; va_Mod_reg 27; va_Mod_reg 10; va_Mod_reg 8; va_Mod_reg 7;
    va_Mod_reg 3; 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_Gctr_blocks128_6way (alg:algorithm) (in_b:buffer128) (out_b:buffer128) (key:(seq
  nat32)) (round_keys:(seq quad32)) (keys_b:buffer128) : (va_quickCode unit
  (va_code_Gctr_blocks128_6way alg)) =
  (va_QProc (va_code_Gctr_blocks128_6way alg) ([va_Mod_mem_heaplet 1; va_Mod_cr0; va_Mod_vec 19;
    va_Mod_vec 18; va_Mod_vec 17; va_Mod_vec 16; va_Mod_vec 15; va_Mod_vec 14; va_Mod_vec 13;
    va_Mod_vec 12; va_Mod_vec 11; va_Mod_vec 10; va_Mod_vec 9; va_Mod_vec 8; va_Mod_vec 7;
    va_Mod_vec 6; va_Mod_vec 5; va_Mod_vec 4; va_Mod_vec 3; va_Mod_vec 2; va_Mod_vec 1; va_Mod_vec
    0; va_Mod_reg 31; va_Mod_reg 30; va_Mod_reg 29; va_Mod_reg 28; va_Mod_reg 27; va_Mod_reg 10;
    va_Mod_reg 8; va_Mod_reg 7; va_Mod_reg 3; va_Mod_mem]) (va_wp_Gctr_blocks128_6way alg in_b
    out_b key round_keys keys_b) (va_wpProof_Gctr_blocks128_6way alg in_b out_b key round_keys
    keys_b))
#pop-options
//--
//-- mod_6

val va_code_mod_6 : va_dummy:unit -> Tot va_code
[@ "opaque_to_smt" va_qattr]
let va_code_mod_6 () =
  (va_Block (va_CCons (va_code_LoadImmShl64 (va_op_reg_opr_reg 26) 21845) (va_CCons (va_code_AddImm
    (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 26) 21845) (va_CCons (va_code_Sl64Imm
    (va_op_reg_opr_reg 10) (va_op_reg_opr_reg 26) 32) (va_CCons (va_code_Add (va_op_reg_opr_reg 26)
    (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 10)) (va_CCons (va_code_LoadImm64 (va_op_reg_opr_reg
    10) (-1)) (va_CCons (va_code_Sub (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 10)
    (va_op_reg_opr_reg 26)) (va_CCons (va_code_AddImm (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 26)
    1) (va_CCons (va_code_MulHigh64U (va_op_reg_opr_reg 10) (va_op_reg_opr_reg 6)
    (va_op_reg_opr_reg 26)) (va_CCons (va_code_Sr64Imm (va_op_reg_opr_reg 10) (va_op_reg_opr_reg
    10) 2) (va_CCons (va_code_AddWrap (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 10)
    (va_op_reg_opr_reg 10)) (va_CCons (va_code_AddWrap (va_op_reg_opr_reg 26) (va_op_reg_opr_reg
    26) (va_op_reg_opr_reg 10)) (va_CCons (va_code_AddWrap (va_op_reg_opr_reg 26)
    (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 26)) (va_CCons (va_code_SubWrap (va_op_reg_opr_reg
    26) (va_op_reg_opr_reg 6) (va_op_reg_opr_reg 26)) (va_CNil ())))))))))))))))

val va_codegen_success_mod_6 : va_dummy:unit -> Tot va_pbool
[@ "opaque_to_smt" va_qattr]
let va_codegen_success_mod_6 () =
  (va_pbool_and (va_codegen_success_LoadImmShl64 (va_op_reg_opr_reg 26) 21845) (va_pbool_and
    (va_codegen_success_AddImm (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 26) 21845) (va_pbool_and
    (va_codegen_success_Sl64Imm (va_op_reg_opr_reg 10) (va_op_reg_opr_reg 26) 32) (va_pbool_and
    (va_codegen_success_Add (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 10))
    (va_pbool_and (va_codegen_success_LoadImm64 (va_op_reg_opr_reg 10) (-1)) (va_pbool_and
    (va_codegen_success_Sub (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 10) (va_op_reg_opr_reg 26))
    (va_pbool_and (va_codegen_success_AddImm (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 26) 1)
    (va_pbool_and (va_codegen_success_MulHigh64U (va_op_reg_opr_reg 10) (va_op_reg_opr_reg 6)
    (va_op_reg_opr_reg 26)) (va_pbool_and (va_codegen_success_Sr64Imm (va_op_reg_opr_reg 10)
    (va_op_reg_opr_reg 10) 2) (va_pbool_and (va_codegen_success_AddWrap (va_op_reg_opr_reg 26)
    (va_op_reg_opr_reg 10) (va_op_reg_opr_reg 10)) (va_pbool_and (va_codegen_success_AddWrap
    (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 10)) (va_pbool_and
    (va_codegen_success_AddWrap (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 26) (va_op_reg_opr_reg
    26)) (va_pbool_and (va_codegen_success_SubWrap (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 6)
    (va_op_reg_opr_reg 26)) (va_ttrue ()))))))))))))))

[@ "opaque_to_smt" va_qattr]
let va_qcode_mod_6 (va_mods:va_mods_t) : (va_quickCode unit (va_code_mod_6 ())) =
  (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 565 column 17 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_LoadImmShl64 (va_op_reg_opr_reg 26) 21845) (fun (va_s:va_state) _ -> va_qPURE
    va_range1
    "***** PRECONDITION NOT MET AT line 566 column 18 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (fun (_:unit) -> Vale.AES.Types_helpers.lemma_ishl_64 21845 16) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 567 column 11 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_AddImm (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 26) 21845) (va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 568 column 12 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Sl64Imm (va_op_reg_opr_reg 10) (va_op_reg_opr_reg 26) 32) (fun (va_s:va_state) _ ->
    va_qPURE va_range1
    "***** PRECONDITION NOT MET AT line 569 column 18 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (fun (_:unit) -> Vale.AES.Types_helpers.lemma_ishl_64 1431655765 32) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 570 column 8 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Add (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 10)) (va_QSeq
    va_range1
    "***** PRECONDITION NOT MET AT line 571 column 14 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_LoadImm64 (va_op_reg_opr_reg 10) (-1)) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 572 column 8 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Sub (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 10) (va_op_reg_opr_reg 26)) (va_QBind
    va_range1
    "***** PRECONDITION NOT MET AT line 573 column 11 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_AddImm (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 26) 1) (fun (va_s:va_state) _ ->
    va_qAssert va_range1
    "***** PRECONDITION NOT MET AT line 574 column 5 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 26 va_s == 12297829382473034411) (va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 575 column 15 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_MulHigh64U (va_op_reg_opr_reg 10) (va_op_reg_opr_reg 6) (va_op_reg_opr_reg 26)) (fun
    (va_s:va_state) _ -> let (va_arg23:Vale.Def.Types_s.nat64) = va_get_reg 10 va_s in va_qPURE
    va_range1
    "***** PRECONDITION NOT MET AT line 576 column 18 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (fun (_:unit) -> Vale.AES.Types_helpers.lemma_ishr_64 va_arg23 2) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 577 column 12 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Sr64Imm (va_op_reg_opr_reg 10) (va_op_reg_opr_reg 10) 2) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 578 column 12 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_AddWrap (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 10) (va_op_reg_opr_reg 10))
    (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 579 column 12 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_AddWrap (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 10))
    (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 580 column 12 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_AddWrap (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 26))
    (va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 581 column 12 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_SubWrap (va_op_reg_opr_reg 26) (va_op_reg_opr_reg 6) (va_op_reg_opr_reg 26)) (fun
    (va_s:va_state) _ -> va_QLemma va_range1
    "***** PRECONDITION NOT MET AT line 582 column 21 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    ((fun (p:prop) -> normalize p) (va_get_reg 6 va_s `op_Modulus` 6 == va_get_reg 6 va_s - 6
    `op_Multiply` (va_get_reg 6 va_s `op_Multiply` 12297829382473034411 `op_Division` pow2_64
    `op_Division` 4))) (fun _ -> (fun (p:prop) -> p) (va_get_reg 6 va_s `op_Modulus` 6 ==
    va_get_reg 6 va_s - 6 `op_Multiply` (va_get_reg 6 va_s `op_Multiply` 12297829382473034411
    `op_Division` pow2_64 `op_Division` 4))) (fun (_:unit) -> assert_normalize (va_get_reg 6 va_s
    `op_Modulus` 6 == va_get_reg 6 va_s - 6 `op_Multiply` (va_get_reg 6 va_s `op_Multiply`
    12297829382473034411 `op_Division` pow2_64 `op_Division` 4))) (va_QEmpty
    (())))))))))))))))))))))


val va_lemma_mod_6 : va_b0:va_code -> va_s0:va_state
  -> Ghost (va_state & va_fuel)
  (requires (va_require_total va_b0 (va_code_mod_6 ()) va_s0 /\ va_get_ok va_s0))
  (ensures (fun (va_sM, va_fM) -> va_ensure_total va_b0 va_s0 va_sM va_fM /\ va_get_ok va_sM /\
    va_get_reg 26 va_sM == va_get_reg 6 va_sM `op_Modulus` 6 /\ va_state_eq va_sM (va_update_reg 10
    va_sM (va_update_reg 26 va_sM (va_update_ok va_sM va_s0)))))
[@"opaque_to_smt"]
let va_lemma_mod_6 va_b0 va_s0 =
  let (va_mods:va_mods_t) = [va_Mod_reg 10; va_Mod_reg 26; va_Mod_ok] in
  let va_qc = va_qcode_mod_6 va_mods in
  let (va_sM, va_fM, va_g) = va_wp_sound_code_norm (va_code_mod_6 ()) va_qc va_s0 (fun va_s0 va_sM
    va_g -> let () = va_g in label va_range1
    "***** POSTCONDITION NOT MET AT line 554 column 1 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_ok va_sM) /\ label va_range1
    "***** POSTCONDITION NOT MET AT line 563 column 26 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_get_reg 26 va_sM == va_get_reg 6 va_sM `op_Modulus` 6)) in
  assert_norm (va_qc.mods == va_mods);
  va_lemma_norm_mods ([va_Mod_reg 10; va_Mod_reg 26; va_Mod_ok]) va_sM va_s0;
  (va_sM, va_fM)

[@ va_qattr]
let va_wp_mod_6 (va_s0:va_state) (va_k:(va_state -> unit -> Type0)) : Type0 =
  (va_get_ok va_s0 /\ (forall (va_x_r26:nat64) (va_x_r10:nat64) . let va_sM = va_upd_reg 10
    va_x_r10 (va_upd_reg 26 va_x_r26 va_s0) in va_get_ok va_sM /\ va_get_reg 26 va_sM == va_get_reg
    6 va_sM `op_Modulus` 6 ==> va_k va_sM (())))


val va_wpProof_mod_6 : va_s0:va_state -> va_k:(va_state -> unit -> Type0)
  -> Ghost (va_state & va_fuel & unit)
  (requires (va_t_require va_s0 /\ va_wp_mod_6 va_s0 va_k))
  (ensures (fun (va_sM, va_f0, va_g) -> va_t_ensure (va_code_mod_6 ()) ([va_Mod_reg 10; va_Mod_reg
    26]) va_s0 va_k ((va_sM, va_f0, va_g))))
[@"opaque_to_smt"]
let va_wpProof_mod_6 va_s0 va_k =
  let (va_sM, va_f0) = va_lemma_mod_6 (va_code_mod_6 ()) va_s0 in
  va_lemma_upd_update va_sM;
  assert (va_state_eq va_sM (va_update_reg 10 va_sM (va_update_reg 26 va_sM (va_update_ok va_sM
    va_s0))));
  va_lemma_norm_mods ([va_Mod_reg 10; va_Mod_reg 26]) va_sM va_s0;
  let va_g = () in
  (va_sM, va_f0, va_g)

[@ "opaque_to_smt" va_qattr]
let va_quick_mod_6 () : (va_quickCode unit (va_code_mod_6 ())) =
  (va_QProc (va_code_mod_6 ()) ([va_Mod_reg 10; va_Mod_reg 26]) va_wp_mod_6 va_wpProof_mod_6)
//--
//-- Gctr_blocks128
#push-options "--z3rlimit 30"

[@ "opaque_to_smt" va_qattr]
let va_code_Gctr_blocks128 alg =
  (va_Block (va_CCons (va_code_mod_6 ()) (va_CCons (va_code_Sub (va_op_reg_opr_reg 6)
    (va_op_reg_opr_reg 6) (va_op_reg_opr_reg 26)) (va_CCons (va_code_Gctr_blocks128_6way alg)
    (va_CCons (va_code_Gctr_blocks128_1way alg) (va_CCons (va_code_Sl64Imm (va_op_reg_opr_reg 10)
    (va_op_reg_opr_reg 6) 4) (va_CCons (va_code_Sub (va_op_reg_opr_reg 3) (va_op_reg_opr_reg 3)
    (va_op_reg_opr_reg 10)) (va_CCons (va_code_Sub (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 7)
    (va_op_reg_opr_reg 10)) (va_CCons (va_code_Add (va_op_reg_opr_reg 6) (va_op_reg_opr_reg 6)
    (va_op_reg_opr_reg 26)) (va_CNil ()))))))))))

[@ "opaque_to_smt" va_qattr]
let va_codegen_success_Gctr_blocks128 alg =
  (va_pbool_and (va_codegen_success_mod_6 ()) (va_pbool_and (va_codegen_success_Sub
    (va_op_reg_opr_reg 6) (va_op_reg_opr_reg 6) (va_op_reg_opr_reg 26)) (va_pbool_and
    (va_codegen_success_Gctr_blocks128_6way alg) (va_pbool_and
    (va_codegen_success_Gctr_blocks128_1way alg) (va_pbool_and (va_codegen_success_Sl64Imm
    (va_op_reg_opr_reg 10) (va_op_reg_opr_reg 6) 4) (va_pbool_and (va_codegen_success_Sub
    (va_op_reg_opr_reg 3) (va_op_reg_opr_reg 3) (va_op_reg_opr_reg 10)) (va_pbool_and
    (va_codegen_success_Sub (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 10))
    (va_pbool_and (va_codegen_success_Add (va_op_reg_opr_reg 6) (va_op_reg_opr_reg 6)
    (va_op_reg_opr_reg 26)) (va_ttrue ())))))))))

[@ "opaque_to_smt" va_qattr]
let va_qcode_Gctr_blocks128 (va_mods:va_mods_t) (alg:algorithm) (in_b:buffer128) (out_b:buffer128)
  (key:(seq nat32)) (round_keys:(seq quad32)) (keys_b:buffer128) : (va_quickCode unit
  (va_code_Gctr_blocks128 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 627 column 10 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_mod_6 ()) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 628 column 8 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Sub (va_op_reg_opr_reg 6) (va_op_reg_opr_reg 6) (va_op_reg_opr_reg 26)) (va_QSeq
    va_range1
    "***** PRECONDITION NOT MET AT line 629 column 24 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Gctr_blocks128_6way alg in_b out_b key round_keys keys_b) (va_QBind va_range1
    "***** PRECONDITION NOT MET AT line 630 column 24 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Gctr_blocks128_1way alg in_b out_b (va_get_vec 7 va_old_s)
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1
    va_old_s) in_b)) key round_keys keys_b) (fun (va_s:va_state) _ -> va_qPURE va_range1
    "***** PRECONDITION NOT MET AT line 631 column 24 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (fun (_:unit) -> Vale.AES.GCTR_BE.gctr_partial_reveal ()) (let
    (va_arg17:Vale.Def.Types_s.nat64) = va_get_reg 6 va_s in va_qPURE va_range1
    "***** PRECONDITION NOT MET AT line 632 column 18 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (fun (_:unit) -> Vale.AES.Types_helpers.lemma_ishl_64 va_arg17 4) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 633 column 12 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Sl64Imm (va_op_reg_opr_reg 10) (va_op_reg_opr_reg 6) 4) (va_QSeq va_range1
    "***** PRECONDITION NOT MET AT line 634 column 8 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Sub (va_op_reg_opr_reg 3) (va_op_reg_opr_reg 3) (va_op_reg_opr_reg 10)) (va_QSeq
    va_range1
    "***** PRECONDITION NOT MET AT line 635 column 8 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Sub (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 7) (va_op_reg_opr_reg 10)) (va_QSeq
    va_range1
    "***** PRECONDITION NOT MET AT line 636 column 8 of file /home/gebner/everest/hacl-star/vale/code/crypto/aes/ppc64le/Vale.AES.PPC64LE.GCTR.vaf *****"
    (va_quick_Add (va_op_reg_opr_reg 6) (va_op_reg_opr_reg 6) (va_op_reg_opr_reg 26)) (va_QEmpty
    (())))))))))))))
val va_lemma_Gctr_blocks128 : va_b0:va_code -> va_s0:va_state -> alg:algorithm -> in_b:buffer128 ->
  out_b:buffer128 -> key:(seq nat32) -> round_keys:(seq quad32) -> keys_b:buffer128
  -> Ghost (va_state & va_fuel)
  (requires (va_require_total va_b0 (va_code_Gctr_blocks128 alg) va_s0 /\ va_get_ok va_s0 /\
    ((Vale.PPC64LE.Decls.buffers_disjoint128 in_b out_b \/ in_b == out_b) /\
    Vale.PPC64LE.Decls.validSrcAddrs128 (va_get_mem_heaplet 1 va_s0) (va_get_reg 3 va_s0) in_b
    (va_get_reg 6 va_s0) (va_get_mem_layout va_s0) Secret /\ Vale.PPC64LE.Decls.validDstAddrs128
    (va_get_mem_heaplet 1 va_s0) (va_get_reg 7 va_s0) out_b (va_get_reg 6 va_s0) (va_get_mem_layout
    va_s0) Secret /\ va_get_reg 3 va_s0 + 16 `op_Multiply` va_get_reg 6 va_s0 < pow2_64 /\
    va_get_reg 7 va_s0 + 16 `op_Multiply` va_get_reg 6 va_s0 < pow2_64 /\ l_and
    (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b ==
    Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 out_b)
    (Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b < pow2_32) /\ va_get_reg 6
    va_s0 == Vale.PPC64LE.Decls.buffer_length #Vale.PPC64LE.Memory.vuint128 in_b /\ va_get_reg 6
    va_s0 < pow2_32 /\ aes_reqs alg key round_keys keys_b (va_get_reg 4 va_s0) (va_get_mem_heaplet
    0 va_s0) (va_get_mem_layout va_s0))))
  (ensures (fun (va_sM, va_fM) -> va_ensure_total va_b0 va_s0 va_sM va_fM /\ va_get_ok va_sM /\
    (Vale.PPC64LE.Decls.modifies_buffer128 out_b (va_get_mem_heaplet 1 va_s0) (va_get_mem_heaplet 1
    va_sM) /\ Vale.AES.GCTR_BE.gctr_partial alg (va_get_reg 6 va_s0)
    (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_s0)
    in_b)) (Vale.Arch.Types.reverse_bytes_quad32_seq (Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1
    va_sM) out_b)) key (va_get_vec 7 va_s0) /\ va_get_vec 7 va_sM == Vale.AES.GCTR_BE.inc32lite
    (va_get_vec 7 va_s0) (va_get_reg 6 va_s0) /\ (va_get_reg 6 va_s0 == 0 ==>
    Vale.PPC64LE.Decls.s128 (va_get_mem_heaplet 1 va_sM) out_b == Vale.PPC64LE.Decls.s128
    (va_get_mem_heaplet 1 va_s0) out_b) /\ l_and (l_and (va_get_reg 3 va_sM == va_get_reg 3 va_s0)
    (va_get_reg 7 va_sM == va_get_reg 7 va_s0)) (va_get_reg 6 va_sM == va_get_reg 6 va_s0)) /\
    va_state_eq va_sM (va_update_mem_heaplet 1 va_sM (va_update_cr0 va_sM (va_update_vec 19 va_sM
    (va_update_vec 18 va_sM (va_update_vec 17 va_sM (va_update_vec 16 va_sM (va_update_vec 15 va_sM
    (va_update_vec 14 va_sM (va_update_vec 13 va_sM (va_update_vec 12 va_sM (va_update_vec 11 va_sM
    (va_update_vec 10 va_sM (va_update_vec 9 va_sM (va_update_vec 8 va_sM (va_update_vec 7 va_sM
    (va_update_vec 6 va_sM (va_update_vec 5 va_sM (va_update_vec 4 va_sM (va_update_vec 3 va_sM
    (va_update_vec 2 va_sM (va_update_vec 1 va_sM (va_update_vec 0 va_sM (va_update_reg 31 va_sM
    (va_update_reg 30 va_sM (va_update_reg 29 va_sM (va_update_reg 28 va_sM (va_update_reg 27 va_sM
    (va_update_reg 26 va_sM (va_update_reg 10 va_sM (va_update_reg 9 va_sM (va_update_reg 8 va_sM
    (va_update_reg 6 va_sM (va_update_reg 7 va_sM (va_update_reg 3 va_sM (va_update_ok va_sM
    (va_update_mem va_sM va_s0))))))))))))))))))))))))))))))))))))))

    va_b0: Vale.PPC64LE.Decls.va_code ->
    va_s0: Vale.PPC64LE.Decls.va_state ->
    alg: Vale.AES.AES_common_s.algorithm ->
    in_b: Vale.PPC64LE.Memory.buffer128 ->
    out_b: Vale.PPC64LE.Memory.buffer128 ->
    key: FStar.Seq.Base.seq Vale.PPC64LE.Memory.nat32 ->
    round_keys: FStar.Seq.Base.seq Vale.PPC64LE.Memory.quad32 ->
    keys_b: Vale.PPC64LE.Memory.buffer128
  -> Prims.Ghost (Vale.PPC64LE.Decls.va_state * Vale.PPC64LE.Decls.va_fuel)