Release 0.5.1
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,updateKeysSHOULD be set to[]on the deactivation entry — it is not a MUST. The resolver previously rejected non-empty deactivationupdateKeyswith"DID Parameters say deactivated, yet updateKeys are not null!"; it now accepts any shape. Logs produced by the TypeScript reference resolver that carryupdateKeysforward onto the deactivation entry now resolve. - Implicit
#files/#whoisservices matchdidwebvh-tsbyte-for-byte. IDs are now relative fragments ("#files","#whois") instead of absolute<did>#files/<did>#whois; emission order is#filesthen#whois(was reversed);#filesserviceEndpointstrips its trailing/; "already present" matching is strict (onlyid == "#whois"orid == "<did>#whois"counts — previouslyends_with("#whois")could silently suppress injection).
Added
MetaData::version_number: u32. Resolved DID document metadata now exposes the integer version number alongside the existingversion_idstring, matching the shape emitted bydidwebvh-ts. Consumers no longer need to parse theversionIdprefix themselves.- Interop fixtures from didwebvh-test-suite PR #4 under
tests/test_vectors/test_suite/with a matching walker intests/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.rslock down the invariant that implicit services are resolution-time only and must never be folded into the LogEntry's storedstate(the field that gets JCS-canonicalised into the entry hash and signed by theeddsa-jcs-2022proof). Coverscreate_did,update::do_update,rotate_keys,deactivate,migrate, and end-to-end multi-step sequences. Plus explicit JCS coverage for theserviceblock (key sorting, array order preservation) insrc/log_entry/mod.rs.
Changed
affinidi-data-integrity 0.5 → 0.6(no API impact).tokiorange loosened=1.50 → 1.- Transitive
Cargo.lockrefresh.
Known issues
witness-updatetest-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 intests/test_suite_interop.rswith#[ignore]+ rationale.
Full Changelog: v0.5.0...v0.5.1