Skip to content

Release 0.5.1

Choose a tag to compare

@stormer78 stormer78 released this 29 Apr 15:03
· 5 commits to main since this release
v0.5.1
c1b84de

Non-breaking patch closing gaps flagged in didwebvh-test-suite PR #4, plus a follow-on fix that brings the resolved DID Document into byte-equal parity with didwebvh-ts for the implicit #files / #whois services.

Additive public surface change only: MetaData gains a version_number field. Consumers that construct MetaData with ..Default::default() or that only read fields are unaffected.

Fixed

  • Deactivation accepts non-empty updateKeys. Per didwebvh 1.0 §Deactivate, updateKeys SHOULD be set to [] on the deactivation entry — it is not a MUST. The resolver previously rejected non-empty deactivation updateKeys with "DID Parameters say deactivated, yet updateKeys are not null!"; it now accepts any shape. Logs produced by the TypeScript reference resolver that carry updateKeys forward onto the deactivation entry now resolve.
  • Implicit #files / #whois services match didwebvh-ts byte-for-byte. IDs are now relative fragments ("#files", "#whois") instead of absolute <did>#files / <did>#whois; emission order is #files then #whois (was reversed); #files serviceEndpoint strips its trailing /; "already present" matching is strict (only id == "#whois" or id == "<did>#whois" counts — previously ends_with("#whois") could silently suppress injection).

Added

  • MetaData::version_number: u32. Resolved DID document metadata now exposes the integer version number alongside the existing version_id string, matching the shape emitted by didwebvh-ts. Consumers no longer need to parse the versionId prefix themselves.
  • Interop fixtures from didwebvh-test-suite PR #4 under tests/test_vectors/test_suite/ with a matching walker in tests/test_suite_interop.rs. Twelve happy-path scenarios resolve; one (witness-update) is #[ignore]'d pending follow-up on TS-vs-Rust witness proof canonicalization after mid-chain witness configuration changes.
  • Hash-chain safety guards. New regression tests in tests/update_did.rs lock down the invariant that implicit services are resolution-time only and must never be folded into the LogEntry's stored state (the field that gets JCS-canonicalised into the entry hash and signed by the eddsa-jcs-2022 proof). Covers create_did, update::do_update, rotate_keys, deactivate, migrate, and end-to-end multi-step sequences. Plus explicit JCS coverage for the service block (key sorting, array order preservation) in src/log_entry/mod.rs.

Changed

  • affinidi-data-integrity 0.5 → 0.6 (no API impact).
  • tokio range loosened =1.50 → 1.
  • Transitive Cargo.lock refresh.

Known issues

  • witness-update test-suite fixture fails witness-proof signature verification on entry 2. witness-threshold (same cryptosuite, single entry) passes, so it's not a blanket crypto break — likely a JCS canonicalisation or proof-context difference in how TS signs after a mid-chain witness-config change. Tracked in tests/test_suite_interop.rs with #[ignore] + rationale.

Full Changelog: v0.5.0...v0.5.1