Skip to main content

VerifiableCredential

Struct VerifiableCredential 

Source
pub struct VerifiableCredential {
    pub context: Vec<String>,
    pub vc_type: Vec<String>,
    pub id: String,
    pub issuer: String,
    pub issuance_date: String,
    pub expiration_date: Option<String>,
    pub credential_subject: CredentialSubject,
    pub proof: VcProof,
}
Available on crate feature did only.
Expand description

A W3C Verifiable Credential proving an agent’s authorized capabilities.

VCs are portable, self-contained proofs that work without network calls. Any system — another agent, blockchain, enterprise IAM, EU eIDAS wallet — can verify this credential offline using only the issuer’s public key.

The signature covers a domain-separated Blake3 hash of all credential fields, making it immune to JSON canonicalization attacks.

§Example

use a1::{DyoloIdentity, did::{AgentDid, VerifiableCredential}};

let issuer = DyoloIdentity::generate();
let agent  = DyoloIdentity::generate();
let agent_did = AgentDid::from_key(&agent.verifying_key());

let vc = VerifiableCredential::issue_capability(
    &issuer,
    &agent_did,
    "acme-trading-bot",
    &["trade.equity", "portfolio.read"],
    now_unix,
    now_unix + 86400,
    &chain_fingerprint,
).unwrap();

assert!(vc.verify().is_ok());
let json = vc.to_json().unwrap();

Fields§

§context: Vec<String>§vc_type: Vec<String>§id: String§issuer: String§issuance_date: String§expiration_date: Option<String>§credential_subject: CredentialSubject§proof: VcProof

Implementations§

Source§

impl VerifiableCredential

Source

pub fn issue_capability( issuer: &dyn Signer, subject_did: &AgentDid, passport_namespace: &str, capabilities: &[&str], issued_at_unix: u64, expiry_unix: u64, chain_fingerprint: &[u8; 32], ) -> Result<Self, A1Error>

Issue a capability VC from a DyoloPassport holder.

The VC asserts that the agent identified by subject_did is authorized to perform the listed capabilities under the named passport.

The signature is computed as Ed25519(Blake3(domain ‖ id ‖ issuer ‖ issuance ‖ expiry ‖ subject_did ‖ namespace ‖ caps ‖ fingerprint)), preventing any tampering with the credential fields.

Source

pub fn verify(&self) -> Result<(), A1Error>

Verify the Ed25519 signature on this VC.

Recovers the issuer public key from the issuer DID, recomputes the canonical signable bytes, and checks the signature in constant time.

Source

pub fn to_json(&self) -> Result<String, A1Error>

Serialize to a W3C JSON-LD string.

Trait Implementations§

Source§

impl Clone for VerifiableCredential

Source§

fn clone(&self) -> VerifiableCredential

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for VerifiableCredential

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for VerifiableCredential

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for VerifiableCredential

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FutureExt for T

Source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
Source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,