use hmac::{Hmac, Mac};
use sha2::Sha256;
use std::time::{SystemTime, UNIX_EPOCH};
type HmacSha256 = Hmac<Sha256>;
pub(crate) fn now_ts() -> String {
SystemTime::now()
.duration_since(UNIX_EPOCH)
.map(|d| d.as_secs())
.unwrap_or(0)
.to_string()
}
pub(crate) fn sign_request(secret: &str, method: &str, path: &str, body: &str, ts: &str) -> String {
let signing = format!("{ts}\n{method}\n{path}\n{body}");
let mut mac = HmacSha256::new_from_slice(secret.as_bytes()).expect("HMAC key of any size");
mac.update(signing.as_bytes());
hex::encode(mac.finalize().into_bytes())
}
pub fn compute_webhook_signature(secret: &str, timestamp: &str, raw_body: &[u8]) -> String {
let mut mac = HmacSha256::new_from_slice(secret.as_bytes()).expect("HMAC key of any size");
mac.update(timestamp.as_bytes());
mac.update(b".");
mac.update(raw_body);
hex::encode(mac.finalize().into_bytes())
}