[RustCrypto]: SSH Key and Certificate Formats

crate Docs Build Status Apache2/MIT licensed Rust Version Project Chat

Documentation

About

Pure Rust implementation of SSH key file format decoders/encoders as described in [RFC4251] and [RFC4253] as well as OpenSSH's [PROTOCOL.key] format specification.

Additionally provides support for OpenSSH certificates as specified in [PROTOCOL.certkeys] including certificate validation and certificate authority (CA) support, as well as FIDO/U2F keys as specified in [PROTOCOL.u2f] (and certificates thereof), and also the authorized_keys and known_hosts file formats.

Supports a minimal profile which works on heapless no_std targets. See "Supported algorithms" table below for which key formats work on heapless targets and which algorithms require alloc.

When the ed25519, p256, and/or rsa features of this crate are enabled, provides key generation and certificate signing/verification support for that respective SSH key algorithm.

Features

TODO

Supported algorithms

| Name | Decode | Encode | Cert | Keygen | Sign | Verify | Feature | no_std | |--------------------------------------|--------|--------|------|--------|------|--------|-----------|----------| | ecdsa‑sha2‑nistp256 | ✅ | ✅ | ✅ | ✅️ | ✅️ | ✅️ | p256 | heapless | | ecdsa‑sha2‑nistp384 | ✅ | ✅ | ✅ | ⛔️ | ⛔️ | ⛔️ | ⛔ | heapless | | ecdsa‑sha2‑nistp521 | ✅ | ✅ | ✅ | ⛔️ | ⛔ ️ | ⛔️ | ⛔ | heapless | | ssh‑dsa | ✅ | ✅ | ✅ | ⛔ | ⛔️ | ⛔️ | ⛔ | alloc ️ | | ssh‑ed25519 | ✅ | ✅ | ✅ | ✅️ | ✅️ | ✅ | ed25519 | heapless | | ssh‑rsa | ✅ | ✅ | ✅ | ✅️ | ✅️ | ✅ | rsa | alloc | | sk‑ecdsa‑sha2‑nistp256@openssh.com | ✅ | ✅ | ✅ | ⛔ | ⛔️ | ⛔️ | ⛔ | alloc | | sk‑ssh‑ed25519@openssh.com | ✅ | ✅ | ✅ | ⛔ | ⛔️ | ⛔️ | ⛔ | alloc |

Note: the "Feature" section lists the name of ssh-key crate features which can be enabled to provide full support for the "Keygen", "Sign", and "Verify" functionality for a particular SSH key algorithm.

Minimum Supported Rust Version

This crate requires Rust 1.57 at a minimum.

We may change the MSRV in the future, but it will be accompanied by a minor version bump.

License

Licensed under either of:

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.