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 加密学

Download history 67/week @ 2024-04-25 22/week @ 2024-05-02 15/week @ 2024-05-09 53/week @ 2024-05-16 33/week @ 2024-05-23 124/week @ 2024-05-30 79/week @ 2024-06-06 38/week @ 2024-06-13 44/week @ 2024-06-20 7/week @ 2024-06-27 52/week @ 2024-07-04 42/week @ 2024-07-11 37/week @ 2024-07-18 24/week @ 2024-07-25 15/week @ 2024-08-01 5/week @ 2024-08-08

89 每月下载量
用于 4 个crate(2直接)

MIT/ApacheLGPL-2.0-or-later

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