Refactor some more, done for now

This commit is contained in:
2022-08-25 18:33:46 -04:00
parent b97b2fe6d0
commit 0951a6ab3e
5 changed files with 28 additions and 36 deletions

View File

@@ -13,10 +13,10 @@ pub fn challenge25() {
// function, like, "edit(ciphertext, key, offset, newtext)".
fn edit(ciphertext: &Bytes, key: &Bytes, offset: usize, newtext: &Vec<u8>) -> Bytes {
let mut plaintext = ctr::decrypt(key, 0, ciphertext);
if offset + newtext.len() > plaintext.len() {
panic!("challenge25 - edit - out of bounds");
}
assert!(
offset + newtext.len() <= plaintext.len(),
"challenge25 - edit - out of bounds"
);
plaintext.0[offset..(newtext.len() + offset)].copy_from_slice(&newtext[..]);
ctr::encrypt(key, 0, &plaintext)
}
@@ -44,9 +44,7 @@ pub fn challenge26() {
fn encrypt(input: &str, key: &Bytes) -> Bytes {
let mut r = String::new();
for c in input.chars() {
if c == ';' || c == '=' {
panic!("encrypt: invalid char {}", c);
}
assert!(!(c == ';' || c == '='), "encrypt: invalid char {}", c);
}
r.push_str("comment1=cooking%20MCs;userdata=");
r.push_str(input);
@@ -101,10 +99,10 @@ pub fn challenge27() {
fn modify(cipher: &Bytes) -> Bytes {
// C_1, C_2, C_3 -> C_1, 0, C_1
let c1 = cipher.get_block(0, 16).0;
let mut modified = c1.to_vec();
let mut c1 = cipher.get_block(0, 16).0;
let mut modified = c1.clone();
modified.append(&mut vec![0; 16]);
modified.append(&mut c1.to_vec());
modified.append(&mut c1);
Bytes(modified)
}
@@ -217,8 +215,8 @@ pub fn challenge29() {
// forge message: original-message || glue-padding || new-message
forged_message = message.0.to_vec();
forged_message.append(&mut glue_padding.to_vec());
forged_message.append(&mut new_message.to_vec());
forged_message.append(&mut glue_padding.clone());
forged_message.append(&mut new_message.clone());
let r = sha1::verify(&Bytes(forged_message.to_vec()), &key, &mac_forged);
if r {
break;
@@ -290,7 +288,7 @@ pub fn challenge30() {
forged_message = message.0.to_vec();
forged_message.append(&mut glue_padding.to_vec());
forged_message.append(&mut new_message.to_vec());
let r = md4::verify(&Bytes(forged_message.to_vec()), &key, &mac_forged);
let r = md4::verify(&Bytes(forged_message.clone()), &key, &mac_forged);
if r {
break;
}