Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
275 commits
Select commit Hold shift + click to select a range
b274764
fix: validation read the shadow fields, not the bytes
leifj Oct 14, 2026
e2f9838
fix: shadow every readable member, not the two I happened to need
leifj Oct 14, 2026
205decc
fix: a decode that succeeded is not a decode that kept everything
leifj Oct 14, 2026
21c32f7
feat: a constructor for raw queries, and a rule that it is used
leifj Oct 14, 2026
7dadd8a
docs: Raw preserves the value, not the bytes
leifj Oct 14, 2026
f102f93
fix: the configured digits were gone before anything could check them
leifj Oct 14, 2026
7fd2e4c
fix: duplicate members, and numbers YAML cannot write back
leifj Oct 14, 2026
509053d
fix: two YAML scalars with no JSON number to become
leifj Oct 14, 2026
ac139f9
fix: the escape hatch had become a laundry
leifj Oct 14, 2026
6dc9b04
fix: the YAML writer emitted a different query
leifj Oct 14, 2026
16960e2
fix: the extension bags were still rounding decimals
leifj Oct 14, 2026
627eb1a
fix: templates could not express the negative shapes
leifj Oct 14, 2026
f7e3faa
test: the conformance comparison could not see a changed number
leifj Oct 14, 2026
60a65d2
test: pin the full-date, and guard the day yaml.v2 stops helping
leifj Oct 14, 2026
17f22ee
fix: BSON rounded the numbers JSON had just preserved
leifj Oct 14, 2026
c2fd6a9
fix: a typed container hid a number YAML would round
leifj Oct 14, 2026
a1042f0
fix: make the exact query additive, and close the unkeyed literal
leifj Oct 14, 2026
67c7643
fix: a duplicate member could make the constraint depend on the reader
leifj Oct 14, 2026
73215b9
fix: a removed query came back, and YAML dropped a duplicate
leifj Oct 14, 2026
8468393
feat: configure and publish a circuit_zk request
leifj Oct 14, 2026
b122bb4
fix: req never reached the wallet, and the profile was too lax
leifj Oct 14, 2026
8b7aee6
fix: a proof input the browser would silently change
leifj Oct 14, 2026
59d962d
fix: the number check asked about IEEE 754, not about the browser
leifj Oct 14, 2026
48d727b
fix: a circuit_zk preset the request declares no support for
leifj Oct 14, 2026
d824bc1
docs: the circuit_zk preset needs two things, not one
leifj Oct 14, 2026
b5deb49
docs: the claims fields do nothing for circuit_zk
leifj Oct 14, 2026
e3b39fb
fix: two members the nym_auth rulebook does not allow
leifj Oct 14, 2026
9a71747
docs: one check does run without a validate profile
leifj Oct 14, 2026
fe7dc52
fix: verifier_id_type was any string at all
leifj Oct 14, 2026
7728b85
fix: a reduced preset was published under the configured label
leifj Oct 14, 2026
72246cf
feat: the seed derivation secret can come from the secrets file
leifj Oct 14, 2026
e29cac8
fix: recovery could not read the secrets file I had just recommended
leifj Oct 14, 2026
bf5d773
fix: _sd is refused at every depth, not only at the root
leifj Oct 14, 2026
b6116af
docs: the worked example was flattened into a table cell
leifj Oct 15, 2026
fa9e269
cache: store a request whose numbers BSON cannot hold
leifj Oct 15, 2026
35ef3cb
circuit_zk: verifier_id_type is no longer part of the request
leifj Oct 15, 2026
c7a6860
circuit_zk: the browser must not rebuild a req it is only checking
leifj Oct 15, 2026
35e9090
circuit_zk: refresh the vendored vectors to the rulebook request shape
leifj Oct 15, 2026
aaf49c0
Merge feat/circuit-zk-request: the vendored vectors in the rulebook r…
leifj Oct 15, 2026
4533ddb
dcql: an ordinary query must stay mutable, and the BSON fix belongs here
leifj Oct 15, 2026
12d12b8
circuit_zk: an empty filter is not an absent one, and a malformed req…
leifj Oct 15, 2026
373f19a
Merge feat/circuit-zk-request: mutable ordinary queries, the BSON fal…
leifj Oct 15, 2026
1987c4f
dcql: the raw path is not a way past the constraint checks
leifj Oct 15, 2026
db3455d
Merge feat/circuit-zk-request: the raw path is not a way past the con…
leifj Oct 15, 2026
cad1bce
make: test-js installs the dependency it now needs
leifj Oct 15, 2026
77ab41b
dcql: guard the YAML routes too, and judge a number by its value
leifj Oct 15, 2026
a38c953
circuit_zk: an unreadable extension bag is an error, not an empty one
leifj Oct 15, 2026
73f8d9b
dcql: an exponent may sit at the end of the int range
leifj Oct 15, 2026
2f99e0f
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 15, 2026
aa975a2
dcql: a literal that omits its type was invisible to the guard
leifj Oct 15, 2026
4a7842f
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 15, 2026
dfd0466
dcql: a differently cased member is an unknown one, not the modelled one
leifj Oct 15, 2026
8c9712a
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 15, 2026
06bb606
dcql: copying a query must not repair it
leifj Oct 15, 2026
8faaf5f
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 15, 2026
d981bfa
dcql: finish the copy, and emit the tree that was checked
leifj Oct 15, 2026
93a2b28
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 15, 2026
a47b0b6
dcql: a nil element must not condemn the whole container
leifj Oct 15, 2026
22ca9e4
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 15, 2026
8e0b7e4
dcql: an absent raw leaf and an empty one are not the same leaf
leifj Oct 15, 2026
a25f8d9
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 15, 2026
edb3c14
dcql: a pointer to a raw leaf is still a raw leaf
leifj Oct 15, 2026
ffd0508
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 15, 2026
41e9fb4
dcql: arrays and structs hold raw leaves too
leifj Oct 15, 2026
ffdb90a
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 15, 2026
94617fe
dcql: a null filter is neither absent nor empty
leifj Oct 15, 2026
9578829
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 15, 2026
556d880
dcql: put the yaml import in its own group
leifj Oct 15, 2026
89e98be
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 15, 2026
0ccb2c5
dcql: a scalar must not cost the raw leaf beside it
leifj Oct 15, 2026
485f8b6
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 15, 2026
45c5ed6
dcql: a repeated member cannot survive a decode
leifj Oct 15, 2026
6e4f14a
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 15, 2026
b0c5349
dcql: the fallback keeps bytes instead of re-parsing them
leifj Oct 15, 2026
ebdf307
dcql: drop the blank line left by the previous commit
leifj Oct 15, 2026
5cf6a50
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 15, 2026
c26ec9c
dcql: copying must terminate on a value that serialises fine
leifj Oct 15, 2026
bd06760
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 15, 2026
29889a1
dcql: a repeated YAML key keeps only the last, so refuse it
leifj Oct 15, 2026
fe40bad
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 15, 2026
fd19a12
dcql: identity stops a cycle; depth only bounded the stack
leifj Oct 15, 2026
826420d
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 15, 2026
ce12fb8
dcql: the fast paths need the guards the slow path has
leifj Oct 15, 2026
7ee0003
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 15, 2026
06b5e57
dcql: finish the list of interfaces json serialises through
leifj Oct 15, 2026
f4c950a
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 15, 2026
cfffea4
dcql: a key is as much of the request as a value is
leifj Oct 15, 2026
b0068a0
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 15, 2026
4719bd0
dcql: the copy around Params had the defects Params was fixed for
leifj Oct 15, 2026
0076cd5
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 15, 2026
235c501
feat(issuer)!: the derivation secret is not a config field
leifj Oct 15, 2026
64fbe36
fix(model): _sd_alg is reserved at every depth, and so is what sits b…
leifj Oct 15, 2026
147a9ae
fix(seed): a length the prefix cannot hold stops separating the fields
leifj Oct 19, 2026
07ebb99
fix(seed_recover): a malformed -expect is an input error, not a mismatch
leifj Oct 19, 2026
04f8fb6
feat(seed)!: derive from an ordered list of subject identifiers
leifj Oct 19, 2026
d2ea965
fix(issuer): floor seed_bytes at 16, the default
leifj Oct 19, 2026
7c4bfd2
feat(issuer): derive a seed from an ordered list of subject identifiers
leifj Oct 19, 2026
2deb08f
Merge SUNET main (#810 squashed) into feat/circuit-zk-request
leifj Oct 19, 2026
df004ad
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 19, 2026
137e4f3
fix(issuer): refuse a commitment scope signed through the wrong handler
leifj Oct 19, 2026
758b14d
fix(cache): a query the escape hatch built must reload from the cache
leifj Oct 19, 2026
76d8a7a
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 19, 2026
da4f3c5
fix(verifier): the request-object cache must trust its own bytes too
leifj Oct 19, 2026
62c93fa
Merge remote-tracking branch 'origin/feat/circuit-zk-request' into fe…
leifj Oct 19, 2026
8fa8983
fix(nymauth): hash the BARE verifier_id, and refuse the prefixed one
leifj Oct 19, 2026
cf900a9
feat(apigw): derive the seed and inject ssc before the issuer is called
leifj Oct 19, 2026
8a2ef71
fix: four review findings on the apigw move
leifj Oct 19, 2026
ac034c4
feat(nymauth): the verifier's challenge and age bounds, checked again…
leifj Oct 19, 2026
1d8d42f
feat(nymauth): the verifier's request, and stack on #793 for pkg/nymauth
leifj Oct 19, 2026
14b875b
feat(nymauth): make the request predicate-agnostic
leifj Oct 19, 2026
5f1c3eb
feat(nymauth): the request carries the transcript seed, and derives e2
leifj Oct 20, 2026
00a7b25
feat(nymauth): check nym_auth proofs through zk-cred-longfellow's C ABI
leifj Oct 20, 2026
80762dd
fix(nymauth): a semantic verifier_id is not a prefixed client_id
leifj Oct 20, 2026
dfed14e
Merge branch 'feat/seed-commitments' into feat/nymauth-verifier
leifj Oct 20, 2026
0d4d0d0
fix(nymauth): count the age window inclusively, and accept a semantic…
leifj Oct 20, 2026
f8675c4
Merge branch 'feat/nymauth-verifier' into feat/nymauth-verifier-native
leifj Oct 20, 2026
5da3715
fix(build): the header guard must actually stop the recipe
leifj Oct 20, 2026
9d16773
fix(nymauth): a shifted age bound must stay inside the date format
leifj Oct 20, 2026
e07c953
Merge branch 'feat/nymauth-verifier' into feat/nymauth-verifier-native
leifj Oct 20, 2026
7cb49ab
fix(nymauth): three more review findings - a panic, an alias, a bound…
leifj Oct 20, 2026
44858d8
Merge branch 'feat/nymauth-verifier' into feat/nymauth-verifier-native
leifj Oct 20, 2026
176a155
fix(nymauth): the transcript bound belongs to the library, not the re…
leifj Oct 20, 2026
f5d658d
feat(nymauth): a predicate function checks its own values
leifj Oct 20, 2026
2dea7af
Merge branch 'feat/nymauth-verifier' into feat/nymauth-verifier-native
leifj Oct 20, 2026
f49cee1
feat(verifier): the nym_auth circuit allowlist, and what may be loaded
leifj Oct 20, 2026
9934aa4
fix(verifier): check the artifacts at startup, and leave a disabled b…
leifj Oct 20, 2026
0f20190
feat(openid4vp): validate a circuit_zk response against the request
leifj Oct 20, 2026
5cee527
docs: re-pin the response vectors to the merged matcher commit
leifj Oct 20, 2026
95d8b67
fix(verifier): a zero Ligero parameter is not a default
leifj Oct 20, 2026
3da26c2
Merge branch 'feat/nymauth-verifier-config' into feat/circuit-zk-resp…
leifj Oct 20, 2026
f3edfd4
fix(openid4vp): a repeated key is judged by where it is, not by its s…
leifj Oct 20, 2026
1027a9b
feat(verifier): dispatch a circuit_zk presentation to the nym_auth ve…
leifj Oct 20, 2026
c820a6b
fix(nymauth): an ill-formed transcript must be refused, not hashed
leifj Oct 20, 2026
662dd1e
Merge branch 'feat/nymauth-verifier' into feat/nymauth-verifier-native
leifj Oct 20, 2026
f320a4e
Merge branch 'feat/nymauth-verifier' into feat/nymauth-verifier-config
leifj Oct 20, 2026
032e705
Merge branch 'feat/nymauth-verifier' into feat/circuit-zk-response
leifj Oct 20, 2026
99c251e
Merge branch 'feat/nymauth-verifier' into feat/nymauth-verifier-dispatch
leifj Oct 20, 2026
6db9dd1
test(nymauth): re-vendor the challenge vectors, now 13 rejects
leifj Oct 20, 2026
9c2b571
Merge branch 'feat/nymauth-verifier' into feat/nymauth-verifier-dispatch
leifj Oct 20, 2026
eb11a9b
feat(verifier): the issuer key comes from the trust layer, bounded an…
leifj Oct 20, 2026
9baf39d
fix(verifier): the dispatch must hand the validator what it expects
leifj Oct 20, 2026
1f435eb
build: move the Longfellow pin with the challenge vectors
leifj Oct 20, 2026
bd231b9
Merge branch 'feat/nymauth-verifier-native' into feat/nymauth-verifie…
leifj Oct 20, 2026
a30c06a
Merge branch 'feat/nymauth-verifier-native' into feat/circuit-zk-resp…
leifj Oct 20, 2026
fe319fc
Merge branch 'feat/nymauth-verifier-native' into feat/nymauth-verifie…
leifj Oct 20, 2026
4e862df
feat(openid4vp): a circuit_zk presentation carries the issuer's chain
leifj Oct 20, 2026
ba5645a
Merge branch 'feat/circuit-zk-response' into feat/nymauth-verifier-di…
leifj Oct 20, 2026
2f9ca39
feat(verifier): Q comes from the presentation's chain, vouched for by…
leifj Oct 20, 2026
8401090
fix(openid4vp): JSON null is a type error, never an absent or empty v…
leifj Oct 20, 2026
0ffb989
Merge branch 'feat/circuit-zk-response' into feat/nymauth-verifier-di…
leifj Oct 20, 2026
02eb600
Merge branch 'feat/circuit-zk-response' into feat/nymauth-verifier-di…
leifj Oct 20, 2026
38bffda
test(openid4vp): re-vendor the response vectors from the merged match…
leifj Oct 20, 2026
dbb54dc
fix(verifier): a circuit_zk proof nothing checked must not verify
leifj Oct 20, 2026
99840fd
feat(nymauth): bind a redirect-delivered presentation to its own hand…
leifj Oct 20, 2026
ddac8f2
fix(verifier): a UI session must record the response mode it published
leifj Oct 20, 2026
4981512
fix(verifier): nym_auth cannot run without a PDP, and refuses to try
leifj Oct 20, 2026
10f21ba
Merge branch 'feat/nymauth-verifier-dispatch' into feat/nymauth-redir…
leifj Oct 20, 2026
1ea4aed
docs(verifier): how to run a nym_auth verifier, and what each refusal…
leifj Oct 20, 2026
cf6d4c8
fix(model): the artifact digest example was a fabricated value
leifj Oct 20, 2026
b0d12dc
Merge branch 'feat/nymauth-verifier-config' into feat/circuit-zk-resp…
leifj Oct 20, 2026
7d202ef
Merge branch 'feat/nymauth-verifier-config' into feat/nymauth-verifie…
leifj Oct 20, 2026
f641242
Merge branch 'feat/nymauth-verifier-dispatch' into feat/nymauth-redir…
leifj Oct 20, 2026
78c6d2c
Merge branch 'feat/nymauth-redirect-handover' into docs/nymauth-verif…
leifj Oct 20, 2026
b1e3267
docs(verifier): name the action the PDP actually receives
leifj Oct 20, 2026
fb2ed2f
docs(verifier): pdp_url is the BASE url, not the evaluation endpoint
leifj Oct 20, 2026
b34027a
build: pin the challenge vectors and Vega to the merged v0.0.7
leifj Oct 20, 2026
6f698a2
Merge branch 'feat/nymauth-redirect-handover' into docs/nymauth-verif…
leifj Oct 20, 2026
1bcc36c
build: pin Longfellow to v0.1.2, and check the two vector copies agree
leifj Oct 20, 2026
ae8cd43
Merge branch 'feat/nymauth-redirect-handover' into docs/nymauth-verif…
leifj Oct 20, 2026
35ec0d2
fix(model): sources validation ran with nym_auth switched off
leifj Oct 20, 2026
1d03f44
docs(verifier): use the complete circuit ids in the example
leifj Oct 20, 2026
ec9db0d
Merge branch 'feat/nymauth-verifier-config' into feat/nymauth-verifie…
leifj Oct 20, 2026
763b8b8
refactor(verifier): decide T in one place, and say where it came from
leifj Oct 20, 2026
8a11afb
Merge branch 'feat/nymauth-verifier-dispatch' into feat/nymauth-redir…
leifj Oct 20, 2026
69d4274
Merge branch 'feat/nymauth-redirect-handover' into docs/nymauth-verif…
leifj Oct 20, 2026
7c0ebf2
feat(openid4vp)!: port the zkp_req request and response to rulebook v0.4
leifj Oct 20, 2026
2987e16
Merge branch 'feat/circuit-zk-response' into feat/nymauth-verifier-di…
leifj Oct 20, 2026
8fc30e0
feat(verifier)!: port the dispatch to v0.4 - issuer_key_set, prover p…
leifj Oct 20, 2026
6d7e097
Merge branch 'feat/circuit-zk-response' into feat/nymauth-verifier-co…
leifj Oct 20, 2026
c102162
feat(config)!: refuse the pre-v0.4 zkp_req configuration names
leifj Oct 20, 2026
9e143a6
Merge branch 'feat/nymauth-verifier-config' into feat/nymauth-verifie…
leifj Oct 20, 2026
48e389b
Merge branch 'feat/nymauth-verifier-dispatch' into feat/nymauth-redir…
leifj Oct 20, 2026
4bf284f
build: pin Longfellow to the #14 merge, and compare the two vector co…
leifj Oct 20, 2026
544f41d
Merge branch 'feat/nymauth-redirect-handover' into docs/nymauth-verif…
leifj Oct 20, 2026
a8cb7d3
fix(verifier): operator-facing messages say zkp_req, not circuit_zk
leifj Oct 20, 2026
86759ef
Merge branch 'feat/nymauth-verifier-dispatch' into feat/nymauth-redir…
leifj Oct 20, 2026
6e32dab
Merge branch 'feat/nymauth-redirect-handover' into docs/nymauth-verif…
leifj Oct 20, 2026
b1dc6c8
fix(verifier): the last circuit_zk-named messages become zkp_req
leifj Oct 20, 2026
fadc461
docs(model): two more circuit_zk mentions in generated config documen…
leifj Oct 20, 2026
12959db
docs(model): the last circuit_zk mention in the configuration reference
leifj Oct 20, 2026
049ab7d
docs: the format is zkp_req in the configuration reference too
leifj Oct 20, 2026
6db3e9f
Merge branch 'feat/nymauth-redirect-handover' into docs/nymauth-verif…
leifj Oct 20, 2026
d427a6c
docs(verifier)!: rewrite the operator guide for rulebook v0.4
leifj Oct 20, 2026
4b04e38
docs(issuer): rebase the verifier_id inversion onto #793's version
leifj Oct 20, 2026
d2cbacc
fix(nymauth)!: a verifier_id must be one of the two forms v0.4 defines
leifj Oct 20, 2026
ce38471
Merge branch 'feat/nymauth-verifier-dispatch' into feat/nymauth-redir…
leifj Oct 20, 2026
9eaf652
Merge branch 'feat/nymauth-redirect-handover' into docs/nymauth-verif…
leifj Oct 20, 2026
b52e4a5
docs: a verifier_id that is neither defined form is refused at startup
leifj Oct 20, 2026
d4c83c8
test: a redirect-transcript fixture still used a bare verifier_id
leifj Oct 20, 2026
63a3525
Merge branch 'feat/nymauth-redirect-handover' into docs/nymauth-verif…
leifj Oct 20, 2026
e3ac6e9
fix(verifier): a zkp_req request must carry meta.source_format
leifj Oct 20, 2026
77a373f
Merge branch 'feat/circuit-zk-response' into feat/nymauth-verifier-di…
leifj Oct 20, 2026
b9112f8
docs(model): the verifier_id a configuration reference teaches
leifj Oct 20, 2026
81d1622
Merge branch 'feat/nymauth-verifier-dispatch' into feat/nymauth-redir…
leifj Oct 20, 2026
6a4372b
docs(openid4vp): the preset example an operator would copy
leifj Oct 20, 2026
8e78741
fix(openid4vp): run the unsatisfiable vectors the profile is for
leifj Oct 20, 2026
2421af4
Merge branch 'feat/circuit-zk-response' into feat/nymauth-verifier-di…
leifj Oct 20, 2026
4a71866
Merge branch 'feat/nymauth-verifier-dispatch' into feat/nymauth-redir…
leifj Oct 20, 2026
919468b
Merge branch 'feat/nymauth-redirect-handover' into docs/nymauth-verif…
leifj Oct 20, 2026
5cb01a9
docs(verifier): the preset, and a guide whose example starts
leifj Oct 20, 2026
1e7bc2b
fix(verifier): the cgo path still used the pre-v0.4 field name
leifj Oct 20, 2026
5ce9a84
Merge branch 'feat/nymauth-verifier-dispatch' into feat/nymauth-redir…
leifj Oct 20, 2026
c245539
Merge branch 'feat/nymauth-redirect-handover' into docs/nymauth-verif…
leifj Oct 20, 2026
55a8c9d
fix(verifier): the operator UI never left its spinner
leifj Oct 21, 2026
770885f
Merge branch 'feat/circuit-zk-response' into feat/nymauth-verifier-di…
leifj Oct 21, 2026
deb0c19
Merge branch 'feat/nymauth-verifier-dispatch' into feat/nymauth-redir…
leifj Oct 21, 2026
6649047
Merge branch 'feat/nymauth-redirect-handover' into docs/nymauth-verif…
leifj Oct 21, 2026
80d6ee9
Merge upstream/main: #793 landed, and it carries the pre-v0.4 nymauth
leifj Oct 21, 2026
19efd24
Merge branch 'feat/nymauth-verifier-config' into feat/circuit-zk-resp…
leifj Oct 21, 2026
386a05d
Merge branch 'feat/circuit-zk-response' into feat/nymauth-verifier-di…
leifj Oct 21, 2026
c00a4d4
Merge branch 'feat/nymauth-verifier-dispatch' into feat/nymauth-redir…
leifj Oct 21, 2026
eb67054
Merge branch 'feat/nymauth-redirect-handover' into docs/nymauth-verif…
leifj Oct 21, 2026
90f227f
fix(verifier): a refused zkp_req presentation is not a server error
leifj Oct 21, 2026
0364b17
Merge branch 'feat/nymauth-verifier-dispatch' into feat/nymauth-redir…
leifj Oct 21, 2026
3f8efba
Merge branch 'feat/nymauth-redirect-handover' into docs/nymauth-verif…
leifj Oct 21, 2026
1973f02
feat(nymauth)!: key the circuit allowlist by system and configuration
leifj Oct 24, 2026
3c8992a
Merge branch 'feat/nymauth-verifier-config' into feat/circuit-zk-resp…
leifj Oct 24, 2026
d73f205
Merge branch 'feat/circuit-zk-response' into feat/nymauth-verifier-di…
leifj Oct 24, 2026
7d7db07
Merge branch 'feat/nymauth-verifier-dispatch' into feat/nymauth-redir…
leifj Oct 24, 2026
7578150
Merge branch 'feat/nymauth-redirect-handover' into docs/nymauth-verif…
leifj Oct 24, 2026
b0481ff
docs(verifier): an allowlist entry names its proof system
leifj Oct 24, 2026
558a03b
feat(nymauth): the four circuit parameters are Longfellow's, per system
leifj Oct 24, 2026
138b4dc
Merge branch 'feat/nymauth-verifier-config' into feat/circuit-zk-resp…
leifj Oct 24, 2026
c20811d
feat(nymauth): a Vega nym_auth verifier backend
leifj Oct 24, 2026
ec7b833
Merge branch 'feat/nymauth-verifier-config' into feat/circuit-zk-resp…
leifj Oct 24, 2026
ec8718b
Merge branch 'feat/circuit-zk-response' into feat/nymauth-verifier-di…
leifj Oct 24, 2026
362dccd
feat(verifier): load the circuit with the library its system names
leifj Oct 24, 2026
bc84152
Merge branch 'feat/nymauth-verifier-dispatch' into feat/nymauth-redir…
leifj Oct 24, 2026
288a7e2
Merge branch 'feat/nymauth-redirect-handover' into docs/nymauth-verif…
leifj Oct 24, 2026
673b914
build: the verifier links Vega too, now that it verifies with it
leifj Oct 24, 2026
78bec72
Merge branch 'feat/nymauth-redirect-handover' into docs/nymauth-verif…
leifj Oct 24, 2026
3d7120d
Merge branch 'feat/nymauth-verifier-dispatch' into feat/nymauth-redir…
leifj Oct 24, 2026
83770b8
docs(issuer): the recovery example uses an identifier the tool accepts
leifj Oct 24, 2026
5a5fff2
docs(verifier): four things the operator guide said that the code doe…
leifj Oct 24, 2026
0f3f64e
fix(verifier): the preset picker posts the request the server sends
leifj Oct 24, 2026
eb37f92
Merge branch 'feat/nymauth-verifier-config' into feat/circuit-zk-resp…
leifj Oct 24, 2026
7da54a0
Merge branch 'feat/circuit-zk-response' into feat/nymauth-verifier-di…
leifj Oct 24, 2026
103cc95
Merge branch 'feat/nymauth-verifier-dispatch' into feat/nymauth-redir…
leifj Oct 24, 2026
f8cff25
Merge branch 'feat/nymauth-redirect-handover' into docs/nymauth-verif…
leifj Oct 24, 2026
0970065
docs(verifier): the proof_time window stops backdating, not revocation
leifj Oct 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
19 changes: 17 additions & 2 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,16 @@ jobs:
# targets, and both are cached on the resolved revision, so both
# need resolving the same way. One step rather than two so the
# ls-remote handling below exists once.
# The Makefile's own default, not a second copy of it. These
# refs are pinned there (ZK_CRED_LONGFELLOW_REF is a commit of
# the crate's nym_auth branch), and a cache key resolved from a
# hardcoded "main" would track a ref the build does not use:
# bumping the pin would leave the key unchanged and restore a
# stage built from the OLD pin. Same resolver as
# .github/workflows/docker-build-push.yml.
read_ref() {
sed -n "s/^$1[[:space:]]*?=[[:space:]]*//p" Makefile | head -n1
}
resolve() {
local name="$1" repo="$2" ref="$3" sha refs
if printf '%s' "$ref" | grep -Eiq '^[0-9a-f]{40}$'; then
Expand All @@ -134,8 +144,13 @@ jobs:
fi
echo "$sha"
}
echo "sha=$(resolve zk-cred-longfellow https://github.com/sirosfoundation/zk-cred-longfellow.git "${ZK_CRED_LONGFELLOW_REF:-main}")" >> "$GITHUB_OUTPUT"
echo "vega_sha=$(resolve zk-cred-vega https://github.com/sirosfoundation/zk-cred-vega.git "${ZK_CRED_VEGA_REF:-main}")" >> "$GITHUB_OUTPUT"
LONGFELLOW_REF=$(read_ref ZK_CRED_LONGFELLOW_REF)
VEGA_REF=$(read_ref ZK_CRED_VEGA_REF)
for pair in "ZK_CRED_LONGFELLOW_REF=$LONGFELLOW_REF" "ZK_CRED_VEGA_REF=$VEGA_REF"; do
case "$pair" in *=) echo "::error::could not read ${pair%=} default from Makefile"; exit 1 ;; esac
done
echo "sha=$(resolve zk-cred-longfellow https://github.com/sirosfoundation/zk-cred-longfellow.git "$LONGFELLOW_REF")" >> "$GITHUB_OUTPUT"
echo "vega_sha=$(resolve zk-cred-vega https://github.com/sirosfoundation/zk-cred-vega.git "$VEGA_REF")" >> "$GITHUB_OUTPUT"

- name: Cache the built C ABI library
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
Expand Down
160 changes: 140 additions & 20 deletions Makefile

Large diffs are not rendered by default.

19 changes: 16 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,19 @@ gated by the `zk_verifier` config block.
wire protocol and `docs/ZK_VEGA_DIGESTID_WIRE_EXTENSION.md` for a real
wire-format addition Vega's verification needed (flagged there, not yet
raised with multipaz upstream).
- **nym_auth** - the pseudonym circuits, a *second* C ABI of the same
zk-cred-longfellow build (`include/zk_cred_longfellow_nymauth.h`,
bound in `pkg/nymauth/verifier/zknative`). `make zk-native-lib` stages
both headers and requires both: a stage carrying only the mdoc header
is refused rather than silently building without pseudonym support.
The request a proof is checked against - and the rule that none of it
may come from the holder's response - lives in
`pkg/nymauth/verifier`, which builds without cgo; only the proof check
itself is behind the tag.

`ZK_CRED_LONGFELLOW_REF` is pinned to a commit of that crate's
`feat/nymauth-prove` branch, because the nym_auth C ABI is not on its
`main` yet. Move the pin to a `main` SHA once that branch lands.

Setup:

Expand Down Expand Up @@ -400,9 +413,9 @@ LD_LIBRARY_PATH=$(pwd)/third_party/zk-cred-longfellow/lib:$(pwd)/third_party/zk-
PATH=$(pwd)/bin:$PATH \
./bin/vc_verifier-zknative

# ...or run pkg/mdoc's zknative-tagged tests directly (covers both
# systems; make test-zknative sets the loader path for both libraries
# itself):
# ...or run the zknative-tagged tests directly (pkg/mdoc for both ZK
# systems, pkg/nymauth for the pseudonym circuits; make test-zknative
# sets the loader path for both libraries itself):
make test-zknative
```

Expand Down
2 changes: 1 addition & 1 deletion developer_tools/scripts/seed_recover/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ func run() error {
subjects subjectList
derivContext = flag.String("context", "", "the derivation context, if the credential configuration sets one")
pseudonymConfig = flag.String("pseudonym-config", "", "nym_auth pseudonym configuration to compute, e.g. known-offender-matching-ssc")
verifierID = flag.String("verifier-id", "", "the verifier_id EXACTLY as the Verifier publishes it: bare (verifier.example) for an x509_san_dns Verifier, or semantic_id:<identifier> for a semantic one - never the prefixed client_id")
verifierID = flag.String("verifier-id", "", "the verifier_id EXACTLY as the Verifier publishes it, prefix included: x509_san_dns:<dns> or semantic_id:<identifier>. Never strip the prefix - the whole string is hashed")
verifierContext = flag.String("verifier-context", "", "verifier_context, required for account-recovery-ssc")
userValue = flag.String("user-value", "", "the user-supplied linking value, for user-managed-pseudonym-xsite-ssc")
expect = flag.String("expect", "", "a pseudonym in hex to compare against; exit 0 on a match, 2 on a mismatch")
Expand Down
10 changes: 7 additions & 3 deletions dockerfiles/worker
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,13 @@ RUN make proto-${SERVICE_NAME}
# Every worker links libzk_cred_bbs.so via pkg/openid4vci → pkg/bbs.
RUN make bbs-native-lib ${ZK_CRED_BBS_REF:+ZK_CRED_BBS_REF="$ZK_CRED_BBS_REF"}

# Only the verifier links libzk_cred_longfellow.so (native ZK/PPID via the
# zknative build tag) and only the verifier's separate zkvegaverifyworker
# links libzk_cred_vega.so.
# Only the verifier links the ZK libraries (zknative build tag). It links
# BOTH: libzk_cred_longfellow.so, and libzk_cred_vega.so for the in-process
# Vega nym_auth verifier - the latter through
# pkg/nymauth/verifier/zknative_vega's own cgo directives against
# third_party/zk-cred-vega, which is why the build step below sets explicit
# flags for Longfellow only. The separate zkvegaverifyworker links Vega too,
# for the subprocess-isolated mdoc path.
RUN if [ "$SERVICE_NAME" = "verifier" ]; then \
make zk-native-lib ${ZK_CRED_LONGFELLOW_REF:+ZK_CRED_LONGFELLOW_REF="$ZK_CRED_LONGFELLOW_REF"} && \
make zk-native-lib-vega ${ZK_CRED_VEGA_REF:+ZK_CRED_VEGA_REF="$ZK_CRED_VEGA_REF"} ; \
Expand Down
Loading
Loading