turns out we gotta pad it out a bit to 8byte blocks
This commit is contained in:
parent
a8b5559ac0
commit
e2965699d3
@ -86,13 +86,12 @@ impl PSOBBCipher {
|
||||
|
||||
impl PSOCipher for PSOBBCipher {
|
||||
fn encrypt(&mut self, data: &Vec<u8>) -> Result<Vec<u8>, CipherError> {
|
||||
if data.len() % 8 != 0 {
|
||||
return Err(CipherError::InvalidSize);
|
||||
}
|
||||
|
||||
let real_data = data.chunks(4).map(|k| {
|
||||
let mut real_data = data.chunks(4).map(|k| {
|
||||
u32::from_le_bytes([k[0], k[1], k[2], k[3]])
|
||||
}).collect::<Vec<_>>();
|
||||
if real_data.len() % 2 == 1 {
|
||||
real_data.push(0);
|
||||
}
|
||||
|
||||
let mut result = Vec::new();
|
||||
for d in real_data.chunks(2) {
|
||||
@ -115,7 +114,6 @@ impl PSOCipher for PSOBBCipher {
|
||||
result.extend_from_slice(&r.to_le_bytes());
|
||||
}
|
||||
|
||||
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
@ -182,15 +180,14 @@ mod tests {
|
||||
let mut cipher_out = PSOBBCipher::new(p, s, seed);
|
||||
|
||||
for _ in 0..50 {
|
||||
let len = (rng.gen::<u16>() / 8) * 8;
|
||||
let len = (rng.gen::<u16>() / 4) * 4;
|
||||
|
||||
let mut random_junk = vec![0u8; len as usize];
|
||||
rng.fill_bytes(&mut random_junk);
|
||||
|
||||
let enc_data = cipher_in.encrypt(&random_junk).unwrap();
|
||||
let orig_data = cipher_out.decrypt(&enc_data).unwrap();
|
||||
|
||||
assert!(random_junk == orig_data);
|
||||
assert!(random_junk == orig_data[..len as usize].to_vec());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user