2个稳定版本

1.1.0 2022年11月1日
1.0.4 2022年10月26日
1.0.3 2022年10月22日

#2117 in 加密学

GPL-3.0-or-later

39KB
922

RSA-OAEP-PSS

Build Status docs.rs crates.io

RSA公钥密码系统的纯Rust实现。

以下功能可用

⚠️ 此包尚未经过任何同行审计,并且尚未准备好用于生产:我们鼓励您在使用之前仔细审查代码。

安装

将以下行添加到您的Cargo.toml依赖项

[dependencies]
rsa-oaep-pss = "1"

查看crates.io页面以查看此包的最新版本。

如何使用?

密钥生成

let (public_key, private_key) = rsa_oaep_pss::generate_rsa_keys(&mut rng, 2048)
    .expect("keys generation error");

使用OAEP方案进行加密

let message = b"some secret";

let mut oaep = rsa_oaep_pss::RsaOaep::new(rand::rngs::OsRng, &sha2::Sha256::new());

let ciphertext = oaep
    .encrypt(&public_key, message)
    .expect("encryption error");

let recovered = oaep
    .decrypt(&private_key, &ciphertext)
    .expect("decryption error");

assert_eq!(recovered, message);

使用PSS方案进行签名

let message = b"message to sign";

let mut pss = rsa_oaep_pss::RsaPss::new(rand::rngs::OsRng, &sha2::Sha256::new());

let signature = pss.sign(&private_key, message).expect("signature error");

let verification = pss.verify(&public_key, message, &signature);

assert!(verification.is_ok());

导入和导出密钥

use rsa_oaep_pss::{FromPem, ToPem};

let pem_public_key = std::fs::read_to_string("public.pem")?;

let public_key = RsaPublicKey::from_pem(&pem_public_key)?;

let re_exported_pem_public_key = public_key.to_pem()?;

assert_eq!(pem_public_key, re_exported_pem_public_key);

您还可以使用FromDerToDer处理原始DER数据。

运行示例

您可以通过以下命令运行examples文件夹中的示例

cargo run --example <filename> --release 

依赖项

~2.5MB
~47K SLoC