pub struct PublicKey { /* private fields */ }Expand description
SSH public key.
§OpenSSH encoding
The OpenSSH encoding of an SSH public key looks like following:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILM+rvN+ot98qgEN796jTiQfZfG1KaT0PtFDJ/XFSqti user@example.comIt consists of the following three parts:
- Algorithm identifier (in this example
ssh-ed25519) - Key data encoded as Base64
Comment(optional): arbitrary label describing a key. Usually an email address
The PublicKey::from_openssh and PublicKey::to_openssh methods can be
used to decode/encode public keys, or alternatively, the FromStr and
ToString impls.
§serde support
When the serde feature of this crate is enabled, this type receives impls
of Deserialize and Serialize.
The serialization uses a binary encoding with binary formats like bincode and CBOR, and the OpenSSH string serialization when used with human-readable formats like JSON and TOML.
Note that since the comment is an artifact on the string serialization of
a public key, it will be implicitly dropped when encoding as a binary
format. To ensure it’s always preserved even when using binary formats, you
will first need to convert the PublicKey to a string using e.g.
PublicKey::to_openssh.
Implementations§
Source§impl PublicKey
impl PublicKey
Sourcepub fn new(key_data: KeyData, comment: impl Into<Comment>) -> Self
Available on crate feature alloc only.
pub fn new(key_data: KeyData, comment: impl Into<Comment>) -> Self
alloc only.Create a new public key with the given comment.
On no_std platforms, use PublicKey::from(key_data) instead.
Sourcepub fn from_openssh(public_key: &str) -> Result<Self>
pub fn from_openssh(public_key: &str) -> Result<Self>
Parse an OpenSSH-formatted public key.
OpenSSH-formatted public keys look like the following:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILM+rvN+ot98qgEN796jTiQfZfG1KaT0PtFDJ/XFSqti foo@bar.comSourcepub fn from_bytes(bytes: &[u8]) -> Result<Self>
pub fn from_bytes(bytes: &[u8]) -> Result<Self>
Parse a raw binary SSH public key.
Sourcepub fn encode_openssh<'o>(&self, out: &'o mut [u8]) -> Result<&'o str>
pub fn encode_openssh<'o>(&self, out: &'o mut [u8]) -> Result<&'o str>
Encode OpenSSH-formatted public key.
Sourcepub fn to_openssh(&self) -> Result<String>
Available on crate feature alloc only.
pub fn to_openssh(&self) -> Result<String>
alloc only.Encode an OpenSSH-formatted public key, allocating a String for
the result.
Sourcepub fn to_bytes(&self) -> Result<Vec<u8>>
Available on crate feature alloc only.
pub fn to_bytes(&self) -> Result<Vec<u8>>
alloc only.Serialize SSH public key as raw bytes.
Sourcepub fn verify(
&self,
namespace: &str,
msg: &[u8],
signature: &SshSig,
) -> Result<()>
Available on crate feature alloc only.
pub fn verify( &self, namespace: &str, msg: &[u8], signature: &SshSig, ) -> Result<()>
alloc only.Verify the SshSig signature is valid the given message using this public key.
These signatures can be produced using ssh-keygen -Y sign. They’re
encoded as PEM and begin with the following:
-----BEGIN SSH SIGNATURE-----See PROTOCOL.sshsig for more information.
§Notes
This method loads the entire message has to be loaded into memory for verification.
If loading the entire message into memory is a problem consider computing a Digest
of the data first, and using PublicKey::verify_prehash.
§Usage
See also: PrivateKey::sign.
use ssh_key::{PublicKey, SshSig};
// Message to be verified.
let message = b"testing";
// Example domain/namespace used for the message.
let namespace = "example";
// Public key which computed the signature.
let encoded_public_key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILM+rvN+ot98qgEN796jTiQfZfG1KaT0PtFDJ/XFSqti user@example.com";
// Example signature to be verified.
let signature_str = r#"
-----BEGIN SSH SIGNATURE-----
U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgsz6u836i33yqAQ3v3qNOJB9l8b
UppPQ+0UMn9cVKq2IAAAAHZXhhbXBsZQAAAAAAAAAGc2hhNTEyAAAAUwAAAAtzc2gtZWQy
NTUxOQAAAEBPEav+tMGNnox4MuzM7rlHyVBajCn8B0kAyiOWwPKprNsG3i6X+voz/WCSik
/FowYwqhgCABUJSvRX3AERVBUP
-----END SSH SIGNATURE-----
"#;
let public_key = encoded_public_key.parse::<PublicKey>()?;
let signature = signature_str.parse::<SshSig>()?;
public_key.verify(namespace, message, &signature)?;Sourcepub fn verify_digest<D: AssociatedHashAlg + Digest>(
&self,
namespace: &str,
digest: D,
signature: &SshSig,
) -> Result<()>
Available on crate feature alloc only.
pub fn verify_digest<D: AssociatedHashAlg + Digest>( &self, namespace: &str, digest: D, signature: &SshSig, ) -> Result<()>
alloc only.Verify the SshSig signature is valid the given message Digest using this public key.
See PublicKey::verify for more information.
Sourcepub fn verify_prehash(
&self,
namespace: &str,
prehash: &[u8],
signature: &SshSig,
) -> Result<()>
Available on crate feature alloc only.
pub fn verify_prehash( &self, namespace: &str, prehash: &[u8], signature: &SshSig, ) -> Result<()>
alloc only.Verify the SshSig signature matches the given prehashed message digest using this
public key.
See PublicKey::verify for more information.
Sourcepub fn read_openssh(reader: &mut impl Read) -> Result<Self>
Available on crate feature std only.
pub fn read_openssh(reader: &mut impl Read) -> Result<Self>
std only.Read public key from an OpenSSH-formatted source.
Sourcepub fn read_openssh_file(path: impl AsRef<Path>) -> Result<Self>
Available on crate feature std only.
pub fn read_openssh_file(path: impl AsRef<Path>) -> Result<Self>
std only.Read public key from an OpenSSH-formatted file.
Sourcepub fn write_openssh(&self, writer: &mut impl Write) -> Result<()>
Available on crate feature std only.
pub fn write_openssh(&self, writer: &mut impl Write) -> Result<()>
std only.Write public key as an OpenSSH-formatted file.
Sourcepub fn write_openssh_file(&self, path: impl AsRef<Path>) -> Result<()>
Available on crate feature std only.
pub fn write_openssh_file(&self, path: impl AsRef<Path>) -> Result<()>
std only.Write public key as an OpenSSH-formatted file.
Sourcepub fn comment(&self) -> &Comment
Available on crate feature alloc only.
pub fn comment(&self) -> &Comment
alloc only.Comment on the key (e.g. email address).
Sourcepub fn fingerprint(&self, hash_alg: HashAlg) -> Fingerprint
pub fn fingerprint(&self, hash_alg: HashAlg) -> Fingerprint
Compute key fingerprint.
Use Default::default() to use the default hash function (SHA-256).
Sourcepub fn set_comment(&mut self, comment: impl Into<Comment>)
Available on crate feature alloc only.
pub fn set_comment(&mut self, comment: impl Into<Comment>)
alloc only.Set the comment on the key.
Trait Implementations§
Source§impl<'de> Deserialize<'de> for PublicKey
Available on crate features alloc and serde only.
impl<'de> Deserialize<'de> for PublicKey
alloc and serde only.Source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
Source§impl From<&PrivateKey> for PublicKey
impl From<&PrivateKey> for PublicKey
Source§fn from(private_key: &PrivateKey) -> PublicKey
fn from(private_key: &PrivateKey) -> PublicKey
Source§impl From<DsaPublicKey> for PublicKey
Available on crate feature alloc only.
impl From<DsaPublicKey> for PublicKey
alloc only.Source§fn from(public_key: DsaPublicKey) -> PublicKey
fn from(public_key: DsaPublicKey) -> PublicKey
Source§impl From<EcdsaPublicKey> for PublicKey
Available on crate feature ecdsa only.
impl From<EcdsaPublicKey> for PublicKey
ecdsa only.Source§fn from(public_key: EcdsaPublicKey) -> PublicKey
fn from(public_key: EcdsaPublicKey) -> PublicKey
Source§impl From<Ed25519PublicKey> for PublicKey
impl From<Ed25519PublicKey> for PublicKey
Source§fn from(public_key: Ed25519PublicKey) -> PublicKey
fn from(public_key: Ed25519PublicKey) -> PublicKey
Source§impl From<PrivateKey> for PublicKey
impl From<PrivateKey> for PublicKey
Source§fn from(private_key: PrivateKey) -> PublicKey
fn from(private_key: PrivateKey) -> PublicKey
Source§impl From<RsaPublicKey> for PublicKey
Available on crate feature alloc only.
impl From<RsaPublicKey> for PublicKey
alloc only.Source§fn from(public_key: RsaPublicKey) -> PublicKey
fn from(public_key: RsaPublicKey) -> PublicKey
Source§impl From<SkEcdsaSha2NistP256> for PublicKey
Available on crate feature ecdsa only.
impl From<SkEcdsaSha2NistP256> for PublicKey
ecdsa only.