Isolate verification to a ProofVerifier context object that allows verification behavior to be tuned by the caller.

This commit is contained in:
Sean Bowe
2016-11-24 00:03:12 -07:00
parent 4e3ac9b015
commit bc59f53722
12 changed files with 105 additions and 20 deletions

View File

@@ -5,7 +5,6 @@
#include "zcash/util.h"
#include <memory>
#include <mutex>
#include <boost/foreach.hpp>
#include <boost/format.hpp>
@@ -25,8 +24,6 @@ namespace libzcash {
#include "zcash/circuit/gadget.tcc"
std::once_flag init_public_params_once_flag;
CCriticalSection cs_ParamsIO;
CCriticalSection cs_LoadKeys;
@@ -80,10 +77,6 @@ public:
JoinSplitCircuit() {}
~JoinSplitCircuit() {}
static void initialize() {
std::call_once (init_public_params_once_flag, ppzksnark_ppT::init_public_params);
}
void setProvingKeyPath(std::string path) {
pkPath = path;
}
@@ -151,6 +144,7 @@ public:
bool verify(
const ZCProof& proof,
ProofVerifier& verifier,
const uint256& pubKeyHash,
const uint256& randomSeed,
const boost::array<uint256, NumInputs>& macs,
@@ -179,7 +173,12 @@ public:
vpub_new
);
return r1cs_ppzksnark_online_verifier_strong_IC<ppzksnark_ppT>(*vk_precomp, witness, r1cs_proof);
return verifier.check(
*vk,
*vk_precomp,
witness,
r1cs_proof
);
} catch (...) {
return false;
}
@@ -358,7 +357,7 @@ public:
template<size_t NumInputs, size_t NumOutputs>
JoinSplit<NumInputs, NumOutputs>* JoinSplit<NumInputs, NumOutputs>::Generate()
{
JoinSplitCircuit<NumInputs, NumOutputs>::initialize();
initialize_curve_params();
auto js = new JoinSplitCircuit<NumInputs, NumOutputs>();
js->generate();
@@ -368,7 +367,7 @@ JoinSplit<NumInputs, NumOutputs>* JoinSplit<NumInputs, NumOutputs>::Generate()
template<size_t NumInputs, size_t NumOutputs>
JoinSplit<NumInputs, NumOutputs>* JoinSplit<NumInputs, NumOutputs>::Unopened()
{
JoinSplitCircuit<NumInputs, NumOutputs>::initialize();
initialize_curve_params();
return new JoinSplitCircuit<NumInputs, NumOutputs>();
}