3个版本
0.1.2 | 2023年11月30日 |
---|---|
0.1.1 | 2023年11月27日 |
0.1.0 | 2023年11月27日 |
#375 in 嵌入式开发
36KB
928 行
iso7816_tx
实现ISO7816智能卡T=1传输协议
T=1协议通常被称为ISO协议。它们主要基于ISO/IEC 7816标准系列的规定
许可
许可协议为以下之一
- Apache License, Version 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交给作品的所有贡献,应按上述方式双重许可,无任何附加条款或条件。
用法
基本APDU传输
fn main() {
use iso7816_tx::TransmissionBuilder;
let mut buf = [0u8; 258];
let mut t = TransmissionBuilder::new()
.set_init_cb(open)
.set_release_cb(close)
.set_reset_cb(reset)
.set_read_cb(read)
.set_write_cb(write)
.set_sleep_cb(sleep)
.set_nad(15, 51)
.build();
let atr = t.atr().expect("Failed to get ATR");
let capdu = &[0x80, 0xca, 0x9f, 0x7f];
let rapdu = t.transmit(capdu, &mut buf).expect("Failed to transmit");
}
fn open() -> Result<Option<Interface>, Error> {
// Initialize connection interface
// ...
Ok(Some(Interface::default()))
}
fn close(interface: Option<&Interface>) -> Result<Option<Interface>, Error> {
// Release connection interface
// ...
Ok(None)
}
fn reset(interface: Option<&Interface>) -> Result<(), Error> {
// Cold reset implementation
// ...
Ok(())
}
fn read(interface: Option<&Interface>, buf: &mut [u8]) -> Result<usize, Error> {
// Read data from connection interface
// ...
Ok(0)
}
fn write(interface: Option<&Interface>, buf: &[u8]) -> Result<usize, Error> {
// Write data to connection interface
// ...
Ok(0)
}
fn sleep(ms: u32) {
// Sleep implementation
// ...
}
// Connection interface context
#[derive(Default)]
struct Interface{}
// Interface errors
#[derive(Debug)]
enum Error {}