Skip to main content

proof_example/
proof_example.rs

1use 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}