小工具

当实现一个电路时,我们可以直接使用我们选择的芯片的功能。 但通常,我们会通过小工具 使用他们。 这种间接方式是很有用的,因为由于效率和UPA的限制,芯片接口通常依赖于底层的实现细节。小工具接口可以提供更加方便和稳定的API,这些API可以从繁琐的细节中抽象出来。

举个例子,比如哈希函数SHA-256。 支持SHA-256的芯片接口可能是依赖于哈希函数的内部设计,例如message schedule和压缩函数的隔离。 相应的小工具接口可以提供更加方便和熟悉的 update/finalize API,也能够在不需要芯片支持的情况下支持hash函数的部分功能,比如说 补齐功能。这有点像CPU上的加速指令并不是直接访问,而是通过软件库调用。

小工具同时能为上层电路提供一个模块化,可重用的抽象,类似于在像 libsnarkbellman这样的库中的使用。 不光函数进行抽象,类型也进行抽象,例如特定大小的椭圆曲线上的点或整数。