summaryrefslogtreecommitdiffstats
path: root/src/primitives.rs
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2015-03-25 19:52:13 -0400
committerJesse Luehrs <doy@tozt.net>2015-03-25 19:52:13 -0400
commitfb8c6b000c15f6324d8bc87baeafeb2d8fc1459f (patch)
tree924055959e1477ee806fa097c88abef6f8a4a774 /src/primitives.rs
parent3eed3478478d54ca44c1842f460b44078ad5316e (diff)
downloadmatasano-fb8c6b000c15f6324d8bc87baeafeb2d8fc1459f.tar.gz
matasano-fb8c6b000c15f6324d8bc87baeafeb2d8fc1459f.zip
problem 15
Diffstat (limited to 'src/primitives.rs')
-rw-r--r--src/primitives.rs15
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 {