use seal_crypto_wrapper::error::Result;
use seal_crypto_wrapper::prelude::*;
use seal_crypto_wrapper::traits::XofAlgorithmTrait;
fn main() -> Result<()> {
let algorithm = XofAlgorithm::build().shake128();
println!("Selected XOF algorithm: {:?}", algorithm);
let xof = algorithm.into_wrapper();
println!("Got XOF wrapper.");
let ikm = b"input keying material";
let salt = b"some salt";
let info = b"some info";
println!("IKM: {:?}", String::from_utf8_lossy(ikm));
println!("Salt: {:?}", String::from_utf8_lossy(salt));
println!("Info: {:?}", String::from_utf8_lossy(info));
let mut reader = xof.reader(ikm, Some(salt), Some(info))?;
println!("Created XOF reader.");
let mut output1 = [0u8; 32];
reader.read(&mut output1);
println!("Read 32 bytes from reader.");
let mut output2 = [0u8; 64];
reader.read(&mut output2);
println!("Read 64 bytes from reader.");
assert_ne!(&output1[..], &output2[..32]);
println!("Successfully verified that the outputs are different!");
println!("Output 1 (32 bytes): {:?}", &output1);
println!("Output 2 (64 bytes): {:?}", &output2);
Ok(())
}