21 个版本
0.7.0 | 2024年6月27日 |
---|---|
0.6.1 | 2023年11月10日 |
0.5.9 | 2023年8月8日 |
0.5.8 | 2023年3月3日 |
0.1.2 | 2021年11月13日 |
#236 在 编码
3,415 每月下载量
用于 3 crates
120KB
3K SLoC
Hampi - Rust ASN.1 工具包
此项目的目标是实现一个 Rust 的 ASN.1 编译器,可以生成针对不同 ASN.1 规范的 Rust 绑定,这些绑定可用于 Rust 中的各种协议实现。还计划实现不同的 ASN.1 编码规则,如 DER、BER、PER,作为 ASN.1 编码解码器。
虽然完全符合 ASN.1 编译器是很有吸引力的,但项目的初始重点是能够生成可以在其他软件中使用的代码。第一个目标是与 3GPP 规范(如无线网络接入协议(RANAP)、S1 应用协议(S1AP)和 NG 应用协议(NGAP))合作。因此,当前实现也专注于这些规范使用的编码解码器,即对齐打包编码规则(APER)。
此实现的目标用例与 asn1c
编译器的目标用例类似,该编译器从 ASN.1 规范生成 C
绑定。
此项目分为三个 crates -
-
asn1-compiler
: 此 crate 提供实际的 ASN.1 编译器。通常,一个实用工具(hampi-rs-asn1c
)将根据 ASN.1 规范生成 Rust 结构。编译器提供了与 3GPP 规范一起工作所需的基本工作功能,包括参数化类型、信息对象类和类型约束。 -
asn1-codecs
:本包提供对各个ASN.1规范支持的编码的支持。目前支持基本的APER/UPER编解码器。每个编解码器都作为实现相应 'encode' 和 'decode' 函数的trait
来支持。本包将实现不同的 '编码规则' 支持,然后 derive 宏将利用此代码生成编译器生成的 Rust 结构的编码支持。 -
asn1_codecs_derive
:此包提供了derive
宏,用于asn-codecs
中的编解码器。使用asn-compiler
生成的代码可以通过在编译时传递标志来将代码发送到适当的编解码器。
支持的编解码器
- APER
- UPER
支持的协议
以下协议目前得到支持。
- RANAP - 代码生成和RANAP PDU的编码/解码。
- S1AP - 代码生成和S1AP PDU的解码。
- NGAP - 代码生成和NGAP PDU的编码/解码。
- E2AP - 代码生成
- SUPL - 代码生成
- RRC - 代码生成和RRC PDU的解码。
- E2SM - 代码生成和编码/解码功能。
入门指南
build.rs
支持
通常也可以使用 build.rs
机制调用编译器。在 examples/
子项目中提供了一个示例 build.rs
。通过这个 build.rs
生成代码可以集成到您的项目中。示例在 examples/tests/
目录中。
使用 CLI 工具
可以使用 hampi-rs-asn1c
工具,使用 cargo install asn1-compiler
安装,然后按照 CLI 使用说明操作。
cargo install asn1-compiler
hampi-rs-asn1c --help
运行测试用例
- 可以通过
cargo test
运行测试用例。
生成 ASN.1 规范文件
目前有两种方式从 '.docx' 规范生成 'ASN.1' 规范文件(这主要适用于3GPP规范)。
- 使用
examples/specs/parse_specs.py
中的脚本。这是推荐的方式。(注意:这需要安装docx
或python-docx
,如果是 Python3 的话)。 - 使用 rust 二进制文件
extract-asn-spec
。注意:这不是推荐的方式,效果可能因设备而异。最终目标是使其成为默认方式——以便也能有build.rs
集成。但这是目前的一个工作进展。这不是默认的,只有通过特性标志rs-specs-gen
才能启用。
许可
根据以下任一许可授权:
- Apache License, Version 2.0 (LICENSE-Apache 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT License (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
依赖关系
约2.5MB
约60K SLoC