Skip to content

Commit

Permalink
add verifyProof overload that accepts a single byte buffer of snark p…
Browse files Browse the repository at this point in the history
…roof params
  • Loading branch information
poma committed Nov 7, 2019
1 parent f2e5bc5 commit 869181c
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 3 deletions.
6 changes: 3 additions & 3 deletions cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -446,7 +446,7 @@ function generateVerifier_original(verificationKey) {

// The points

template = template.replace("<%vk_input_length%>", (verificationKey.IC.length-1).toString());
template = template.replace(/<%vk_input_length%>/g, (verificationKey.IC.length-1).toString());
template = template.replace("<%vk_ic_length%>", verificationKey.IC.length.toString());
let vi = "";
for (let i=0; i<verificationKey.IC.length; i++) {
Expand Down Expand Up @@ -488,7 +488,7 @@ function generateVerifier_groth(verificationKey) {

// The points

template = template.replace("<%vk_input_length%>", (verificationKey.IC.length-1).toString());
template = template.replace(/<%vk_input_length%>/g, (verificationKey.IC.length-1).toString());
template = template.replace("<%vk_ic_length%>", verificationKey.IC.length.toString());
let vi = "";
for (let i=0; i<verificationKey.IC.length; i++) {
Expand Down Expand Up @@ -529,7 +529,7 @@ function generateVerifier_kimleeoh(verificationKey) {

// The points

template = template.replace("<%vk_input_length%>", (verificationKey.IC.length-1).toString());
template = template.replace(/<%vk_input_length%>/g, (verificationKey.IC.length-1).toString());
template = template.replace("<%vk_ic_length%>", verificationKey.IC.length.toString());
let vi = "";
for (let i=0; i<verificationKey.IC.length; i++) {
Expand Down
5 changes: 5 additions & 0 deletions templates/verifier_groth.sol
Original file line number Diff line number Diff line change
Expand Up @@ -220,4 +220,9 @@ contract Verifier {
return false;
}
}
function verifyProof(bytes calldata proof, uint[<%vk_input_length%>] calldata inputs) external view returns (bool r) {
// solidity does not support decoding uint[2][2] yet
(uint[2] memory a, uint[2] memory b1, uint[2] memory b2, uint[2] memory c) = abi.decode(proof, (uint[2], uint[2], uint[2], uint[2]));
return verifyProof(a, [b1, b2], c, inputs);
}
}
5 changes: 5 additions & 0 deletions templates/verifier_kimleeoh.sol
Original file line number Diff line number Diff line change
Expand Up @@ -211,4 +211,9 @@ contract Verifier {
return false;
}
}
function verifyProof(bytes calldata proof, uint[<%vk_input_length%>] calldata inputs) external view returns (bool r) {
// solidity does not support decoding uint[2][2] yet
(uint[2] memory a, uint[2] memory b1, uint[2] memory b2, uint[2] memory c) = abi.decode(proof, (uint[2], uint[2], uint[2], uint[2]));
return verifyProof(a, [b1, b2], c, inputs);
}
}
15 changes: 15 additions & 0 deletions templates/verifier_original.sol
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,21 @@ contract Verifier {
return false;
}
}
function verifyProof(bytes calldata proof, uint[<%vk_input_length%>] calldata inputs) external view returns (bool r) {
// solidity does not support decoding uint[2][2] yet
(
uint[2] memory a,
uint[2] memory a_p,
uint[2] memory b1,
uint[2] memory b2,
uint[2] memory b_p,
uint[2] memory c,
uint[2] memory c_p,
uint[2] memory h,
uint[2] memory k
) = abi.decode(proof, (uint[2], uint[2], uint[2], uint[2], uint[2], uint[2], uint[2], uint[2], uint[2]));
return verifyProof(a, a_p, [b1, b2], b_p, c, c_p, h, k, inputs);
}
}


Expand Down

0 comments on commit 869181c

Please sign in to comment.