#encoding-rules #asn-1 #bindings-generator #per #macro-derive #networking

bin+lib asn1-compiler

用于将 ASN.1 规范编译成 Rust 的编译器,支持 PER 编解码器并具有 PER 编解码器的 derive 宏

22 个版本

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 日

47过程宏 中排名

Download history 4/week @ 2024-05-03 48/week @ 2024-05-17 6/week @ 2024-05-24 18/week @ 2024-05-31 24/week @ 2024-06-07 112/week @ 2024-06-14 679/week @ 2024-06-21 721/week @ 2024-06-28 1231/week @ 2024-07-05 569/week @ 2024-07-12 826/week @ 2024-07-19 839/week @ 2024-07-26 896/week @ 2024-08-02 558/week @ 2024-08-09 672/week @ 2024-08-16

每月下载量 3,074

Apache-2.0 OR MIT

360KB
9K SLoC

Hampi - Rust ASN.1 工具包

GitHub Workflow Status (branch) Crates.io Crates.io Crates.io

该项目的目标是实现一个 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 绑定。

该项目分为三个 crate -

  1. asn1-compiler docs.rs: 该 crate 提供实际的 ASN.1 编译器。通常,一个实用程序(hampi-rs-asn1c)将根据 ASN.1 规范生成 Rust 结构。编译器提供与 3GPP 规范协同工作所需的基本功能,包括参数化类型、信息对象类和类型约束。

  2. asn1-codecs docs.rs:本库提供对各个ASN.1规范支持的编码的支持。目前支持基本的APER/UPER编解码器。每个编解码器都支持作为实现相应 'encode' 和 'decode' 函数的 trait。本库将实现不同的 '编码规则' 支持,并利用这些代码生成编译器生成的Rust结构的编码支持。

  3. asn1_codecs_derive docs.rs:本库为 asn-codecs 中的编解码器提供 derive 宏。使用 asn-compiler 生成的代码可以通过在编译时传递标志来指向适当的编解码器。

支持的编解码器

  • APER
  • UPER

支持的协议

目前支持以下协议。

  1. RANAP - 代码生成和RANAP PDU编码/解码。
  2. S1AP - 代码生成和S1AP PDU解码。
  3. NGAP - 代码生成和NGAP PDU编码/解码。
  4. E2AP - 代码生成
  5. SUPL - 代码生成
  6. RRC - 代码生成和RRC PDU解码。
  7. E2SM - 代码生成和编码/解码功能。

入门指南

build.rs 支持

通常可以使用 build.rs 机制调用编译器。在 examples/ 子项目中提供了一个示例 build.rs。通过这个 build.rs 生成的代码可以集成到您的项目中。示例在 examples/tests/ 目录中提供。

使用CLI工具

可以使用 cargo install asn1-compiler 安装工具 hampi-rs-asn1c,然后按照CLI使用说明操作。

cargo install asn1-compiler
hampi-rs-asn1c --help

运行测试用例

  1. 可以通过 cargo test 运行测试用例。

生成ASN.1规范文件

目前有两种方法从 '.docx' 规范生成 'ASN.1' 规范文件(这主要适用于3GPP规范)。

  1. 使用 examples/specs/parse_specs.py 中的脚本。这是推荐的方法。(注意:如果使用Python3,则需要安装 docxpython-docx。)
  2. 使用Rust二进制文件 extract-asn-spec。注意:这不是推荐的方法,效果可能会有所不同。最终目标是使其成为默认方法 - 因此也应有 build.rs 集成。但现在这是一个正在进行中的工作。默认情况下不可用,只有通过特性标志 rs-specs-gen 启用。

许可证

许可协议为以下之一

依赖关系

~5–8.5MB
~149K SLoC