use aethel_sdk::{verify, Identity};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut identity = Identity::generate()?;
let message = b"the message that was actually signed";
let signature = identity.sign(message)?;
assert!(verify(identity.public_key(), message, &signature)?);
assert!(!verify(
identity.public_key(),
b"something else",
&signature
)?);
let multikey = identity.public_key_multibase();
assert!(multikey.starts_with('z'));
let key = b"a sealing key of thirty-two byte";
let sealed = identity.export_sealed(key)?;
let mut identity = Identity::open_sealed(&sealed, key)?;
let first = identity.project_at(b"checkout-session")?;
let second = identity.project_at(b"checkout-session")?;
assert_ne!(first.salt(), second.salt());
println!("ok: signed, verified, sealed, reopened and projected {multikey:.16}...");
Ok(())
}