Skip to content

Commit

Permalink
Merge branch 'r-marques-fix-libsnark-install'
Browse files Browse the repository at this point in the history
  • Loading branch information
maxhowald committed Dec 12, 2017
2 parents fdc4a2d + 6cb3588 commit 2b172e3
Show file tree
Hide file tree
Showing 8 changed files with 55 additions and 36 deletions.
3 changes: 2 additions & 1 deletion install_fedora_centos.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ set -e
sudo yum groupinstall 'Development Tools'
sudo yum install python python-devel java-1.8.0-openjdk-devel golang gcc \
gcc-c++ glibc-devel libstdc++ glibc-devel.i686 libstdc++.i686 ant \
make time boost boost-devel gmp gmp-devel zlib zlib-devel openssl-devel
make time boost boost-devel gmp gmp-devel zlib zlib-devel \
openssl-devel cmake

cd thirdparty
./install_pepper_deps.sh
Expand Down
3 changes: 2 additions & 1 deletion pepper/.gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
bin/
gen/
obj/
pepper_prover
pepper_verifier
proving_material/
verification_material/
prover_verifier_shared/
prover_verifier_shared/
18 changes: 13 additions & 5 deletions pepper/Makefile
Original file line number Diff line number Diff line change
@@ -1,15 +1,23 @@
CXX = g++
CXXFLAGS = -m64 -std=c++11 -DCURVE_BN128 -DBN_SUPPORT_SNARK

# according to libsnark's documentation, we need to use the same conditional defines libsnark was compiled with, as found in
# thirdparty/libsnark/build/libsnark/CMakeFiles/snark.dir/flags.make
CXXFLAGS = -m64 -std=c++11 -DCURVE_BN128 -DBN_SUPPORT_SNARK -DBINARY_OUTPUT -DMONTGOMERY_OUTPUT -DNO_PROCPS -DUSE_ASM

AR := ar rcs

DEPSDIR := $(HOME)/pepper_deps

IFLAGS = -I./include -I. -I$(DEPSDIR)/include -I$(DEPSDIR)/include/libsnark
IFLAGS += -I$(DEPSDIR)/include
IFLAGS = -I./include -I. -I$(DEPSDIR)/include
# we use some of libsnark's internal dependencies which appear not to be
# installed properly by "make install" when installing libsnark, so we include
# libsnark and its dependencies directly from its build directory.
IFLAGS += -I../thirdparty/libsnark -I../thirdparty/libsnark/depends/libff -I../thirdparty/libsnark/depends/libfqfft


LDFLAGS = -L$(DEPSDIR)/lib -lsnark -lgmp -lgmpxx
LDFLAGS += -lpapi -lrt -lleveldb -lkyotocabinet -Wl,-rpath,$(DEPSDIR)/lib/
LDFLAGS = -L$(DEPSDIR)/lib
LDFLAGS += -L../thirdparty/libsnark/build/libsnark -L../thirdparty/libsnark/build/depends/libff/libff -L../thirdparty/libsnark/build/depends
LDFLAGS += -lsnark -lff -lzm -lgmp -lgmpxx -lpapi -lrt -lleveldb -lkyotocabinet -Wl,-rpath,$(DEPSDIR)/lib/

GENSRCDIR = gen
BINDIR = bin
Expand Down
2 changes: 1 addition & 1 deletion pepper/common_defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ constexpr auto v_dir = "./verification_material/";
constexpr auto p_dir = "./proving_material/";
constexpr auto shared_dir = "./prover_verifier_shared/";

typedef libsnark::Fr<libsnark::bn128_pp> FieldT;
typedef libff::Fr<libsnark::default_r1cs_ppzksnark_pp> FieldT;

struct comp_params {
int n_constraints;
Expand Down
18 changes: 7 additions & 11 deletions pepper/pepper_prover.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,9 @@


#include <libsnark/relations/constraint_satisfaction_problems/r1cs/r1cs.hpp>
#include <libsnark/common/default_types/ec_pp.hpp>
#include <libsnark/common/default_types/r1cs_ppzksnark_pp.hpp>
#include <libsnark/zk_proof_systems/ppzksnark/r1cs_ppzksnark/r1cs_ppzksnark.hpp>

#include <libsnark/algebra/curves/public_params.hpp>
#include <libsnark/algebra/curves/bn128/bn128_pp.hpp>
#include <libsnark/common/profiling.hpp>

#include <iostream>
#include <fstream>

Expand Down Expand Up @@ -59,17 +55,17 @@ int main (int argc, char* argv[]) {
ComputationProver prover(p.n_vars, p.n_constraints, p.n_inputs, p.n_outputs, prime, "default_shared_db", input_fn, only_setup);
prover.compute_from_pws(("./bin/" + std::string(NAME) + ".pws").c_str());

libsnark::bn128_pp::init_public_params();
libsnark::default_r1cs_ppzksnark_pp::init_public_params();
std::ifstream pkey(pk_filename);
if (!pkey.is_open()) {
std::cerr << "ERROR: " << pk_filename << " not found. Try running ./verifier_setup <computation> first." << std::endl;
}

libsnark::r1cs_ppzksnark_keypair<libsnark::bn128_pp> keypair;
libsnark::r1cs_ppzksnark_keypair<libsnark::default_r1cs_ppzksnark_pp> keypair;
std::cout << "reading proving key from file..." << std::endl;
pkey >> keypair.pk;
libsnark::r1cs_ppzksnark_primary_input<libsnark::bn128_pp> primary_input;
libsnark::r1cs_ppzksnark_auxiliary_input<libsnark::bn128_pp> aux_input;
libsnark::r1cs_ppzksnark_primary_input<libsnark::default_r1cs_ppzksnark_pp> primary_input;
libsnark::r1cs_ppzksnark_auxiliary_input<libsnark::default_r1cs_ppzksnark_pp> aux_input;

for (int i = 0; i < p.n_inputs; i++) {
FieldT currentVar(prover.input[i]);
Expand All @@ -86,8 +82,8 @@ int main (int argc, char* argv[]) {
aux_input.push_back(currentVar);
}

libsnark::start_profiling();
libsnark::r1cs_ppzksnark_proof<libsnark::bn128_pp> proof = libsnark::r1cs_ppzksnark_prover<libsnark::bn128_pp>(keypair.pk, primary_input, aux_input);
libff::start_profiling();
libsnark::r1cs_ppzksnark_proof<libsnark::default_r1cs_ppzksnark_pp> proof = libsnark::r1cs_ppzksnark_prover<libsnark::default_r1cs_ppzksnark_pp>(keypair.pk, primary_input, aux_input);

std::ofstream proof_file(proof_fn);
proof_file << proof;
Expand Down
24 changes: 10 additions & 14 deletions pepper/pepper_verifier.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,8 @@
#include <common/utility.h>

#include <libsnark/relations/constraint_satisfaction_problems/r1cs/r1cs.hpp>
#include <libsnark/common/default_types/ec_pp.hpp>
#include <libsnark/common/default_types/r1cs_ppzksnark_pp.hpp>
#include <libsnark/zk_proof_systems/ppzksnark/r1cs_ppzksnark/r1cs_ppzksnark.hpp>
#include <libsnark/algebra/fields/fp.hpp>
#include <libsnark/algebra/curves/public_params.hpp>
#include <libsnark/algebra/curves/bn128/bn128_pp.hpp>
#include <libsnark/common/profiling.hpp>

#include <common/utility.h>
#include <gen/input_gen.h>
Expand All @@ -37,7 +33,7 @@ void run_setup(int num_constraints, int num_inputs,
std::ifstream Bmat("./bin/" + std::string(NAME) + ".qap.matrix_b");
std::ifstream Cmat("./bin/" + std::string(NAME) + ".qap.matrix_c");

libsnark::bn128_pp::init_public_params();
libsnark::default_r1cs_ppzksnark_pp::init_public_params();
libsnark::r1cs_constraint_system<FieldT> q;

int Ai, Aj, Bi, Bj, Ci, Cj;
Expand Down Expand Up @@ -156,9 +152,9 @@ void run_setup(int num_constraints, int num_inputs,
Bmat.close();
Cmat.close();

libsnark::start_profiling();
libsnark::r1cs_ppzksnark_keypair<libsnark::bn128_pp> keypair = libsnark::r1cs_ppzksnark_generator<libsnark::bn128_pp>(q);
libsnark::r1cs_ppzksnark_processed_verification_key<libsnark::bn128_pp> pvk = libsnark::r1cs_ppzksnark_verifier_process_vk<libsnark::bn128_pp>(keypair.vk);
libff::start_profiling();
libsnark::r1cs_ppzksnark_keypair<libsnark::default_r1cs_ppzksnark_pp> keypair = libsnark::r1cs_ppzksnark_generator<libsnark::default_r1cs_ppzksnark_pp>(q);
libsnark::r1cs_ppzksnark_processed_verification_key<libsnark::default_r1cs_ppzksnark_pp> pvk = libsnark::r1cs_ppzksnark_verifier_process_vk<libsnark::default_r1cs_ppzksnark_pp>(keypair.vk);


std::ofstream vkey(vkey_file);
Expand All @@ -173,10 +169,10 @@ void run_setup(int num_constraints, int num_inputs,
void verify (string verification_key_fn, string inputs_fn, string outputs_fn,
string proof_fn, int num_inputs, int num_outputs, mpz_t prime) {

libsnark::bn128_pp::init_public_params();
libsnark::default_r1cs_ppzksnark_pp::init_public_params();

libsnark::r1cs_variable_assignment<FieldT> inputvec;
libsnark::r1cs_ppzksnark_proof<libsnark::bn128_pp> proof;
libsnark::r1cs_ppzksnark_proof<libsnark::default_r1cs_ppzksnark_pp> proof;

std::cout << "loading proof from file: " << proof_fn << std::endl;
std::ifstream proof_file(proof_fn);
Expand Down Expand Up @@ -217,13 +213,13 @@ void verify (string verification_key_fn, string inputs_fn, string outputs_fn,

cout << "loading vk from file: " << verification_key_fn << std::endl;
std::ifstream vkey(verification_key_fn);
libsnark::r1cs_ppzksnark_processed_verification_key<libsnark::bn128_pp> pvk;
libsnark::r1cs_ppzksnark_processed_verification_key<libsnark::default_r1cs_ppzksnark_pp> pvk;
vkey >> pvk;
vkey.close();

cout << "verifying..." << std::endl;
libsnark::start_profiling();
bool result = libsnark::r1cs_ppzksnark_online_verifier_strong_IC<libsnark::bn128_pp>(pvk, inputvec, proof);
libff::start_profiling();
bool result = libsnark::r1cs_ppzksnark_online_verifier_strong_IC<libsnark::default_r1cs_ppzksnark_pp>(pvk, inputvec, proof);

if (result) {
cout << "VERIFICATION SUCCESSFUL" << std::endl;
Expand Down
10 changes: 7 additions & 3 deletions thirdparty/install_pepper_deps.sh
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,12 @@ cd $UP
#libsnark
echo "installing libsnark"
[ ! -d libsnark ] && git clone https://github.com/scipr-lab/libsnark.git
cp libsnark_compilerflag.patch libsnark
cd libsnark
git checkout 746ade7ce0f30a6f6e612e50450294c8e7ade9a4
./prepare-depends.sh
make install STATIC=1 NO_PROCPS=1 PREFIX=$DEPS_DIR
git checkout dc78fdae02b437bb6c838a82f9261c49bbd7723e
git submodule init && git submodule update
git apply libsnark_compilerflag.patch
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=$DEPS_DIR -DWITH_PROCPS=OFF ..
DESTDIR=$DEPS_DIR make install
cd $UP
13 changes: 13 additions & 0 deletions thirdparty/libsnark_compilerflag.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0da050f..a4c2803 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -105,7 +105,7 @@ if(CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
# Common compilation flags and warning configuration
set(
CMAKE_CXX_FLAGS
- "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -Wfatal-errors"
+ "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -Wfatal-errors -fPIC"
)
if("${MULTICORE}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")

0 comments on commit 2b172e3

Please sign in to comment.