接Pinocchio——将.arith文件转换为qap及做相应的prove/verify操作,对nizk-test进行操作。
nizk-test.c
内容为:
#pragma once
struct Input { int a;};
struct NIZKInput { int b1; int b2; int b3; int b4;};
struct Output { int c1; int c2; int c3;};
void outsource(struct Input *input, struct NIZKInput *nizkinput, struct Output *output);
#if 17
void outsource(struct Input *input, struct NIZKInput *nizkinput, struct Output *output)
{
output->c1 = input->a + nizkinput->b1;
output->c3 = input->a + nizkinput->b3;
}
#else
void outsource(struct Input *input, struct Output *output)
{
output->c1 = input->a;
output->c3 = input->a + 3;
}
#endif
一、生成nizk-test.c对应的circuit
python ../src/vercomp.py nizk-test.c --arith nizk-test.arith --ignore-overflow False --progress True
生成的nizk-test.arith
内容为:
total 13
input 0 # input
input 1 # one-input
nizkinput 2 # input
nizkinput 3 # input (unused)
nizkinput 4 # input
nizkinput 5 # input (unused)
const-mul-0 in 1 out 1 # zero
add in 2 out 1 # ArithBusReq.AddReq(DFG.Input,DFG.NIZKInput)
const-mul-0 in 1 out 1 # constant 0
add in 2 out 1 # ArithBusReq.AddReq(DFG.Input,DFG.NIZKInput)
mul in 2 out 1 # output-cast
output 10 #
mul in 2 out 1 # output-cast
output 11 #
mul in 2 out 1 # output-cast
output 12 #
配置相应的input文件nizk-test.in
:
0 5
1 1
2 1
3 2
4 3
5 4
二、生成相应的公私钥
pinocchio-v0.5.3.exe --qap --pv --nizk --file circuit/nizk-test.arith --mem 4 --input circuit/nizk-test.in --output circuit/nizk-test.out --keys test-nizk-key --genkeys
对应的输出为: 同时生成了公私钥文件:(私钥为空???)
pinocchio-v0.5.3.exe --qap --pv --nizk --file circuit/nizk-test.arith --mem 4 --input circuit/nizk-test.in --output circuit/nizk-test.out --keys test-nizk-key --dowork
输出内容为: 同时生成proof文件和.out文件:
其中
nizk-test.out
内容为(与nizk-test.in
文件的输入相对应):
10 0000000000000000000000000000000000000000000000000000000000000006
11 0000000000000000000000000000000000000000000000000000000000000000
12 0000000000000000000000000000000000000000000000000000000000000008
四、Verify
pinocchio-v0.5.3.exe --qap --pv --nizk --file circuit/nizk-test.arith --mem 4 --input circuit/nizk-test.in --output circuit/nizk-test.out --keys test-nizk-key --verify
对应的输出为Verification passed
通过。