# #模糊测试 #数据结构 #无std #任意

无std entropic-derive

将Rust数据结构转换为无结构字节的特性和从无结构字节转换回Rust数据结构的特性

1个不稳定版本

0.1.0 2024年7月2日

#20#任意

Download history 5/week @ 2024-06-26 142/week @ 2024-07-03 1/week @ 2024-07-10

每月下载量148次
用于 entropic

MIT/Apache

17KB
287

Entropic


Entropic - 简单地将Rust结构体转换为无结构字节并回转换

Entropic 特性允许将原始字节转换为Rust数据结构,反之亦然。

映射到/从无结构字节

entropic 着重提供关于其映射数据的一些保证

1. 每个数据结构值都将被一个或多个无结构字节序列映射。

从数学的角度来说,这意味着从无结构字节到数据结构的函数是 满射 的。多个不同的无结构字节序列映射到相同的数据结构值并不罕见,因此不应假设不同的字节输入将导致不同的输出。

由于这种满射映射,某些数据结构值可能比其他值有更大的概率被选中。某些方案提供了不同值之间概率差的保证,而 PureRandomScheme 旨在为每个输出值提供密码学安全的保证,即给定输入,每个输出值出现的概率是相同的;然而,这些保证需要消耗比其他方案更多的熵输入字节。

2. 数据结构将映射到无结构字节,这些字节始终映射回相同的数据结构。

在数学术语中,假设 U 是所有可能的非结构化字节序列的集合,而 S 是所有可能的数据结构值的集合。 entropic 提供了两个函数(from_entropy_sourceto_entropy_sink),分别可以表示为 f: U -> Sg: S -> U。对于 S 中的每一个值 s,entropic 旨在保证 f(g(s)) == s。但是,对于 U 中的所有 ug(f(u)) == u 并不总是成立——几个字节序列可能映射到相同的数据结构值,但该值只能映射回这些序列中的一个。

这个特性在用 entropic 进行数据结构模糊测试时尤其有用。模糊测试已被证明在提供语义上有效的起始种子以探索有趣路径时,跨域具有更高的有效性。因此,entropic 允许定义一个预期的数据结构,并将其转换为在模糊测试期间映射到该结构的字节序列。

与其他库相比的改进

  • 允许以(半)双射方式转换回非结构化字节
  • 只要提供足够的数据,就保证数据结构的形成,无论字节如何。其他库(如 arbitrary)需要原始输入中的特定结构(如字符串的有效UTF-8语法)才能成功
  • 模块化熵转换方案——如果您希望数据以不同的方式映射,可以选择将数据映射到结构的熵方案,甚至可以自己实现映射!

依赖项

~265–710KB
~17K SLoC