Rust implementation of OpenSSL [EVP_bytesToKey] function.
evpkdf
derives key from the given password and salt.
Notice that this approach is too weak for modern standard now. Newer applications should choice a more modern algorithm like [bcrypt], [pbkdf2] or [scrypt].
```rust use evpkdf::evpkdf; use hex_literal::hex; use md5::Md5; // from md-5 crate use sha1::Sha1; // from sha-1 crate
let mut output = [];
evpkdf::
assert_eq!(output, []);
let mut output = [0; 128 / 8];
evpkdf::
assert_eq!(output, hex!("8006de5d2a5d15f9bbdb8f40196d5af1"));
let mut output = [0; 128 / 8];
evpkdf::
assert_eq!(output, hex!("f8833429b112582447bc66f433497f75")); ```
Below sinppet generates the same result as
CryptoJS.kdf.OpenSSL.execute('password', 256 / 32, 128 / 32, 'saltsalt')
.
```rust use evpkdf::evpkdf; use hex_literal::hex; use md5::Md5; // from md-5 crate
const KEYSIZE: usize = 256; const IVSIZE: usize = 128;
let mut output = [0; (KEYSIZE + IVSIZE) / 8];
evpkdf::
let (key, iv) = output.splitat(KEYSIZE / 8);
assert_eq!( key, hex!("fdbdf3419fff98bdb0241390f62a9db35f4aba29d77566377997314ebfc709f2") );
assert_eq!( iv, hex!("0b5ca7b1081f94b1ac12e3c8ba87d05a") ); ```
MIT