Global Opaque Xarray.

(* Specifications: *)
Lemma Xarray_update:
forall i b,
length b = LBLOCK ->
(16 <= i < 64)%nat ->
upd_reptype_array tuint (Z.of_nat i mod 16)
(map Vint (Xarray b i))
(Vint (W (nthi b) (Z.of_nat i)))
= map Vint (Xarray b (i+1)).
Lemma W_unfold:
forall i b,
(16 <= Z.of_nat i < 64)%Z ->
W (nthi b) (Z.of_nat i) =
Int.add (W (nthi b) (Z.of_nat i - 16 + 0))
(Int.add
(Int.add (sigma_0 (W (nthi b) (Z.of_nat i - 16 + 1)))
(sigma_1 (W (nthi b) (Z.of_nat i - 16 + 14))))
(W (nthi b) (Z.of_nat i - 16 + 9))).
Lemma Xarray_update:
forall i b,
Zlength b = LBLOCKz ->
16 <= i < 64 ->
upd_Znth (i mod 16) (map Vint (Xarray b (Z.to_nat i)))
(Vint (W (nthi b) i))
= map Vint (Xarray b (Z.to_nat i+1)).
Lemma W_unfold:
forall i b,
16 <= i < 64 ->
W (nthi b) (i) =
Int.add (W (nthi b) (i - 16 + 0))
(Int.add
(Int.add (sigma_0 (W (nthi b) (i - 16 + 1)))
(sigma_1 (W (nthi b) (i - 16 + 14))))
(W (nthi b) (i - 16 + 9))).
Lemma sha256_block_data_order_loop2_proof:
forall (Espec : OracleKind)
(b: list int) ctx (regs: list int) gv Xv
(Hregs: length regs = 8%nat),
Zlength b = LBLOCKz ->
semax (func_tycontext f_sha256_block_data_order Vprog Gtot nil)
(PROP ()
LOCAL (temp _ctx ctx; temp _i (Vint (Int.repr 16));
temp _a (Vint (nthi (Round regs (nthi b) (LBLOCKz-1)) 0));
temp _b (Vint (nthi (Round regs (nthi b) (LBLOCKz-1)) 1));
temp _c (Vint (nthi (Round regs (nthi b) (LBLOCKz-1)) 2));
temp _d (Vint (nthi (Round regs (nthi b) (LBLOCKz-1)) 3));
temp _e (Vint (nthi (Round regs (nthi b) (LBLOCKz-1)) 4));
temp _f (Vint (nthi (Round regs (nthi b) (LBLOCKz-1)) 5));
temp _g (Vint (nthi (Round regs (nthi b) (LBLOCKz-1)) 6));
temp _h (Vint (nthi (Round regs (nthi b) (LBLOCKz-1)) 7));
gvars gv; lvar _X (tarray tuint LBLOCKz) Xv)
SEP ( K_vector gv;
data_at Tsh (tarray tuint LBLOCKz) (map Vint b) Xv))
block_data_order_loop2
(normal_ret_assert
(PROP ()
LOCAL(temp _ctx ctx;
temp _a (Vint (nthi (Round regs (nthi b) 63) 0));
temp _b (Vint (nthi (Round regs (nthi b) 63) 1));
temp _c (Vint (nthi (Round regs (nthi b) 63) 2));
temp _d (Vint (nthi (Round regs (nthi b) 63) 3));
temp _e (Vint (nthi (Round regs (nthi b) 63) 4));
temp _f (Vint (nthi (Round regs (nthi b) 63) 5));
temp _g (Vint (nthi (Round regs (nthi b) 63) 6));
temp _h (Vint (nthi (Round regs (nthi b) 63) 7));
gvars gv; lvar _X (tarray tuint LBLOCKz) Xv)
SEP (K_vector gv;
data_at_ Tsh (tarray tuint LBLOCKz) Xv))).