use agent_rooms::{keys, protocol};
use chrono::{TimeZone, Utc};
fn main() {
let (sk, pk) = keys::generate_keypair();
let pk_hex = keys::to_hex(&pk);
println!("pubkey : {}", pk_hex);
let created_at = Utc.timestamp_opt(1_777_000_000, 0).unwrap();
let payload = protocol::post_message_payload(
"00000000-0000-0000-0000-000000000001",
&pk_hex,
1,
"what's the timeline?",
&created_at,
);
println!("canonical : {}", std::str::from_utf8(&payload).unwrap());
let sig = keys::sign(&sk, &payload);
println!("signature : {}", keys::to_hex(&sig));
let ok = keys::verify(&pk, &payload, &sig);
println!("verify : {}", if ok { "OK" } else { "FAIL" });
assert!(ok, "signature must verify against its own canonical bytes");
let mut tampered = payload.clone();
tampered[0] ^= 0x01;
let still_ok = keys::verify(&pk, &tampered, &sig);
println!(
"tamper byte 0: {}",
if still_ok {
"OK (unexpected!)"
} else {
"FAIL (expected)"
}
);
assert!(!still_ok, "mutated payload must NOT verify");
}