use hmac::{Hmac, Mac};
use sha2::Sha256;
const SECRET: &[u8] = b"oracle_test_secret_v1";
const BODY: &str = r#"{"id":"evt_42","type":"oracle.test"}"#;
const TIMESTAMP: &str = "1700000000";
const STRIPE_REFERENCE: &str = "cb15d3043635bce0616514cbea5e0b79897507325283f9ab44c0b6e1c4be01ec";
const SLACK_REFERENCE: &str = "bf8d895ff63d13a33f57ea2397d4f58028f6f771bb537054c1c0c4d03ef7e5d9";
const GITHUB_REFERENCE: &str = "3be41cb1626568e3af11db25152a9686661771e1b524428db402e599c2a93998";
fn sign(input: &str) -> String {
let mut mac = <Hmac<Sha256> as Mac>::new_from_slice(SECRET).expect("hmac key");
mac.update(input.as_bytes());
hex::encode(mac.finalize().into_bytes())
}
#[test]
fn stripe_v1_signing_input_matches_reference() {
let signing_input = format!("{TIMESTAMP}.{BODY}");
let computed = sign(&signing_input);
assert_eq!(
computed, STRIPE_REFERENCE,
"Stripe v1 HMAC drifted from reference; check signing input"
);
}
#[test]
fn slack_v0_signing_input_matches_reference() {
let signing_input = format!("v0:{TIMESTAMP}:{BODY}");
let computed = sign(&signing_input);
assert_eq!(
computed, SLACK_REFERENCE,
"Slack v0 HMAC drifted from reference; check signing input"
);
}
#[test]
fn github_hmac_signing_input_matches_reference() {
let computed = sign(BODY);
assert_eq!(
computed, GITHUB_REFERENCE,
"GitHub HMAC drifted from reference; check signing input"
);
}
#[test]
fn reference_signatures_are_pairwise_distinct() {
assert_ne!(STRIPE_REFERENCE, SLACK_REFERENCE);
assert_ne!(STRIPE_REFERENCE, GITHUB_REFERENCE);
assert_ne!(SLACK_REFERENCE, GITHUB_REFERENCE);
}