use libcros::crypto::{crc32, adler32, sha1, sha256, hmac_sha256, pbkdf2_hmac_sha256};
use libcros::{LOG, LOG_DBG, kv_get, kv_set, keys, libargs::ArgCheck};
fn main() {
let mut args: ArgCheck = ArgCheck::new();
let _verbose: bool = args.fbool("--verbose", "", "Enable debug messages");
let mut value = args.fequals_str("--value", "-f", "Value to pass through to cryptography functions");
args.check_help();
if value.is_empty() {
value = "Hello, World!".to_string();
}
LOG_DBG!("setting value to {}", value);
kv_set(keys::EXAMPLE, value);
let data = kv_get(keys::EXAMPLE);
let bytes = data.as_bytes();
LOG!("CRC32: 0x{:08x}", crc32(bytes));
LOG!("ADLER32: 0x{:08x}", adler32(bytes));
let s1 = sha1(bytes);
LOG!("SHA1: {}", s1.iter().map(|b| format!("{:02x}", b)).collect::<String>());
let s256 = sha256(bytes);
LOG!("SHA256: {}", s256.iter().map(|b| format!("{:02x}", b)).collect::<String>());
let hmac = hmac_sha256(b"secret", bytes);
LOG!("HMAC-SHA256 (key=\"secret\"): {}", hmac.iter().map(|b| format!("{:02x}", b)).collect::<String>());
let pbkdf2 = pbkdf2_hmac_sha256(bytes, b"saltsalt", 10000, 32);
LOG!("PBKDF2-HMAC-SHA256 (salt=\"saltsalt\", iterations=10000, output_len=32): {}", pbkdf2.iter().map(|b| format!("{:02x}", b)).collect::<String>());
}