14 个版本
0.5.2 | 2023年4月6日 |
---|---|
0.5.1 | 2022年12月15日 |
0.5.0 | 2022年2月2日 |
0.4.0 | 2021年4月28日 |
0.1.3 | 2016年7月5日 |
#36 在 解析器实现
742,807 每月下载量
在 1,177 个包中(40 个直接使用) 使用
250KB
5K SLoC
yasna.rs: ASN.1 库 for Rust
这是一个用于读取和写入 ASN.1 数据的 Rust 库。
由于该库处于早期阶段,API 可能会更改。然而,BERReader
和 DERWriter
功能正在变得稳定。
序列化/构建
支持在 DER(区分编码规则)中进行序列化。它也可以用于 BER(基本编码规则)的序列化。
fn main() {
let der = yasna::construct_der(|writer| {
writer.write_sequence(|writer| {
writer.next().write_i64(10);
writer.next().write_bool(true);
return Ok(());
})
});
println!("(10, true) = {:?}", der);
}
目前支持以下数据类型
- BOOLEAN,INTEGER,BITSTRING,OCTETSTRING,NULL,OBJECT IDENTIFIER,
- SEQUENCE,SEQUENCE OF,SET,SET OF,CHOICE,
- UTF8String,NumericString,PrintableString,VisibleString,IA5String,BMPString,
- UTCTime,GeneralizedTime,
- 显式/隐式标记的类型,
- SEQUENCE/SET 中的 DEFAULT/OPTIONAL。
以下数据类型不支持
- REAL
- TeletexString,VideotexString,GraphicString,GeneralString,UniversalString,
- TIME,DATE,TIME-OF-DAY,DATE-TIME,DURATION。
反序列化/解析
支持在 BER(基本编码规则)或 DER(区分编码规则)中进行反序列化。
fn main() {
let asn = yasna::parse_der(&[48, 6, 2, 1, 10, 1, 1, 255], |reader| {
reader.read_sequence(|reader| {
let i = reader.next().read_i64()?;
let b = reader.next().read_bool()?;
return Ok((i, b));
})
}).unwrap();
println!("{:?} = [48, 6, 2, 1, 10, 1, 1, 255]", asn);
}
目前支持以下数据类型
- BOOLEAN,INTEGER,BITSTRING,OCTETSTRING,NULL,OBJECT IDENTIFIER,
- SEQUENCE,SEQUENCE OF,SET,SET OF,CHOICE,
- UTF8String,NumericString,PrintableString,VisibleString,IA5String,BMPString,
- UTCTime,GeneralizedTime,
- 显式/隐式标记的类型,
- SEQUENCE 中的 DEFAULT/OPTIONAL。
以下数据类型不支持
- REAL
- TeletexString,VideotexString,GraphicString,GeneralString,UniversalString,
- TIME,DATE,TIME-OF-DAY,DATE-TIME,DURATION。
- SET 中的 DEFAULT/OPTIONAL。
其他编码
该库目前专注于 BER(基本编码规则)和 DER(区分编码规则)。其他编码,如 CER(规范编码规则)、PER(打包编码规则)和 XER(XML 编码规则)目前不适用。
流式处理
该库目前专注于内存中的序列化/反序列化。目前没有计划实现流式处理。
兼容性
yasna.rs
的最小支持的 Rust 版本(MSRV)是 Rust 1.36.0。如果更严格,则启用与第三方包(例如 time
)互操作性的可选功能标志遵循该包的策略。
许可
该库采用 MIT/Apache-2.0 双重许可。
依赖项
~0–310KB