crypto_data_hkdf/4: Fail if the length is too long.
Due to the way the counter is constructed in the HKDF specification,
the requested output length can be at most 255 times the size of the
digest algorithm's output.
Reported by in Many thanks!
@@ -5266,7 +5266,10 @@ fn system_call(
let salt = hkdf::Salt::new(digest_alg, &salt);
let mut bytes : Vec<u8> = Vec::new();
bytes.resize(length, 0);
- salt.extract(&data).expand(&[&info[..]], MyKey(length)).unwrap().fill(&mut bytes).unwrap();
+ match salt.extract(&data).expand(&[&info[..]], MyKey(length)) {
+ Ok(r) => { r.fill(&mut bytes).unwrap(); }
+ _ => { self.fail = true; return Ok(()); }
+ }
Addr::HeapCell(self.heap.to_list(bytes.iter().map(|b| HeapCellValue::Integer(Rc::new(Integer::from(*b))))))
};
