Skip to content

key_mgmt: platform_provider() is hardcoded None and its doc comment says the binding does not exist — it shipped in dig-keystore 0.12 #367

Description

@MichaelTaylor3d

Task

Uplift dig-keystore 0.10 -> 0.12, depend on dig-keystore-hardware, and make platform_provider() return the real platform candidate. The node's hardware seam is already fully built and wired to a hardcoded None, so this is one function body plus a dep bump.

Parent epic: https://github.com/DIG-Network/dig_ecosystem/issues/1502

Context

  • crates/dig-node-core/src/seams/key_mgmt/machine_key.rs:270 already composes HardwareBoundBackend::new(FileBackend::new(dir), provider, HardwarePolicy::Optional). Nothing else in the node moves — the author's own doc comment says so.
  • machine_key.rs:609pub fn platform_provider() -> Option<Arc<dyn HardwareProvider>> { None }. Replace the body with dig_keystore_hardware::platform_candidates().into_iter().next() (or bind_strongest, if you prefer the ladder to own selection — say which in the PR).
  • machine_key.rs:604-608 now states a falsehood and must be corrected in the same PR: "dig-keystore ships no platform binding — its hardware module forbids unsafe, so the TPM / Secure-Enclave FFI lives in a future workspace member (dig_ecosystem#1693)". That workspace member landed in dig-keystore ed9601a3 / v0.12.0. A stale doc comment on the single seam that gates the feature is exactly how a shipped capability stays dark.
  • crates/dig-node-core/Cargo.toml:199 pins dig-keystore = "0.10"; :499 pins the testing feature the same way. Both move together, and §2.4b applies — bring the crate's other dig-* deps to latest in the same PR.

Scope note — this is the MACHINE key, not DIGLW1/DIGVK1

The epic's named acceptance is dig-app's seed and identity key (tracked separately). This child is included because it is the one place the decorator is already composed and one line from live, and because leaving a seam wired to None behind a doc comment that says the binding does not exist is a durable trap. HardwarePolicy::Optional is correct here and must stay — refusing to boot the peer network over absent hardware would strand every node.

Effort

Medium. Mechanical once the dep cascade resolves; the judgement is only in the policy (already settled: keep Optional) and the dep uplift.

Evidence

  • On a real Windows TPM host: the node starts, and the machine key's blob_tier reads Hardware(WindowsTpm20).
  • On a host with no hardware: the node still starts and reports Software(...) with a reason that is not NotRequested — that reason changing is the proof the seam went live.
  • cargo tree shows one dig-keystore line at 0.12.

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind:maintenancereal work that changes nothing a user can perceivemvpgates the releasable MVP

    Type

    No type

    Projects

    Status
    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions