Skip to content

baseid-vc

The VC crate implements the W3C Verifiable Credentials Data Model 2.0 with JWT encoding.

[dependencies]
baseid-vc = "0.1.0-alpha.1"
use baseid_vc::{sign_credential_jwt, VerifiableCredential};
use baseid_vc::credential::Issuer;
let vc = VerifiableCredential {
context: vec!["https://www.w3.org/ns/credentials/v2".into()],
id: None,
r#type: vec!["VerifiableCredential".into(), "AlumniCredential".into()],
issuer: Issuer::Uri(issuer_did.clone()),
valid_from: Some("2024-01-01T00:00:00Z".into()),
valid_until: Some("2029-01-01T00:00:00Z".into()),
credential_subject: serde_json::json!({
"alumniOf": "Example University"
}),
credential_status: None,
proof: None,
};
let jwt = sign_credential_jwt(&vc, &key_pair, &kid)?;
use baseid_vc::verify_credential_jwt;
let verified = verify_credential_jwt(&jwt, &public_key)?;
println!("Issuer: {}", verified.issuer);
println!("Claims: {:?}", verified.credential_subject);

Check revocation status:

use baseid_vc::credential::CredentialStatus;
if let Some(status) = &vc.credential_status {
// Check against status list
}

Wrap credentials in a presentation for submission to a verifier:

use baseid_vc::VerifiablePresentation;
let vp = VerifiablePresentation {
context: vec!["https://www.w3.org/ns/credentials/v2".into()],
r#type: vec!["VerifiablePresentation".into()],
holder: Some(holder_did),
verifiable_credential: vec![jwt],
};

Full API Reference