7 个版本
0.1.6 | 2024年8月13日 |
---|---|
0.1.5 | 2024年6月6日 |
0.1.4 | 2024年5月28日 |
0.1.3 | 2024年4月11日 |
0.0.0-未发布 | 2023年8月17日 |
142 在 硬件支持
每月276 次下载
335KB
8K SLoC
SE05X 驱动程序
本crate包含NXP SE05X系列安全元素的Rust驱动程序。它包含T=1协议的实现和用于与se05x通信的ISO7816-4 APDU。
use se05x::se05x::commands::*;
use se05x::se05x::policies::*;
use se05x::se05x::*;
let i2c = get_i2c();
let delay = get_delay();
let address = 0x48;
let mut se05x = Se05X::new(i2c, address, delay);
let user_id = ObjectId([0x01, 0x00, 0x00, 0x00]);
let object_id = ObjectId([0x01, 0x02, 0x03, 0x04]);
let buf = &mut [0; 128];
let atr = se05x.enable();
// Running a WriteUserId command:
se05x.run_command(
&WriteUserId::builder()
.object_id(user_id)
.data(b"Some value")
.build(),
buf,
)?;
// Creating a file with a policy
let policy = &[Policy {
object_id: user_id,
access_rule: ObjectAccessRule::from_flags(ObjectPolicyFlags::ALLOW_READ),
}];
se05x.run_command(
&WriteBinary::builder()
.policy(PolicySet(policy))
.object_id(object_id)
.file_length(9.into())
.data(b"Some data")
.build(),
buf,
)?;
// Opening a session with teh UserID
let session_id = se05x
.run_command(&CreateSession { object_id: user_id }, buf)?
.session_id;
// Verifying the UserId
se05x.run_session_command(
session_id,
&VerifySessionUserId {
user_id: b"Some value",
},
buf,
)?;
// Reading the data with the verified session
let data = se05x.run_session_command(
session_id,
&ReadObject::builder()
.object_id(object_id)
.offset(0.into())
.length(9.into())
.build(),
buf,
)?;
架构
T=1
该驱动程序通过I2C上的T=1协议与se05x通信,如UM11225中所述。
为此并与大多数嵌入式控制器兼容,它依赖于Read和Write从embedded-hal。然而,这些特性并不暴露足够的信息,因为T=1协议需要检测I2C NACKs,而此协议中没有暴露。
NACKs在各个HAL
crate的错误类型中暴露。因此,定义了一个扩展到embedded-hal特性的扩展I2CErrorNack
,以暴露缺失的信息。它在src/t1/i2cimpl.rs
中实现了NRF和LPC55 HAL,分别通过nrf
和lpc55
特性门控。
这可能不是未来embedded-hal
版本中必需的,它添加了缺失的信息。
Iso7816
该驱动程序使用iso7816
crate来实现APDU的序列化。
命令生成
为了简化实现,所有支持的se05x APDU都描述在src/se05x/commands.toml
中。Python脚本generate_commands.py
解析command.toml
文件并生成src/se05x/commands.rs
,该文件实现了所有APDU。
资助
本项目由NGI Assure基金资助,该基金由NLnet设立,并获得欧洲委员会Next Generation Internet计划的财政支持,在DG Communications Networks, Content and Technology的指导下,根据项目协议编号957073。
依赖项
~1–4MB
~98K SLoC