9个版本
0.4.1 | 2024年3月16日 |
---|---|
0.4.0 | 2022年10月26日 |
0.3.0 | 2020年8月19日 |
0.2.3 | 2020年2月22日 |
0.1.0 | 2018年7月29日 |
#177 in 加密学
169 每月下载量
用于 2 crates
445KB
1.5K SLoC
gpgrv
gpgrv
是一个用于验证某些类型GPG签名的Rust库。
use std::io::{stdin, stdout, BufReader, Cursor, Seek, SeekFrom};
fn main() {
// load a keyring from some file(s)
// for example, we use the linux distribution keyring
let mut keyring = gpgrv::Keyring::new();
let keyring_file = Cursor::new(distro_keyring::supported_keys());
keyring.append_keys_from(keyring_file).unwrap();
// read stdin, verify, and write the output to a temporary file
let mut temp = tempfile::tempfile().unwrap();
gpgrv::verify_message(BufReader::new(stdin()), &mut temp, &keyring).expect("verification");
// if we succeeded, print the temporary file to stdout
temp.seek(SeekFrom::Start(0)).unwrap();
std::io::copy(&mut temp, &mut stdout()).unwrap();
}
警告
此库不关心相对于系统时间的过期。
如果您想处理过期,您必须自己处理。
是的,这对加密代码来说是一个非常危险的决定。
此代码的预期用途,与实际计算机生成的GPG签名一起工作,是在安全领域的非寻常领域,许多用户不会关心过期,或者会对验证替代时钟或时间窗口感兴趣。
作者不想促进或鼓励这种行为,但尊重许多用户,包括作者要集成的系统,所做的决定。
支持
- 验证签名
RSA
SHA1
和SHA2
(SHA-256
,SHA-512
).
- 签名“内联”消息和分离的签名。
- 加密和解密/二进制。
- 压缩包装器(由gpg为大多数消息添加)
- 加载旧式密钥环(即不是keybox文件)
优点
- 完全是安全的Rust,没有本地代码。易于构建和可移植。
- MIT(或Apache2,或任何!)授权,不是LGPL。
- 简单的Rust风格API,基于流(
Read
/Write
)。
缺点
- 一小部分定制的、低风险的加密代码。然而,任何加密代码都可能出错。
- 支持有限,但正在增长的关键和数据格式。
- (故意)不是恒定时间:不能用于某些加密应用。这对于使用公钥的签名验证来说不太重要。
替代方案
gpgme
(LGPL) - 本地代码的绑定,API详细rpgp
(MIT/Apache2) - 许多pgp
的严肃实现sequoia-openpgp
(GPLv3) - 许多pgp
的严肃实现
我之前使用的是 gpgme
API,虽然它可行,但API使用起来很痛苦,链接/要求很复杂。
sequoia
的许可证有误。
rpgp
有很多功能,尽管它似乎已经被很好地分割成crate。
最低支持的Rust版本 (MSRV)
这个crate目前没有测试MSRV,因为 clap
(仅在示例中使用)没有MSRV。如果有任何使用案例,请提出一个问题,我会看看 clap
是否已经改进,或者是否有方便的方式来CI旧版本,而不使用 clap
。
MSRV的升级是一些类型的semver升级,需要决定 1.0.0
。
许可证
根据您的要求,许可方式可以是以下之一
- Apache License,版本2.0
- MIT许可证
任选其一。
贡献
除非您明确说明,否则您提交给工作内容的任何贡献,根据Apache-2.0许可证定义,将按上述方式双重许可,不附加任何额外条款或条件。
依赖
约4MB
约66K SLoC