1个不稳定版本
0.1.0 | 2024年7月2日 |
---|
#20 在 #任意
每月下载量148次
用于 entropic
17KB
287 行
Entropic
Entropic - 简单地将Rust结构体转换为无结构字节并回转换
Entropic
特性允许将原始字节转换为Rust数据结构,反之亦然。
映射到/从无结构字节
entropic
着重提供关于其映射数据的一些保证
1. 每个数据结构值都将被一个或多个无结构字节序列映射。
从数学的角度来说,这意味着从无结构字节到数据结构的函数是 满射 的。多个不同的无结构字节序列映射到相同的数据结构值并不罕见,因此不应假设不同的字节输入将导致不同的输出。
由于这种满射映射,某些数据结构值可能比其他值有更大的概率被选中。某些方案提供了不同值之间概率差的保证,而 PureRandomScheme
旨在为每个输出值提供密码学安全的保证,即给定输入,每个输出值出现的概率是相同的;然而,这些保证需要消耗比其他方案更多的熵输入字节。
2. 数据结构将映射到无结构字节,这些字节始终映射回相同的数据结构。
在数学术语中,假设 U
是所有可能的非结构化字节序列的集合,而 S
是所有可能的数据结构值的集合。 entropic
提供了两个函数(from_entropy_source
和 to_entropy_sink
),分别可以表示为 f: U -> S
和 g: S -> U
。对于 S
中的每一个值 s
,entropic 旨在保证 f(g(s)) == s
。但是,对于 U
中的所有 u
,g(f(u)) == u
并不总是成立——几个字节序列可能映射到相同的数据结构值,但该值只能映射回这些序列中的一个。
这个特性在用 entropic
进行数据结构模糊测试时尤其有用。模糊测试已被证明在提供语义上有效的起始种子以探索有趣路径时,跨域具有更高的有效性。因此,entropic
允许定义一个预期的数据结构,并将其转换为在模糊测试期间映射到该结构的字节序列。
与其他库相比的改进
- 允许以(半)双射方式转换回非结构化字节
- 只要提供足够的数据,就保证数据结构的形成,无论字节如何。其他库(如
arbitrary
)需要原始输入中的特定结构(如字符串的有效UTF-8语法)才能成功 - 模块化熵转换方案——如果您希望数据以不同的方式映射,可以选择将数据映射到结构的熵方案,甚至可以自己实现映射!
依赖项
~265–710KB
~17K SLoC