On-device TOTP/HOTP for Token2 FIDO keys
Token2 PIN+ / FIDO2+ security keys can now store and manage TOTP/HOTP entries
that the key itself computes — provisioning seeds, listing entries, reading
codes, configuring the button-press HOTP, and reading device configuration —
over both USB-HID and PC/SC (NFC). Available in both keyroostctl and the
desktop app's new OTP pane.
The seed-bearing commands are wrapped in the device's ECDH (P-256) + AES-256-CBC
scheme, and the wire protocol is implemented as a pure, dependency-light byte
layer (keyroost-token2otp) with the vendor spec's worked examples reproduced
as known-answer tests and a fuzz target over the response parsers.
Contributed by @token2 — the device vendor and
author of the reference client — who provided the protocol specification and
implemented the transport, crypto, and UI against real hardware. keyroost
remains an independent project; see the README's acknowledgements.
Fixes
- No more ghost / duplicate Molto2 in the device list when a Token2 FIDO
key is also connected (Windows). Molto2 detection was matching the bare
"TOKEN2" brand in the PC/SC reader name, which Token2's FIDO keys share — it
now matches the "Molto2" product name specifically. (#21)
Maintenance
- The release publish workflow's crates.io "already published?" probe now sends
a User-Agent (crates.io rejects UA-less API requests), restoring re-run
safety; crates.io publishing moved to OIDC Trusted Publishing (no stored
token).
Install
cargo install keyroostctl / cargo install keyroost, or grab a prebuilt
archive below (each is covered by SHA256SUMS and a build-provenance attestation).