X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcrypto.rs;h=35c7b48bf7bea16e5063c97e04748fcaf09a54c5;hb=1b43320b00cc7022cc8dc31f62e7d1cf9ebfd183;hp=ce301ab4b814e069af0311788d3f7d69163381e8;hpb=3a33f82b92400ffabdc5fd7bdcbdc9f888277418;p=crypto_lab1.git diff --git a/src/crypto.rs b/src/crypto.rs index ce301ab..35c7b48 100644 --- a/src/crypto.rs +++ b/src/crypto.rs @@ -12,16 +12,34 @@ pub fn compute_mac(data: &[u8]) -> [u8, ..10] { let mut hmac = HMAC(SHA256, KEY_A); hmac.update(data); let mut result = [0u8, ..10]; - copy_memory(&mut result, hmac.finalize().slice(0, 9)); + copy_memory(&mut result, hmac.finalize().slice(0, 10)); result } -pub fn encrypt(plaindata: &[u8], iv: &[u8]) -> Vec { - symm::encrypt(symm::AES_256_CBC, KEY_C, iv.to_vec(), plaindata) +pub fn encrypt(plaindata: &[u8], iv: &[u8]) -> Option> { + let c = symm::Crypter::new(symm::AES_256_CBC); + c.init(symm::Encrypt, KEY_C, iv.to_vec()); + c.pad(false); // Padding disabled! + let mut r = c.update(plaindata); + let rest = c.finalize(); + if rest.is_empty() { + Some(r) + } else { + None + } } -pub fn decrypt(cypherdata: &[u8], iv: &[u8]) -> Vec { - symm::decrypt(symm::AES_256_CBC, KEY_C, iv.to_vec(), cypherdata) +pub fn decrypt(cypherdata: &[u8], iv: &[u8]) -> Option> { + let c = symm::Crypter::new(symm::AES_256_CBC); + c.init(symm::Decrypt, KEY_C, iv.to_vec()); + c.pad(false); // Padding disabled! + let mut r = c.update(cypherdata); + let rest = c.finalize(); + if rest.is_empty() { + Some(r) + } else { + None + } } pub fn generate_key(size_byte: uint) -> IoResult> {