27个版本
0.2.2 | 2024年6月5日 |
---|---|
0.2.1 | 2024年2月16日 |
0.2.0 | 2023年9月5日 |
0.1.2 | 2023年4月8日 |
0.0.1 | 2021年6月30日 |
#1803 in 加密学
89 每月下载量
用于 4 个crate(2直接)
400KB
8K SLoC
crate已弃用
此crate已被弃用,转而使用 openpgp-card-rpgp。
openpgp-card-sequoia
基于遗留的 openpgp-card
0.4 API。它不再处于开发状态。
下一代 openpgp-card
版本 0.5 包括错误修复和新功能(包括额外的KDF支持),我不会将其回滚到此crate。
您可以按原样使用 openpgp-card-sequoia
,但请注意,此库将不会进行进一步的工作,也不会进行错误修复或安全发布。如果您对现有客户端代码迁移有任何疑问,请随时联系。
lib.rs
:
此crate提供了一组便捷的抽象,用于使用OpenPGP卡设备。中心抽象是[Card]类型,它提供了对所有卡操作的访问。
一个[Card]对象始终处于可能的[State]之一。状态决定了可以在卡上执行哪些操作。
此crate是openpgp-card crate(公开了对OpenPGP卡功能的低级访问)的一个方便的高级包装器。sequoia-openpgp用于执行OpenPGP操作。
后端
要使用此crate,您需要使用后端与卡进行通信。建议的默认后端是card-backend-pcsc
。
使用card-backend-pcsc
,您可以打开所有可用的卡
use card_backend_pcsc::PcscBackend;
use openpgp_card_sequoia::{state::Open, Card};
for backend in PcscBackend::cards(None)? {
let mut card = Card::<Open>::new(backend?)?;
let mut transaction = card.transaction()?;
println!(
"Found OpenPGP card with ident '{}'",
transaction.application_identifier()?.ident()
);
}
或者您可以通过ident打开特定的卡
use card_backend_pcsc::PcscBackend;
use openpgp_card_sequoia::{state::Open, Card};
let cards = PcscBackend::card_backends(None)?;
let mut card = Card::<Open>::open_by_ident(cards, "abcd:01234567")?;
let mut transaction = card.transaction()?;
用于加密操作
解密
要使用卡进行解密,需要打开卡,并可用用户授权。然后可以获取一个sequoia_openpgp::crypto::Decryptor
实现
use card_backend_pcsc::PcscBackend;
use openpgp_card_sequoia::{state::Open, Card};
// Open card via PCSC
let cards = PcscBackend::card_backends(None)?;
let mut card = Card::<Open>::open_by_ident(cards, "abcd:01234567")?;
let mut transaction = card.transaction()?;
// Get user access to the card (and authorize with the user pin)
let mut user = transaction.to_user_card("123456")?;
// Get decryptor
let decryptor = user.decryptor(&|| println!("Touch confirmation needed for decryption"));
// Perform decryption operation(s)
// ..
签名
要使用卡片进行签名,需要将其打开,并且需要具备签名授权。然后可以获得一个sequoia_openpgp::crypto::Signer
实现。
(请注意,默认情况下,一些OpenPGP卡在展示密码进行签名后,将只允许执行一次签名操作。根据卡片的配置,您需要在每次签名操作之前展示用户密码!)
use card_backend_pcsc::PcscBackend;
use openpgp_card_sequoia::{state::Open, Card};
// Open card via PCSC
let cards = PcscBackend::card_backends(None)?;
let mut card = Card::<Open>::open_by_ident(cards, "abcd:01234567")?;
let mut transaction = card.transaction()?;
// Get signing access to the card (and authorize with the user pin)
let mut user = transaction.to_signing_card("123456")?;
// Get signer
let signer = user.signer(&|| println!("Touch confirmation needed for signing"));
// Perform signing operation(s)
// ..
设置和配置卡片
use card_backend_pcsc::PcscBackend;
use openpgp_card_sequoia::{state::Open, Card};
// Open card via PCSC
let cards = PcscBackend::card_backends(None)?;
let mut card = Card::<Open>::open_by_ident(cards, "abcd:01234567")?;
let mut transaction = card.transaction()?;
// Get admin access to the card (and authorize with the admin pin)
let mut admin = transaction.to_admin_card("12345678")?;
// Set the Name and URL fields on the card
admin.set_cardholder_name("Alice Adams")?;
admin.set_url("https://example.org/openpgp.asc")?;
依赖项
~17–26MB
~333K SLoC