pub use const_hex;
#[macro_export]
macro_rules! md5 {
($($tt:tt)*) => {
$crate::calc_hash!(MD5: $($tt)*)
};
}
#[macro_export]
macro_rules! sha256 {
($($tt:tt)*) => {
$crate::calc_hash!(SHA256: $($tt)*)
};
}
#[macro_export]
macro_rules! sha384 {
($($tt:tt)*) => {
$crate::calc_hash!(SHA384: $($tt)*)
};
}
#[macro_export]
macro_rules! sha512 {
($($tt:tt)*) => {
$crate::calc_hash!(SHA512: $($tt)*)
};
}
#[macro_export]
macro_rules! calc_hash_str {
($($tt:tt)*) => {
$crate::calc_hash!($($tt)*).as_str()
};
}
#[macro_export]
macro_rules! calc_hash {
(MD5: $($input_str:expr),+) => {{
use ::md5::Digest;
let mut hasher = ::md5::Md5::new();
$crate::calc_hash!(INTERNAL 16; hasher, $($input_str),+)
}};
(SHA256: $($input_str:expr),+) => {{
use ::sha2::Digest;
let mut hasher = ::sha2::Sha256::new();
$crate::calc_hash!(INTERNAL 32; hasher, $($input_str),+)
}};
(SHA384: $($input_str:expr),+) => {{
use ::sha2::Digest;
let mut hasher = ::sha2::Sha384::new();
$crate::calc_hash!(INTERNAL 48; hasher, $($input_str),+)
}};
(SHA512: $($input_str:expr),+) => {{
use ::sha2::Digest;
let mut hasher = ::sha2::Sha512::new();
$crate::calc_hash!(INTERNAL 64; hasher, $($input_str),+)
}};
(MD5: UPPERCASE => $($input_str:expr),+) => {{
use ::md5::Digest;
let mut hasher = ::md5::Md5::new();
$crate::calc_hash!(INTERNAL 16; UPPERCASE; hasher, $($input_str),+)
}};
(SHA256: UPPERCASE => $($input_str:expr),+) => {{
use ::sha2::Digest;
let mut hasher = ::sha2::Sha256::new();
$crate::calc_hash!(INTERNAL 32; UPPERCASE; hasher, $($input_str),+)
}};
(SHA384: UPPERCASE => $($input_str:expr),+) => {{
use ::sha2::Digest;
let mut hasher = ::sha2::Sha384::new();
$crate::calc_hash!(INTERNAL 48; UPPERCASE; hasher, $($input_str),+)
}};
(SHA512: UPPERCASE => $($input_str:expr),+) => {{
use ::sha2::Digest;
let mut hasher = ::sha2::Sha512::new();
$crate::calc_hash!(INTERNAL 64; UPPERCASE; hasher, $($input_str),+)
}};
(MD5: ITER => $($input_str:expr),+) => {{
use ::md5::Digest;
let mut hasher = ::md5::Md5::new();
$crate::calc_hash!(INTERNAL 16; ITER; hasher, $($input_str),+)
}};
(SHA256: ITER => $input_iter:expr) => {{
use ::sha2::Digest;
let mut hasher = ::sha2::Sha256::new();
$crate::calc_hash!(INTERNAL 32; ITER; hasher, $input_iter)
}};
(SHA384: ITER => $input_iter:expr) => {{
use ::sha2::Digest;
let mut hasher = ::sha2::Sha384::new();
$crate::calc_hash!(INTERNAL 48; ITER; hasher, $input_iter)
}};
(SHA512: ITER => $input_iter:expr) => {{
use ::sha2::Digest;
let mut hasher = ::sha2::Sha512::new();
$crate::calc_hash!(INTERNAL 64; ITER; hasher, $input_iter)
}};
(MD5: UPPERCASE; ITER => $($input_str:expr),+) => {{
use ::md5::Digest;
let mut hasher = ::md5::Md5::new();
$crate::calc_hash!(INTERNAL 16; UPPERCASE; ITER; hasher, $($input_str),+)
}};
(SHA256: UPPERCASE; ITER => $input_iter:expr) => {{
use ::sha2::Digest;
let mut hasher = ::sha2::Sha256::new();
$crate::calc_hash!(INTERNAL 32; UPPERCASE; ITER; hasher, $input_iter)
}};
(SHA384: UPPERCASE; ITER => $input_iter:expr) => {{
use ::sha2::Digest;
let mut hasher = ::sha2::Sha384::new();
$crate::calc_hash!(INTERNAL 48; UPPERCASE; ITER; hasher, $input_iter)
}};
(SHA512: UPPERCASE; ITER => $input_iter:expr) => {{
use ::sha2::Digest;
let mut hasher = ::sha2::Sha512::new();
$crate::calc_hash!(INTERNAL 64; UPPERCASE; ITER; hasher, $input_iter)
}};
(INTERNAL $len:expr; $hasher: expr, $($input_str:expr),+) => {{
$($hasher.update(&($input_str));)+
let result = $hasher.finalize();
#[allow(unsafe_code)]
$crate::hash::const_hex::Buffer::<$len, false>::new().const_format(unsafe { &*{ (result).as_ptr() as *const [u8; $len] } })
}};
(INTERNAL $len:expr; UPPERCASE; $hasher: expr, $($input_str:expr),+) => {{
$($hasher.update(&($input_str));)+
let result = $hasher.finalize();
#[allow(unsafe_code)]
$crate::hash::const_hex::Buffer::<$len, false>::new().const_format_upper(unsafe { &*{ (result).as_ptr() as *const [u8; $len] } })
}};
(INTERNAL $len:expr; ITER; $hasher: expr, $input_iter:expr) => {{
for i in $input_iter {
$hasher.update(i);
}
let result = $hasher.finalize();
#[allow(unsafe_code)]
$crate::hash::const_hex::Buffer::<$len, false>::new().const_format(unsafe { &*{ (result).as_ptr() as *const [u8; $len] } })
}};
(INTERNAL $len:expr; UPPERCASE; ITER; $hasher: expr, $input_iter:expr) => {{
for i in $input_iter {
$hasher.update(i);
}
let result = $hasher.finalize();
#[allow(unsafe_code)]
$crate::hash::const_hex::Buffer::<$len, false>::new().const_format_upper(unsafe { &*{ (result).as_ptr() as *const [u8; $len] } })
}};
}