| WIRE02-MEDIA-001 |
2 |
Issuers MUST emit compact form typ value |
issuance |
covered |
wire-02/identifier-stack/conformance.json |
|
|
| WIRE02-MEDIA-002 |
2 |
Verifiers MUST accept full media type form |
hard_fail |
covered |
wire-02/identifier-stack/conformance.json |
|
E_INVALID_FORMAT |
| WIRE02-MEDIA-003 |
2 |
Full media type MUST be normalized to compact form |
hard_fail |
deferred (v0.12.1) |
|
|
E_INVALID_FORMAT |
| WIRE02-MEDIA-004 |
2 |
Issuers MUST NOT emit full media type form |
issuance |
implicit (advisory/issuance) |
|
|
|
| WIRE02-MEDIA-005 |
2 |
Verifiers MUST enforce typ/peac_version coherence |
hard_fail |
covered |
wire-02/identifier-stack/conformance.json, wire-02/invalid.json, wire-02/replay-prevention/boundary-jti-length.json, wire-02/valid.json, wire-02/warnings.json |
|
E_WIRE_VERSION_MISMATCH |
| WIRE02-MEDIA-006 |
2 |
Strict mode: typ MUST be present |
hard_fail |
deferred (v0.12.1) |
|
|
E_INVALID_FORMAT |
| WIRE02-MEDIA-007 |
2 |
Strict mode: typ MUST match interaction-record+jwt |
hard_fail |
deferred (v0.12.1) |
|
|
E_INVALID_FORMAT |
| WIRE02-ENV-001 |
3 |
Unknown top-level fields MUST be rejected |
hard_fail |
covered |
wire-02/kinds/conformance.json |
|
E_INVALID_FORMAT |
| WIRE02-ENV-002 |
3 |
peac_version is REQUIRED |
hard_fail |
deferred (v0.12.1) |
|
|
E_MISSING_REQUIRED_CLAIM |
| WIRE02-ENV-003 |
3 |
kind is REQUIRED |
hard_fail |
deferred (v0.12.1) |
|
|
E_MISSING_REQUIRED_CLAIM |
| WIRE02-ENV-004 |
3 |
type is REQUIRED |
hard_fail |
deferred (v0.12.1) |
|
|
E_MISSING_REQUIRED_CLAIM |
| WIRE02-ENV-005 |
3 |
iss is REQUIRED |
hard_fail |
deferred (v0.12.1) |
|
|
E_MISSING_REQUIRED_CLAIM |
| WIRE02-ENV-006 |
3 |
iat is REQUIRED |
hard_fail |
deferred (v0.12.1) |
|
|
E_MISSING_REQUIRED_CLAIM |
| WIRE02-ENV-007 |
3 |
jti is REQUIRED |
hard_fail |
deferred (v0.12.1) |
|
|
E_MISSING_REQUIRED_CLAIM |
| WIRE02-ENV-008 |
3 |
sub is OPTIONAL |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-ENV-009 |
3 |
pillars is OPTIONAL |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-ENV-010 |
3 |
actor is OPTIONAL |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-ENV-011 |
3 |
policy is OPTIONAL |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-ENV-012 |
3 |
representation is OPTIONAL |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-ENV-013 |
3 |
occurred_at is OPTIONAL (evidence kind only) |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-ENV-014 |
3 |
purpose_declared is OPTIONAL |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-ENV-015 |
3 |
extensions is OPTIONAL |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-ENV-016 |
3 |
Every Wire 0.2 receipt MUST include 6 required fields |
hard_fail |
deferred (v0.12.1) |
|
|
E_MISSING_REQUIRED_CLAIM |
| WIRE02-ENV-017 |
3 |
policy.digest is REQUIRED when policy block present |
hard_fail |
covered |
wire-02/valid.json |
|
E_INVALID_FORMAT |
| WIRE02-ENV-018 |
3 |
policy.uri is OPTIONAL |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-ENV-019 |
3 |
policy.version is OPTIONAL |
advisory |
covered |
wire-02/valid.json |
|
|
| WIRE02-ENV-020 |
3 |
policy.uri MUST start with https:// |
hard_fail |
deferred (v0.12.1) |
|
|
E_INVALID_FORMAT |
| WIRE02-ENV-021 |
3 |
Implementations MUST NOT auto-fetch policy.uri |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-ENV-022 |
3 |
representation.content_hash is OPTIONAL |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-ENV-023 |
3 |
representation.content_type is OPTIONAL |
advisory |
covered |
wire-02/invalid.json, wire-02/replay-prevention/boundary-jti-length.json, wire-02/valid.json, wire-02/warnings.json |
|
|
| WIRE02-ENV-024 |
3 |
representation.content_length is OPTIONAL |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-ENV-025 |
3 |
actor.id is REQUIRED |
hard_fail |
deferred (v0.12.1) |
|
|
E_INVALID_FORMAT |
| WIRE02-ENV-026 |
3 |
actor.proof_type is REQUIRED |
hard_fail |
deferred (v0.12.1) |
|
|
E_INVALID_FORMAT |
| WIRE02-ENV-027 |
3 |
actor.origin is REQUIRED |
hard_fail |
deferred (v0.12.1) |
|
|
E_INVALID_FORMAT |
| WIRE02-COMPAT-001 |
4 |
Implementations MUST preserve unrecognized open field values |
hard_fail |
deferred (v0.12.1) |
|
|
E_INVALID_FORMAT |
| WIRE02-COMPAT-002 |
4 |
Pillars array MUST be sorted ascending lexicographic |
hard_fail |
deferred (v0.12.1) |
|
|
E_PILLARS_NOT_SORTED |
| WIRE02-KIND-001 |
5 |
occurred_at MUST NOT appear on challenge receipts |
hard_fail |
covered |
wire-02/invalid.json, wire-02/kinds/conformance.json, wire-02/occurred-at/conformance.json, wire-02/replay-prevention/boundary-jti-length.json, wire-02/valid.json, wire-02/warnings.json |
|
E_OCCURRED_AT_ON_CHALLENGE |
| WIRE02-KIND-002 |
5 |
Challenges SHOULD include the challenge extension group |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-KIND-003 |
5 |
A single type MAY appear with either kind |
advisory |
covered |
wire-02/kinds/conformance.json |
|
|
| WIRE02-TYPE-001 |
6 |
type domain MUST contain at least one dot |
hard_fail |
covered |
wire-02/types/conformance.json |
|
E_INVALID_FORMAT |
| WIRE02-TYPE-002 |
6 |
type domain MUST match domain character pattern |
hard_fail |
covered |
wire-02/types/conformance.json |
|
E_INVALID_FORMAT |
| WIRE02-TYPE-003 |
6 |
type segment MUST be non-empty |
hard_fail |
covered |
wire-02/types/conformance.json |
|
E_INVALID_FORMAT |
| WIRE02-TYPE-004 |
6 |
type segment MUST match segment character pattern |
hard_fail |
covered |
wire-02/types/conformance.json |
|
E_INVALID_FORMAT |
| WIRE02-TYPE-005 |
6 |
type domain MUST start with alphanumeric |
hard_fail |
covered |
wire-02/types/conformance.json |
|
E_INVALID_FORMAT |
| WIRE02-TYPE-006 |
6 |
type segment MUST start with alphanumeric |
hard_fail |
covered |
wire-02/types/conformance.json |
|
E_INVALID_FORMAT |
| WIRE02-TYPE-007 |
6 |
Reverse-DNS type values SHOULD be lowercase ASCII |
warning_only |
covered |
wire-02/types/conformance.json |
|
|
| WIRE02-TYPE-008 |
6 |
Verifiers MAY emit warning for uppercase reverse-DNS type |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-PILLAR-001 |
7 |
Unknown pillar values MUST be rejected |
hard_fail |
covered |
wire-02/pillars/conformance.json |
|
E_INVALID_FORMAT |
| WIRE02-PILLAR-002 |
7 |
Pillars array MUST contain at least one element when present |
hard_fail |
covered |
wire-02/pillars/conformance.json |
|
E_INVALID_FORMAT |
| WIRE02-PILLAR-003 |
7 |
Pillar values MUST be in ascending lexicographic order |
hard_fail |
covered |
wire-02/invalid.json, wire-02/pillars/conformance.json, wire-02/valid.json, wire-02/warnings.json |
|
E_PILLARS_NOT_SORTED |
| WIRE02-PILLAR-004 |
7 |
Duplicate pillar values MUST be rejected |
hard_fail |
covered |
wire-02/pillars/conformance.json |
|
E_PILLARS_NOT_SORTED |
| WIRE02-PILLAR-005 |
7 |
Receipt MAY have type not corresponding to any single pillar |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-PILLAR-006 |
7 |
Receipt MAY have multiple pillars for a single type |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-ISS-001 |
8 |
iss scheme MUST be lowercase https |
hard_fail |
covered |
wire-02/invalid.json, wire-02/issuers/conformance.json, wire-02/replay-prevention/boundary-jti-length.json, wire-02/valid.json, wire-02/warnings.json |
|
E_ISS_NOT_CANONICAL |
| WIRE02-ISS-002 |
8 |
iss host MUST be lowercase ASCII |
hard_fail |
covered |
wire-02/issuers/conformance.json |
|
E_ISS_NOT_CANONICAL |
| WIRE02-ISS-003 |
8 |
Default port 443 MUST NOT appear explicitly |
hard_fail |
covered |
wire-02/issuers/conformance.json |
|
E_ISS_NOT_CANONICAL |
| WIRE02-ISS-004 |
8 |
iss MUST equal reconstructed origin exactly |
hard_fail |
covered |
wire-02/issuers/conformance.json |
|
E_ISS_NOT_CANONICAL |
| WIRE02-ISS-005 |
8 |
DID method MUST be lowercase letters and digits only |
hard_fail |
covered |
wire-02/invalid.json, wire-02/issuers/conformance.json, wire-02/valid.json |
|
E_ISS_NOT_CANONICAL |
| WIRE02-ISS-006 |
8 |
DID method-specific-id MUST NOT contain path/query/fragment chars |
hard_fail |
covered |
wire-02/issuers/conformance.json |
|
E_ISS_NOT_CANONICAL |
| WIRE02-ISS-007 |
8 |
All non-https/did schemes produce E_ISS_NOT_CANONICAL |
hard_fail |
covered |
wire-02/issuers/conformance.json |
|
E_ISS_NOT_CANONICAL |
| WIRE02-ISS-008 |
8 |
Callers MUST always provide publicKey directly |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-OCC-001 |
9 |
occurred_at value MUST be valid ISO 8601/RFC 3339 datetime |
hard_fail |
covered |
wire-02/invalid.json, wire-02/kinds/conformance.json, wire-02/occurred-at/conformance.json, wire-02/warnings.json |
|
E_INVALID_FORMAT |
| WIRE02-JOSE-001 |
10 |
alg MUST be EdDSA; all others rejected |
hard_fail |
covered |
wire-02/jose/conformance.json |
|
E_INVALID_FORMAT |
| WIRE02-JOSE-002 |
10 |
kid is REQUIRED in JWS header |
hard_fail |
covered |
wire-02/jose/conformance.json |
|
E_JWS_MISSING_KID |
| WIRE02-JOSE-003 |
10 |
Embedded key jwk MUST cause hard error |
hard_fail |
covered |
wire-02/invalid.json, wire-02/jose/conformance.json |
|
E_JWS_EMBEDDED_KEY |
| WIRE02-JOSE-004 |
10 |
crit header MUST be rejected |
hard_fail |
covered |
wire-02/invalid.json, wire-02/jose/conformance.json |
|
E_JWS_CRIT_REJECTED |
| WIRE02-JOSE-005 |
10 |
b64:false MUST be rejected |
hard_fail |
covered |
wire-02/invalid.json, wire-02/jose/conformance.json |
|
E_JWS_B64_REJECTED |
| WIRE02-JOSE-006 |
10 |
zip header MUST be rejected |
hard_fail |
covered |
wire-02/invalid.json, wire-02/jose/conformance.json |
|
E_JWS_ZIP_REJECTED |
| WIRE02-JOSE-007 |
10 |
kid MUST be present and non-empty |
hard_fail |
covered |
wire-02/invalid.json, wire-02/jose/conformance.json |
|
E_JWS_MISSING_KID |
| WIRE02-JOSE-008 |
10 |
kid MUST NOT exceed 256 characters |
hard_fail |
covered |
wire-02/jose/conformance.json |
|
E_JWS_MISSING_KID |
| WIRE02-JOSE-009 |
10 |
JWS compact serialization MUST NOT exceed 256 KB |
hard_fail |
covered |
wire-02/jose/conformance.json |
|
E_INVALID_FORMAT |
| WIRE02-POLICY-001 |
11 |
policyDigest option MUST match sha256:<64hex> format |
hard_fail |
covered |
wire-02/policy-binding/conformance.json, wire-02/valid.json, wire-02/validation/conformance.json |
|
E_INVALID_FORMAT |
| WIRE02-POLICY-002 |
11 |
policy.uri MUST be https:// URL |
hard_fail |
covered |
wire-02/policy-binding/conformance.json |
|
E_INVALID_FORMAT |
| WIRE02-POLICY-003 |
11 |
Implementations MUST NOT auto-fetch policy URI |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-EXT-001 |
12 |
Extension keys MUST conform to domain/segment grammar |
hard_fail |
covered |
wire-02/extensions/conformance.json, wire-02/valid.json |
|
E_INVALID_EXTENSION_KEY |
| WIRE02-EXT-002 |
12 |
Extension key domain MUST have at least one dot |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_KEY |
| WIRE02-EXT-003 |
12 |
Extension key domain label MUST NOT exceed 63 chars |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_KEY |
| WIRE02-EXT-004 |
12 |
Extension key segment MUST be non-empty |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_KEY |
| WIRE02-EXT-005 |
12 |
Extension key segment MUST match lowercase pattern |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_KEY |
| WIRE02-EXT-006 |
12 |
Commerce: payment_rail is REQUIRED |
hard_fail |
covered |
wire-02/extensions/conformance.json, wire-02/valid.json, wire-02/warnings.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-007 |
12 |
Commerce: amount_minor is REQUIRED |
hard_fail |
covered |
wire-02/extensions/conformance.json, wire-02/valid.json, wire-02/warnings.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-008 |
12 |
Commerce: currency is REQUIRED |
hard_fail |
covered |
wire-02/extensions/conformance.json, wire-02/valid.json, wire-02/warnings.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-009 |
12 |
amount_minor MUST be base-10 integer string |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-010 |
12 |
Issuers SHOULD use distinct type for negative amounts |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-EXT-011 |
12 |
Access: resource is REQUIRED |
hard_fail |
covered |
wire-02/extensions/conformance.json, wire-02/valid.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-012 |
12 |
Access: action is REQUIRED |
hard_fail |
covered |
wire-02/extensions/conformance.json, wire-02/valid.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-013 |
12 |
Access: decision is REQUIRED |
hard_fail |
covered |
wire-02/extensions/conformance.json, wire-02/valid.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-014 |
12 |
trace_id MUST match 32 lowercase hex chars |
hard_fail |
covered |
wire-02/extensions/conformance.json, wire-02/valid.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-015 |
12 |
span_id MUST match 16 lowercase hex chars |
hard_fail |
covered |
wire-02/extensions/conformance.json, wire-02/valid.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-016 |
12 |
Unknown extension keys MUST be preserved |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_FORMAT |
| WIRE02-EXT-017 |
12 |
Unknown extension keys MUST trigger warning |
warning_only |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-EXT-018 |
12 |
Unknown extension keys MUST NOT cause validation error |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_FORMAT |
| WIRE02-EXT-019 |
12 |
Consent: consent_basis is REQUIRED |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-020 |
12 |
Consent: consent_status is REQUIRED (closed enum) |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-021 |
12 |
Consent: data_categories is OPTIONAL |
advisory |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-EXT-022 |
12 |
Consent: retention_period is OPTIONAL (ISO 8601 duration) |
advisory |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-EXT-024 |
12 |
Consent: .strict() rejects unknown properties |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-031 |
12 |
Privacy: data_classification is REQUIRED |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-032 |
12 |
Privacy: processing_basis is OPTIONAL |
advisory |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-EXT-033 |
12 |
Privacy: retention_mode is OPTIONAL (closed enum) |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-034 |
12 |
Privacy: recipient_scope is OPTIONAL (closed enum) |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-035 |
12 |
Privacy: anonymization_method is OPTIONAL |
advisory |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-EXT-036 |
12 |
Privacy: transfer_mechanism is OPTIONAL |
advisory |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-EXT-037 |
12 |
Safety: review_status is REQUIRED (closed enum) |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-038 |
12 |
Safety: risk_level is OPTIONAL (closed enum) |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-039 |
12 |
Safety: assessment_method is OPTIONAL |
advisory |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-EXT-040 |
12 |
Safety: safety_measures is OPTIONAL (max 32 items) |
advisory |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-EXT-041 |
12 |
Safety: incident_ref is OPTIONAL |
advisory |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-EXT-042 |
12 |
Safety: model_ref is OPTIONAL |
advisory |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-EXT-043 |
12 |
Compliance: framework is REQUIRED |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-044 |
12 |
Compliance: compliance_status is REQUIRED (closed enum) |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-045 |
12 |
Compliance: audit_date is OPTIONAL (ISO 8601 date) |
advisory |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-EXT-046 |
12 |
Compliance: validity_period is OPTIONAL (ISO 8601 duration) |
advisory |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-EXT-047 |
12 |
Compliance: evidence_ref is OPTIONAL (SHA-256 digest) |
advisory |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-EXT-048 |
12 |
Compliance: .strict() rejects unknown properties |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-049 |
12 |
Provenance: source_type is REQUIRED |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-050 |
12 |
Provenance: source_ref is OPTIONAL |
advisory |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-EXT-051 |
12 |
Provenance: custody_chain is OPTIONAL (max 16 items) |
advisory |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-EXT-052 |
12 |
Provenance: slsa is OPTIONAL (structured metadata) |
advisory |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-EXT-053 |
12 |
Provenance: .strict() rejects unknown properties in extension and nested schemas |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-054 |
12 |
Provenance: source_uri and build_provenance_uri are locator hints only |
advisory |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-EXT-055 |
12 |
Attribution: creator_ref is REQUIRED |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-056 |
12 |
Attribution: license_spdx is OPTIONAL (parser-grade validator) |
advisory |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-EXT-057 |
12 |
Attribution: content_signal_source is OPTIONAL (closed enum) |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-058 |
12 |
Attribution: content_digest is OPTIONAL (SHA-256 digest) |
advisory |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-EXT-059 |
12 |
Attribution: .strict() rejects unknown properties |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-060 |
12 |
Attribution: not an identity attestation; observational only |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-EXT-061 |
12 |
Purpose: external_purposes is REQUIRED (min 1, max 32) |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-062 |
12 |
Purpose: compatible_purposes is OPTIONAL (max 32, unique tokens) |
advisory |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-EXT-063 |
12 |
Purpose: purpose_basis is OPTIONAL |
advisory |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-EXT-064 |
12 |
Purpose: .strict() rejects unknown properties |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-065 |
12 |
Purpose: external_purposes items MUST match machine-safe token grammar and be unique |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-066 |
12 |
Purpose: peac_purpose_mapping is OPTIONAL (validated against PURPOSE_TOKEN_REGEX) |
advisory |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-EXT-071 |
12 |
Purpose: compatible_purposes items MUST be unique |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-067 |
12 |
Type-to-extension: expected extension group MUST be present in strict mode |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-068 |
12 |
Type-to-extension: interop mode downgrades absence to warning |
warning_only |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-EXT-069 |
12 |
Type-to-extension: mismatch MUST be reported in strict mode |
hard_fail |
covered |
wire-02/extensions/conformance.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-EXT-070 |
12 |
Type-to-extension: custom/unmapped types exempt from enforcement |
advisory |
covered |
wire-02/extensions/conformance.json |
|
|
| WIRE02-CHAL-001 |
13 |
Challenge problem.status is REQUIRED |
hard_fail |
covered |
wire-02/challenge.json, wire-02/invalid.json, wire-02/valid.json |
|
E_INVALID_EXTENSION_FORMAT |
| WIRE02-CHAL-002 |
13 |
Challenge problem.type is REQUIRED |
hard_fail |
covered |
wire-02/challenge.json |
packages/protocol/tests/strictness.property.test.ts |
E_INVALID_EXTENSION_FORMAT |
| WIRE02-CHAL-003 |
13 |
Challenge problem.title is OPTIONAL |
advisory |
covered |
wire-02/challenge.json |
|
|
| WIRE02-CHAL-004 |
13 |
Challenge problem.detail is OPTIONAL |
advisory |
covered |
wire-02/challenge.json |
|
|
| WIRE02-CHAL-005 |
13 |
Challenge problem.instance is OPTIONAL |
advisory |
covered |
wire-02/challenge.json |
|
|
| WIRE02-CHAL-006 |
13 |
Challenge resource is OPTIONAL |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-CHAL-007 |
13 |
Challenge action is OPTIONAL |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-WARN-001 |
14 |
Warning code is REQUIRED |
hard_fail |
covered |
|
packages/protocol/tests/verify-local-wire-02-warnings.test.ts |
E_INVALID_FORMAT |
| WIRE02-WARN-002 |
14 |
Warning message is REQUIRED |
hard_fail |
covered |
|
packages/protocol/tests/verify-local-wire-02-warnings.test.ts |
E_INVALID_FORMAT |
| WIRE02-WARN-003 |
14 |
Warning message MUST NOT be used for conformance testing |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-WARN-004 |
14 |
New warning codes MAY be added in future |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-WARN-005 |
14 |
Existing warning codes MUST NOT be removed or renamed |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-WARN-006 |
14 |
Consumers MUST tolerate unknown warning codes |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-WARN-007 |
14 |
Warnings MUST be sorted by (pointer, code) |
hard_fail |
covered |
|
packages/protocol/tests/verify-local-wire-02-warnings.test.ts |
E_INVALID_FORMAT |
| WIRE02-WARN-008 |
14 |
Conformance MUST assert on code and pointer only |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-WARN-009 |
14 |
message MUST NOT be used for conformance testing (14.5) |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-DUAL-001 |
15 |
Implementations MUST verify typ/peac_version coherence after routing |
hard_fail |
covered |
wire-02/dual-stack.json |
packages/protocol/tests/strictness.property.test.ts |
E_WIRE_VERSION_MISMATCH |
| WIRE02-DUAL-002 |
15 |
Wire 0.1 route payload MUST NOT contain peac_version 0.2 |
hard_fail |
covered |
wire-02/dual-stack.json |
packages/protocol/tests/strictness.property.test.ts |
E_WIRE_VERSION_MISMATCH |
| WIRE02-DUAL-003 |
15 |
Wire 0.2 route payload MUST contain peac_version 0.2 |
hard_fail |
covered |
wire-02/dual-stack.json |
packages/protocol/tests/strictness.property.test.ts |
E_WIRE_VERSION_MISMATCH |
| WIRE02-STRICT-001 |
16 |
Strict: JWS typ MUST be present |
hard_fail |
covered |
|
packages/protocol/tests/verify-local.test.ts |
E_INVALID_FORMAT |
| WIRE02-STRICT-002 |
16 |
Strict: typ MUST be a recognized value |
hard_fail |
covered |
|
packages/protocol/tests/verify-local.test.ts |
E_INVALID_FORMAT |
| WIRE02-STRICT-003 |
16 |
Production deployments SHOULD use strict mode |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-IDENT-001 |
18 |
Issuers MUST emit compact form typ (18.3) |
issuance |
covered |
wire-02/identifier-stack/conformance.json |
|
|
| WIRE02-IDENT-002 |
18 |
Verifiers MUST accept media-type form (18.3) |
hard_fail |
covered |
wire-02/identifier-stack/conformance.json |
|
E_INVALID_FORMAT |
| WIRE02-IDENT-003 |
18 |
MUST NOT perform content-type parameter parsing |
hard_fail |
covered |
wire-02/identifier-stack/conformance.json |
|
E_INVALID_FORMAT |
| WIRE02-IDENT-004 |
18 |
typ and peac_version MUST agree (18.4) |
hard_fail |
covered |
wire-02/identifier-stack/conformance.json |
|
E_WIRE_VERSION_MISMATCH |
| WIRE02-IDENT-005 |
18 |
Production SHOULD use strict mode (18.5) |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-IDENT-006 |
18 |
Future implementations MAY relax unknown minor version |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-IDENT-007 |
18 |
Multiple package versions MAY implement same wire version |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-VALID-001 |
19 |
Steps MUST be performed in specified order |
hard_fail |
covered |
wire-02/validation/conformance.json |
packages/protocol/tests/verify-local-order.test.ts |
E_INVALID_FORMAT |
| WIRE02-VALID-002 |
19 |
Hard error MUST terminate validation immediately |
hard_fail |
covered |
wire-02/validation/conformance.json |
packages/protocol/tests/verify-local-order.test.ts |
E_INVALID_FORMAT |
| WIRE02-VALID-003 |
19 |
Verifier MUST NOT continue after hard error |
hard_fail |
covered |
wire-02/validation/conformance.json |
packages/protocol/tests/verify-local-order.test.ts |
E_INVALID_FORMAT |
| WIRE02-VALID-004 |
19 |
jws input is REQUIRED |
hard_fail |
covered |
wire-02/validation/conformance.json |
|
E_INVALID_FORMAT |
| WIRE02-VALID-005 |
19 |
publicKey input is REQUIRED |
hard_fail |
covered |
wire-02/validation/conformance.json |
|
E_INVALID_FORMAT |
| WIRE02-VALID-006 |
19 |
Step 1: alg MUST be EdDSA |
hard_fail |
covered |
wire-02/validation/conformance.json |
|
E_INVALID_FORMAT |
| WIRE02-VALID-007 |
19 |
Step 3: kernel constraints fail-closed |
hard_fail |
covered |
wire-02/validation/conformance.json |
packages/protocol/tests/verify-local-order.test.ts |
E_CONSTRAINT_VIOLATION |
| WIRE02-VALID-008 |
19 |
Step 9: iat MUST NOT exceed now + maxClockSkew |
hard_fail |
covered |
wire-02/validation/conformance.json |
|
E_NOT_YET_VALID |
| WIRE02-VALID-009 |
19 |
Step 10a: jti is REQUIRED (enforced by schema) |
hard_fail |
covered |
wire-02/validation/conformance.json |
|
E_MISSING_REQUIRED_CLAIM |
| WIRE02-VALID-010 |
19 |
Step 10b: Verifiers with replay cache SHOULD reject duplicates |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-VALID-011 |
19 |
Step 10b: Verifiers without cache MAY skip replay check |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-VALID-012 |
19 |
HTTP mapping SHOULD use 400 Bad Request |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-REPLAY-001 |
20 |
jti claim is REQUIRED on all Wire 0.2 receipts |
hard_fail |
covered |
wire-02/replay/conformance.json, wire-02/validation/conformance.json |
|
E_MISSING_REQUIRED_CLAIM |
| WIRE02-REPLAY-002 |
20 |
Issuers MUST ensure jti uniqueness |
issuance |
implicit (advisory/issuance) |
|
|
|
| WIRE02-REPLAY-003 |
20 |
jti MUST be 1 to 256 characters |
hard_fail |
covered |
wire-02/replay/conformance.json |
|
E_MISSING_REQUIRED_CLAIM |
| WIRE02-REPLAY-004 |
20 |
Implementations SHOULD use 128+ bits of entropy for jti |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-REPLAY-005 |
20 |
Verifiers with cache SHOULD reject duplicate jti per iss |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-REPLAY-006 |
20 |
Verifiers without cache MAY skip replay detection |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-REPLAY-007 |
20 |
Replay caches SHOULD use iat-based expiry |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-REPLAY-008 |
20 |
RECOMMENDED cache window is 2x tolerance (600s) |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-REPLAY-009 |
20 |
Caches SHOULD be scoped per iss |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-REPLAY-010 |
20 |
Implementations MAY use probabilistic structures |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-REPLAY-011 |
20 |
aud claim is OPTIONAL in Wire 0.2 |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-REPLAY-012 |
20 |
Verifiers checking aud SHOULD reject unaddressed receipts |
advisory |
implicit (advisory/issuance) |
|
|
|
| WIRE02-REPLAY-013 |
20 |
Each receipt in bundle MUST have unique jti |
hard_fail |
covered |
wire-02/replay/conformance.json |
|
E_MISSING_REQUIRED_CLAIM |