proof_example/
proof_example.rs1use anp::proof::{
2 generate_w3c_proof, verify_w3c_proof, ProofGenerationOptions, ProofVerificationOptions,
3 CRYPTOSUITE_EDDSA_JCS_2022, PROOF_TYPE_DATA_INTEGRITY,
4};
5use anp::PrivateKeyMaterial;
6use serde_json::json;
7
8fn main() {
9 let secp256k1_private =
10 PrivateKeyMaterial::Secp256k1(k256::ecdsa::SigningKey::random(&mut rand::rngs::OsRng));
11 let secp256k1_public = secp256k1_private.public_key();
12 let agent_claim = json!({
13 "id": "did:wba:example.com:agents:alice",
14 "type": "AgentIdentityClaim",
15 "name": "Agent Alice",
16 "capabilities": ["search", "booking", "payment"],
17 });
18 let signed_claim = generate_w3c_proof(
19 &agent_claim,
20 &secp256k1_private,
21 "did:wba:example.com:agents:alice#key-1",
22 ProofGenerationOptions::default(),
23 )
24 .expect("secp256k1 proof generation should succeed");
25 println!(
26 "secp256k1 verification: {}",
27 verify_w3c_proof(
28 &signed_claim,
29 &secp256k1_public,
30 ProofVerificationOptions::default()
31 )
32 );
33
34 let ed25519_private =
35 PrivateKeyMaterial::Ed25519(ed25519_dalek::SigningKey::generate(&mut rand::rngs::OsRng));
36 let ed25519_public = ed25519_private.public_key();
37 let credential = json!({
38 "id": "did:wba:example.com:credential:bob",
39 "type": ["VerifiableCredential", "AgentCapabilityCredential"],
40 "issuer": "did:wba:issuer.example.com",
41 "credentialSubject": {
42 "id": "did:wba:example.com:agents:bob",
43 "capability": "hotel-booking",
44 }
45 });
46 let signed_credential = generate_w3c_proof(
47 &credential,
48 &ed25519_private,
49 "did:wba:issuer.example.com#key-1",
50 ProofGenerationOptions {
51 proof_type: Some(PROOF_TYPE_DATA_INTEGRITY.to_string()),
52 cryptosuite: Some(CRYPTOSUITE_EDDSA_JCS_2022.to_string()),
53 domain: Some("example.com".to_string()),
54 ..ProofGenerationOptions::default()
55 },
56 )
57 .expect("Ed25519 proof generation should succeed");
58 println!(
59 "ed25519 verification: {}",
60 verify_w3c_proof(
61 &signed_credential,
62 &ed25519_public,
63 ProofVerificationOptions {
64 expected_domain: Some("example.com".to_string()),
65 ..ProofVerificationOptions::default()
66 },
67 )
68 );
69}