use nostr::prelude::*;
use nostringer::{Error, generate_keypair_hex, sign, verify};
fn main() -> Result<(), Error> {
let keypair1 = generate_keypair_hex("xonly");
let keypair2 = generate_keypair_hex("compressed");
let keypair3 = generate_keypair_hex("xonly");
let ring_pubkeys_hex: Vec<String> = vec![
keypair1.public_key_hex.clone(),
keypair2.public_key_hex.clone(), keypair3.public_key_hex.clone(),
];
let message = b"This is a secret message to the group.";
println!("Signing message...");
let signature = sign(
message,
&keypair2.private_key_hex, &ring_pubkeys_hex, )?;
println!("Generated Signature:");
println!(" c0: {}", signature.c0);
println!(" s: {:?}", signature.s);
println!("\nVerifying signature...");
let is_valid = verify(
&signature,
message,
&ring_pubkeys_hex, )?;
println!("Signature valid: {}", is_valid);
assert!(is_valid);
println!("\nVerifying with tampered message...");
let tampered_message = b"This is a different message.";
let is_tampered_valid = verify(&signature, tampered_message, &ring_pubkeys_hex)?;
println!("Tampered signature valid: {}", is_tampered_valid);
assert!(!is_tampered_valid);
Ok(())
}