use botan_sys::*;
use utils::*;
pub fn derive_key_from_password(
algo: &str,
out_len: usize,
passphrase: &str,
salt: &[u8],
param1: usize,
param2: usize,
param3: usize) -> Result<Vec<u8>> {
let algo = make_cstr(algo)?;
let passphrase = make_cstr(passphrase)?;
let mut output = vec![0u8; out_len];
call_botan! {
botan_pwdhash(algo.as_ptr(),
param1,
param2,
param3,
output.as_mut_ptr(),
output.len(),
passphrase.as_ptr(),
0,
salt.as_ptr(),
salt.len())
}
Ok(output)
}
pub fn pbkdf(algo: &str,
out_len: usize,
passphrase: &str,
salt: &[u8],
iterations: usize) -> Result<Vec<u8>> {
derive_key_from_password(algo, out_len, passphrase, salt, iterations, 0, 0)
}
pub fn scrypt(out_len: usize,
passphrase: &str,
salt: &[u8],
n: usize,
r: usize,
p: usize) -> Result<Vec<u8>> {
derive_key_from_password("Scrypt", out_len, passphrase, salt, n, r, p)
}