#ssh-key #private-key #key #openssh #public-key #ssh #generate-keys

osshkeys

一个用于读取和写入OpenSSH公钥和私钥的库

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 密码学

Download history 235/week @ 2024-04-28 200/week @ 2024-05-05 337/week @ 2024-05-12 412/week @ 2024-05-19 357/week @ 2024-05-26 385/week @ 2024-06-02 305/week @ 2024-06-09 366/week @ 2024-06-16 328/week @ 2024-06-23 414/week @ 2024-06-30 454/week @ 2024-07-07 381/week @ 2024-07-14 252/week @ 2024-07-21 442/week @ 2024-07-28 514/week @ 2024-08-04 462/week @ 2024-08-11

1,678 每月下载次数
5 crates 中使用

MIT 许可证

165KB
3K SLoC

osshkeys

Crates Docs dependency status minimum rustc version GitHub license GitHub issues

描述

一个用于处理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库)(如果存在所需的加密包并且足够成熟的话)
      • 目前缺少
        • DSA库
          • 现在有 dsa
        • EcDSA库

依赖项

~9–13MB
~260K SLoC