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 日 | 
#447 在 测试
每月 320 次下载
在 asnfuzzgen-codecs-derive 中使用
84KB
 2K  SLoC
asnfuzzgen - ASN.1 结构感知模糊编译器
asnfuzzgen 是一个能够为任意 ASN.1 规范生成结构感知模糊模块的 ASN.1 编译器。它目前支持打包编码规则 (PER),并生成一个可以被导出为兼容其他语言的链接 C-ABI 库的 Rust 模块。
该项目分为三个 crate,下面将进行描述。
- 
asnfuzzgen:这个 crate 提供了实际的 ASN.1 编译器。通常,一个实用程序(asnfuzzgen)会从 ASN.1 规范开始生成 Rust 结构。编译器提供了一些基本功能,以便与 3GPP 规范一起工作,包括参数化类型、信息对象类和类型约束。
- 
asnfuzzgen-codecs:这个 crate 提供了对各个 ASN.1 规范支持的编码的支持。截至当前版本,支持 APER/UPER 编解码器。每个编解码器都作为实现相应 'encode' 和 'decode' 函数的trait支持使用。该 crate 将实现不同的 '编码规则' 支持,然后 derive 宏将利用此代码生成由上述编译器生成的 Rust 结构的编码支持。
- 
asnfuzzgen-codecs-derive:这个 crate 提供了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
运行测试用例
- 可以使用 cargo test运行测试用例。
生成 ASN.1 规范文件
目前有两种方式从 '.docx' 规范生成 'ASN.1' 规范文件(这主要适用于 3GPP 规范)。
- 使用 examples/specs/parse_specs.py内部的脚本。这是推荐的方式。(注意:如果使用 Python3,则需要安装docx或python-docx)。
- 使用 rust 二进制文件 extract-asn-spec。注意:这不是推荐的方式,效果可能因人而异。最终目标是使其成为默认方式,以便也能与build.rs集成。但目前仍在开发中。默认情况下不可用,只有通过功能标志rs-specs-gen才启用。
许可 & 归属
此项目的源代码许可协议为 MIT 许可。
依赖项
~2.5MB
~59K SLoC