reevit 0.2.0

Official Rust SDK for the Reevit payments API
Documentation
use hmac::{Hmac, Mac};
use sha2::Sha256;

const SIGNATURE_PREFIX: &str = "sha256=";

/// Verifies a Reevit webhook signature without leaking the expected digest.
#[must_use]
pub fn verify_webhook_signature(payload: impl AsRef<[u8]>, signature: &str, secret: &str) -> bool {
    if secret.is_empty() {
        return false;
    }
    let Some(encoded_digest) = signature.strip_prefix(SIGNATURE_PREFIX) else {
        return false;
    };
    let Ok(digest) = hex::decode(encoded_digest) else {
        return false;
    };
    let Ok(mut mac) = Hmac::<Sha256>::new_from_slice(secret.as_bytes()) else {
        return false;
    };
    mac.update(payload.as_ref());
    mac.verify_slice(&digest).is_ok()
}