#[non_exhaustive]pub enum DTGCredentialError {
Show 33 variants
UnknownCredential,
DataIntegrity(DataIntegrityError),
NotSigned,
UnknownVCVersion,
EmptyAuthorityActions,
NotAnAuthorityCredential,
AttenuationParentHasNoId,
InvalidDigest(String),
UnsupportedDigestAlgorithm(u64),
MalformedDelegation(String),
NotADelegationGrant(String),
AttenuationWidens(String),
MissingTaskContext,
MissingTaskDigest,
InvalidContext(String),
InvalidType(String),
IssuerScopeTooNarrow {
declared: IssuerScope,
minimum: IssuerScope,
},
InvalidPredicate(String),
ProfileViolation(String),
PredicateNotAccepted(String),
MalformedAcceptList(String),
MalformedTaskDocument(String),
NotAWitnessSession(String),
Canonicalization(String),
WrongCredentialType {
expected: String,
got: String,
},
NotAMembershipGrant(String),
InvalidValidityWindow {
valid_from: DateTime<Utc>,
valid_until: DateTime<Utc>,
},
JsonTooDeep {
max: usize,
},
NotTheGrantSubject {
expected: String,
found: String,
},
OutlivesGrant {
valid_until: Option<DateTime<Utc>>,
grant_valid_until: DateTime<Utc>,
},
ProofNotFromIssuer {
issuer: String,
verification_method: String,
},
NotValidAt {
at: DateTime<Utc>,
},
MalformedCredential(String),
}Expand description
Errors related to DTG Credentials
New variants may be added in minor releases; match with a wildcard arm.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
UnknownCredential
DataIntegrity(DataIntegrityError)
NotSigned
UnknownVCVersion
EmptyAuthorityActions
An AuthorityCredential (VAC) carried an empty actions list.
Emptiness is never a wildcard: a VAC conferring no actions confers nothing, and is rejected rather than treated as unrestricted.
NotAnAuthorityCredential
DTGCredential::attenuate was called on a credential that is not a VAC.
AttenuationParentHasNoId
Never returned. authority.parent is a digest as of Working Draft 02, so a parent VAC no longer needs an id to be attenuated. This variant will be removed in a future release.
DTGCredential::attenuate was called on a VAC with no id.
No longer produced. Working Draft 02 makes authority.parent a digest of the
parent rather than its id, precisely so that no credential needs a top-level
identifier merely in order to be referenced.
InvalidDigest(String)
A digest value was not a well-formed digestMultibase.
Either the multibase envelope or the multihash inside it failed to decode. A
sha256:<hex> value produced against Working Draft 01 lands here, which is the
intended outcome: it is reported rather than silently compared as unequal.
UnsupportedDigestAlgorithm(u64)
A digest named a hash algorithm this library does not implement.
The specification permits a governing party to require a stronger hash, and carries the algorithm in the value itself. A verifier MUST reject an algorithm it does not accept rather than treating it as a mismatch — hence a distinct error.
MalformedDelegation(String)
A DelegationCredential (VDC) was not a well-formed grant or acceptance.
NotADelegationGrant(String)
A delegation acknowledgement was built against something that is not a delegation grant.
AttenuationWidens(String)
An attenuation attempted to confer more than its parent held.
MissingTaskContext
A StatementCredential under a profile that REQUIRES taskContext — witnessed/1,
vetted/1, presented/1, or an accept-list entry saying so — carries none.
MissingTaskDigest
A credential that REQUIRES taskContext carries it without taskDigestMultibase,
which DTG Core Credentials makes REQUIRED wherever taskContext is.
InvalidContext(String)
@context does not list the W3C VC context first and DTG_CONTEXT_V1 second.
InvalidType(String)
type is not VerifiableCredential, DTGCredential and exactly one concrete
subtype (with PersonhoodCredential permitted as a hint on a VMC only), or names a
subtype this specification has retired.
IssuerScopeTooNarrow
issuerScope is narrower than the credential type or predicate profile permits.
A community-issued VMC can only truthfully declare public; witnessed/1,
vetted/1 and presented/1 require directed at minimum.
InvalidPredicate(String)
A VSC predicate is not an absolute IRI in Unicode Normalization Form C.
A compact form (a CURIE such as dtg:witnessed, or a bare JSON-LD term) is
malformed rather than unknown: no expansion is ever performed.
ProfileViolation(String)
A VSC does not meet a constraint of its predicate’s profile: an object kind the
profile does not permit, a REQUIRED member missing, or a subject–object relationship
that does not hold.
PredicateNotAccepted(String)
A verifier’s accept-list does not contain the statement’s predicate.
Rejection is the only conforming outcome for an unrecognized predicate: it is not processed as a generic statement, and no published equivalence is followed.
MalformedAcceptList(String)
A registry accept-list document could not be read.
MalformedTaskDocument(String)
A document a credential was to cite as its taskContext is not a Trust Task
document that can be named: it is not a JSON object, or it has no string id.
NotAWitnessSession(String)
DTGCredential::new_witnessed_vsc was given something other than the
witness/session document that opened the witness session.
A VWC names the innermost exchange that attests the witnessing (Trust Tasks
§4.9.1): the party’s own witness/session, not the witness/session/submit
exchanged on its thread and not the relationship exchange that contains it.
Canonicalization(String)
The credential could not be canonicalized (JCS, RFC 8785) for digesting
WrongCredentialType
A credential was not of the type an operation requires
NotAMembershipGrant(String)
A membership acknowledgement was built against something that is not a community-issued membership grant
InvalidValidityWindow
A credential’s validUntil is not after its validFrom.
A window that closes before, or at the instant, it opens describes a credential
that is never valid. It is refused where a credential is built or signed rather than
left for every verifier to notice. A validFrom in the past is not refused:
backdating is how a re-issued credential keeps the date the original took effect.
Compared at whole seconds, the precision the wire form carries.
JsonTooDeep
A JSON document was nested more deeply than MAX_JSON_DEPTH allows.
Digesting, signing and verifying all walk a credential recursively, so a value deep enough exhausts the stack and aborts the process. It is refused before any of that work starts.
NotTheGrantSubject
A grant names a different party as its subject from the one answering it.
Returned by DTGCredential::new_member_vmc_for and DTGCredential::new_delegate_vdc_for. A party answers a grant for itself, so a grant naming anyone else is refused rather than answered in that party’s name.
OutlivesGrant
An acknowledgement or acceptance would remain valid after the grant it answers.
valid_until is None where the answer was open-ended against a grant that expires.
ProofNotFromIssuer
A proof verified, but was made with a verification method that does not belong to the credential’s issuer.
NotValidAt
A credential was not in force at the instant it was checked against.
MalformedCredential(String)
A credential in its wire form lacks a member it needs, or carries one that cannot be read.
Trait Implementations§
Source§impl Debug for DTGCredentialError
impl Debug for DTGCredentialError
Source§impl Display for DTGCredentialError
impl Display for DTGCredentialError
Source§impl Error for DTGCredentialError
impl Error for DTGCredentialError
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()