Repository navigation
gdc: nym_auth verifier config and circuit artifact image overlay (prepared, not deployed) - #79
Merged
Merged
Conversation
…image overlay that bakes in the circuit artifact Preparation only: the pinned verifier image predates SUNET/vc#832 and ignores the new keys. Helm renders artifact_bytes (1062842) as 1.062842e+06, which became 1062842.0; normalised to an integer for the allowlist. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…--chmod made them 0444, so the non-root verifier could not open it) Found by starting the v5 verifier image locally: 'open /etc/vc/circuits/nym_auth-ssc.bin: permission denied'. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
🟡 Changes recommended
Shared gdc settings enable verification in Compose without supplying the required circuit artifact.
1 open issue
What changed in this PR
Prepares gdc for nym_auth verification without deploying or changing its pinned verifier image.
Changes:
- Adds verifier settings and a checked circuit-artifact image overlay.
- Normalizes numeric allowlist fields after Helm rendering.
- Adds rendering tests, parity expectations, and documentation.
| File | Description |
|---|---|
| tests/test_nymauth_verifier_render.py | Tests verifier settings and artifact metadata. |
| sirosid_core/vc_render.py | Normalizes integral allowlist numbers. |
| README.md | Documents verification prerequisites. |
| fixtures/vc-config-golden/accepted-diffs.yaml | Records the expected configuration addition. |
| environments/gdc.yaml | Adds nym_auth settings and format advertisement. |
| dockerfiles/verifier-nymauth.Dockerfile | Packages and validates the circuit artifact. |
| .gitignore | Excludes the local artifact binary. |
Review effort: Balanced
| extraConfig: | ||
| verifier: | ||
| nym_auth: | ||
| enable: true |
…system_values; verifier_id is the prefixed client_id) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…hape per vc's brief), with a test Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…0-12-31) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This was referenced Oct 21, 2026
Contributor
Author
|
Contained in and superseded by #81 (the branch gdc runs, with the pin provenance). Review and merge that one and close this, or merge this first and I rebase it. |
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.

Preparation only. Nothing is deployed and the pinned gdc verifier image is unchanged. gdc's verifier (
local-1792456320, vc6c3ac47) predates SUNET/vc#832 and ignores the new keys (non-strict unmarshal). Enabling nym_auth verification needs vc's next integration build (verifier steps 1-3b + docs) built with thezknativetag, thendockerfiles/verifier-nymauth.Dockerfileover it, then a pin bump in a follow-up commit; the coordination session says when.What this adds
environments/gdc.yamlvalues.verifier.extraConfig:verifier.nym_auth(enable,verifier_id, one allowlist entryknown-offender-matching-ssc) andpreferred_vp_formats.circuit_zk(the existingdc+sd-jwtentry stays).dockerfiles/verifier-nymauth.Dockerfile: bakes the DECOMPRESSED circuit artifact (1,062,842 bytes) into the verifier image at/etc/vc/circuits/nym_auth-ssc.bin, checking size and SHA-256 at build time. It cannot be a Fly file secret (base64 of it exceeds the ~1 MiB machine config body) and it is not in the vc repo. Build inputfixtures/nym-auth-circuits/nym_auth-ssc.binis gitignored; the source is our circuits archive (longfellow/mdoc/circuits.zst, compressed sha2566c4b96ed431ee547a3a2e5b62621943a9a0a44646267653bf2db0fcc269b5c3b, no repository yet).vc_render.integral_nym_auth_numbers: Helm rendersartifact_bytes1062842 as1.062842e+06, which PyYAML dumped as1062842.0, and vc's allowlist field is an integer. Found by reading the rendered file, not by the parity check.tests/test_nymauth_verifier_render.py(8 tests), the parity entry forverifier.nym_auth, README paragraph.Values, and where each came from
block_enc_*,artifact_bytes,artifact_sha256src/nymauth/profile.rs; I decompressed the archive myself: 1,062,842 bytes, sha25692dd42fdf99673249eec33c7d07850bd9da66fbdab01ef26391e04c8341c1b7f, andparams.tsvlists the same ids/blocksdocs/CONFIGURATION.mdverifier_id=sirosid-gdc-vc-verifier.fly.devpublic_url(client_id isx509_san_dns:<that host>). Changing it changes every pseudonym this verifier reportstrust.pdp_urlhttp://sirosid-gdc-pdp.internal:8080; the client appends/evaluation)PDP check (2026-10-20, replayed against the live gdc PDP, nothing deployed)
Request as vc builds it (
pkg/trustGetEffectiveAction+buildX5CRequest): subject{key, <issuer URL from the leaf URI SAN>}, resource{x5c, same id, key = [leaf, chain] base64 DER}, actionmdoc-issuer(role credential-issuer + a non-mDL docType). Result: decision true from the mDOC IACA registry for the gdc issuer's chain; a self-signed chain with the same SAN: decision false formdoc-issuerand forcredential-issuer. So a holder cannot pick its own issuer key against gdc's PDP.Local verification (2026-10-20, vc
df033238v5 + this overlay, rendered gdc config, nothing deployed)nym_auth verification enabled,Trust evaluator initialized (authzen, pdp_url = the PDP base URL).trust.pdp_url, with an empty allowlist, with ax509_san_dns:-prefixedverifier_id, with a same-size wrong artifact (digest named) and a wrong-size artifact.open /etc/vc/circuits/nym_auth-ssc.bin: permission deniedbecauseCOPY --chmod=0444also gave the new directories 0444; the Dockerfile now stages the directories at 0755 and the file at 0444.WARN: certificate does not cover PublicURL host ... wallets will reject every request object; it disappears with the certificate re-issued by create-pki: add the verifier's dNSName to the signing cert (same key and root) #80 .Open items for review
sirosid-gdc-vc-verifier.fly.dev; fixed separately, opt-in for gdc, in create-pki: add the verifier's dNSName to the signing cert (same key and root) #80 . Both PRs edit theverifier:block ofenvironments/gdc.yaml, so the second to merge needs a small rebase.credential-issueraction is a looser fingerprint whitelist (pid-issuers), not what the verifier exercises; no gdc policy was added for it.Tests
Full suite: only
test_chat.OpenRouterTests(4 errors,LlmErrornot defined) fails, in code this PR does not touch. New tests proven non-vacuous: a prefixedverifier_idand the placeholder digest each fail them; reverting the integer normalisation fails the number test.make vc-config-parityclean.DEPLOYED on gdc (2026-10-21), from branch
deploy/gdc-nymauth-verifier(head 5c98f40, contains this PR and #80, NEITHER merged)registry.fly.io/sirosid-gdc-vc-verifier:local-1792542047(digestsha256:d79a3b058d0340cf6012a362b670cd8f4fd3d1baad28004b5830058a6147c6c2) = vcintegration/gdc-nymauth-v5@253a17e92af49255b9c2597d092a71950abff14ewith the ZK libs v0.1.2 / v0.0.7 by full SHA, zknative, + the artifact overlay. The earlier 094549cc build cannot answer a zkp_req request (it never wrotemeta.source_format) and was not deployed; the intermediate ae33687f build ran on gdc 2026-10-20.zkp_req(system_id_values / proof_system_values),verifier_id=x509_san_dns:sirosid-gdc-vc-verifier.fly.dev, presetsnym_auth_pseudonymandnym_auth_pseudonym_age(age window 1980-01-01..2000-12-31, which alice-001 satisfies)./ui/metadatapublishes both presets withmeta {doctype_value, source_format: mso_mdoc}; aPOST /ui/interactionrequest object carries client_idx509_san_dns:sirosid-gdc-vc-verifier.fly.dev, response_modedirect_post.jwt, an ES256oauth-authz-req+jwtwhose x5c leaf has the dNSNamesirosid-gdc-vc-verifier.fly.dev; the dcql credential is format zkp_req with_req; the issuer/.well-knownis still advertisement-only.🤖 Generated with Claude Code