Added
- Nix flake. The repository now builds as a flake:
keyroost(the
default package),keyroostctl, and a development shell, with the GUI's
X11/Wayland libraries wired into the binary's rpath on Linux. Tested on
x86_64 Linux. Contributed by @MakeShiftArtist. (#109) - PIV slot key self-test.
keyroostctl piv test --slot <slot>(and a
Test button in the GUI slot pane) proves a slot's private key works end to
end: keyroost builds a fixed challenge from the slot certificate's public
key, the card runs every operation the key type supports (decrypt for RSA,
key agreement for P-256/P-384/X25519, sign for RSA/ECDSA/Ed25519), and the
host verifies each result against that public key. Read-only on the card;
needs the PIN unless the slot's PIN policy is "never". The verification
side lives in a newkeyroost-pivtestcrate, which addsp384,
ed25519-dalekandx25519-dalek(RustCrypto/dalek) to the tree.
Contributed by @episource. (#127) - Fingerprint unlock for Token2 Bio3 OTP. On an R3.4 Bio3 key with a
fingerprint enrolled, protected OTP codes can be released by a sensor touch
as well as by the PIN. The CLI'sotpgroup gainsfp-status,fp-enable,
fp-disable,fp-list(touch to unlock) andunlock-list(fingerprint
first, PIN fallback;--pin-onlyforces the PIN), and the GUI's unlock
prompt offers a touch button alongside the PIN field when fingerprint
protection is on. Enrollment itself is done through the key's FIDO2
fingerprint setup. Contributed by @token2. (#130)
Changed
keyroost-token2otp'sPinFlagis now#[non_exhaustive]. It gained an
fp_enablefield this release; sealing the struct lets later firmware flags
be added as fields without breaking library consumers, matching the other
response types. Obtain aPinFlagfromPinFlag::parserather than a struct
literal. (#130)
Fixed
- PIV management-key authentication no longer assumes 3DES on cards that
lack GET METADATA. That Yubico extension is the only place a card reports
its 9B key's algorithm, and applets without it (the Cryptnox OpenFIPS201
variant, which ships with an AES key) were authenticated as 3DES and
failed. When the extension is absent, keyroost now probes each algorithm
with a bare GENERAL AUTHENTICATE witness request (no key material leaves
the host), keeps the ones the card accepts, and narrows by the length of
the key in hand; a 24-byte key that fits both 3DES and AES-192 still
resolves to 3DES, so older YubiKeys behave as before. Applies to the CLI
and the GUI alike, and--debugtraces each probe's verdict. Contributed
by @episource. (#124)
Security
- The
--debugtrace no longer prints Token2 OTP PIN material. The
PIN-bearing commands —SET_OTP_PIN,CHANGE_OTP_PIN, and the PIN-carrying
forms ofVERIFY_OTP_PIN(a plain PIN verify, and the R3.4 Bio3
fingerprint-protection toggle) — now have their request bodies length-redacted
in the trace, the same as seed writes. The 1-byteVERIFYforms that carry no
secret (lock, fingerprint verify) still show in full. (#131)
Full changelog: https://github.com/framefilter/keyroost/blob/v0.10.0/CHANGELOG.md