16个版本
0.7.0 | 2023年6月3日 |
---|---|
0.6.2 | 2022年8月22日 |
0.6.1 | 2022年5月15日 |
0.6.0 | 2022年2月16日 |
0.2.0 | 2019年7月27日 |
#1464 in 密码学
1,678 每月下载次数
在 5 crates 中使用
165KB
3K SLoC
osshkeys
描述
一个用于处理OpenSSH密钥和其他常见SSH密钥的Rust库
此库的主要功能是读取、写入不同格式的SSH密钥。同时,它还提供生成密钥、签名和验证数据的功能。
当前状态
库的基本功能已实现。
由于目前没有太多时间来开发附加功能,这个项目可能不像通常那样活跃。 我们已经在Rust生态系统中有了实现这些功能的crates。我将在业余时间添加新功能。
但我仍然维护依赖项并发布新版本。
如果你有想法或问题,欢迎为此项目提交PR或issue。
最低支持的Rust版本 (MSRV)
Rust 1.63或更高版本。
此仓库跟踪在CI中编译所需的最低Rust版本。
但是,最低支持的Rust版本在未来可能会改变,并且不被视为破坏性更改(免于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());
}
Cargo功能
openssl-cipher
: [默认] 使用OpenSSL作为对称加密rustcrypto-cipher
: 使用RustCrypto作为对称加密- 选择此选项不会删除
openssl
依赖项,因为许多地方仍然需要使用OpenSSL。
- 选择此选项不会删除
openssl-vendored
: 使用openssl/vendored
功能构建
路线图
- 核心功能
- 密钥类型
- RSA
- DSA
- EcDSA
- Ed25519
- 支持FIDO密钥
- ecdsa-sk
- ed25519-sk
- 文档
- 描述
- README中的示例
- 在
examples/
目录中有更多示例
- 密钥生成
- 公钥格式
- OpenSSH
- PEM
- 私钥
- PEM (使用OpenSSL)
- PEM (加密)(使用OpenSSL)
- PKCS#8(使用OpenSSL)
- PKCS#8(加密)(使用OpenSSL)
- Openssh v2
- Openssh v2(加密)
- 密钥类型
- 附加功能
- 绘制ASCII艺术(生成密钥时显示的图片)
+---[RSA 2048]----+ | .++ | | .+.. .| | . . . . ..| | . . .E.. | | ...S . | | o+. | | +..o | | o B .o. | | . + +.. | +------[MD5]------+
- 将ASCII艺术作为一个对象
- 支持实验性XMSS密钥
- 支持读写Putty密钥格式(.ppk)
- 支持更多加密算法
- AES GCM模式
- ChaCha20-Poly1305
- 支持带有证书的密钥
- 不使用openssl(成为纯Rust库)(如果存在所需的加密包并且足够成熟的话)
- 绘制ASCII艺术(生成密钥时显示的图片)
依赖项
~9–13MB
~260K SLoC