#canonical #merkle-tree #serialization #fuzzing #fuzz #fuzzer #built

canonical_fuzz

针对规范编码的模糊测试辅助工具

7 个版本 (4 个破坏性更新)

0.7.0 2022年2月23日
0.6.2 2021年5月25日
0.6.0 2021年3月30日
0.5.0 2021年1月19日
0.2.1 2020年10月16日

#38#canonical

每月50次 下载
canonical 中使用

MPL-2.0 许可证

6MB
720

规范

Build Status Repository Documentation

规范是一个针对 Merkle 树和适合 wasm 环境构建的专业化序列化库。

其主要组件是 Canon trait,它指定了类型如何编码到/从字节读取。

这允许您轻松地在不同的 wasm 模块之间传递包含数百万个元素的复杂集合。

标识符

实现 Canon trait 的类型的每个值都与一个 Id 有 1:1 的关系。

let a = 42;

let id = Id::new(&a);

assert_eq!(id.reify().expect("read back"), a);

Repr<T> 是一个智能指针类型,要么拥有值,要么包含值的加密散列,或者两者都包含。这允许您构建可以递归数据类型,这些类型也可以有效地作为 Merkle 树存储和访问。

canonical_derive

为了不手动编写所有这些字节计数代码,规范包含一个 derive-macro 来为您实现它们。

#[derive(Canon, PartialEq, Debug)]
struct A2 {
    a: u8,
    b: u8,
}

canonical_fuzz

arbitrary crate 上构建的一个简单 fuzzer。允许您对类型的 canon 编码进行模糊测试,如果您选择实现自定义编码,这很有帮助。

该 fuzzer 还检查报告的值的长度是否与写入的内容一致。

依赖项