use aethel_sdk::{verify, verify_presentation, Identity, IssuerPublicParameters};
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 credential = identity.issue_credential(
b"the issuer's secret seed, 32 byte",
&[("tier", 3), ("date_of_birth", 19_900_101)],
)?;
let presentation = identity.present(&credential, b"checkout-session", &["tier"])?;
assert_eq!(presentation.disclosed().get("tier"), Some(&3));
assert!(!presentation.disclosed().contains_key("date_of_birth"));
let issuer = IssuerPublicParameters::derive(b"the issuer's secret seed, 32 byte")?;
assert!(verify_presentation(
&issuer,
&presentation,
b"checkout-session",
)?);
Ok(())
}