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解析器实现

Download history 188944/week @ 2024-04-23 174734/week @ 2024-04-30 168816/week @ 2024-05-07 182806/week @ 2024-05-14 175484/week @ 2024-05-21 178907/week @ 2024-05-28 164386/week @ 2024-06-04 162389/week @ 2024-06-11 158280/week @ 2024-06-18 164879/week @ 2024-06-25 148800/week @ 2024-07-02 153435/week @ 2024-07-09 169850/week @ 2024-07-16 176317/week @ 2024-07-23 170576/week @ 2024-07-30 196891/week @ 2024-08-06

742,807 每月下载量
1,177 个包中(40 个直接使用) 使用

MIT/Apache

250KB
5K SLoC

yasna.rs: ASN.1 库 for Rust

Build Status

这是一个用于读取和写入 ASN.1 数据的 Rust 库。

由于该库处于早期阶段,API 可能会更改。然而,BERReaderDERWriter 功能正在变得稳定。

序列化/构建

支持在 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