use libcros::{
LOG, LOG_DBG,
crypto::{adler32, crc32, hmac_sha256, pbkdf2_hmac_sha256, sha1, sha256},
key_types, keys,
keyval::KvValue,
kv_get, kv_set,
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 = match kv_get(key_types::STRING, keys::EXAMPLE) {
Some(KvValue::String(s)) => s,
_ => panic!("invalid or missing EXAMPLE value"),
};
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>()
);
}