feat(node): configure trusted credential issuers - #62
Closed
LKSNDRTMLKV wants to merge 1 commit into
Closed
Conversation
Binds core's StaticTrustedIssuers to env configuration and reports the tier through the existing ghost-honesty port list; an unconfigured node reports the capability absent rather than denying every credential, and the operator's own DID is trusted only when explicitly opted in.
Not up to standards ⛔🔴 Issues
|
| Category | Results |
|---|---|
| Security | 5 high |
🟢 Metrics 13 complexity · 0 duplication
Metric Results Complexity 13 Duplication 0
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.
Member
Author
|
Folded into #63, which ships the whole credential path as one feature — transport, trusted issuers, signature verification, revocation and the audience-scoped read. The commits from this branch are in that PR's history. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Chunk 02 of the audience-access campaign (
dpp-docs/work/AUDIENCE-ACCESS-PLAN.md).What
Binds core's
StaticTrustedIssuersto configuration and reports the resulting tier through the existing ghost-honesty port list. Independent of chunk 01 (#60) — no shared code, reviewable on its own.Three env vars:
CREDENTIAL_ISSUERS_LEGITIMATE_INTEREST,CREDENTIAL_ISSUERS_AUTHORITY(comma-separated DIDs), andCREDENTIAL_ISSUERS_SELF=trueto trust the node's own operator DID.Zero-config reports Ghost, not deny-all
An unconfigured node could reject every credential — behaviourally correct, diagnostically useless, and indistinguishable from a rejected issuer or a malformed credential. It instead reports the port as
ghost, so/healthsays the capability is absent rather than the request being wrong.The port is deliberately not
required: a node serving only public views is completely functional. ESPR Art. 11(b) and the toy and detergent regulations require public access free of charge and without registration, so the unauthenticated path is the baseline, not a degraded mode. There is a test asserting the public audience still resolves on an unconfigured node — regressing that would gate public reads behind credential configuration, which those regulations forbid.The operator as its own issuer
CREDENTIAL_ISSUERS_SELFis opt-in, never implied. It is also the first trust anchor that exists in practice: no EU register of authorised repairers has been established, and the DPP registry registers operators and passports rather than repairer credentials. An operator vouching for its own repair network is real and defensible — but it should be a decision, so it is a flag.Trust is hierarchical; visibility is not
An issuer trusted to attest an authority may also attest a legitimate interest — the harder attestation implies the easier one. That says nothing about what either credential can see:
Audience::may_seestill withholds Annex XIII point 4 from authorities regardless of who vouched for them. Both directions are asserted in tests, because conflating them is exactly the mistake the lattice exists to prevent.Read this with
dpp-core#69Trust checking asks whether
issueris trusted — andDppAccessCredentialhas no proof member, soissueris currently a self-asserted string that anyone can set. Until the signed-envelope question is settled, this layer is policy without authentication.That is not an argument against merging: the configuration and the reporting are needed either way, and nothing gates on them yet. It is an argument against treating chunk 02 as "credential trust is done". Signature verification must land before chunk 04.
Tests
5/5,
just checkgreen.