use seal_crypto_wrapper::error::Result;
use seal_crypto_wrapper::prelude::*;
fn main() -> Result<()> {
let algorithm = KdfAlgorithm::build().key().hkdf_sha256();
println!("Selected KDF algorithm: {:?}", algorithm);
let kdf = algorithm.into_wrapper();
println!("Got KDF wrapper.");
let ikm = b"input keying material";
let salt = b"some salt";
let info1 = b"info for key 1";
let info2 = b"info for key 2";
println!("IKM: {:?}", String::from_utf8_lossy(ikm));
println!("Salt: {:?}", String::from_utf8_lossy(salt));
println!("Info 1: {:?}", String::from_utf8_lossy(info1));
println!("Info 2: {:?}", String::from_utf8_lossy(info2));
let key1 = kdf.derive(ikm, Some(salt), Some(info1), 32)?;
println!("Derived key 1.");
let key2 = kdf.derive(ikm, Some(salt), Some(info2), 32)?;
println!("Derived key 2.");
assert_ne!(key1, key2);
println!("Successfully verified that the derived keys are different!");
println!("Key 1 (32 bytes): {:?}", key1);
println!("Key 2 (32 bytes): {:?}", key2);
Ok(())
}