Files
card-cli/src/digest.rs
2023-11-18 13:27:08 +08:00

52 lines
1.3 KiB
Rust

use sha1::Sha1;
use sha2::{Digest, Sha256, Sha384, Sha512};
pub fn sha256(input: &str) -> Vec<u8> {
sha256_bytes(input.as_bytes())
}
pub fn sha1_bytes(input: &[u8]) -> Vec<u8> {
let mut digest = Sha1::default();
digest.update(input);
digest.finalize().to_vec()
}
pub fn sha256_bytes(input: &[u8]) -> Vec<u8> {
digest_bytes::<Sha256>(input)
}
pub fn sha384_bytes(input: &[u8]) -> Vec<u8> {
digest_bytes::<Sha384>(input)
}
pub fn sha512_bytes(input: &[u8]) -> Vec<u8> {
digest_bytes::<Sha512>(input)
}
pub fn digest_bytes<D>(input: &[u8]) -> Vec<u8> where D: Digest + Default {
let mut digest: D = Default::default();
Digest::update(&mut digest, input);
digest.finalize().to_vec()
}
macro_rules! define_copy_array {
($fn_name: ident, $len: tt) => (
pub fn $fn_name(in_arr: &[u8]) -> rust_util::XResult<[u8; $len]> {
if in_arr.len() != $len {
return simple_error!("Array length is not: {}, but is: {}", $len, in_arr.len());
}
let mut out_arr = [0_u8; $len];
for i in 0..$len {
out_arr[i] = in_arr[i];
}
Ok(out_arr)
}
)
}
define_copy_array!(copy_sha256, 0x20);
define_copy_array!(copy_sha384, 0x30);
define_copy_array!(copy_sha512, 0x40);
// define_copy_array!(copy_rsa2048, 0x100);