Add validation to kdf parameters (#1930)

## Issue Addressed

Closes #1906 
Closes #1907 

## Proposed Changes

- Emits warnings when the KDF parameters are two low.
- Returns errors when the KDF parameters are high enough to pose a potential DoS threat.
- Validates AES IV length is 128 bits, errors if empty, warnings otherwise.

## Additional Info

NIST advice used for PBKDF2 ranges https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf. 
Scrypt ranges are based on the maximum value of the `u32` (i.e 4GB of memory)

The minimum range has been set to anything below the default fields.
This commit is contained in:
Kirk Baird
2020-11-19 08:52:51 +00:00
parent 1a530e5a93
commit c5e97b9bf7
4 changed files with 260 additions and 55 deletions

View File

@@ -4,6 +4,7 @@
//! data structures. Specifically, there should not be any actual crypto logic in this file.
use super::hex_bytes::HexBytes;
use crate::DKLEN;
use hmac::{Hmac, Mac, NewMac};
use serde::{Deserialize, Serialize};
use sha2::Sha256;
@@ -128,3 +129,15 @@ pub struct Scrypt {
pub p: u32,
pub salt: HexBytes,
}
impl Scrypt {
pub fn default_scrypt(salt: Vec<u8>) -> Self {
Self {
dklen: DKLEN,
n: 262144,
p: 1,
r: 8,
salt: salt.into(),
}
}
}