#fuzzing #per #macro-derive #asn-1

asnfuzzgen-codecs-derive

ASN.1 编解码器推导宏

4 个版本

0.1.3 2024年7月5日
0.1.2 2024年7月5日
0.1.1 2024年7月5日
0.1.0 2024年7月3日

822测试 中排名

Download history 223/week @ 2024-07-01 40/week @ 2024-07-08 55/week @ 2024-07-22

318 每月下载次数

MIT 许可证

150KB
3.5K SLoC

asnfuzzgen - ASN.1 结构感知模糊编译器

asnfuzzgen 是一个能够为任意 ASN.1 规范生成结构感知模糊模块的 ASN.1 编译器。它目前支持打包编码规则 (PER),并生成一个可以导出到链接 C-ABI 库的 Rust 模块,以实现与其他语言的跨兼容性。

该项目分为三个包,如下所述。

  1. asnfuzzgen:此包提供实际的 ASN.1 编译器。通常,实用程序(asnfuzzgen)会根据 ASN.1 规范生成 Rust 结构。编译器提供与 3GPP 规范一起工作的基本功能,包括参数化类型、信息对象类和类型约束。

  2. asnfuzzgen-codecs:在此包中提供对单个 ASN.1 规范支持的编码的支持。截至当前版本,支持 APER/UPER 编解码器。每个编解码器都作为实现相应 'encode' 和 'decode' 函数的 trait 支持。将在本包中实现对不同的 '编码规则' 的支持,然后推导宏将利用此代码为编译器以上生成的 Rust 结构生成编码支持。

  3. asnfuzzgen-codecs-derive:此包提供 derive 宏,用于 asn-codecs 中的编解码器。使用 asnfuzzgen 生成的代码可以通过在编译时传递标志来指向适当的编解码器。

致谢

该项目使用了来自 Hampi Rust ASN.1 工具包 的源代码,该工具包同样受 MIT 许可证的许可。特别感谢 Abhijit Gadgil 为该项目做出了重要贡献的 Rust ASN.1 工具包的编写。

支持的编解码器

  • APER
  • UPER

入门指南

build.rs 支持

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

使用 CLI 工具

可以使用 asnfuzzgen 工具,通过 cargo install asnfuzzgen 安装,然后按照 CLI 使用说明进行操作。

cargo install asnfuzzgen
asnfuzzgen --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 启用。

许可 & 归档

本项目的源代码采用 MIT 许可证。

依赖关系

~2.5MB
~59K SLoC