use crate::{
memory::MemoryAccessCols,
operations::{
Add5Operation, AddU32Operation, AddrAddOperation, AndU32Operation,
FixedRotateRightOperation, NotU32Operation, XorU32Operation,
},
};
use sp1_derive::AlignedBorrow;
use std::mem::size_of;
pub const NUM_SHA_COMPRESS_COLS: usize = size_of::<ShaCompressCols<u8>>();
#[derive(AlignedBorrow, Default, Debug, Clone, Copy)]
#[repr(C)]
pub struct ShaCompressCols<T> {
pub clk_high: T,
pub clk_low: T,
pub w_ptr: [T; 3],
pub h_ptr: [T; 3],
pub index: T,
pub octet: [T; 8],
pub octet_num: [T; 10],
pub mem: MemoryAccessCols<T>,
pub mem_value: [T; 2],
pub mem_addr: [T; 3],
pub mem_addr_init: AddrAddOperation<T>,
pub mem_addr_compress: AddrAddOperation<T>,
pub mem_addr_finalize: AddrAddOperation<T>,
pub a: [T; 2],
pub b: [T; 2],
pub c: [T; 2],
pub d: [T; 2],
pub e: [T; 2],
pub f: [T; 2],
pub g: [T; 2],
pub h: [T; 2],
pub k: [T; 2],
pub e_rr_6: FixedRotateRightOperation<T>,
pub e_rr_11: FixedRotateRightOperation<T>,
pub e_rr_25: FixedRotateRightOperation<T>,
pub s1_intermediate: XorU32Operation<T>,
pub s1: XorU32Operation<T>,
pub e_and_f: AndU32Operation<T>,
pub e_not: NotU32Operation<T>,
pub e_not_and_g: AndU32Operation<T>,
pub ch: XorU32Operation<T>,
pub temp1: Add5Operation<T>,
pub a_rr_2: FixedRotateRightOperation<T>,
pub a_rr_13: FixedRotateRightOperation<T>,
pub a_rr_22: FixedRotateRightOperation<T>,
pub s0_intermediate: XorU32Operation<T>,
pub s0: XorU32Operation<T>,
pub a_and_b: AndU32Operation<T>,
pub a_and_c: AndU32Operation<T>,
pub b_and_c: AndU32Operation<T>,
pub maj_intermediate: XorU32Operation<T>,
pub maj: XorU32Operation<T>,
pub temp2: AddU32Operation<T>,
pub d_add_temp1: AddU32Operation<T>,
pub temp1_add_temp2: AddU32Operation<T>,
pub finalized_operand: [T; 2],
pub finalize_add: AddU32Operation<T>,
pub is_initialize: T,
pub is_compression: T,
pub is_finalize: T,
pub is_real: T,
}