4 个版本
0.2.2 | 2024 年 6 月 9 日 |
---|---|
0.2.1 | 2024 年 6 月 9 日 |
0.2.0 | 2024 年 6 月 9 日 |
0.1.0 | 2024 年 6 月 9 日 |
#677 in 加密学
47KB
619 行
CryptGuard Lite
概述
CryptGuard Lite 是一个紧凑且直观的库,它封装了 crypt_guard
crate,使其核心功能易于访问和管理。此库提供基本的加密操作,包括密钥生成、加密、解密和数字签名,支持多个密钥变体,如 Falcon 和 Dilithium。其简化界面确保项目集成简单,提供强大安全机制,复杂度最低。
功能
- 密钥生成:为 Falcon 和 Dilithium 密钥变体生成公钥和私钥对。
- 加密/解密:使用 AES 和 XChaCha20 进行加密和解密,支持各种密钥大小。
- 数字签名:使用 Falcon 和 Dilithium 密钥对创建和验证数字签名。
- 支持多种密钥大小:适用于 Falcon 和 Dilithium 的不同密钥大小。
安装
将以下内容添加到您的 Cargo.toml
[dependencies]
crypt_guard = "1.2.10"
crypt_guard_lite = "0.2.2"
用法
密钥变体
该库支持两种密钥变体
#[derive(PartialEq, Debug)]
pub enum KeyVariants {
Falcon,
Dilithium
}
密钥生成
生成密钥
use crypt_guard_lite::{CryptGuard, KeyVariants, Sign, Crypto};
use crypt_guard::error::{SigningErr, CryptError};
// Dilithium key pair
let key_size = 5;
let (dilithium_public_key, dilithium_secret_key) = Sign::keypair(KeyVariants::Dilithium, key_size).unwrap();
// Falcon key pair
let key_size = 512;
let (falcon_public_key, falcon_secret_key) = Sign::keypair(KeyVariants::Falcon, key_size).unwrap();
// Kyber key pair
let key_size = 1024;
let (kyber_public_key, kyber_secret_key) = Crypto::keypair(key_size).unwrap();
加密
AES 加密
use crypt_guard_lite::{CryptGuard, Crypto};
use crypt_guard::error::CryptError;
pub fn main() -> Result<(), CryptError> {
let key_size = 1024;
let passphrase = "password".to_string();
let (secret_key, public_key) = Crypto::keypair(key_size).unwrap();
let mut guard = CryptGuard::cryptography(secret_key, key_size, passphrase.clone(), None, None);
let data = b"hey, how are you".to_vec();
let (encrypted_data, cipher) = guard.aencrypt(data.clone()).unwrap();
println!("Encrypted data: {:?}", encrypted_data);
let mut guard = CryptGuard::cryptography(public_key, key_size, passphrase.clone(), Some(cipher), None);
let decrypted_data = guard.adecrypt(encrypted_data.clone()).unwrap();
println!("Decrypted data: {:?}", decrypted_data);
Ok(())
}
XChaCha20 加密
use crypt_guard_lite::{CryptGuard, Crypto};
use crypt_guard::error::CryptError;
pub fn main() -> Result<(), CryptError> {
let key_size = 1024;
let passphrase = "password".to_string();
let (secret_key, public_key) = Crypto::keypair(key_size).unwrap();
let mut guard = CryptGuard::cryptography(secret_key, key_size, passphrase.clone(), None, None);
let data = b"hey, how are you".to_vec();
let (encrypted_data, cipher, nonce) = guard.xencrypt(data.clone()).unwrap();
println!("Encrypted data: {:?}", encrypted_data);
let mut guard = CryptGuard::cryptography(public_key, key_size, passphrase.clone(), Some(cipher), Some(nonce.clone()));
let decrypted_data = guard.xdecrypt(encrypted_data.clone(), nonce).unwrap();
println!("Decrypted data: {:?}", decrypted_data);
Ok(())
}
签名
使用 Dilithium 创建签名
use crypt_guard_lite::{CryptGuard, KeyVariants, Sign};
use crypt_guard::error::SigningErr;
pub fn main() -> Result<(), SigningErr> {
let key_size = 5;
let (public_key, secret_key) = Sign::keypair(KeyVariants::Dilithium, key_size).unwrap();
let mut guard = CryptGuard::signature(secret_key, KeyVariants::Dilithium, key_size);
let data = b"hey, how are you".to_vec();
let signing_data = data.clone();
let signature = guard.signed_data(signing_data.clone())?;
println!("Signature: {:?}", signature);
let mut guard = CryptGuard::signature(public_key, KeyVariants::Dilithium, key_size);
let opened_data = guard.open(signature.clone())?;
println!("Opened data: {:?}", opened_data);
Ok(())
}
使用 Falcon 创建分离签名
use crypt_guard_lite::{CryptGuard, KeyVariants, Sign};
use crypt_guard::error::SigningErr;
pub fn main() -> Result<(), SigningErr> {
let key_size = 512;
let (public_key, secret_key) = Sign::keypair(KeyVariants::Falcon, key_size).unwrap();
let mut guard = CryptGuard::signature(secret_key, KeyVariants::Falcon, key_size);
let data = vec![1, 2, 3, 4, 5];
let signature = guard.detached(data.clone())?;
println!("Signature: {:?}", signature);
let mut guard = CryptGuard::signature(public_key, KeyVariants::Falcon, key_size);
let verified = guard.verify(data.clone(), signature.clone())?;
println!("Verification: {:?}", verified);
Ok(())
}
许可证
本项目采用 MIT 许可证。有关详细信息,请参阅 LICENSE 文件。
依赖项
~61–86MB
~1.5M SLoC