9个版本 (5个稳定版)
1.2.1 | 2024年4月18日 |
---|---|
1.2.0 | 2019年11月25日 |
1.1.0 | 2019年9月3日 |
1.0.1 | 2018年2月25日 |
0.1.0 | 2017年2月6日 |
#721 in 硬件支持
每月15,170次下载
在 48 个Crates中使用 (直接使用3个)
21KB
361 行
pcsc-rust
Rust对智能卡通信的PC/SC API的绑定。
- 优秀的API。
- 在Linux、Windows、macOS上测试过。
- 大部分情况下零开销。
请参阅文档以获取更多详细信息。
请参阅pcsc/examples
目录中的某些常见任务。
内容
pcsc-sys
crate包含直接、底层的C API绑定。
pcsc
crate包含高级Rust包装器。
用法
在您的Cargo.toml
[dependencies]
pcsc = "2"
示例
连接到第一个可用的读卡器中的卡片,向卡片发送APDU命令,打印APDU响应。
use pcsc::*;
fn main() {
// Establish a PC/SC context.
let ctx = match Context::establish(Scope::User) {
Ok(ctx) => ctx,
Err(err) => {
eprintln!("Failed to establish context: {}", err);
std::process::exit(1);
}
};
// List available readers.
let mut readers_buf = [0; 2048];
let mut readers = match ctx.list_readers(&mut readers_buf) {
Ok(readers) => readers,
Err(err) => {
eprintln!("Failed to list readers: {}", err);
std::process::exit(1);
}
};
// Use the first reader.
let reader = match readers.next() {
Some(reader) => reader,
None => {
println!("No readers are connected.");
return;
}
};
println!("Using reader: {:?}", reader);
// Connect to the card.
let card = match ctx.connect(reader, ShareMode::Shared, Protocols::ANY) {
Ok(card) => card,
Err(Error::NoSmartcard) => {
println!("A smartcard is not present in the reader.");
return;
}
Err(err) => {
eprintln!("Failed to connect to card: {}", err);
std::process::exit(1);
}
};
// Send an APDU command.
let apdu = b"\x00\xa4\x04\x00\x0A\xA0\x00\x00\x00\x62\x03\x01\x0C\x06\x01";
println!("Sending APDU: {:?}", apdu);
let mut rapdu_buf = [0; MAX_BUFFER_SIZE];
let rapdu = match card.transmit(apdu, &mut rapdu_buf) {
Ok(rapdu) => rapdu,
Err(err) => {
eprintln!("Failed to transmit APDU command to card: {}", err);
std::process::exit(1);
}
};
println!("APDU response: {:?}", rapdu);
}
示例输出
$ ./target/debug/examples/readme
Using reader: "SCM Microsystems Inc. SCR 355 [CCID Interface] 00 00"
Sending APDU: [0, 164, 4, 0, 10, 160, 0, 0, 0, 98, 3, 1, 12, 6, 1]
APDU response: [106, 130]
许可证
MIT许可证。
lib.rs
:
对PCSC C API的底层绑定。
以下平台受支持
-
在Windows上,内置的
WinSCard.dll
库和"Smart Card"服务。请参阅MSDN以获取实现API的文档。 -
在macOS上,内置的PCSC框架。
-
在Linux、BSD和其他(希望)系统上,PCSC lite库和pcscd守护进程。请参阅pcsclite以获取实现API的文档。
pcsclite在构建时使用pkg-config检测。请参阅
pkg-config
crate以获取更多信息。如果您不想使用pkg-config,您可以在构建crate时导出以下环境变量
PCSC_LIB_DIR
:搜索实现PCSC API的动态库的目录。PCSC_LIB_NAME
:库的名称。默认为pcsclite
。