use super::keys::ENCRYPTION_TABLE;
pub fn decrypt_block(data: &mut [u32], mut key: u32) {
if key == 0 {
return;
}
let mut seed: u32 = 0xEEEEEEEE;
for value in data.iter_mut() {
seed = seed.wrapping_add(ENCRYPTION_TABLE[0x400 + (key & 0xFF) as usize]);
let ch = *value ^ (key.wrapping_add(seed));
*value = ch;
key = (!key << 0x15).wrapping_add(0x11111111) | (key >> 0x0B);
seed = ch
.wrapping_add(seed)
.wrapping_add(seed << 5)
.wrapping_add(3);
}
}
pub fn decrypt_dword(value: u32, key: u32) -> u32 {
if key == 0 {
return value;
}
let mut seed: u32 = 0xEEEEEEEE;
seed = seed.wrapping_add(ENCRYPTION_TABLE[0x400 + (key & 0xFF) as usize]);
value ^ (key.wrapping_add(seed))
}