Repository navigation
Hardy v0.2.0
The first coordinated release since v0.1.0. This release reworks the public APIs of the core protocol stack, adds BPSec key management to the server, and switches stock deployments to persistent storage.
Highlights
- BPSec key configuration —
hardy-bpa-servernow supports a JWK key store with EID-pattern key bindings and role-gated key release (source / verifier / acceptor), wired through the newKeyProviderresolution inhardy-bpa. - Persistent storage by default — a stock
bpa-serverwith nostorage:section now uses SQLite metadata + local-disk bundle storage instead of ephemeral in-memory storage; explicittype: memoryretains the old behaviour, and a build with the persistent backends compiled out now refuses to start rather than silently falling back. - BPSec interoperability fix (RFC 9173 §3.8.1) — signing a primary block that carries a CRC now removes the CRC before computing the IPPT, matching what conformant verifiers compute; previous releases produced non-interoperable primary-block signatures in this case.
- Strict canonical-form parsing —
hardy-bpv7scalar decoders now enforce RFC 9171 shortest-form encodings and valid hop limits; some bundles that previously parsed are now rejected or rewritten per the RFC 9171 rewriting rules. - Routing rework — a dedicated routing table with fine-grained route actions, and explicit gRPC server lifecycle control via the new
GrpcServerinhardy-proto. - Reliability fixes — an unsound mixed-direction in-place bundle edit in the Editor;
Editor::remove_integrityleaving a dangling BIB reference; the TCPCLv4 connection-pool forward-retry loop is now bounded so a flapping peer cannot wedge a forward. - Interoperability — revalidated at 0% loss against dtn7-rs, HDTN, DTNME, ud3tn, ION, ESA BP and NASA cFS.
- MSRV raised to Rust 1.95 across the workspace.
Breaking changes
All five core crates change their public APIs: hardy-cbor 2.0.0, hardy-async 0.2.0, hardy-bpv7 0.6.0, hardy-bpa 0.2.0 and hardy-proto 0.2.0. Because the other published crates expose core types in their own public APIs, the breakage cascades and every published crate takes a compatibility bump. Each crate's CHANGELOG carries the details:
| Crate | Version | Changelog |
|---|---|---|
hardy-cbor |
2.0.0 | CHANGELOG |
hardy-async |
0.2.0 | CHANGELOG |
hardy-otel |
0.2.0 | CHANGELOG |
hardy-bpv7 |
0.6.0 | CHANGELOG |
hardy-eid-patterns |
0.4.0 | CHANGELOG |
hardy-bpa |
0.2.0 | CHANGELOG |
hardy-proto |
0.2.0 | CHANGELOG |
hardy-localdisk-storage |
0.6.0 | CHANGELOG |
hardy-sqlite-storage |
0.6.0 | CHANGELOG |
hardy-postgres-storage |
0.2.0 | CHANGELOG |
hardy-s3-storage |
0.2.0 | CHANGELOG |
hardy-tcpclv4 |
0.4.0 | CHANGELOG |
hardy-ipn-legacy-filter |
0.2.0 | CHANGELOG |
hardy-echo-service |
0.2.0 | CHANGELOG |
hardy-file-cla |
0.2.0 | CHANGELOG |
Binaries (distributed as OCI images, not published to crates.io): hardy-bpa-server 0.2.0, hardy-tcpclv4-server 0.2.0, hardy-tvr, hardy-tools — changelogs alongside each crate in the repository.
Artefacts
- Container images tagged
0.2.0on ghcr.io:hardy-bpa-server,hardy-tcpclv4-server,hardy-tvr,hardy-tools. - All published crates updated on crates.io.
Full changelog: v0.1.0...v0.2.0