Skip to content

Milestone 1 slice 6, part 1: standards review, finding reference, keys and proofs - #16

Merged
davidchaiken merged 8 commits into
mainfrom
milestone-1
Nov 3, 2026
Merged

davidchaiken merged 8 commits into
mainfrom
milestone-1

Conversation

@davidchaiken

Copy link
Copy Markdown
Owner

Summary

This is the first of two pull requests for milestone 1, slice 6 (DEVELOPMENT-PLAN.md, milestone 1). It reviews the implementation against the normative text of each standard it implements, in seven rounds, and fixes the gaps the review found. The record of the review is docs/reviews/milestone-1.md. It holds each round's gaps, and checks R1–R41, each shown failing before it passed.

The second pull request will close milestone 1. It will add the debugging guide, docs/debugging.md, run end to end on the final code, linked from the README, and finalizes the review record.

Changes

  • Toolchain 1.99.1, from 1.98.1. Rust 1.98.1's lldb formatters ran CodeLLDB out of memory; 1.99.0 fixed them.
  • Debugger configuration. .vscode/launch.json offers every example and fixture with a fixed --now, and the file in the editor at the current time. vcrd-cli/tests/debugging.rs checks that it offers every input.
  • Finding reference. docs/findings.md documents each of the 78 finding codes, plus each check and reason under "Checks not evaluated". vcrd-core/tests/finding_reference.rs and vcrd-cli/tests/not_evaluated_reference.rs check it against the code.
  • Round 1, JSON Web Signature (JWS, RFC 7515) and JSON Web Token (JWT, RFC 7519):
    • adds inspect.header_member_type and verify.algorithm_invalid;
    • aud is not evaluated (audience);
    • nested JWTs and JSON Web Encryption (JWE) are deferred as ARCHITECTURE §10 [F3].
  • Round 2, EdDSA (RFC 8037, RFC 9864, RFC 8032) and key resolution:
    • alg: "Ed25519" is accepted;
    • EdDSA gets the info finding verify.algorithm_deprecated;
    • adds verify.signature_scalar_out_of_range and verify.did_key_not_for_signing;
    • verify.did_key_undecodable adds the problems point_not_canonical and version_present;
    • level 1 counts info findings.
  • Round 3, VC-JOSE-COSE (the W3C Recommendation of 2026-10-13):
    • adds inspect.jwt_claim_type, inspect.replicated_claim_mismatch and inspect.presentation_unsupported;
    • cnf is not evaluated (holder_binding).
  • Round 4, Verifiable Credentials Data Model (VCDM) 2.0:
    • adds parse.data_integrity_unsupported, parse.not_secured, inspect.id_missing and inspect.language_value_invalid;
    • issuer_accreditation is not_implemented;
    • a VCDM 2.0 §7.1-conformant result becomes ARCHITECTURE §10 [Q7], milestone 3.
  • Round 5, terminology:
    • checks the terms against REQUIREMENTS §15, adding the missing ones and correcting three;
    • records the red-then-green checks of slices 3–5;
    • strikes ARCHITECTURE §10 [S3]–[S7].
  • Round 6, level 1 of text and plain:
    • shows the deciding proof key's thumbprint;
    • shows the proof's validity, and the credential's validity with its bounds;
    • text points to docs/findings.md for the checks not evaluated.
  • Round 7, keys and proofs:
    • defines the terms embedded key, issuer key, caller-supplied key, proof key, deciding proof key and refused;
    • a proof is correct, incorrect or not_attempted;
    • ARCHITECTURE §8 adds the key and proof table (37 rows), and vcrd-cli/tests/key_and_proof_table.rs checks vcrd against its 10 rows without a caller-supplied key, using five new fixtures;
    • adds verify.embedded_key_proof_correct for key substitution;
    • amends REQUIREMENTS §10: a caller-supplied key must be the same key as the issuer key, unless the caller opts in to an override (milestone 2).

Changes to the JSON result

There are no external users yet, but these changes alter the JSON schema:

  • proofs[N].outcome: verified/failed are now correct/incorrect/not_attempted.
  • key_provenance.credential_key is now embedded_key. Its matched and verifies_signature are replaced by same_as_issuer_key (absent when there is no issuer key) and proof.
  • verify.credential_key_mismatch is now verify.embedded_key_mismatch. Its detail names embedded_key and key.

Test plan

  • make ci-ok passed on the tree committed as e95fd65.
  • make test-powerset passed on e95fd65. It ran 24 feature combinations, and the two builds that must fail (no format; no proof suite) failed with their compile_error! messages.
  • Checks R1–R41 in docs/reviews/milestone-1.md, each shown failing before it passed.

🤖 Generated with Claude Code using Opus 5.5 - Extra effort

@davidchaiken

Copy link
Copy Markdown
Owner Author

Each change reviewed in detail.

@davidchaiken
davidchaiken merged commit a24c60d into main Nov 3, 2026
9 checks passed
@davidchaiken
davidchaiken deleted the milestone-1 branch November 3, 2026 05:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant