Crates.io | osshkeys |
lib.rs | osshkeys |
version | 0.7.0 |
source | src |
created_at | 2019-05-27 18:13:37.910706 |
updated_at | 2023-06-03 09:56:21.266213 |
description | A library to read and write OpenSSH public and private keys |
homepage | |
repository | https://github.com/Leo1003/rust-osshkeys |
max_upload_size | |
id | 137381 |
size | 205,768 |
A Rust library to handle OpenSSH key and other common SSH key
The main function of this library is to read, write different formats of SSH keys. Also, it provides the ability to generate a key, sign and verify data.
The library's basic features are implemented.
Since I don't have too much time to work on the additional features currently,
this project may not be as active as usual.
We have the crates needed to implement those features in the Rust ecosystem today.
I will use my spare time to add new features.
But I still maintain the dependencies and release new versions.
It's welcome to submit PRs or issues on this project if you have ideas or questiones.
Rust 1.63 or higher.
This repository keeps track of the minimum Rust version which required to compile in CI.
However, the minimum supported Rust version can be changed in the future and is not considered as a breaking change(exempt from SemVer).
#[macro_use]
extern crate hex_literal;
use osshkeys::{KeyPair, KeyType, Key as _, PublicParts as _, PrivateParts as _};
use osshkeys::keys::FingerprintHash;
fn main() {
let keyfile = std::fs::read_to_string("assets/openssh_ed25519_enc").unwrap();
let keypair = KeyPair::from_keystr(&keyfile, Some(b"12345678")).unwrap();
// Get the public key
let publickey = keypair.clone_public_key().unwrap();
// Get the key type
assert_eq!(keypair.keytype(), KeyType::ED25519);
// Get the fingerprint
assert_eq!(keypair.fingerprint(FingerprintHash::MD5).unwrap(), hex!("d29552b0c87d7ff1acb3c2229e783321"));
// Sign some data
const SOME_DATA: &[u8] = b"8Kn9PPQV";
let sign = keypair.sign(SOME_DATA).unwrap();
assert_eq!(sign.as_slice(), hex!("7206f04ef062ec35f8fb9f9e8a17ec023070ecf5f6e1021ea2af73137b1b832bba08766e5ad95fdca81af37b27898428f9a7dbeb044dd550afeb46efb94fe808").as_ref());
assert!(publickey.verify(SOME_DATA, &sign).unwrap());
}
openssl-cipher
: [default] Using OpenSSL as symmetric cipherrustcrypto-cipher
: Using RustCrypto as symmetric cipher
openssl
dependency, since many places still require to use OpenSSL.openssl-vendored
: Build with openssl/vendored
featureexamples/
directory+---[RSA 2048]----+
| .++ |
| .+.. .|
| . . . . ..|
| . . .E.. |
| ...S . |
| o+. |
| +..o |
| o B .o. |
| . + +.. |
+------[MD5]------+