diff options
author | Jesse Luehrs <doy@tozt.net> | 2015-03-25 19:52:13 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2015-03-25 19:52:13 -0400 |
commit | fb8c6b000c15f6324d8bc87baeafeb2d8fc1459f (patch) | |
tree | 924055959e1477ee806fa097c88abef6f8a4a774 /src/primitives.rs | |
parent | 3eed3478478d54ca44c1842f460b44078ad5316e (diff) | |
download | matasano-fb8c6b000c15f6324d8bc87baeafeb2d8fc1459f.tar.gz matasano-fb8c6b000c15f6324d8bc87baeafeb2d8fc1459f.zip |
problem 15
Diffstat (limited to 'src/primitives.rs')
-rw-r--r-- | src/primitives.rs | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/primitives.rs b/src/primitives.rs index 76a2024..fabbce4 100644 --- a/src/primitives.rs +++ b/src/primitives.rs @@ -32,9 +32,20 @@ pub fn pad_pkcs7 (block: &[u8], blocksize: u8) -> Vec<u8> { .collect(); } -pub fn unpad_pkcs7 (block: &[u8]) -> &[u8] { +pub fn unpad_pkcs7 (block: &[u8]) -> Option<&[u8]> { let padding_byte = block[block.len() - 1]; - return &block[..(block.len() - padding_byte as usize)]; + let padding_len = padding_byte as usize; + if padding_len > block.len() { + return None; + } + + let real_len = block.len() - padding_len; + if block[real_len..].iter().all(|&c| c == padding_byte) { + return Some(&block[..real_len]); + } + else { + return None; + } } fn count_bits (bytes: &[u8]) -> u64 { |