在前一篇博文Pinocchio: Nearly Practica Verifable Computationh之circuit compiler的基础上,对所生成的.arith文件进行相应的qap转换及prove/verify操作。 Pinocchio源码中的msbignum.h
等内容暂未开源,目前无法直接编译通过,直接使用其中的pinocchio-v0.5.3.exe
可执行文件进行相应操作。
pinocchio中使用Boost program_options库来进行参数解析。所有参数可pinocchio-v0.5.3.exe -h
来查看。
在前一篇博文Pinocchio: Nearly Practica Verifable Computationh之circuit compiler中,outsource的是判断output->x = (input->a) == (input->b);
,需要创建相应的eqtest-p0-b32.in
输入文件,该文件格式为wireID wireValue
以16进制形式展现所有input信息。如wireID 0->变量a
, wireID 1->变量b
, 若变量a的值取10(对应16进制为a),变量b的值取11(对应16进制为b),最后一行以const-1 input wire(即eqtest-p0-b32.arith
中的one-input
)结束,对应的eqtest-p0-b32.in
内容为:
0 a
1 b
2 1
eqtest-p0-b32.arith
内容为:
total 11
input 0 # input
input 1 # input
input 2 # one-input
const-mul-0 in 1 out 1 # zero
const-mul-neg-1 in 1 out 1 # zerop subtract negative
add in 2 out 1 # zerop diff
zerop in 1 out 2 # zerop
const-mul-neg-1 in 1 out 1 # zerop inverse
add in 2 out 1 # zerop result
mul in 2 out 1 # output-cast
output 10 #
执行qap转换:
pinocchio-v0.5.3.exe --qap --dv --file circuit/eqtest-p0-b32.arith --input circuit/eqtest-p0-b32.in --mem 4
对应的输出为:
pinocchio-v0.5.3.exe --qap --dv --file circuit/eqtest-p0-b32.arith --input circuit/eqtest-p0-b32.in --mem 4 --output circuit/eqtest-p0-b32.out
对应的
eqtest-p0-b32.out
内容(格式为wireID wireValue
,其中的10
即为output对应的wireID)为:[a!=b时,output为0]
10 0000000000000000000000000000000000000000000000000000000000000000
修改eqtest-p0-b32.in
中的值,将其中的wireID 0和1的值设置为相同。再次运行上述命令,对应的eqtest-p0-b32.out
内容为:[a==b时,output为1]
10 0000000000000000000000000000000000000000000000000000000000000001
符合预期!