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 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
依赖项
约165KB