Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix compile warnings #33

Merged
merged 6 commits into from
Aug 8, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions depends/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,10 @@
OPTION(IS_LIBSNARK_PARENT OFF)
add_subdirectory(libsnark)

set_target_properties(snark PROPERTIES COMPILE_FLAGS
"-Wno-unused-variable -Wno-unused-parameter -Wno-delete-non-virtual-dtor -Wno-sign-compare"
)

set_target_properties(ff PROPERTIES COMPILE_FLAGS
"-Wno-unused-variable -Wno-unused-parameter"
)
7 changes: 7 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,13 @@ include_directories(${PROTO_SRC_DIR})
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${PROTO_SRC_DIR} ${PROTOS_PGHR13} ${PROTOS_GROTH16} ${PROTOS_UTIL} ${PROTOS})
grpc_generate_cpp(GRPC_SRCS GRPC_HDRS ${PROTO_SRC_DIR} ${PROTOS_PGHR13} ${PROTOS_GROTH16} ${PROTOS_UTIL} ${PROTOS})

set_property(SOURCE ${PROTO_SRCS} PROPERTY
COMPILE_FLAGS "-Wno-unused-variable -Wno-unused-parameter"
)
set_property(SOURCE ${GRPC_SRCS} PROPERTY
COMPILE_FLAGS "-Wno-unused-variable -Wno-unused-parameter"
)

include_directories(
$ENV{ZETH}
$ENV{ZETH}/src
Expand Down
7 changes: 5 additions & 2 deletions src/circuits/circuits-util.tcc
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ namespace libzeth {

// This define directive is useless/redundant, as ONE is defined here:
// libsnark/gadgetlib1/pb_variable.hpp#74
#ifdef ONE
#undef ONE
#endif
#define ONE libsnark::pb_variable<FieldT>(0)
//
// We know that a pb_variable takes an index in the constructor:
Expand Down Expand Up @@ -43,7 +46,7 @@ std::vector<bool> convert_to_binary_LE(T x, int bitlen) {

/*
* This function reverses the byte endianness
*
*
* Example input/output:
*
* Before swap (in): After Swap (out):
Expand Down Expand Up @@ -97,4 +100,4 @@ libsnark::pb_variable_array<FieldT> from_bits(std::vector<bool> bits, libsnark::

} // libzeth

#endif // __ZETH_CIRCUITS_UTILS_TCC__
#endif // __ZETH_CIRCUITS_UTILS_TCC__
13 changes: 5 additions & 8 deletions src/circuits/commitments/commitments.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ class COMM_gadget : libsnark::gadget<FieldT> {

public:
COMM_gadget(libsnark::protoboard<FieldT>& pb,
libsnark::pb_variable<FieldT>& ZERO,
libsnark::pb_variable_array<FieldT> x,
libsnark::pb_variable_array<FieldT> y,
std::shared_ptr<libsnark::digest_variable<FieldT>> result, // sha256(x || y)
Expand Down Expand Up @@ -50,7 +49,6 @@ template<typename FieldT, typename HashT>
class COMM_inner_k_gadget : public COMM_gadget<FieldT, HashT> {
public:
COMM_inner_k_gadget(libsnark::protoboard<FieldT>& pb,
libsnark::pb_variable<FieldT>& ZERO,
libsnark::pb_variable_array<FieldT>& a_pk, // public address key, 256 bits
libsnark::pb_variable_array<FieldT>& rho, // 256 bits
std::shared_ptr<libsnark::digest_variable<FieldT>> result, // sha256(a_pk || rho)
Expand All @@ -66,7 +64,6 @@ template<typename FieldT, typename HashT>
class COMM_outer_k_gadget : public COMM_gadget<FieldT, HashT> {
public:
COMM_outer_k_gadget(libsnark::protoboard<FieldT>& pb,
libsnark::pb_variable<FieldT>& ZERO,
libsnark::pb_variable_array<FieldT>& trap_r, // 384 bits
libsnark::pb_variable_array<FieldT>& inner_k, // 256 bits, but we only keep 128 bits out of it
std::shared_ptr<libsnark::digest_variable<FieldT>> result, // sha256(trap_r || [inner_k]_128)
Expand All @@ -78,11 +75,11 @@ template<typename FieldT, typename HashT>
class COMM_cm_gadget : public COMM_gadget<FieldT, HashT> {
public:
COMM_cm_gadget(libsnark::protoboard<FieldT>& pb,
libsnark::pb_variable<FieldT>& ZERO,
libsnark::pb_variable_array<FieldT>& outer_k, // 256 bits
libsnark::pb_variable_array<FieldT>& value_v, // 64 bits
std::shared_ptr<libsnark::digest_variable<FieldT>> result, // sha256(outer_k || 0^192 || value_v)
const std::string &annotation_prefix = "COMM_cm_gadget");
libsnark::pb_variable<FieldT>& ZERO,
libsnark::pb_variable_array<FieldT>& outer_k, // 256 bits
libsnark::pb_variable_array<FieldT>& value_v, // 64 bits
std::shared_ptr<libsnark::digest_variable<FieldT>> result, // sha256(outer_k || 0^192 || value_v)
const std::string &annotation_prefix = "COMM_cm_gadget");
};

} // libzeth
Expand Down
50 changes: 23 additions & 27 deletions src/circuits/commitments/commitments.tcc
Original file line number Diff line number Diff line change
@@ -1,20 +1,19 @@
#ifndef __ZETH_COMMITMENT_CIRCUITS_TCC__
#define __ZETH_COMMITMENT_CIRCUITS_TCC__

// DISCLAIMER:
// DISCLAIMER:
// Content Taken and adapted from Zcash
// https://github.com/zcash/zcash/blob/master/src/zcash/circuit/commitment.tcc

namespace libzeth {

template<typename FieldT, typename HashT>
COMM_gadget<FieldT, HashT>::COMM_gadget(libsnark::protoboard<FieldT>& pb,
libsnark::pb_variable<FieldT>& ZERO,
libsnark::pb_variable_array<FieldT> x,
libsnark::pb_variable_array<FieldT> y,
std::shared_ptr<libsnark::digest_variable<FieldT>> result,
const std::string &annotation_prefix
) : libsnark::gadget<FieldT>(pb), result(result)
libsnark::pb_variable_array<FieldT> x,
libsnark::pb_variable_array<FieldT> y,
std::shared_ptr<libsnark::digest_variable<FieldT>> result,
const std::string &annotation_prefix
) : libsnark::gadget<FieldT>(pb), result(result)
{
const std::string annotation_block = std::string(" COMM_block-") + annotation_prefix;
const std::string annotation_hasher = std::string(" COMM_hasher-") + annotation_prefix;
Expand All @@ -26,7 +25,6 @@ COMM_gadget<FieldT, HashT>::COMM_gadget(libsnark::protoboard<FieldT>& pb,

hasher.reset(new HashT(
pb,
HashT::get_block_len(),
*block,
*result,
annotation_hasher
Expand Down Expand Up @@ -101,12 +99,11 @@ libsnark::pb_variable_array<FieldT> getRightSideCMCOMM(
// as being the inner commitment of k
template<typename FieldT, typename HashT>
COMM_inner_k_gadget<FieldT, HashT>::COMM_inner_k_gadget(libsnark::protoboard<FieldT>& pb,
libsnark::pb_variable<FieldT>& ZERO,
libsnark::pb_variable_array<FieldT>& a_pk, // 256 bits
libsnark::pb_variable_array<FieldT>& rho, // 256 bits
std::shared_ptr<libsnark::digest_variable<FieldT>> result,
const std::string &annotation_prefix
) : COMM_gadget<FieldT, HashT>(pb, ZERO, a_pk, rho, result, annotation_prefix)
libsnark::pb_variable_array<FieldT>& a_pk, // 256 bits
libsnark::pb_variable_array<FieldT>& rho, // 256 bits
std::shared_ptr<libsnark::digest_variable<FieldT>> result,
const std::string &annotation_prefix
) : COMM_gadget<FieldT, HashT>(pb, a_pk, rho, result, annotation_prefix)
{
// Nothing
}
Expand All @@ -118,29 +115,28 @@ COMM_inner_k_gadget<FieldT, HashT>::COMM_inner_k_gadget(libsnark::protoboard<Fie
// We denote by trap_r the trapdoor r
template<typename FieldT, typename HashT>
COMM_outer_k_gadget<FieldT, HashT>::COMM_outer_k_gadget(libsnark::protoboard<FieldT>& pb,
libsnark::pb_variable<FieldT>& ZERO,
libsnark::pb_variable_array<FieldT>& trap_r, // 384 bits
libsnark::pb_variable_array<FieldT>& inner_k, // 256 bits, but we only keep 128 bits our of it
std::shared_ptr<libsnark::digest_variable<FieldT>> result,
const std::string &annotation_prefix
) : COMM_gadget<FieldT, HashT>(pb, ZERO, trap_r, get128bits(inner_k), result, annotation_prefix)
libsnark::pb_variable_array<FieldT>& trap_r, // 384 bits
libsnark::pb_variable_array<FieldT>& inner_k, // 256 bits, but we only keep 128 bits our of it
std::shared_ptr<libsnark::digest_variable<FieldT>> result,
const std::string &annotation_prefix
) : COMM_gadget<FieldT, HashT>(pb, trap_r, get128bits(inner_k), result, annotation_prefix)
{
// Nothing
}

// cm = sha256(outer_k || 0^192 || value_v)
template<typename FieldT, typename HashT>
COMM_cm_gadget<FieldT, HashT>::COMM_cm_gadget(libsnark::protoboard<FieldT>& pb,
libsnark::pb_variable<FieldT>& ZERO,
libsnark::pb_variable_array<FieldT>& outer_k, // 256 bits
libsnark::pb_variable_array<FieldT>& value_v, // 64 bits
std::shared_ptr<libsnark::digest_variable<FieldT>> result,
const std::string &annotation_prefix
) : COMM_gadget<FieldT, HashT>(pb, ZERO, outer_k, getRightSideCMCOMM(ZERO, value_v), result, annotation_prefix)
libsnark::pb_variable<FieldT>& ZERO,
libsnark::pb_variable_array<FieldT>& outer_k, // 256 bits
libsnark::pb_variable_array<FieldT>& value_v, // 64 bits
std::shared_ptr<libsnark::digest_variable<FieldT>> result,
const std::string &annotation_prefix
) : COMM_gadget<FieldT, HashT>(pb, outer_k, getRightSideCMCOMM(ZERO, value_v), result, annotation_prefix)
{
// Nothing
}

} // libzeth

#endif // __ZETH_COMMITMENT_CIRCUITS_TCC__
#endif // __ZETH_COMMITMENT_CIRCUITS_TCC__
6 changes: 2 additions & 4 deletions src/circuits/joinsplit.tcc
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,8 @@ class joinsplit_gadget : libsnark::gadget<FieldT> {

// Primary inputs are packed to be added to the extended proof and given to the verifier on-chain
joinsplit_gadget(protoboard<FieldT> &pb,
const std::string &annotation_prefix = "joinsplit_gadget"
) : gadget<FieldT>(pb) {
const std::string &annotation_prefix = "joinsplit_gadget"
) : gadget<FieldT>(pb, annotation_prefix) {
// Block dedicated to generate the verifier inputs
{
// The verification inputs are, except for the root, all bit-strings of various
Expand Down Expand Up @@ -334,11 +334,9 @@ class joinsplit_gadget : libsnark::gadget<FieldT> {
// Witness the JoinSplit inputs
for (size_t i = 0; i < NumInputs; i++) {
std::vector<FieldT> merkle_path = inputs[i].witness_merkle_path;
size_t address = inputs[i].address;
libff::bit_vector address_bits = get_vector_from_bitsAddr(inputs[i].address_bits);
input_notes[i]->generate_r1cs_witness(
merkle_path,
address,
address_bits,
inputs[i].spending_key_a_sk,
inputs[i].note
Expand Down
3 changes: 0 additions & 3 deletions src/circuits/mimc/mimc_mp.tcc
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,6 @@ MiMC_mp_gadget<FieldT>::MiMC_mp_gadget(
{
// Allocates output variable
output.allocate(pb, FMT(annotation_prefix, ".output"));

const libsnark::pb_variable<FieldT>& m = x;
const libsnark::pb_variable<FieldT>& round_key = y;
}

template<typename FieldT>
Expand Down
1 change: 0 additions & 1 deletion src/circuits/notes/note.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@ class input_note_gadget : public note_gadget<FieldT> {
const std::string &annotation_prefix = "input_note_gadget");
void generate_r1cs_constraints();
void generate_r1cs_witness(const std::vector<FieldT> merkle_path,
size_t address,
libff::bit_vector address_bits,
const bits256 a_sk_in,
const ZethNote& note);
Expand Down
9 changes: 1 addition & 8 deletions src/circuits/notes/note.tcc
Original file line number Diff line number Diff line change
Expand Up @@ -108,14 +108,12 @@ input_note_gadget<FieldT, HashT, HashTreeT>::input_note_gadget(libsnark::protobo
// affect the public state and leak data)).
commit_to_inputs_inner_k.reset(new COMM_inner_k_gadget<FieldT, HashT>(
pb,
ZERO,
a_pk->bits,
rho,
inner_k
));
commit_to_inputs_outer_k.reset(new COMM_outer_k_gadget<FieldT, HashT>(
pb,
ZERO,
this->r,
inner_k->bits,
outer_k
Expand Down Expand Up @@ -205,7 +203,6 @@ void input_note_gadget<FieldT, HashT, HashTreeT>::generate_r1cs_constraints() {
template<typename FieldT, typename HashT, typename HashTreeT>
void input_note_gadget<FieldT, HashT, HashTreeT>::generate_r1cs_witness(
std::vector<FieldT> merkle_path,
size_t address,
libff::bit_vector address_bits,
const bits256 a_sk_in,
const ZethNote& note
Expand Down Expand Up @@ -310,9 +307,7 @@ void input_note_gadget<FieldT, HashT, HashTreeT>::generate_r1cs_witness(

// Witness merkle tree authentication path
address_bits_va.fill_with_bits(this->pb, address_bits);
// Make sure `address_bits` and `address` represent the same
// value encoded on different bases (binary and decimal)
assert(address_bits_va.get_field_element_from_bits(pb).as_ulong() == address);

// Set auth_path values
auth_path->fill_with_field_elements(this->pb, merkle_path);

Expand All @@ -335,14 +330,12 @@ output_note_gadget<FieldT, HashT>::output_note_gadget(libsnark::protoboard<Field
// Commit to the output notes publicly without disclosing them.
commit_to_outputs_inner_k.reset(new COMM_inner_k_gadget<FieldT, HashT>(
pb,
ZERO,
a_pk->bits,
rho,
inner_k
));
commit_to_outputs_outer_k.reset(new COMM_outer_k_gadget<FieldT, HashT>(
pb,
ZERO,
this->r,
inner_k->bits,
outer_k
Expand Down
15 changes: 7 additions & 8 deletions src/circuits/prfs/prfs.hpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#ifndef __ZETH_PRFS_CIRCUITS_HPP__
#define __ZETH_PRFS_CIRCUITS_HPP__

// DISCLAIMER:
// DISCLAIMER:
// Content Taken and adapted from Zcash
// https://github.com/zcash/zcash/blob/master/src/zcash/circuit/prfs.tcc

Expand All @@ -20,11 +20,10 @@ class PRF_gadget : public libsnark::gadget<FieldT> {

public:
PRF_gadget(libsnark::protoboard<FieldT>& pb,
libsnark::pb_variable<FieldT>& ZERO, // needed in case x or y needs to be appended with 0s
libsnark::pb_variable_array<FieldT> x,
libsnark::pb_variable_array<FieldT> y,
std::shared_ptr<libsnark::digest_variable<FieldT>> result, // sha256(x || y)
const std::string &annotation_prefix = " base_PRF_gadget");
libsnark::pb_variable_array<FieldT> x,
libsnark::pb_variable_array<FieldT> y,
std::shared_ptr<libsnark::digest_variable<FieldT>> result, // sha256(x || y)
const std::string &annotation_prefix = " base_PRF_gadget");

void generate_r1cs_constraints();
void generate_r1cs_witness();
Expand All @@ -41,7 +40,7 @@ template<typename FieldT, typename HashT> libsnark::pb_variable_array<FieldT> ge
libsnark::pb_variable_array<FieldT>& rho
);

// a_pk = sha256(a_sk || 0^256): See Zerocash extended paper, page 22,
// a_pk = sha256(a_sk || 0^256): See Zerocash extended paper, page 22,
// paragraph "Instantiating the NP statement POUR"
template<typename FieldT, typename HashT>
class PRF_addr_a_pk_gadget : public PRF_gadget<FieldT, HashT> {
Expand Down Expand Up @@ -69,4 +68,4 @@ class PRF_nf_gadget : public PRF_gadget<FieldT, HashT> {
} // libzeth
#include "circuits/prfs/prfs.tcc"

#endif // __ZETH_PRFS_CIRCUITS_HPP__
#endif // __ZETH_PRFS_CIRCUITS_HPP__
28 changes: 13 additions & 15 deletions src/circuits/prfs/prfs.tcc
Original file line number Diff line number Diff line change
@@ -1,20 +1,19 @@
#ifndef __ZETH_PRFS_CIRCUITS_TCC__
#define __ZETH_PRFS_CIRCUITS_TCC__

// DISCLAIMER:
// DISCLAIMER:
// Content Taken and adapted from Zcash
// https://github.com/zcash/zcash/blob/master/src/zcash/circuit/prfs.tcc

namespace libzeth {

template<typename FieldT, typename HashT>
PRF_gadget<FieldT, HashT>::PRF_gadget(libsnark::protoboard<FieldT>& pb,
libsnark::pb_variable<FieldT>& ZERO,
libsnark::pb_variable_array<FieldT> x,
libsnark::pb_variable_array<FieldT> y,
std::shared_ptr<libsnark::digest_variable<FieldT>> result,
const std::string &annotation_prefix) :
libsnark::gadget<FieldT>(pb, annotation_prefix), result(result)
libsnark::pb_variable_array<FieldT> x,
libsnark::pb_variable_array<FieldT> y,
std::shared_ptr<libsnark::digest_variable<FieldT>> result,
const std::string &annotation_prefix) :
libsnark::gadget<FieldT>(pb, annotation_prefix), result(result)
{

block.reset(new libsnark::block_variable<FieldT>(pb, {
Expand All @@ -24,7 +23,6 @@ PRF_gadget<FieldT, HashT>::PRF_gadget(libsnark::protoboard<FieldT>& pb,

hasher.reset(new HashT(
pb,
HashT::get_block_len(),
*block,
*result,
"PRF_hasher")
Expand Down Expand Up @@ -83,18 +81,18 @@ libsnark::pb_variable_array<FieldT> getRightSideNFPRF(
return right_side;
}

// a_pk = sha256(a_sk || 0^256): See Zerocash extended paper, page 22,
// a_pk = sha256(a_sk || 0^256): See Zerocash extended paper, page 22,
// paragraph "Instantiating the NP statement POUR"
template<typename FieldT, typename HashT>
PRF_addr_a_pk_gadget<FieldT, HashT>::PRF_addr_a_pk_gadget(
libsnark::protoboard<FieldT>& pb,
libsnark::pb_variable<FieldT>& ZERO,
libsnark::pb_variable_array<FieldT>& a_sk,
std::shared_ptr<libsnark::digest_variable<FieldT>> result,
const std::string &annotation_prefix) :
PRF_gadget<FieldT, HashT>(pb, ZERO, a_sk, gen256zeroes<FieldT, HashT>(ZERO), result, annotation_prefix)
const std::string &annotation_prefix) :
PRF_gadget<FieldT, HashT>(pb, a_sk, gen256zeroes<FieldT, HashT>(ZERO), result, annotation_prefix)
{
// Nothing
// Nothing
}

// PRF to generate the nullifier
Expand All @@ -106,12 +104,12 @@ PRF_nf_gadget<FieldT, HashT>::PRF_nf_gadget(
libsnark::pb_variable_array<FieldT>& a_sk,
libsnark::pb_variable_array<FieldT>& rho,
std::shared_ptr<libsnark::digest_variable<FieldT>> result,
const std::string &annotation_prefix) :
PRF_gadget<FieldT, HashT>(pb, ZERO, a_sk, getRightSideNFPRF<FieldT, HashT>(ZERO, rho), result, annotation_prefix)
const std::string &annotation_prefix) :
PRF_gadget<FieldT, HashT>(pb, a_sk, getRightSideNFPRF<FieldT, HashT>(ZERO, rho), result, annotation_prefix)
{
// Nothing
}

} // libzeth

#endif // __ZETH_PRFS_CIRCUITS_TCC__
#endif // __ZETH_PRFS_CIRCUITS_TCC__
Loading