48个版本 (26个稳定版)
1.21.2 | 2024年7月10日 |
---|---|
1.20.0 | 2024年4月11日 |
1.19.0 | 2024年2月20日 |
1.17.0 | 2023年10月27日 |
0.2.0 | 2018年11月26日 |
在 密码学 中排名第16
每月下载量达 19,440 次
在 69 个crate(59个直接)中使用
5MB
68K SLoC
该crate旨在提供OpenPGP的完整实现,如RFC 4880定义,以及一些扩展(例如,RFC 6637,它描述了OpenPGP的ECC加密),这包括对无缓冲消息处理的支撑。
一些OpenPGP社区认为已过时的功能(例如,版本3兼容性)已被省略。我们还更新了一些OpenPGP默认设置以避免错误(例如,我们选择了现代算法默认值)。如果某些功能缺失,请提交错误报告。
本crate的目标不是支持任何类型的高级附加功能。例如,RFC 4880没有定义信任模型,如信任网、直接信任或TOFU。本crate也没有。RFC 4880确实提供了一些创建信任模型的机制(特别是UserID证书),本crate也公开了这些机制。
我们也努力避免规定如何使用OpenPGP。这并不意味着我们没有关于OpenPGP在许多常见场景(例如,消息验证)中的使用意见。但在本crate中,我们避免表达这些意见;我们将在未来公开一个有意见的高级接口。为了确定最合适的通用接口,我们观察现有用户。如果您正在使用Sequoia,请与我们联系,以便我们了解您的用例,讨论您的意见,并基于这些经验在未来开发高级接口。
尽管——或者可能正因为——它的无意见性质,我们发现基于Sequoia开发有意见的OpenPGP软件很容易。
实验性功能
此crate实现了RFC 4880bis中的功能,特别是AEAD加密容器。截至本文撰写时,此RFC仍为草案,其中定义的语法或语义可能更改或取消。因此,所有相关功能可能更改,使用此功能创建的工件可能在未来不可用。请勿将其用于除实验之外的其他用途。
这个包旨在提供RFC 4880定义的OpenPGP的完整实现,以及一些扩展(例如,RFC 6637,它描述了OpenPGP的ECC密码学,以及RFC 4880bis,下一个OpenPGP标准的草案)。这包括对无缓冲消息处理的支持。
功能标志
此包使用功能来启用或禁用可选功能。您可以在您的Cargo.toml
文件中调整功能,如下所示
sequoia-openpgp = { version = "*", default-features = false, features = ["compression", ...] }
默认情况下,Sequoia使用Nettle作为密码学后端,并启用所有压缩算法。使用默认功能仅适用于叶子包,请参阅本节。
请注意,如果您使用default-features = false
,则需要显式启用密码学后端,并启用压缩功能。
密码学后端
Sequoia支持在编译时选择的多个密码学库。目前,这些库可用
-
Nettle密码学库。这是默认后端,由默认功能集选择。如果您使用
default-features = false
,则需要显式包含crypto-nettle
功能来启用它。 -
OpenSSL后端。要选择此后端,使用
default-features = false
,并显式包含crypto-openssl
功能来启用它。 -
Botan后端。要选择此后端,使用
default-features = false
,并显式包含crypto-botan
功能来启用它。crypto-botan
默认为2023年4月发布的Botan v3。使用crypto-botan2
使用v2。 -
Windows密码学API:下一代(CNG)。要选择此后端,使用
default-features = false
,并显式包含crypto-cng
功能来启用它。目前,CNG后端至少需要Windows 10。 -
RustCrypto包。要选择此后端,使用
default-features = false
,并显式包含crypto-rust
功能来启用它。截至本文撰写时,RustCrypto包不建议用于通用用途,因为它们无法提供与更成熟的密码学库相同的保证。
实验性和可变时间的密码学后端
一些密码学后端尚未被认为足够成熟,可以用于通用消费。使用此类后端需要使用功能标志allow-experimental-crypto
显式同意。
一些密码学后端无法保证密码学操作需要恒定的时间量。这可能在某些设置中泄露秘密密钥。使用此类后端需要使用功能标志allow-variable-time-crypto
显式同意。
如何在crates中选择密码学后端
在Rust中,功能是统一的,因此功能应该是累加的,即启用任何功能组合应该是安全的。但是,这不适用于密码学后端,因为编译Sequoia需要恰好选择一个密码学后端。
为了适应这一点,我们制定了一条以下规则:在所有使用 Sequoia 的项目中,恰好有一个 crate 可以选择加密后端,而这个 crate 就是叶子 crate(即二进制或 cdylib crate)。任何非叶子、库 crate 必须避免选择加密后端,包括默认的后端,通过禁用默认功能来实现。
总结一下,根据您正在开发的 crate 类型,遵循以下规则
叶子 crate
叶子 crate 应选择默认后端(您可以委托 Sequoia 选择默认后端),但应允许您的下游用户切换后端
# Cargo.toml
[dependencies]
sequoia-openpgp = { version = "*", default-features = false }
# If you need compression features, enable them here:
# sequoia-openpgp = { version = "*", default-features = false, features = ["compression"] }
[features]
# Pick a crypto backend enabled by default (here we defer to Sequoia
# to pick the default):
default = ["sequoia-openpgp/default"]
# .. but allow others to select a different backend, as well
crypto-nettle = ["sequoia-openpgp/crypto-nettle"]
crypto-openssl = ["sequoia-openpgp/crypto-openssl"]
crypto-botan = ["sequoia-openpgp/crypto-botan"]
crypto-botan2 = ["sequoia-openpgp/crypto-botan2"]
crypto-rust = ["sequoia-openpgp/crypto-rust"]
crypto-cng = ["sequoia-openpgp/crypto-cng"]
# Experimental and variable-time cryptographic backend opt-ins
allow-experimental-crypto = ["sequoia-openpgp/allow-experimental-crypto"]
allow-variable-time-crypto = ["sequoia-openpgp/allow-variable-time-crypto"]
中间 crate
非叶子 crate 不应选择加密后端,并且必须禁用默认功能。此外,为了在不选择加密后端的情况下使 cargo test
工作,以及启用 docs.rs
构建您的文档,应选择性地为这些情况启用加密后端
# Cargo.toml
[dependencies]
sequoia-openpgp = { version = "*", default-features = false }
# If you need compression features, enable them here:
# sequoia-openpgp = { version = "*", default-features = false, features = ["compression"] }
# Enables a crypto backend for the tests:
[target.'cfg(not(windows))'.dev-dependencies]
sequoia-openpgp = { version = "1", default-features = false, features = ["crypto-nettle", "__implicit-crypto-backend-for-tests"] }
# Enables a crypto backend for the tests:
[target.'cfg(windows)'.dev-dependencies]
sequoia-openpgp = { version = "1", default-features = false, features = ["crypto-cng", "__implicit-crypto-backend-for-tests"] }
# Enables a crypto backend for the docs.rs generation:
[package.metadata.docs.rs]
features = ["sequoia-openpgp/default"]
压缩算法
使用 compression
标志来启用对所有压缩算法的支持,使用 compression-deflate
来启用 DEFLATE 和 zlib 压缩支持,以及使用 compression-bzip2
来启用 bzip2 支持。
编译到 WASM
通过设置正确的功能标志,Sequoia 可以编译到 WASM。为此,启用 RustCrypto 后端,并确保不启用 bzip2 压缩支持
sequoia-openpgp = { version = "*", default-features = false, features = ["crypto-rust", "allow-experimental-crypto", "allow-variable-time-crypto"] }
或者,启用 compression-deflate
支持
sequoia-openpgp = { version = "*", default-features = false, features = ["crypto-rust", "allow-experimental-crypto", "allow-variable-time-crypto", "compression-deflate"] }
最低支持的 Rust 版本 (MSRV)
sequoia-openpgp
需要 Rust 1.67。
依赖项
~7–19MB
~233K SLoC