From 90d61a655ed60e432b40a78cfa8107d090a50fc8 Mon Sep 17 00:00:00 2001 From: Alivecow Date: Tue, 3 Dec 2024 23:15:42 +0100 Subject: [PATCH] fix: Fix length field implementation in gcm_crack Length field was calculated after padding --- src/tasks/tasks01/gcm_crack.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/tasks/tasks01/gcm_crack.rs b/src/tasks/tasks01/gcm_crack.rs index 5dc2236..05d8886 100644 --- a/src/tasks/tasks01/gcm_crack.rs +++ b/src/tasks/tasks01/gcm_crack.rs @@ -35,9 +35,12 @@ struct Message { fn parse_message(val: &Value) -> Result<(Message, Polynomial)> { let ciphertext_text: String = serde_json::from_value(val["ciphertext"].clone())?; let mut ciphertext_bytes: Vec = BASE64_STANDARD.decode(ciphertext_text)?; + let mut c_len: Vec = ((ciphertext_bytes.len() * 8) as u64).to_be_bytes().to_vec(); + if ciphertext_bytes.len() % 16 != 0 { ciphertext_bytes.append(vec![0u8; 16 - (ciphertext_bytes.len() % 16)].as_mut()); } + let ciphertext_chunks: Vec = ciphertext_bytes .chunks(16) .into_iter() @@ -61,7 +64,6 @@ fn parse_message(val: &Value) -> Result<(Message, Polynomial)> { let tag_bytes: Vec = BASE64_STANDARD.decode(tag_text)?; let tag_field: FieldElement = FieldElement::new(tag_bytes.clone()); - let mut c_len: Vec = ((ciphertext_bytes.len() * 8) as u64).to_be_bytes().to_vec(); l_field.append(c_len.as_mut()); // Combine all data