From f50bbd1c3e4653bff6ab1b565134ab6431fbccf4 Mon Sep 17 00:00:00 2001 From: tristanhormann Date: Tue, 4 Jun 2024 14:38:31 +0200 Subject: [PATCH] =?UTF-8?q?MV-String=20Decrypt=20auf=20die=20neue=20=C3=84?= =?UTF-8?q?nderung=20angepasst?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../menezes_vanstone_string_scheme.rs | 34 +++++-------------- 1 file changed, 9 insertions(+), 25 deletions(-) diff --git a/src/encryption/string_schemes/menezes_vanstone/menezes_vanstone_string_scheme.rs b/src/encryption/string_schemes/menezes_vanstone/menezes_vanstone_string_scheme.rs index 23bf7b1..41aebbe 100644 --- a/src/encryption/string_schemes/menezes_vanstone/menezes_vanstone_string_scheme.rs +++ b/src/encryption/string_schemes/menezes_vanstone/menezes_vanstone_string_scheme.rs @@ -177,32 +177,16 @@ impl AsymmetricDecryptor for MenezesVanstoneStringS let decimal_unicode_key = DecimalUnicodeConversionSchemeKey { radix, block_size }; let big_int_vec = FromDecimalBlockScheme::decrypt(&ciphertext_string, &decimal_unicode_key); - // Wenn wir hier keine zusammenpassende Anzahl von Punkten und Tupeln haben, - // dann ist die Nachricht nicht korrekt verschlüsselt oder grob manipuliert worden. - // Durch '*2' wird ebenfalls sichergestellt, dass es eine gerade Anzahl von Tupeln gibt. - ensure!( - points.len() * 2 == big_int_vec.len(), - "Die Anzahl der Punkte und Tupel stimmen nicht überein." - ); - // Die Zahlen in eine Liste von MenezesVanstoneCiphertext mappen - let mut ciphertext_list: Vec = Vec::new(); - for i in (0..big_int_vec.len()).step_by(2) { - // TODO Aufhübschen - let first = big_int_vec[i].clone(); - let second = if i + 1 < big_int_vec.len() { - big_int_vec[i + 1].clone() - } else { - BigInt::zero() - }; - - let ciphertext = MenezesVanstoneCiphertext { - point: points[i / 2].clone(), - first: Some(first), - second: Some(second), - }; - ciphertext_list.push(ciphertext); - } + let ciphertext_list: Vec = big_int_vec + .chunks(2) + .zip(points.iter().cloned()) + .map(|(chunk, point)| MenezesVanstoneCiphertext { + point, + first: chunk.get(0).cloned(), + second: chunk.get(1).cloned(), + }) + .collect(); // Jeden einzelnen Ciphertext für sich entschlüsseln let plaintext_list: Vec = ciphertext_list