3 个版本 (重大变更)
使用旧的 Rust 2015
| 0.3.0 | 2018 年 5 月 18 日 |
|---|---|
| 0.2.0 | 2016 年 8 月 18 日 |
| 0.1.0 | 2016 年 6 月 16 日 |
#10 in #asn1-der
51KB
1K SLoC
eagre-asn1
eagre-asn1 是一个 Rust 的 asn1 库。
它使用了宏来简化接口的使用。
目前仅支持 DER 和非常少量的 xer。
文档
文档可以在 https://rahix.github.io/eagre-asn1/ 找到
示例
假设你有一个以下 asn1 结构
User ::= SEQUENCE {
username UTF8String,
passwordHash [CONTEXT 12] IMPLICIT OctetString,
age [APPLICATION 1] EXPLICIT Integer,
admin Boolean
}
在 Rust 中,它看起来像这样
struct User {
pub username: String,
pub password_hash: Vec<u8>,
pub age: i32,
pub admin: bool,
}
der_sequence!{
User:
username: NOTAG TYPE String,
password_hash: IMPLICIT TAG CONTEXT 12; TYPE Vec<u8>,
age: EXPLICIT TAG APPLICATION 1; TYPE i32,
admin: NOTAG TYPE bool,
}
序列化就像这样简单
use eagre_asn1::der::DER;
let some_user = User { ... };
let encoded = some_user.der_bytes().unwrap();
// Send to far away planet
let decoded = User::der_from_bytes(encoded).unwrap();
assert_eq!(some_user, decoded);
实现类型
- Any
types::Any - BitString
types::BitString - BMPString
types::BMPString - Boolean
bool - CharacterString
types::CharacterString - Choice
enum - Date
types::Date - DateTime
types::DateTime - Duration
std::time::Duration - EmbeddedPDV
types::EmbeddedPDV - Enumeration
enum - External
- GeneralString
types::GeneralString - GraphicString
types::GraphicString - IA5String
types::IA5String - InstanceOf
- Integer
i32 - IRI
- Null
types::Null - NumericString
types::NumericString - ObjectClassField
- ObjectIdentifier
- OctetString
Vec<u8> - 可打印字符串
types::PrintableString - 实数
f32 - 相对IRI
- 相对OID
- 序列
struct - 序列
Vec<T> - 集合
struct - 集合
types::SetOf - T61String
types::T61String - 时间
types::Time - 一天中的时间
types::TimeOfDay - 通用字符串
types::UniversalString - UTF8String
String或&str - 可视文本字符串
types::VideotexString - 可见字符串
types::VisibleString
许可证
eagre-asn1 使用以下任一许可证
- Apache License, Version 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 https://open-source.org.cn/licenses/MIT)
任选其一。
依赖项
约165KB