diff --git a/zcutil/extra/zcash-win32.patch b/zcutil/extra/zcash-win32.patch deleted file mode 100644 index 3b98aeca802..00000000000 --- a/zcutil/extra/zcash-win32.patch +++ /dev/null @@ -1,3581 +0,0 @@ -diff --git a/configure.ac b/configure.ac -index 96382acd76..b4ee705513 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -483,8 +483,9 @@ if test x$use_hardening != xno; then - HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2" - ],[AC_MSG_ERROR(Cannot enable -D_FORTIFY_SOURCE=2)]) - -- if test x$BUILD_OS = xdarwin; then -+ if test x$BUILD_OS = xdarwin || test x$TARGET_OS = xwindows; then - # Xcode's ld (at least ld64-302.3) doesn't support -z -+ # mingw-w64's ld (at least mingw-w64 4.0.4-2) also appears to not support -z - AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"],[AC_MSG_WARN(Cannot enable RELRO)]) - AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"],[AC_MSG_WARN(Cannot enable BIND_NOW)]) - else -@@ -732,7 +733,14 @@ AC_CHECK_LIB([gmp],[[__gmpn_sub_n]],GMP_LIBS=-lgmp, [AC_MSG_ERROR(libgmp missing - AC_CHECK_HEADER([gmpxx.h],,AC_MSG_ERROR(libgmpxx headers missing)) - AC_CHECK_LIB([gmpxx],[main],GMPXX_LIBS=-lgmpxx, [AC_MSG_ERROR(libgmpxx missing)]) - --RUST_LIBS="-lrustzcash -ldl" -+RUST_LIBS="-lrustzcash" -+case $host in -+ *mingw*) -+ ;; -+ *) -+ RUST_LIBS="$RUST_LIBS -ldl" -+ ;; -+esac - - dnl Check for OpenMP support - AX_OPENMP( -diff --git a/depends/hosts/darwin.mk b/depends/hosts/darwin.mk -index 4e58bec74e..939988197a 100644 ---- a/depends/hosts/darwin.mk -+++ b/depends/hosts/darwin.mk -@@ -8,7 +8,7 @@ darwin_CXX=clang++ -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sys - darwin_CFLAGS=-pipe - darwin_CXXFLAGS=$(darwin_CFLAGS) - --darwin_release_CFLAGS=-O2 -+darwin_release_CFLAGS=-O1 - darwin_release_CXXFLAGS=$(darwin_release_CFLAGS) - - darwin_debug_CFLAGS=-O1 -diff --git a/depends/hosts/mingw32.mk b/depends/hosts/mingw32.mk -index dbfb62fdcf..2248973a10 100644 ---- a/depends/hosts/mingw32.mk -+++ b/depends/hosts/mingw32.mk -@@ -1,7 +1,7 @@ - mingw32_CFLAGS=-pipe - mingw32_CXXFLAGS=$(mingw32_CFLAGS) - --mingw32_release_CFLAGS=-O2 -+mingw32_release_CFLAGS=-O1 - mingw32_release_CXXFLAGS=$(mingw32_release_CFLAGS) - - mingw32_debug_CFLAGS=-O1 -diff --git a/depends/packages/bdb.mk b/depends/packages/bdb.mk -index bbb07889ed..6b385f2ab5 100644 ---- a/depends/packages/bdb.mk -+++ b/depends/packages/bdb.mk -@@ -13,6 +13,7 @@ $(package)_cxxflags=-std=c++11 - endef - - define $(package)_preprocess_cmds -+ sed -i.old 's/WinIoCtl.h/winioctl.h/g' src/dbinc/win_db.h && \ - sed -i.old 's/__atomic_compare_exchange\\(/__atomic_compare_exchange_db(/' src/dbinc/atomic.h && \ - sed -i.old 's/atomic_init/atomic_init_db/' src/dbinc/atomic.h src/mp/mp_region.c src/mp/mp_mvcc.c src/mp/mp_fget.c src/mutex/mut_method.c src/mutex/mut_tas.c - endef -diff --git a/depends/packages/googletest.mk b/depends/packages/googletest.mk -index b10ce89ebf..ad42d5b9c4 100644 ---- a/depends/packages/googletest.mk -+++ b/depends/packages/googletest.mk -@@ -5,9 +5,14 @@ $(package)_file_name=$(package)-$($(package)_version).tar.gz - $(package)_download_file=release-$($(package)_version).tar.gz - $(package)_sha256_hash=58a6f4277ca2bc8565222b3bbd58a177609e9c488e8a72649359ba51450db7d8 - -+define $(package)_set_vars -+$(package)_cxxflags+=-std=c++11 -+$(package)_cxxflags_linux=-fPIC -+endef -+ - define $(package)_build_cmds -- $(MAKE) -C googlemock/make CXXFLAGS=-fPIC gmock.a && \ -- $(MAKE) -C googletest/make CXXFLAGS=-fPIC gtest.a -+ $(MAKE) -C googlemock/make CC="$($(package)_cc)" CXX="$($(package)_cxx)" AR="$($(package)_ar)" CXXFLAGS="$($(package)_cxxflags)" gmock.a && \ -+ $(MAKE) -C googletest/make CC="$($(package)_cc)" CXX="$($(package)_cxx)" AR="$($(package)_ar)" CXXFLAGS="$($(package)_cxxflags)" gtest.a - endef - - define $(package)_stage_cmds -diff --git a/depends/packages/librustzcash.mk b/depends/packages/librustzcash.mk -index 46cf909f19..7283787323 100644 ---- a/depends/packages/librustzcash.mk -+++ b/depends/packages/librustzcash.mk -@@ -8,18 +8,29 @@ $(package)_git_commit=f5d2afb4eabac29b1b1cc860d66e45a5b48b4f88 - $(package)_dependencies=rust $(rust_crates) - $(package)_patches=cargo.config - -+ifeq ($(host_os),mingw32) -+$(package)_library_file=target/x86_64-pc-windows-gnu/release/rustzcash.lib -+else -+$(package)_library_file=target/release/librustzcash.a -+endif -+ -+define $(package)_set_vars -+$(package)_build_opts=--frozen --release -+$(package)_build_opts_mingw32=--target=x86_64-pc-windows-gnu -+endef -+ - define $(package)_preprocess_cmds - mkdir .cargo && \ - cat $($(package)_patch_dir)/cargo.config | sed 's|CRATE_REGISTRY|$(host_prefix)/$(CRATE_REGISTRY)|' > .cargo/config - endef - - define $(package)_build_cmds -- cargo build --frozen --release -+ cargo build $($(package)_build_opts) - endef - - define $(package)_stage_cmds - mkdir $($(package)_staging_dir)$(host_prefix)/lib/ && \ - mkdir $($(package)_staging_dir)$(host_prefix)/include/ && \ -- cp target/release/librustzcash.a $($(package)_staging_dir)$(host_prefix)/lib/ && \ -+ cp $($(package)_library_file) $($(package)_staging_dir)$(host_prefix)/lib/ && \ - cp include/librustzcash.h $($(package)_staging_dir)$(host_prefix)/include/ - endef -diff --git a/depends/packages/rust.mk b/depends/packages/rust.mk -index 9340a6a8d9..7c2e313ab0 100644 ---- a/depends/packages/rust.mk -+++ b/depends/packages/rust.mk -@@ -5,10 +5,36 @@ $(package)_file_name_linux=rust-$($(package)_version)-x86_64-unknown-linux-gnu.t - $(package)_sha256_hash_linux=2a1390340db1d24a9498036884e6b2748e9b4b057fc5219694e298bdaa37b810 - $(package)_file_name_darwin=rust-$($(package)_version)-x86_64-apple-darwin.tar.gz - $(package)_sha256_hash_darwin=5d7a70ed4701fe9410041c1eea025c95cad97e5b3d8acc46426f9ac4f9f02393 --$(package)_file_name_mingw32=rust-mingw-$($(package)_version)-x86_64-pc-windows-gnu.tar.gz --$(package)_sha256_hash_mingw32=17effb289f53af43c36be48635364db7eed68c5a411410216eb75a57c39219e3 -+$(package)_file_name_mingw32=rust-$($(package)_version)-x86_64-pc-windows-gnu.tar.gz -+$(package)_sha256_hash_mingw32=55c07426f791c51c8a2b6934b35784175c4abb4e03f123f3e847109c4dc1ad8b - -+ifeq ($(host_os),mingw32) -+$(package)_build_subdir=buildos -+$(package)_extra_sources = $($(package)_file_name_$(build_os)) -+ -+define $(package)_fetch_cmds -+$(call fetch_file,$(package),$($(package)_download_path),$($(package)_download_file),$($(package)_file_name),$($(package)_sha256_hash)) && \ -+$(call fetch_file,$(package),$($(package)_download_path),$($(package)_file_name_$(build_os)),$($(package)_file_name_$(build_os)),$($(package)_sha256_hash_$(build_os))) -+endef -+ -+define $(package)_extract_cmds -+ mkdir -p $($(package)_extract_dir) && \ -+ echo "$($(package)_sha256_hash) $($(package)_source)" > $($(package)_extract_dir)/.$($(package)_file_name).hash && \ -+ echo "$($(package)_sha256_hash_$(build_os)) $($(package)_source_dir)/$($(package)_file_name_$(build_os))" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ -+ $(build_SHA256SUM) -c $($(package)_extract_dir)/.$($(package)_file_name).hash && \ -+ mkdir mingw32 && \ -+ tar --strip-components=1 -xf $($(package)_source) -C mingw32 && \ -+ mkdir buildos && \ -+ tar --strip-components=1 -xf $($(package)_source_dir)/$($(package)_file_name_$(build_os)) -C buildos -+endef -+ -+define $(package)_stage_cmds -+ ./install.sh --destdir=$($(package)_staging_dir) --prefix=$(host_prefix)/native --disable-ldconfig && \ -+ cp -r ../mingw32/rust-std-x86_64-pc-windows-gnu/lib/rustlib/x86_64-pc-windows-gnu $($(package)_staging_dir)$(host_prefix)/native/lib/rustlib -+endef -+else - - define $(package)_stage_cmds - ./install.sh --destdir=$($(package)_staging_dir) --prefix=$(host_prefix)/native --disable-ldconfig - endef -+endif -diff --git a/depends/patches/librustzcash/cargo.config b/depends/patches/librustzcash/cargo.config -index 7696632a13..a54c9a4a8d 100644 ---- a/depends/patches/librustzcash/cargo.config -+++ b/depends/patches/librustzcash/cargo.config -@@ -13,3 +13,6 @@ replace-with = "vendored-sources" - - [source.vendored-sources] - directory = "CRATE_REGISTRY" -+ -+[target.x86_64-pc-windows-gnu] -+linker = "x86_64-w64-mingw32-gcc" -diff --git a/src/Makefile.am b/src/Makefile.am -index e3a4b60a0f..4af45a0cd5 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -54,7 +54,7 @@ endif - $(LIBSECP256K1): $(wildcard secp256k1/src/*) $(wildcard secp256k1/include/*) - $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C $(@D) $(@F) - --LIBSNARK_CXXFLAGS = -fPIC -DBINARY_OUTPUT -DNO_PT_COMPRESSION=1 -fstack-protector-all -+LIBSNARK_CXXFLAGS = $(AM_CXXFLAGS) $(PIC_FLAGS) -DBINARY_OUTPUT -DNO_PT_COMPRESSION=1 -fstack-protector-all - LIBSNARK_CONFIG_FLAGS = CURVE=ALT_BN128 NO_PROCPS=1 NO_DOCS=1 STATIC=1 NO_SUPERCOP=1 FEATUREFLAGS=-DMONTGOMERY_OUTPUT NO_COPY_DEPINST=1 NO_COMPILE_LIBGTEST=1 - if HAVE_OPENMP - LIBSNARK_CONFIG_FLAGS += MULTICORE=1 -@@ -64,10 +64,10 @@ LIBSNARK_CONFIG_FLAGS += PLATFORM=darwin - endif - - $(LIBSNARK): $(wildcard snark/src/*) -- $(AM_V_at) CXXFLAGS="$(LIBSNARK_CXXFLAGS)" $(MAKE) $(AM_MAKEFLAGS) -C snark/ DEPINST="$(LIBSNARK_DEPINST)" $(LIBSNARK_CONFIG_FLAGS) OPTFLAGS="-O2 -march=x86-64" -+ $(AM_V_at) CC="$(CC)" CXX="$(CXX)" AR="$(AR)" CXXFLAGS="$(LIBSNARK_CXXFLAGS)" $(MAKE) $(AM_MAKEFLAGS) -C snark/ DEPINST="$(LIBSNARK_DEPINST)" $(LIBSNARK_CONFIG_FLAGS) OPTFLAGS="-O2 -march=x86-64" - - libsnark-tests: $(wildcard snark/src/*) -- $(AM_V_at) CXXFLAGS="$(LIBSNARK_CXXFLAGS)" $(MAKE) $(AM_MAKEFLAGS) -C snark/ check DEPINST="$(LIBSNARK_DEPINST)" $(LIBSNARK_CONFIG_FLAGS) OPTFLAGS="-O2 -march=x86-64" -+ $(AM_V_at) CC="$(CC)" CXX="$(CXX)" AR="$(AR)" CXXFLAGS="$(LIBSNARK_CXXFLAGS)" $(MAKE) $(AM_MAKEFLAGS) -C snark/ check DEPINST="$(LIBSNARK_DEPINST)" $(LIBSNARK_CONFIG_FLAGS) OPTFLAGS="-O2 -march=x86-64" - - $(LIBUNIVALUE): $(wildcard univalue/lib/*) $(wildcard univalue/include/*) - $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C $(@D) $(@F) -@@ -527,11 +527,9 @@ libzcash_a_SOURCES = \ - zcash/circuit/prfs.tcc \ - zcash/circuit/utils.tcc - --libzcash_a_CPPFLAGS = -fPIC -DBINARY_OUTPUT -DCURVE_ALT_BN128 -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS $(HARDENED_CPPFLAGS) $(HARDENED_CXXFLAGS) $(HARDENED_LDFLAGS) -pipe $(SAN_LDFLAGS) -O1 -g -Wstack-protector $(SAN_CXXFLAGS) -fstack-protector-all -fPIE -fvisibility=hidden -DSTATIC $(BITCOIN_INCLUDES) -- --libzcash_a_CXXFLAGS = $(SAN_CXXFLAGS) $(HARDENED_CXXFLAGS) -fwrapv -fno-strict-aliasing -- --libzcash_a_LDFLAGS = $(SAN_LDFLAGS) $(HARDENED_LDFLAGS) -+libzcash_a_CPPFLAGS = $(AM_CPPFLAGS) $(PIC_FLAGS) -DBINARY_OUTPUT -DCURVE_ALT_BN128 -DBOOST_SPIRIT_THREADSAFE -fvisibility=hidden -DSTATIC $(BITCOIN_INCLUDES) -+libzcash_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -+libzcash_a_LDFLAGS = $(AM_LDFLAGS) - - libzcash_a_CPPFLAGS += -DMONTGOMERY_OUTPUT - -diff --git a/src/gtest/test_merkletree.cpp b/src/gtest/test_merkletree.cpp -index 67b08030fb..23c39c0446 100644 ---- a/src/gtest/test_merkletree.cpp -+++ b/src/gtest/test_merkletree.cpp -@@ -143,7 +143,7 @@ void test_tree( - size_t path_index = convertVectorToInt(path.index); - - commitment.bits.fill_with_bits(pb, bit_vector(commitment_bv)); -- positions.fill_with_bits_of_ulong(pb, path_index); -+ positions.fill_with_bits_of_ulong(pb, path_index); - - authvars.generate_r1cs_witness(path_index, path.authentication_path); - auth.generate_r1cs_witness(); -diff --git a/src/gtest/test_paymentdisclosure.cpp b/src/gtest/test_paymentdisclosure.cpp -index ce1322dbbd..c166cdbe1d 100644 ---- a/src/gtest/test_paymentdisclosure.cpp -+++ b/src/gtest/test_paymentdisclosure.cpp -@@ -99,7 +99,7 @@ TEST(paymentdisclosure, mainnet) { - boost::filesystem::create_directories(pathTemp); - mapArgs["-datadir"] = pathTemp.string(); - -- std::cout << "Test payment disclosure database created in folder: " << pathTemp.native() << std::endl; -+ std::cout << "Test payment disclosure database created in folder: " << pathTemp.string() << std::endl; - - PaymentDisclosureDBTest mydb(pathTemp); - -diff --git a/src/metrics.cpp b/src/metrics.cpp -index 23f005a3e5..5887048adc 100644 ---- a/src/metrics.cpp -+++ b/src/metrics.cpp -@@ -16,7 +16,11 @@ - #include - #include - #include -+#ifdef WIN32 -+#include -+#else - #include -+#endif - #include - - void AtomicTimer::start() -@@ -410,6 +414,30 @@ int printInitMessage() - return 2; - } - -+#ifdef WIN32 -+#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004 -+ -+bool enableVTMode() -+{ -+ // Set output mode to handle virtual terminal sequences -+ HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); -+ if (hOut == INVALID_HANDLE_VALUE) { -+ return false; -+ } -+ -+ DWORD dwMode = 0; -+ if (!GetConsoleMode(hOut, &dwMode)) { -+ return false; -+ } -+ -+ dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; -+ if (!SetConsoleMode(hOut, dwMode)) { -+ return false; -+ } -+ return true; -+} -+#endif -+ - void ThreadShowMetricsScreen() - { - // Make this thread recognisable as the metrics screen thread -@@ -421,6 +449,10 @@ void ThreadShowMetricsScreen() - int64_t nRefresh = GetArg("-metricsrefreshtime", isTTY ? 1 : 600); - - if (isScreen) { -+#ifdef WIN32 -+ enableVTMode(); -+#endif -+ - // Clear screen - std::cout << "\e[2J"; - -@@ -444,11 +476,17 @@ void ThreadShowMetricsScreen() - - // Get current window size - if (isTTY) { -+#ifdef WIN32 -+ CONSOLE_SCREEN_BUFFER_INFO csbi; -+ GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi); -+ cols = csbi.srWindow.Right - csbi.srWindow.Left + 1; -+#else - struct winsize w; - w.ws_col = 0; - if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) != -1 && w.ws_col != 0) { - cols = w.ws_col; - } -+#endif - } - - if (isScreen) { -@@ -473,7 +511,13 @@ void ThreadShowMetricsScreen() - - if (isScreen) { - // Explain how to exit -- std::cout << "[" << _("Press Ctrl+C to exit") << "] [" << _("Set 'showmetrics=0' to hide") << "]" << std::endl; -+ std::cout << "["; -+#ifdef WIN32 -+ std::cout << _("'zcash-cli.exe stop' to exit"); -+#else -+ std::cout << _("Press Ctrl+C to exit"); -+#endif -+ std::cout << "] [" << _("Set 'showmetrics=0' to hide") << "]" << std::endl; - } else { - // Print delineator - std::cout << "----------------------------------------" << std::endl; -diff --git a/src/test/rpc_wallet_tests.cpp b/src/test/rpc_wallet_tests.cpp -index edbcb6552e..119acc0c35 100644 ---- a/src/test/rpc_wallet_tests.cpp -+++ b/src/test/rpc_wallet_tests.cpp -@@ -421,7 +421,7 @@ BOOST_AUTO_TEST_CASE(rpc_wallet_z_exportwallet) - BOOST_CHECK_THROW(CallRPC(string("z_exportwallet ") + tmpfilename.string()), runtime_error); - - // set exportdir -- mapArgs["-exportdir"] = tmppath.native(); -+ mapArgs["-exportdir"] = tmppath.string(); - - // run some tests - BOOST_CHECK_THROW(CallRPC("z_exportwallet"), runtime_error); -@@ -501,7 +501,7 @@ BOOST_AUTO_TEST_CASE(rpc_wallet_z_importwallet) - // write test data to file - boost::filesystem::path temp = boost::filesystem::temp_directory_path() / - boost::filesystem::unique_path(); -- const std::string path = temp.native(); -+ const std::string path = temp.string(); - std::ofstream file(path); - file << testWalletDump; - file << std::flush; -diff --git a/src/zcash/circuit/merkle.tcc b/src/zcash/circuit/merkle.tcc -index ca89adbedf..09f02ae9f2 100644 ---- a/src/zcash/circuit/merkle.tcc -+++ b/src/zcash/circuit/merkle.tcc -@@ -52,7 +52,7 @@ public: - // number thing in its API. - size_t path_index = convertVectorToInt(path.index); - -- positions.fill_with_bits_of_ulong(this->pb, path_index); -+ positions.fill_with_bits_of_ulong(this->pb, path_index); - - authvars->generate_r1cs_witness(path_index, path.authentication_path); - auth->generate_r1cs_witness(); -diff --git a/zcutil/build.sh b/zcutil/build.sh -index f10d68d741..c3bea9ea99 100755 ---- a/zcutil/build.sh -+++ b/zcutil/build.sh -@@ -33,14 +33,6 @@ if [[ -z "${HOST-}" ]]; then - HOST="$BUILD" - fi - --# Allow override to $CC and $CXX for porters. Most users will not need it. --if [[ -z "${CC-}" ]]; then -- CC=gcc --fi --if [[ -z "${CXX-}" ]]; then -- CXX=g++ --fi -- - # Allow users to set arbitrary compile flags. Most users will not need this. - if [[ -z "${CONFIGURE_FLAGS-}" ]]; then - CONFIGURE_FLAGS="" -@@ -105,15 +97,11 @@ then - shift - fi - --PREFIX="$(pwd)/depends/$BUILD/" -- - eval "$MAKE" --version --eval "$CC" --version --eval "$CXX" --version - as --version - ld -v - - HOST="$HOST" BUILD="$BUILD" NO_PROTON="$PROTON_ARG" "$MAKE" "$@" -C ./depends/ V=1 - ./autogen.sh --CC="$CC" CXX="$CXX" ./configure --prefix="${PREFIX}" --host="$HOST" --build="$BUILD" "$HARDENING_ARG" "$LCOV_ARG" "$TEST_ARG" "$MINING_ARG" "$PROTON_ARG" $CONFIGURE_FLAGS --enable-werror CXXFLAGS='-g' -+CONFIG_SITE="$PWD/depends/$HOST/share/config.site" ./configure "$HARDENING_ARG" "$LCOV_ARG" "$TEST_ARG" "$MINING_ARG" "$PROTON_ARG" $CONFIGURE_FLAGS CXXFLAGS='-g' - "$MAKE" "$@" V=1 -diff --git a/src/snark/Makefile b/src/snark/Makefile -index cceffb9..ac86490 100644 ---- a/src/snark/Makefile -+++ b/src/snark/Makefile -@@ -6,6 +6,13 @@ - #* @copyright MIT license (see LICENSE file) - #*******************************************************************************/ - -+# Determine building operating system -+ifeq ($(OS),Windows_NT) -+ uname_S := Windows -+else -+ uname_S := $(shell uname -s) -+endif -+ - # To override these, use "make OPTFLAGS=..." etc. - CURVE = BN128 - OPTFLAGS = -O2 -march=native -mtune=native -@@ -106,18 +113,9 @@ - EXECUTABLES_WITH_SUPERCOP = \ - libsnark/zk_proof_systems/ppzkadsnark/r1cs_ppzkadsnark/examples/demo_r1cs_ppzkadsnark - --GTEST_TESTS = libsnark/gtests -+GTEST_TESTS = - --GTEST_SRCS = \ -- libsnark/algebra/curves/tests/test_bilinearity.cpp \ -- libsnark/algebra/curves/tests/test_groups.cpp \ -- libsnark/algebra/fields/tests/test_bigint.cpp \ -- libsnark/algebra/fields/tests/test_fields.cpp \ -- libsnark/gadgetlib1/gadgets/hashes/sha256/tests/test_sha256_gadget.cpp \ -- libsnark/gadgetlib1/gadgets/merkle_tree/tests/test_merkle_tree_gadgets.cpp \ -- libsnark/relations/arithmetic_programs/qap/tests/test_qap.cpp \ -- libsnark/zk_proof_systems/ppzksnark/r1cs_ppzksnark/tests/test_r1cs_ppzksnark.cpp \ -- libsnark/gtests.cpp -+GTEST_SRCS = - - DOCS = README.html - -@@ -175,6 +173,7 @@ - $(if $(NO_GTEST),,$(EXECUTABLES_WITH_GTEST) $(GTEST_TESTS)) \ - $(if $(NO_SUPERCOP),,$(EXECUTABLES_WITH_SUPERCOP)) \ - $(EXECUTABLES) \ -+ $(LIBSNARK_A) \ - $(if $(NO_DOCS),,doc) - - doc: $(DOCS) -diff --git a/src/snark/libsnark/algebra/curves/alt_bn128/alt_bn128_g1.cpp b/src/snark/libsnark/algebra/curves/alt_bn128/alt_bn128_g1.cpp -index bf7f43d..7f329d6 100644 ---- a/src/snark/libsnark/algebra/curves/alt_bn128/alt_bn128_g1.cpp -+++ b/src/snark/libsnark/algebra/curves/alt_bn128/alt_bn128_g1.cpp -@@ -6,16 +6,17 @@ - *****************************************************************************/ - - #include "algebra/curves/alt_bn128/alt_bn128_g1.hpp" -+#include "common/assert_except.hpp" - - namespace libsnark { - - #ifdef PROFILE_OP_COUNTS --long long alt_bn128_G1::add_cnt = 0; --long long alt_bn128_G1::dbl_cnt = 0; -+int64_t alt_bn128_G1::add_cnt = 0; -+int64_t alt_bn128_G1::dbl_cnt = 0; - #endif - --std::vector alt_bn128_G1::wnaf_window_table; --std::vector alt_bn128_G1::fixed_base_exp_window_table; -+std::vector alt_bn128_G1::wnaf_window_table; -+std::vector alt_bn128_G1::fixed_base_exp_window_table; - alt_bn128_G1 alt_bn128_G1::G1_zero; - alt_bn128_G1 alt_bn128_G1::G1_one; - -@@ -256,7 +257,7 @@ alt_bn128_G1 alt_bn128_G1::add(const alt_bn128_G1 &other) const - alt_bn128_G1 alt_bn128_G1::mixed_add(const alt_bn128_G1 &other) const - { - #ifdef DEBUG -- assert(other.is_special()); -+ assert_except(other.is_special()); - #endif - - // handle special cases having to do with O -diff --git a/src/snark/libsnark/algebra/curves/alt_bn128/alt_bn128_g1.hpp b/src/snark/libsnark/algebra/curves/alt_bn128/alt_bn128_g1.hpp -index da11a2e..567f2fa 100644 ---- a/src/snark/libsnark/algebra/curves/alt_bn128/alt_bn128_g1.hpp -+++ b/src/snark/libsnark/algebra/curves/alt_bn128/alt_bn128_g1.hpp -@@ -20,11 +20,11 @@ std::istream& operator>>(std::istream &, alt_bn128_G1&); - class alt_bn128_G1 { - public: - #ifdef PROFILE_OP_COUNTS -- static long long add_cnt; -- static long long dbl_cnt; -+ static int64_t add_cnt; -+ static int64_t dbl_cnt; - #endif -- static std::vector wnaf_window_table; -- static std::vector fixed_base_exp_window_table; -+ static std::vector wnaf_window_table; -+ static std::vector fixed_base_exp_window_table; - static alt_bn128_G1 G1_zero; - static alt_bn128_G1 G1_one; - -diff --git a/src/snark/libsnark/algebra/curves/alt_bn128/alt_bn128_g2.cpp b/src/snark/libsnark/algebra/curves/alt_bn128/alt_bn128_g2.cpp -index c4152e4..98f4710 100644 ---- a/src/snark/libsnark/algebra/curves/alt_bn128/alt_bn128_g2.cpp -+++ b/src/snark/libsnark/algebra/curves/alt_bn128/alt_bn128_g2.cpp -@@ -6,16 +6,17 @@ - *****************************************************************************/ - - #include "algebra/curves/alt_bn128/alt_bn128_g2.hpp" -+#include "common/assert_except.hpp" - - namespace libsnark { - - #ifdef PROFILE_OP_COUNTS --long long alt_bn128_G2::add_cnt = 0; --long long alt_bn128_G2::dbl_cnt = 0; -+int64_t alt_bn128_G2::add_cnt = 0; -+int64_t alt_bn128_G2::dbl_cnt = 0; - #endif - --std::vector alt_bn128_G2::wnaf_window_table; --std::vector alt_bn128_G2::fixed_base_exp_window_table; -+std::vector alt_bn128_G2::wnaf_window_table; -+std::vector alt_bn128_G2::fixed_base_exp_window_table; - alt_bn128_G2 alt_bn128_G2::G2_zero; - alt_bn128_G2 alt_bn128_G2::G2_one; - -@@ -266,7 +267,7 @@ alt_bn128_G2 alt_bn128_G2::add(const alt_bn128_G2 &other) const - alt_bn128_G2 alt_bn128_G2::mixed_add(const alt_bn128_G2 &other) const - { - #ifdef DEBUG -- assert(other.is_special()); -+ assert_except(other.is_special()); - #endif - - // handle special cases having to do with O -diff --git a/src/snark/libsnark/algebra/curves/alt_bn128/alt_bn128_g2.hpp b/src/snark/libsnark/algebra/curves/alt_bn128/alt_bn128_g2.hpp -index a996a2d..57bad1a 100644 ---- a/src/snark/libsnark/algebra/curves/alt_bn128/alt_bn128_g2.hpp -+++ b/src/snark/libsnark/algebra/curves/alt_bn128/alt_bn128_g2.hpp -@@ -20,11 +20,11 @@ std::istream& operator>>(std::istream &, alt_bn128_G2&); - class alt_bn128_G2 { - public: - #ifdef PROFILE_OP_COUNTS -- static long long add_cnt; -- static long long dbl_cnt; -+ static int64_t add_cnt; -+ static int64_t dbl_cnt; - #endif -- static std::vector wnaf_window_table; -- static std::vector fixed_base_exp_window_table; -+ static std::vector wnaf_window_table; -+ static std::vector fixed_base_exp_window_table; - static alt_bn128_G2 G2_zero; - static alt_bn128_G2 G2_one; - -diff --git a/src/snark/libsnark/algebra/curves/alt_bn128/alt_bn128_pairing.cpp b/src/snark/libsnark/algebra/curves/alt_bn128/alt_bn128_pairing.cpp -index db556c5..07b6a8c 100644 ---- a/src/snark/libsnark/algebra/curves/alt_bn128/alt_bn128_pairing.cpp -+++ b/src/snark/libsnark/algebra/curves/alt_bn128/alt_bn128_pairing.cpp -@@ -324,7 +324,7 @@ alt_bn128_ate_G2_precomp alt_bn128_ate_precompute_G2(const alt_bn128_G2& Q) - bool found_one = false; - alt_bn128_ate_ell_coeffs c; - -- for (long i = loop_count.max_bits(); i >= 0; --i) -+ for (int64_t i = loop_count.max_bits(); i >= 0; --i) - { - const bool bit = loop_count.test_bit(i); - if (!found_one) -@@ -378,7 +378,7 @@ alt_bn128_Fq12 alt_bn128_ate_miller_loop(const alt_bn128_ate_G1_precomp &prec_P, - const bigint &loop_count = alt_bn128_ate_loop_count; - alt_bn128_ate_ell_coeffs c; - -- for (long i = loop_count.max_bits(); i >= 0; --i) -+ for (int64_t i = loop_count.max_bits(); i >= 0; --i) - { - const bool bit = loop_count.test_bit(i); - if (!found_one) -@@ -432,7 +432,7 @@ alt_bn128_Fq12 alt_bn128_ate_double_miller_loop(const alt_bn128_ate_G1_precomp & - size_t idx = 0; - - const bigint &loop_count = alt_bn128_ate_loop_count; -- for (long i = loop_count.max_bits(); i >= 0; --i) -+ for (int64_t i = loop_count.max_bits(); i >= 0; --i) - { - const bool bit = loop_count.test_bit(i); - if (!found_one) -diff --git a/src/snark/libsnark/algebra/curves/curve_utils.tcc b/src/snark/libsnark/algebra/curves/curve_utils.tcc -index 251d75d..38140cd 100644 ---- a/src/snark/libsnark/algebra/curves/curve_utils.tcc -+++ b/src/snark/libsnark/algebra/curves/curve_utils.tcc -@@ -16,7 +16,7 @@ GroupT scalar_mul(const GroupT &base, const bigint &scalar) - GroupT result = GroupT::zero(); - - bool found_one = false; -- for (long i = scalar.max_bits() - 1; i >= 0; --i) -+ for (int64_t i = scalar.max_bits() - 1; i >= 0; --i) - { - if (found_one) - { -diff --git a/src/snark/libsnark/algebra/curves/tests/test_bilinearity.cpp b/src/snark/libsnark/algebra/curves/tests/test_bilinearity.cpp -index fe6593b..18e68f7 100644 ---- a/src/snark/libsnark/algebra/curves/tests/test_bilinearity.cpp -+++ b/src/snark/libsnark/algebra/curves/tests/test_bilinearity.cpp -@@ -4,13 +4,17 @@ - * and contributors (see AUTHORS). - * @copyright MIT license (see LICENSE file) - *****************************************************************************/ -+#include - #include "common/profiling.hpp" -+//#include "algebra/curves/edwards/edwards_pp.hpp" - #ifdef CURVE_BN128 - #include "algebra/curves/bn128/bn128_pp.hpp" - #endif - #include "algebra/curves/alt_bn128/alt_bn128_pp.hpp" -- --#include -+//#include "algebra/curves/mnt/mnt4/mnt4_pp.hpp" -+//#include "algebra/curves/mnt/mnt6/mnt6_pp.hpp" -+#include "algebra/curves/alt_bn128/alt_bn128_pairing.hpp" -+#include "algebra/curves/alt_bn128/alt_bn128_pairing.cpp" - - using namespace libsnark; - -@@ -45,11 +49,11 @@ void pairing_test() - ans1.print(); - ans2.print(); - ans3.print(); -- EXPECT_EQ(ans1, ans2); -- EXPECT_EQ(ans2, ans3); -+ assert(ans1 == ans2); -+ assert(ans2 == ans3); - -- EXPECT_NE(ans1, GT_one); -- EXPECT_EQ((ans1^Fr::field_char()), GT_one); -+ assert(ans1 != GT_one); -+ assert((ans1^Fr::field_char()) == GT_one); - printf("\n\n"); - } - -@@ -69,7 +73,7 @@ void double_miller_loop_test() - const Fqk ans_1 = ppT::miller_loop(prec_P1, prec_Q1); - const Fqk ans_2 = ppT::miller_loop(prec_P2, prec_Q2); - const Fqk ans_12 = ppT::double_miller_loop(prec_P1, prec_Q1, prec_P2, prec_Q2); -- EXPECT_EQ(ans_1 * ans_2, ans_12); -+ assert(ans_1 * ans_2 == ans_12); - } - - template -@@ -98,17 +102,31 @@ void affine_pairing_test() - ans1.print(); - ans2.print(); - ans3.print(); -- EXPECT_EQ(ans1, ans2); -- EXPECT_EQ(ans2, ans3); -+ assert(ans1 == ans2); -+ assert(ans2 == ans3); - -- EXPECT_NE(ans1, GT_one); -- EXPECT_EQ((ans1^Fr::field_char()), GT_one); -+ assert(ans1 != GT_one); -+ assert((ans1^Fr::field_char()) == GT_one); - printf("\n\n"); - } - --TEST(algebra, bilinearity) -+int main(void) - { - start_profiling(); -+ edwards_pp::init_public_params(); -+ pairing_test(); -+ double_miller_loop_test(); -+ -+ mnt6_pp::init_public_params(); -+ pairing_test(); -+ double_miller_loop_test(); -+ affine_pairing_test(); -+ -+ mnt4_pp::init_public_params(); -+ pairing_test(); -+ double_miller_loop_test(); -+ affine_pairing_test(); -+ - alt_bn128_pp::init_public_params(); - pairing_test(); - double_miller_loop_test(); -diff --git a/src/snark/libsnark/algebra/curves/tests/test_groups.cpp b/src/snark/libsnark/algebra/curves/tests/test_groups.cpp -index 7bb7c31..4f64334 100644 ---- a/src/snark/libsnark/algebra/curves/tests/test_groups.cpp -+++ b/src/snark/libsnark/algebra/curves/tests/test_groups.cpp -@@ -5,14 +5,15 @@ - * @copyright MIT license (see LICENSE file) - *****************************************************************************/ - #include "common/profiling.hpp" -+//#include "algebra/curves/edwards/edwards_pp.hpp" -+//#include "algebra/curves/mnt/mnt4/mnt4_pp.hpp" -+//#include "algebra/curves/mnt/mnt6/mnt6_pp.hpp" - #ifdef CURVE_BN128 - #include "algebra/curves/bn128/bn128_pp.hpp" - #endif - #include "algebra/curves/alt_bn128/alt_bn128_pp.hpp" - #include - --#include -- - using namespace libsnark; - - template -@@ -24,31 +25,31 @@ void test_mixed_add() - el = GroupT::zero(); - el.to_special(); - result = base.mixed_add(el); -- EXPECT_EQ(result, base + el); -+ assert(result == base + el); - - base = GroupT::zero(); - el = GroupT::random_element(); - el.to_special(); - result = base.mixed_add(el); -- EXPECT_EQ(result, base + el); -+ assert(result == base + el); - - base = GroupT::random_element(); - el = GroupT::zero(); - el.to_special(); - result = base.mixed_add(el); -- EXPECT_EQ(result, base + el); -+ assert(result == base + el); - - base = GroupT::random_element(); - el = GroupT::random_element(); - el.to_special(); - result = base.mixed_add(el); -- EXPECT_EQ(result, base + el); -+ assert(result == base + el); - - base = GroupT::random_element(); - el = base; - el.to_special(); - result = base.mixed_add(el); -- EXPECT_EQ(result, base.dbl()); -+ assert(result == base.dbl()); - } - - template -@@ -59,53 +60,53 @@ void test_group() - bigint<1> randsum = bigint<1>("121160274"); - - GroupT zero = GroupT::zero(); -- EXPECT_EQ(zero, zero); -+ assert(zero == zero); - GroupT one = GroupT::one(); -- EXPECT_EQ(one, one); -+ assert(one == one); - GroupT two = bigint<1>(2l) * GroupT::one(); -- EXPECT_EQ(two, two); -+ assert(two == two); - GroupT five = bigint<1>(5l) * GroupT::one(); - - GroupT three = bigint<1>(3l) * GroupT::one(); - GroupT four = bigint<1>(4l) * GroupT::one(); - -- EXPECT_EQ(two+five, three+four); -+ assert(two+five == three+four); - - GroupT a = GroupT::random_element(); - GroupT b = GroupT::random_element(); - -- EXPECT_NE(one, zero); -- EXPECT_NE(a, zero); -- EXPECT_NE(a, one); -+ assert(one != zero); -+ assert(a != zero); -+ assert(a != one); - -- EXPECT_NE(b, zero); -- EXPECT_NE(b, one); -+ assert(b != zero); -+ assert(b != one); - -- EXPECT_EQ(a.dbl(), a + a); -- EXPECT_EQ(b.dbl(), b + b); -- EXPECT_EQ(one.add(two), three); -- EXPECT_EQ(two.add(one), three); -- EXPECT_EQ(a + b, b + a); -- EXPECT_EQ(a - a, zero); -- EXPECT_EQ(a - b, a + (-b)); -- EXPECT_EQ(a - b, (-b) + a); -+ assert(a.dbl() == a + a); -+ assert(b.dbl() == b + b); -+ assert(one.add(two) == three); -+ assert(two.add(one) == three); -+ assert(a + b == b + a); -+ assert(a - a == zero); -+ assert(a - b == a + (-b)); -+ assert(a - b == (-b) + a); - - // handle special cases -- EXPECT_EQ(zero + (-a), -a); -- EXPECT_EQ(zero - a, -a); -- EXPECT_EQ(a - zero, a); -- EXPECT_EQ(a + zero, a); -- EXPECT_EQ(zero + a, a); -+ assert(zero + (-a) == -a); -+ assert(zero - a == -a); -+ assert(a - zero == a); -+ assert(a + zero == a); -+ assert(zero + a == a); - -- EXPECT_EQ((a + b).dbl(), (a + b) + (b + a)); -- EXPECT_EQ(bigint<1>("2") * (a + b), (a + b) + (b + a)); -+ assert((a + b).dbl() == (a + b) + (b + a)); -+ assert(bigint<1>("2") * (a + b) == (a + b) + (b + a)); - -- EXPECT_EQ((rand1 * a) + (rand2 * a), (randsum * a)); -+ assert((rand1 * a) + (rand2 * a) == (randsum * a)); - -- EXPECT_EQ(GroupT::order() * a, zero); -- EXPECT_EQ(GroupT::order() * one, zero); -- EXPECT_NE((GroupT::order() * a) - a, zero); -- EXPECT_NE((GroupT::order() * one) - one, zero); -+ assert(GroupT::order() * a == zero); -+ assert(GroupT::order() * one == zero); -+ assert((GroupT::order() * a) - a != zero); -+ assert((GroupT::order() * one) - one != zero); - - test_mixed_add(); - } -@@ -114,7 +115,7 @@ template - void test_mul_by_q() - { - GroupT a = GroupT::random_element(); -- EXPECT_EQ((GroupT::base_field_char()*a), a.mul_by_q()); -+ assert((GroupT::base_field_char()*a) == a.mul_by_q()); - } - - template -@@ -128,14 +129,36 @@ void test_output() - ss << g; - GroupT gg; - ss >> gg; -- EXPECT_EQ(g, gg); -+ assert(g == gg); - /* use a random point in next iteration */ - g = GroupT::random_element(); - } - } - --TEST(algebra, groups) -+int main(void) - { -+/* -+ edwards_pp::init_public_params(); -+ test_group >(); -+ test_output >(); -+ test_group >(); -+ test_output >(); -+ test_mul_by_q >(); -+ -+ mnt4_pp::init_public_params(); -+ test_group >(); -+ test_output >(); -+ test_group >(); -+ test_output >(); -+ test_mul_by_q >(); -+ -+ mnt6_pp::init_public_params(); -+ test_group >(); -+ test_output >(); -+ test_group >(); -+ test_output >(); -+ test_mul_by_q >(); -+*/ - alt_bn128_pp::init_public_params(); - test_group >(); - test_output >(); -diff --git a/src/snark/libsnark/algebra/evaluation_domain/domains/basic_radix2_domain.tcc b/src/snark/libsnark/algebra/evaluation_domain/domains/basic_radix2_domain.tcc -index d315e83..16dcd54 100644 ---- a/src/snark/libsnark/algebra/evaluation_domain/domains/basic_radix2_domain.tcc -+++ b/src/snark/libsnark/algebra/evaluation_domain/domains/basic_radix2_domain.tcc -@@ -15,15 +15,16 @@ - #define BASIC_RADIX2_DOMAIN_TCC_ - - #include "algebra/evaluation_domain/domains/basic_radix2_domain_aux.hpp" -+#include "common/assert_except.hpp" - - namespace libsnark { - - template - basic_radix2_domain::basic_radix2_domain(const size_t m) : evaluation_domain(m) - { -- assert(m > 1); -+ assert_except(m > 1); - const size_t logm = log2(m); -- assert(logm <= (FieldT::s)); -+ assert_except(logm <= (FieldT::s)); - - omega = get_root_of_unity(m); - } -@@ -32,7 +33,7 @@ template - void basic_radix2_domain::FFT(std::vector &a) - { - enter_block("Execute FFT"); -- assert(a.size() == this->m); -+ assert_except(a.size() == this->m); - _basic_radix2_FFT(a, omega); - leave_block("Execute FFT"); - } -@@ -41,7 +42,7 @@ template - void basic_radix2_domain::iFFT(std::vector &a) - { - enter_block("Execute inverse FFT"); -- assert(a.size() == this->m); -+ assert_except(a.size() == this->m); - _basic_radix2_FFT(a, omega.inverse()); - - const FieldT sconst = FieldT(a.size()).inverse(); -@@ -91,7 +92,7 @@ FieldT basic_radix2_domain::compute_Z(const FieldT &t) - template - void basic_radix2_domain::add_poly_Z(const FieldT &coeff, std::vector &H) - { -- assert(H.size() == this->m+1); -+ assert_except(H.size() == this->m+1); - H[this->m] += coeff; - H[0] -= coeff; - } -diff --git a/src/snark/libsnark/algebra/evaluation_domain/domains/basic_radix2_domain_aux.tcc b/src/snark/libsnark/algebra/evaluation_domain/domains/basic_radix2_domain_aux.tcc -index 138b82d..f42e424 100644 ---- a/src/snark/libsnark/algebra/evaluation_domain/domains/basic_radix2_domain_aux.tcc -+++ b/src/snark/libsnark/algebra/evaluation_domain/domains/basic_radix2_domain_aux.tcc -@@ -21,6 +21,7 @@ - #include "algebra/fields/field_utils.hpp" - #include "common/profiling.hpp" - #include "common/utils.hpp" -+#include "common/assert_except.hpp" - - namespace libsnark { - -@@ -38,7 +39,7 @@ template - void _basic_serial_radix2_FFT(std::vector &a, const FieldT &omega) - { - const size_t n = a.size(), logn = log2(n); -- assert(n == (1u << logn)); -+ assert_except(n == (1u << logn)); - - /* swapping in place (from Storer's book) */ - for (size_t k = 0; k < n; ++k) -@@ -74,11 +75,11 @@ void _basic_serial_radix2_FFT(std::vector &a, const FieldT &omega) - template - void _basic_parallel_radix2_FFT_inner(std::vector &a, const FieldT &omega, const size_t log_cpus) - { -- const size_t num_cpus = 1ul< &a, const FieldT &omeg - std::vector > tmp(num_cpus); - for (size_t j = 0; j < num_cpus; ++j) - { -- tmp[j].resize(1ul<<(log_m-log_cpus), FieldT::zero()); -+ tmp[j].resize(UINT64_C(1)<<(log_m-log_cpus), FieldT::zero()); - } - - #ifdef MULTICORE -@@ -102,7 +103,7 @@ void _basic_parallel_radix2_FFT_inner(std::vector &a, const FieldT &omeg - const FieldT omega_step = omega^(j<<(log_m - log_cpus)); - - FieldT elt = FieldT::one(); -- for (size_t i = 0; i < 1ul<<(log_m - log_cpus); ++i) -+ for (size_t i = 0; i < UINT64_C(1)<<(log_m - log_cpus); ++i) - { - for (size_t s = 0; s < num_cpus; ++s) - { -@@ -135,7 +136,7 @@ void _basic_parallel_radix2_FFT_inner(std::vector &a, const FieldT &omeg - #endif - for (size_t i = 0; i < num_cpus; ++i) - { -- for (size_t j = 0; j < 1ul<<(log_m - log_cpus); ++j) -+ for (size_t j = 0; j < UINT64_C(1)<<(log_m - log_cpus); ++j) - { - // now: i = idx >> (log_m - log_cpus) and j = idx % (1u << (log_m - log_cpus)), for idx = ((i<<(log_m-log_cpus))+j) % (1u << log_m) - a[(j< _basic_radix2_lagrange_coeffs(const size_t m, const FieldT & - return std::vector(1, FieldT::one()); - } - -- assert(m == (1u << log2(m))); -+ assert_except(m == (1u << log2(m))); - - const FieldT omega = get_root_of_unity(m); - -diff --git a/src/snark/libsnark/algebra/evaluation_domain/evaluation_domain.tcc b/src/snark/libsnark/algebra/evaluation_domain/evaluation_domain.tcc -index 8e3ea7a..d0e28c8 100644 ---- a/src/snark/libsnark/algebra/evaluation_domain/evaluation_domain.tcc -+++ b/src/snark/libsnark/algebra/evaluation_domain/evaluation_domain.tcc -@@ -22,15 +22,16 @@ - #include - #include "algebra/fields/field_utils.hpp" - #include "algebra/evaluation_domain/domains/basic_radix2_domain.hpp" -+#include "common/assert_except.hpp" - - namespace libsnark { - - template - std::shared_ptr > get_evaluation_domain(const size_t min_size) - { -- assert(min_size > 1); -+ assert_except(min_size > 1); - const size_t log_min_size = log2(min_size); -- assert(log_min_size <= (FieldT::s+1)); -+ assert_except(log_min_size <= (FieldT::s+1)); - - std::shared_ptr > result; - if (min_size == (1u << log_min_size)) -@@ -41,7 +42,7 @@ std::shared_ptr > get_evaluation_domain(const size_t m - { - print_indent(); printf("* Selected domain: extended_radix2\n"); - } -- assert(0); -+ assert_except(0); - } - else - { -@@ -54,9 +55,9 @@ std::shared_ptr > get_evaluation_domain(const size_t m - } - else - { -- const size_t big = 1ul<<(log2(min_size)-1); -+ const size_t big = UINT64_C(1)<<(log2(min_size)-1); - const size_t small = min_size - big; -- const size_t rounded_small = (1ul< > get_evaluation_domain(const size_t m - { - print_indent(); printf("* Selected domain: extended_radix2\n"); - } -- assert(0); -+ assert_except(0); - } - } - else -@@ -82,7 +83,7 @@ std::shared_ptr > get_evaluation_domain(const size_t m - { - print_indent(); printf("* Selected domain: step_radix2\n"); - } -- assert(0); -+ assert_except(0); - } - } - -@@ -92,8 +93,8 @@ std::shared_ptr > get_evaluation_domain(const size_t m - template - FieldT lagrange_eval(const size_t m, const std::vector &domain, const FieldT &t, const size_t idx) - { -- assert(m == domain.size()); -- assert(idx < m); -+ assert_except(m == domain.size()); -+ assert_except(idx < m); - - FieldT num = FieldT::one(); - FieldT denom = FieldT::one(); -diff --git a/src/snark/libsnark/algebra/exponentiation/exponentiation.hpp b/src/snark/libsnark/algebra/exponentiation/exponentiation.hpp -index a8a2c92..836ebf0 100644 ---- a/src/snark/libsnark/algebra/exponentiation/exponentiation.hpp -+++ b/src/snark/libsnark/algebra/exponentiation/exponentiation.hpp -@@ -22,7 +22,7 @@ template - FieldT power(const FieldT &base, const bigint &exponent); - - template --FieldT power(const FieldT &base, const unsigned long exponent); -+FieldT power(const FieldT &base, const uint64_t exponent); - - } // libsnark - -diff --git a/src/snark/libsnark/algebra/exponentiation/exponentiation.tcc b/src/snark/libsnark/algebra/exponentiation/exponentiation.tcc -index dd557eb..7ac3bf5 100644 ---- a/src/snark/libsnark/algebra/exponentiation/exponentiation.tcc -+++ b/src/snark/libsnark/algebra/exponentiation/exponentiation.tcc -@@ -25,7 +25,7 @@ FieldT power(const FieldT &base, const bigint &exponent) - - bool found_one = false; - -- for (long i = exponent.max_bits() - 1; i >= 0; --i) -+ for (int64_t i = exponent.max_bits() - 1; i >= 0; --i) - { - if (found_one) - { -@@ -43,7 +43,7 @@ FieldT power(const FieldT &base, const bigint &exponent) - } - - template --FieldT power(const FieldT &base, const unsigned long exponent) -+FieldT power(const FieldT &base, const uint64_t exponent) - { - return power(base, bigint<1>(exponent)); - } -diff --git a/src/snark/libsnark/algebra/fields/bigint.hpp b/src/snark/libsnark/algebra/fields/bigint.hpp -index ff00dd5..dc47a7e 100644 ---- a/src/snark/libsnark/algebra/fields/bigint.hpp -+++ b/src/snark/libsnark/algebra/fields/bigint.hpp -@@ -33,7 +33,7 @@ public: - mp_limb_t data[n] = {0}; - - bigint() = default; -- bigint(const unsigned long x); /// Initialize from a small integer -+ bigint(const uint64_t x); /// Initialize from a small integer - bigint(const char* s); /// Initialize from a string containing an integer in decimal notation - bigint(const mpz_t r); /// Initialize from MPZ element - -@@ -46,7 +46,7 @@ public: - size_t max_bits() const { return n * GMP_NUMB_BITS; } - size_t num_bits() const; - -- unsigned long as_ulong() const; /* return the last limb of the integer */ -+ uint64_t as_ulong() const; /* return the last limb of the integer */ - void to_mpz(mpz_t r) const; - bool test_bit(const std::size_t bitno) const; - -diff --git a/src/snark/libsnark/algebra/fields/bigint.tcc b/src/snark/libsnark/algebra/fields/bigint.tcc -index f81addf..1faa4f9 100644 ---- a/src/snark/libsnark/algebra/fields/bigint.tcc -+++ b/src/snark/libsnark/algebra/fields/bigint.tcc -@@ -13,13 +13,14 @@ - #include - #include - #include "sodium.h" -+#include "common/assert_except.hpp" - - namespace libsnark { - - template --bigint::bigint(const unsigned long x) /// Initialize from a small integer -+bigint::bigint(const uint64_t x) /// Initialize from a small integer - { -- static_assert(ULONG_MAX <= GMP_NUMB_MAX, "unsigned long does not fit in a GMP limb"); -+ static_assert(UINT64_MAX <= GMP_NUMB_MAX, "uint64_t does not fit in a GMP limb"); - this->data[0] = x; - } - -@@ -31,12 +32,12 @@ bigint::bigint(const char* s) /// Initialize from a string containing an inte - - for (size_t i = 0; i < l; ++i) - { -- assert(s[i] >= '0' && s[i] <= '9'); -+ assert_except(s[i] >= '0' && s[i] <= '9'); - s_copy[i] = s[i] - '0'; - } - - mp_size_t limbs_written = mpn_set_str(this->data, s_copy, l, 10); -- assert(limbs_written <= n); -+ assert_except(limbs_written <= n); - - delete[] s_copy; - } -@@ -53,7 +54,7 @@ bigint::bigint(const mpz_t r) /// Initialize from MPZ element - mpz_fdiv_q_2exp(k, k, GMP_NUMB_BITS); - } - -- assert(mpz_sgn(k) == 0); -+ assert_except(mpz_sgn(k) == 0); - mpz_clear(k); - } - -@@ -105,7 +106,7 @@ template - size_t bigint::num_bits() const - { - /* -- for (long i = max_bits(); i >= 0; --i) -+ for (int64_t i = max_bits(); i >= 0; --i) - { - if (this->test_bit(i)) - { -@@ -115,7 +116,7 @@ size_t bigint::num_bits() const - - return 0; - */ -- for (long i = n-1; i >= 0; --i) -+ for (int64_t i = n-1; i >= 0; --i) - { - mp_limb_t x = this->data[i]; - if (x == 0) -@@ -124,14 +125,14 @@ size_t bigint::num_bits() const - } - else - { -- return ((i+1) * GMP_NUMB_BITS) - __builtin_clzl(x); -+ return ((i+1) * GMP_NUMB_BITS) - __builtin_clzll(x); - } - } - return 0; - } - - template --unsigned long bigint::as_ulong() const -+uint64_t bigint::as_ulong() const - { - return this->data[0]; - } -@@ -186,7 +187,7 @@ inline void bigint::div_qr(bigint& quotient, bigint& remainder, - const bigint& dividend, const bigint& divisor) - { - static_assert(n >= d, "dividend must not be smaller than divisor for bigint::div_qr"); -- assert(divisor.data[d-1] != 0); -+ assert_except(divisor.data[d-1] != 0); - mpn_tdiv_qr(quotient.data, remainder.data, 0, dividend.data, n, divisor.data, d); - } - -@@ -223,7 +224,7 @@ inline bool bigint::operator>(const bigint& other) const - template - bigint& bigint::randomize() - { -- assert(GMP_NUMB_BITS == sizeof(mp_limb_t) * 8); -+ assert_except(GMP_NUMB_BITS == sizeof(mp_limb_t) * 8); - - randombytes_buf(this->data, sizeof(mp_limb_t) * n); - -@@ -262,12 +263,12 @@ std::istream& operator>>(std::istream &in, bigint &b) - - for (size_t i = 0; i < l; ++i) - { -- assert(s[i] >= '0' && s[i] <= '9'); -+ assert_except(s[i] >= '0' && s[i] <= '9'); - s_copy[i] = s[i] - '0'; - } - - mp_size_t limbs_written = mpn_set_str(b.data, s_copy, l, 10); -- assert(limbs_written <= n); -+ assert_except(limbs_written <= n); - - delete[] s_copy; - #endif -diff --git a/src/snark/libsnark/algebra/fields/field_utils.hpp b/src/snark/libsnark/algebra/fields/field_utils.hpp -index a07ecfe..8358e48 100644 ---- a/src/snark/libsnark/algebra/fields/field_utils.hpp -+++ b/src/snark/libsnark/algebra/fields/field_utils.hpp -@@ -16,13 +16,13 @@ namespace libsnark { - - // returns root of unity of order n (for n a power of 2), if one exists - template --FieldT get_root_of_unity(const size_t n); -+FieldT get_root_of_unity(const uint64_t n); - - template --std::vector pack_int_vector_into_field_element_vector(const std::vector &v, const size_t w); -+std::vector pack_int_vector_into_field_element_vector(const std::vector &v, const uint64_t w); - - template --std::vector pack_bit_vector_into_field_element_vector(const bit_vector &v, const size_t chunk_bits); -+std::vector pack_bit_vector_into_field_element_vector(const bit_vector &v, const uint64_t chunk_bits); - - template - std::vector pack_bit_vector_into_field_element_vector(const bit_vector &v); -@@ -37,7 +37,7 @@ template - bit_vector convert_field_element_to_bit_vector(const FieldT &el); - - template --bit_vector convert_field_element_to_bit_vector(const FieldT &el, const size_t bitcount); -+bit_vector convert_field_element_to_bit_vector(const FieldT &el, const uint64_t bitcount); - - template - FieldT convert_bit_vector_to_field_element(const bit_vector &v); -diff --git a/src/snark/libsnark/algebra/fields/field_utils.tcc b/src/snark/libsnark/algebra/fields/field_utils.tcc -index 13197b2..a092860 100644 ---- a/src/snark/libsnark/algebra/fields/field_utils.tcc -+++ b/src/snark/libsnark/algebra/fields/field_utils.tcc -@@ -11,6 +11,7 @@ - #define FIELD_UTILS_TCC_ - - #include "common/utils.hpp" -+#include "common/assert_except.hpp" - - namespace libsnark { - -@@ -21,14 +22,14 @@ FieldT coset_shift() - } - - template --FieldT get_root_of_unity(const size_t n) -+FieldT get_root_of_unity(const uint64_t n) - { -- const size_t logn = log2(n); -- assert(n == (1u << logn)); -- assert(logn <= FieldT::s); -+ const uint64_t logn = log2(n); -+ assert_except(n == (1u << logn)); -+ assert_except(logn <= FieldT::s); - - FieldT omega = FieldT::root_of_unity; -- for (size_t i = FieldT::s; i > logn; --i) -+ for (uint64_t i = FieldT::s; i > logn; --i) - { - omega *= omega; - } -@@ -37,21 +38,21 @@ FieldT get_root_of_unity(const size_t n) - } - - template --std::vector pack_int_vector_into_field_element_vector(const std::vector &v, const size_t w) -+std::vector pack_int_vector_into_field_element_vector(const std::vector &v, const uint64_t w) - { -- const size_t chunk_bits = FieldT::capacity(); -- const size_t repacked_size = div_ceil(v.size() * w, chunk_bits); -+ const uint64_t chunk_bits = FieldT::capacity(); -+ const uint64_t repacked_size = div_ceil(v.size() * w, chunk_bits); - std::vector result(repacked_size); - -- for (size_t i = 0; i < repacked_size; ++i) -+ for (uint64_t i = 0; i < repacked_size; ++i) - { - bigint b; -- for (size_t j = 0; j < chunk_bits; ++j) -+ for (uint64_t j = 0; j < chunk_bits; ++j) - { -- const size_t word_index = (i * chunk_bits + j) / w; -- const size_t pos_in_word = (i * chunk_bits + j) % w; -- const size_t word_or_0 = (word_index < v.size() ? v[word_index] : 0); -- const size_t bit = (word_or_0 >> pos_in_word) & 1; -+ const uint64_t word_index = (i * chunk_bits + j) / w; -+ const uint64_t pos_in_word = (i * chunk_bits + j) % w; -+ const uint64_t word_or_0 = (word_index < v.size() ? v[word_index] : 0); -+ const uint64_t bit = (word_or_0 >> pos_in_word) & 1; - - b.data[j / GMP_NUMB_BITS] |= bit << (j % GMP_NUMB_BITS); - } -@@ -62,11 +63,11 @@ std::vector pack_int_vector_into_field_element_vector(const std::vector< - } - - template --std::vector pack_bit_vector_into_field_element_vector(const bit_vector &v, const size_t chunk_bits) -+std::vector pack_bit_vector_into_field_element_vector(const bit_vector &v, const uint64_t chunk_bits) - { -- assert(chunk_bits <= FieldT::capacity()); -+ assert_except(chunk_bits <= FieldT::capacity()); - -- const size_t repacked_size = div_ceil(v.size(), chunk_bits); -+ const uint64_t repacked_size = div_ceil(v.size(), chunk_bits); - std::vector result(repacked_size); - - for (size_t i = 0; i < repacked_size; ++i) -@@ -131,7 +132,7 @@ bit_vector convert_field_element_to_bit_vector(const FieldT &el) - } - - template --bit_vector convert_field_element_to_bit_vector(const FieldT &el, const size_t bitcount) -+bit_vector convert_field_element_to_bit_vector(const FieldT &el, const uint64_t bitcount) - { - bit_vector result = convert_field_element_to_bit_vector(el); - result.resize(bitcount); -@@ -142,7 +143,7 @@ bit_vector convert_field_element_to_bit_vector(const FieldT &el, const size_t bi - template - FieldT convert_bit_vector_to_field_element(const bit_vector &v) - { -- assert(v.size() <= FieldT::size_in_bits()); -+ assert_except(v.size() <= FieldT::size_in_bits()); - - FieldT res = FieldT::zero(); - FieldT c = FieldT::one(); -@@ -164,14 +165,14 @@ void batch_invert(std::vector &vec) - - for (auto el : vec) - { -- assert(!el.is_zero()); -+ assert_except(!el.is_zero()); - prod.emplace_back(acc); - acc = acc * el; - } - - FieldT acc_inverse = acc.inverse(); - -- for (long i = vec.size()-1; i >= 0; --i) -+ for (int64_t i = vec.size()-1; i >= 0; --i) - { - const FieldT old_el = vec[i]; - vec[i] = acc_inverse * prod[i]; -diff --git a/src/snark/libsnark/algebra/fields/fp.hpp b/src/snark/libsnark/algebra/fields/fp.hpp -index a498683..384e574 100644 ---- a/src/snark/libsnark/algebra/fields/fp.hpp -+++ b/src/snark/libsnark/algebra/fields/fp.hpp -@@ -44,15 +44,15 @@ public: - static const mp_size_t num_limbs = n; - static const constexpr bigint& mod = modulus; - #ifdef PROFILE_OP_COUNTS -- static long long add_cnt; -- static long long sub_cnt; -- static long long mul_cnt; -- static long long sqr_cnt; -- static long long inv_cnt; -+ static int64_t add_cnt; -+ static int64_t sub_cnt; -+ static int64_t mul_cnt; -+ static int64_t sqr_cnt; -+ static int64_t inv_cnt; - #endif -- static size_t num_bits; -+ static uint64_t num_bits; - static bigint euler; // (modulus-1)/2 -- static size_t s; // modulus = 2^s * t + 1 -+ static uint64_t s; // modulus = 2^s * t + 1 - static bigint t; // with t odd - static bigint t_minus_1_over_2; // (t-1)/2 - static Fp_model nqr; // a quadratic nonresidue -@@ -67,9 +67,9 @@ public: - - Fp_model() {}; - Fp_model(const bigint &b); -- Fp_model(const long x, const bool is_unsigned=false); -+ Fp_model(const int64_t x, const bool is_unsigned=false); - -- void set_ulong(const unsigned long x); -+ void set_ulong(const uint64_t x); - - void mul_reduce(const bigint &other); - -@@ -82,7 +82,7 @@ public: - /* Return the last limb of the standard representation of the - field element. E.g. on 64-bit architectures Fp(123).as_ulong() - and Fp(2^64+123).as_ulong() would both return 123. */ -- unsigned long as_ulong() const; -+ uint64_t as_ulong() const; - - bool operator==(const Fp_model& other) const; - bool operator!=(const Fp_model& other) const; -@@ -93,7 +93,7 @@ public: - Fp_model& operator+=(const Fp_model& other); - Fp_model& operator-=(const Fp_model& other); - Fp_model& operator*=(const Fp_model& other); -- Fp_model& operator^=(const unsigned long pow); -+ Fp_model& operator^=(const uint64_t pow); - - template - Fp_model& operator^=(const bigint &pow); -@@ -107,12 +107,12 @@ public: - Fp_model inverse() const; - Fp_model sqrt() const; // HAS TO BE A SQUARE (else does not terminate) - -- Fp_model operator^(const unsigned long pow) const; -+ Fp_model operator^(const uint64_t pow) const; - template - Fp_model operator^(const bigint &pow) const; - -- static size_t size_in_bits() { return num_bits; } -- static size_t capacity() { return num_bits - 1; } -+ static uint64_t size_in_bits() { return num_bits; } -+ static uint64_t capacity() { return num_bits - 1; } - static bigint field_char() { return modulus; } - - static Fp_model zero(); -@@ -125,29 +125,29 @@ public: - - #ifdef PROFILE_OP_COUNTS - template& modulus> --long long Fp_model::add_cnt = 0; -+int64_t Fp_model::add_cnt = 0; - - template& modulus> --long long Fp_model::sub_cnt = 0; -+int64_t Fp_model::sub_cnt = 0; - - template& modulus> --long long Fp_model::mul_cnt = 0; -+int64_t Fp_model::mul_cnt = 0; - - template& modulus> --long long Fp_model::sqr_cnt = 0; -+int64_t Fp_model::sqr_cnt = 0; - - template& modulus> --long long Fp_model::inv_cnt = 0; -+int64_t Fp_model::inv_cnt = 0; - #endif - - template& modulus> --size_t Fp_model::num_bits; -+uint64_t Fp_model::num_bits; - - template& modulus> - bigint Fp_model::euler; - - template& modulus> --size_t Fp_model::s; -+uint64_t Fp_model::s; - - template& modulus> - bigint Fp_model::t; -diff --git a/src/snark/libsnark/algebra/fields/fp.tcc b/src/snark/libsnark/algebra/fields/fp.tcc -index 566e993..3d220e2 100644 ---- a/src/snark/libsnark/algebra/fields/fp.tcc -+++ b/src/snark/libsnark/algebra/fields/fp.tcc -@@ -173,13 +173,13 @@ void Fp_model::mul_reduce(const bigint &other) - /* calculate res = res + k * mod * b^i */ - mp_limb_t carryout = mpn_addmul_1(res+i, modulus.data, n, k); - carryout = mpn_add_1(res+n+i, res+n+i, n-i, carryout); -- assert(carryout == 0); -+ assert_except(carryout == 0); - } - - if (mpn_cmp(res+n, modulus.data, n) >= 0) - { - const mp_limb_t borrow = mpn_sub(res+n, res+n, n, modulus.data, n); -- assert(borrow == 0); -+ assert_except(borrow == 0); - } - - mpn_copyi(this->mont_repr.data, res+n, n); -@@ -194,7 +194,7 @@ Fp_model::Fp_model(const bigint &b) - } - - template& modulus> --Fp_model::Fp_model(const long x, const bool is_unsigned) -+Fp_model::Fp_model(const int64_t x, const bool is_unsigned) - { - if (is_unsigned || x >= 0) - { -@@ -203,14 +203,14 @@ Fp_model::Fp_model(const long x, const bool is_unsigned) - else - { - const mp_limb_t borrow = mpn_sub_1(this->mont_repr.data, modulus.data, n, -x); -- assert(borrow == 0); -+ assert_except(borrow == 0); - } - - mul_reduce(Rsquared); - } - - template& modulus> --void Fp_model::set_ulong(const unsigned long x) -+void Fp_model::set_ulong(const uint64_t x) - { - this->mont_repr.clear(); - this->mont_repr.data[0] = x; -@@ -237,7 +237,7 @@ bigint Fp_model::as_bigint() const - } - - template& modulus> --unsigned long Fp_model::as_ulong() const -+uint64_t Fp_model::as_ulong() const - { - return this->as_bigint().as_ulong(); - } -@@ -391,7 +391,7 @@ Fp_model& Fp_model::operator+=(const Fp_model& - if (carry || mpn_cmp(scratch, modulus.data, n) >= 0) - { - const mp_limb_t borrow = mpn_sub(scratch, scratch, n+1, modulus.data, n); -- assert(borrow == 0); -+ assert_except(borrow == 0); - } - - mpn_copyi(this->mont_repr.data, scratch, n); -@@ -483,7 +483,7 @@ Fp_model& Fp_model::operator-=(const Fp_model& - } - - const mp_limb_t borrow = mpn_sub(scratch, scratch, n+1, other.mont_repr.data, n); -- assert(borrow == 0); -+ assert_except(borrow == 0); - - mpn_copyi(this->mont_repr.data, scratch, n); - } -@@ -502,7 +502,7 @@ Fp_model& Fp_model::operator*=(const Fp_model& - } - - template& modulus> --Fp_model& Fp_model::operator^=(const unsigned long pow) -+Fp_model& Fp_model::operator^=(const uint64_t pow) - { - (*this) = power >(*this, pow); - return (*this); -@@ -538,7 +538,7 @@ Fp_model Fp_model::operator*(const Fp_model& ot - } - - template& modulus> --Fp_model Fp_model::operator^(const unsigned long pow) const -+Fp_model Fp_model::operator^(const uint64_t pow) const - { - Fp_model r(*this); - return (r ^= pow); -@@ -626,7 +626,7 @@ Fp_model& Fp_model::invert() - this->inv_cnt++; - #endif - -- assert(!this->is_zero()); -+ assert_except(!this->is_zero()); - - bigint g; /* gp should have room for vn = n limbs */ - -@@ -637,7 +637,7 @@ Fp_model& Fp_model::invert() - - /* computes gcd(u, v) = g = u*s + v*t, so s*u will be 1 (mod v) */ - const mp_size_t gn = mpn_gcdext(g.data, s, &sn, this->mont_repr.data, n, v.data, n); -- assert(gn == 1 && g.data[0] == 1); /* inverse exists */ -+ assert_except(gn == 1 && g.data[0] == 1); /* inverse exists */ - - mp_limb_t q; /* division result fits into q, as sn <= n+1 */ - /* sn < 0 indicates negative sn; will fix up later */ -@@ -658,7 +658,7 @@ Fp_model& Fp_model::invert() - if (sn < 0) - { - const mp_limb_t borrow = mpn_sub_n(this->mont_repr.data, modulus.data, this->mont_repr.data, n); -- assert(borrow == 0); -+ assert_except(borrow == 0); - } - - mul_reduce(Rcubed); -@@ -684,13 +684,13 @@ Fp_model Fp_model::random_element() /// returns random el - r.mont_repr.randomize(); - - /* clear all bits higher than MSB of modulus */ -- size_t bitno = GMP_NUMB_BITS * n - 1; -+ uint64_t bitno = GMP_NUMB_BITS * n - 1; - while (modulus.test_bit(bitno) == false) - { -- const std::size_t part = bitno/GMP_NUMB_BITS; -- const std::size_t bit = bitno - (GMP_NUMB_BITS*part); -+ const uint64_t part = bitno/GMP_NUMB_BITS; -+ const uint64_t bit = bitno - (GMP_NUMB_BITS*part); - -- r.mont_repr.data[part] &= ~(1ul< Fp_model::sqrt() const - - Fp_model one = Fp_model::one(); - -- size_t v = Fp_model::s; -+ uint64_t v = Fp_model::s; - Fp_model z = Fp_model::nqr_to_t; - Fp_model w = (*this)^Fp_model::t_minus_1_over_2; - Fp_model x = (*this) * w; -@@ -734,7 +734,7 @@ Fp_model Fp_model::sqrt() const - - while (b != one) - { -- size_t m = 0; -+ uint64_t m = 0; - Fp_model b2m = b; - while (b2m != one) - { -diff --git a/src/snark/libsnark/algebra/fields/fp12_2over3over2.hpp b/src/snark/libsnark/algebra/fields/fp12_2over3over2.hpp -index 1de9d88..69d057a 100644 ---- a/src/snark/libsnark/algebra/fields/fp12_2over3over2.hpp -+++ b/src/snark/libsnark/algebra/fields/fp12_2over3over2.hpp -@@ -66,7 +66,7 @@ public: - Fp12_2over3over2_model squared_karatsuba() const; - Fp12_2over3over2_model squared_complex() const; - Fp12_2over3over2_model inverse() const; -- Fp12_2over3over2_model Frobenius_map(unsigned long power) const; -+ Fp12_2over3over2_model Frobenius_map(uint64_t power) const; - Fp12_2over3over2_model unitary_inverse() const; - Fp12_2over3over2_model cyclotomic_squared() const; - -@@ -78,7 +78,7 @@ public: - Fp12_2over3over2_model cyclotomic_exp(const bigint &exponent) const; - - static bigint base_field_char() { return modulus; } -- static size_t extension_degree() { return 12; } -+ static uint64_t extension_degree() { return 12; } - - friend std::ostream& operator<< (std::ostream &out, const Fp12_2over3over2_model &el); - friend std::istream& operator>> (std::istream &in, Fp12_2over3over2_model &el); -diff --git a/src/snark/libsnark/algebra/fields/fp12_2over3over2.tcc b/src/snark/libsnark/algebra/fields/fp12_2over3over2.tcc -index 2fbc0b6..d985d68 100644 ---- a/src/snark/libsnark/algebra/fields/fp12_2over3over2.tcc -+++ b/src/snark/libsnark/algebra/fields/fp12_2over3over2.tcc -@@ -156,7 +156,7 @@ Fp12_2over3over2_model Fp12_2over3over2_model::inverse() c - } - - template& modulus> --Fp12_2over3over2_model Fp12_2over3over2_model::Frobenius_map(unsigned long power) const -+Fp12_2over3over2_model Fp12_2over3over2_model::Frobenius_map(uint64_t power) const - { - return Fp12_2over3over2_model(c0.Frobenius_map(power), - Frobenius_coeffs_c1[power % 12] * c1.Frobenius_map(power)); -@@ -339,16 +339,16 @@ Fp12_2over3over2_model Fp12_2over3over2_model::cyclotomic - Fp12_2over3over2_model res = Fp12_2over3over2_model::one(); - - bool found_one = false; -- for (long i = m-1; i >= 0; --i) -+ for (int64_t i = m-1; i >= 0; --i) - { -- for (long j = GMP_NUMB_BITS - 1; j >= 0; --j) -+ for (int64_t j = GMP_NUMB_BITS - 1; j >= 0; --j) - { - if (found_one) - { - res = res.cyclotomic_squared(); - } - -- if (exponent.data[i] & (1ul<>(std::istream& in, std::vector> s; - - char b; -diff --git a/src/snark/libsnark/algebra/fields/fp2.hpp b/src/snark/libsnark/algebra/fields/fp2.hpp -index f077269..f194f5e 100644 ---- a/src/snark/libsnark/algebra/fields/fp2.hpp -+++ b/src/snark/libsnark/algebra/fields/fp2.hpp -@@ -37,7 +37,7 @@ public: - typedef Fp_model my_Fp; - - static bigint<2*n> euler; // (modulus^2-1)/2 -- static size_t s; // modulus^2 = 2^s * t + 1 -+ static uint64_t s; // modulus^2 = 2^s * t + 1 - static bigint<2*n> t; // with t odd - static bigint<2*n> t_minus_1_over_2; // (t-1)/2 - static my_Fp non_residue; // X^4-non_residue irreducible over Fp; used for constructing Fp2 = Fp[X] / (X^2 - non_residue) -@@ -66,7 +66,7 @@ public: - Fp2_model operator-() const; - Fp2_model squared() const; // default is squared_complex - Fp2_model inverse() const; -- Fp2_model Frobenius_map(unsigned long power) const; -+ Fp2_model Frobenius_map(uint64_t power) const; - Fp2_model sqrt() const; // HAS TO BE A SQUARE (else does not terminate) - Fp2_model squared_karatsuba() const; - Fp2_model squared_complex() const; -@@ -74,7 +74,7 @@ public: - template - Fp2_model operator^(const bigint &other) const; - -- static size_t size_in_bits() { return 2*my_Fp::size_in_bits(); } -+ static uint64_t size_in_bits() { return 2*my_Fp::size_in_bits(); } - static bigint base_field_char() { return modulus; } - - friend std::ostream& operator<< (std::ostream &out, const Fp2_model &el); -@@ -94,7 +94,7 @@ template& modulus> - bigint<2*n> Fp2_model::euler; - - template& modulus> --size_t Fp2_model::s; -+uint64_t Fp2_model::s; - - template& modulus> - bigint<2*n> Fp2_model::t; -diff --git a/src/snark/libsnark/algebra/fields/fp2.tcc b/src/snark/libsnark/algebra/fields/fp2.tcc -index 1632a04..84aa303 100644 ---- a/src/snark/libsnark/algebra/fields/fp2.tcc -+++ b/src/snark/libsnark/algebra/fields/fp2.tcc -@@ -136,7 +136,7 @@ Fp2_model Fp2_model::inverse() const - } - - template& modulus> --Fp2_model Fp2_model::Frobenius_map(unsigned long power) const -+Fp2_model Fp2_model::Frobenius_map(uint64_t power) const - { - return Fp2_model(c0, - Frobenius_coeffs_c1[power % 2] * c1); -@@ -151,7 +151,7 @@ Fp2_model Fp2_model::sqrt() const - - Fp2_model one = Fp2_model::one(); - -- size_t v = Fp2_model::s; -+ unsigned long long v = Fp2_model::s; - Fp2_model z = Fp2_model::nqr_to_t; - Fp2_model w = (*this)^Fp2_model::t_minus_1_over_2; - Fp2_model x = (*this) * w; -@@ -175,7 +175,7 @@ Fp2_model Fp2_model::sqrt() const - - while (b != one) - { -- size_t m = 0; -+ unsigned long long m = 0; - Fp2_model b2m = b; - while (b2m != one) - { -@@ -239,7 +239,7 @@ std::istream& operator>>(std::istream& in, std::vector > & - { - v.clear(); - -- size_t s; -+ unsigned long long s; - in >> s; - - char b; -diff --git a/src/snark/libsnark/algebra/fields/fp6_3over2.hpp b/src/snark/libsnark/algebra/fields/fp6_3over2.hpp -index 335d61c..8a888f0 100644 ---- a/src/snark/libsnark/algebra/fields/fp6_3over2.hpp -+++ b/src/snark/libsnark/algebra/fields/fp6_3over2.hpp -@@ -63,7 +63,7 @@ public: - Fp6_3over2_model operator-() const; - Fp6_3over2_model squared() const; - Fp6_3over2_model inverse() const; -- Fp6_3over2_model Frobenius_map(unsigned long power) const; -+ Fp6_3over2_model Frobenius_map(uint64_t power) const; - - static my_Fp2 mul_by_non_residue(const my_Fp2 &elt); - -@@ -71,7 +71,7 @@ public: - Fp6_3over2_model operator^(const bigint &other) const; - - static bigint base_field_char() { return modulus; } -- static size_t extension_degree() { return 6; } -+ static uint64_t extension_degree() { return 6; } - - friend std::ostream& operator<< (std::ostream &out, const Fp6_3over2_model &el); - friend std::istream& operator>> (std::istream &in, Fp6_3over2_model &el); -diff --git a/src/snark/libsnark/algebra/fields/fp6_3over2.tcc b/src/snark/libsnark/algebra/fields/fp6_3over2.tcc -index f4fffde..de9b83d 100644 ---- a/src/snark/libsnark/algebra/fields/fp6_3over2.tcc -+++ b/src/snark/libsnark/algebra/fields/fp6_3over2.tcc -@@ -149,7 +149,7 @@ Fp6_3over2_model Fp6_3over2_model::inverse() const - } - - template& modulus> --Fp6_3over2_model Fp6_3over2_model::Frobenius_map(unsigned long power) const -+Fp6_3over2_model Fp6_3over2_model::Frobenius_map(uint64_t power) const - { - return Fp6_3over2_model(c0.Frobenius_map(power), - Frobenius_coeffs_c1[power % 6] * c1.Frobenius_map(power), -@@ -194,7 +194,7 @@ std::istream& operator>>(std::istream& in, std::vector> s; - - char b; -diff --git a/src/snark/libsnark/algebra/fields/tests/test_bigint.cpp b/src/snark/libsnark/algebra/fields/tests/test_bigint.cpp -index d2da59e..6392f27 100644 ---- a/src/snark/libsnark/algebra/fields/tests/test_bigint.cpp -+++ b/src/snark/libsnark/algebra/fields/tests/test_bigint.cpp -@@ -7,13 +7,11 @@ - - #include "algebra/fields/bigint.hpp" - --#include -- - using namespace libsnark; - --TEST(algebra, bigint) -+void test_bigint() - { -- static_assert(ULONG_MAX == 0xFFFFFFFFFFFFFFFFul, "unsigned long not 64-bit"); -+ static_assert(UINT64_MAX == 0xFFFFFFFFFFFFFFFFul, "uint64_t not 64-bit"); - static_assert(GMP_NUMB_BITS == 64, "GMP limb not 64-bit"); - - const char *b1_decimal = "76749407"; -@@ -22,76 +20,88 @@ TEST(algebra, bigint) - const char *b2_binary = "0000000000000000000000000000010101111101101000000110100001011010" - "1101101010001001000001101000101000100110011001110001111110100010"; - -- bigint<1> b0 = bigint<1>(0ul); -+ bigint<1> b0 = bigint<1>(UINT64_C(0)); - bigint<1> b1 = bigint<1>(b1_decimal); - bigint<2> b2 = bigint<2>(b2_decimal); - -- EXPECT_EQ(b0.as_ulong(), 0ul); -- EXPECT_TRUE(b0.is_zero()); -- EXPECT_EQ(b1.as_ulong(), 76749407ul); -- EXPECT_FALSE(b1.is_zero()); -- EXPECT_EQ(b2.as_ulong(), 15747124762497195938ul); -- EXPECT_FALSE(b2.is_zero()); -- EXPECT_NE(b0, b1); -- EXPECT_FALSE(b0 == b1); -- -- EXPECT_EQ(b2.max_bits(), 128); -- EXPECT_EQ(b2.num_bits(), 99); -+ assert(b0.as_ulong() == UINT64_C(0)); -+ assert(b0.is_zero()); -+ assert(b1.as_ulong() == UINT64_C(76749407)); -+ assert(!(b1.is_zero())); -+ assert(b2.as_ulong() == UINT64_C(15747124762497195938)); -+ assert(!(b2.is_zero())); -+ assert(b0 != b1); -+ assert(!(b0 == b1)); -+ -+ assert(b2.max_bits() == 128); -+ assert(b2.num_bits() == 99); - for (size_t i = 0; i < 128; i++) { -- EXPECT_EQ(b2.test_bit(i), (b2_binary[127-i] == '1')); -+ assert(b2.test_bit(i) == (b2_binary[127-i] == '1')); - } - - bigint<3> b3 = b2 * b1; - -- EXPECT_EQ(b3, bigint<3>(b3_decimal)); -- EXPECT_FALSE(b3.is_zero()); -+ assert(b3 == bigint<3>(b3_decimal)); -+ assert(!(b3.is_zero())); - - bigint<3> b3a { b3 }; -- EXPECT_EQ(b3a, bigint<3>(b3_decimal)); -- EXPECT_EQ(b3a, b3); -- EXPECT_FALSE(b3a.is_zero()); -+ assert(b3a == bigint<3>(b3_decimal)); -+ assert(b3a == b3); -+ assert(!(b3a.is_zero())); - - mpz_t m3; - mpz_init(m3); - b3.to_mpz(m3); - bigint<3> b3b { m3 }; -- EXPECT_EQ(b3b, b3); -+ assert(b3b == b3); - - bigint<2> quotient; - bigint<2> remainder; - bigint<3>::div_qr(quotient, remainder, b3, b2); -- EXPECT_LT(quotient.num_bits(), GMP_NUMB_BITS); -- EXPECT_EQ(quotient.as_ulong(), b1.as_ulong()); -+ assert(quotient.num_bits() < GMP_NUMB_BITS); -+ assert(quotient.as_ulong() == b1.as_ulong()); - bigint<1> b1inc = bigint<1>("76749408"); - bigint<1> b1a = quotient.shorten(b1inc, "test"); -- EXPECT_EQ(b1a, b1); -- EXPECT_TRUE(remainder.is_zero()); -+ assert(b1a == b1); -+ assert(remainder.is_zero()); - remainder.limit(b2, "test"); - -- EXPECT_THROW((void)(quotient.shorten(b1, "test")), std::domain_error); -- EXPECT_THROW(remainder.limit(remainder, "test"), std::domain_error); -+ try { -+ (void)(quotient.shorten(b1, "test")); -+ assert(false); -+ } catch (std::domain_error) {} -+ try { -+ remainder.limit(remainder, "test"); -+ assert(false); -+ } catch (std::domain_error) {} - - bigint<1> br = bigint<1>("42"); - b3 += br; -- EXPECT_NE(b3, b3a); -- EXPECT_GT(b3, b3a); -- EXPECT_FALSE(b3a > b3); -+ assert(b3 != b3a); -+ assert(b3 > b3a); -+ assert(!(b3a > b3)); - - bigint<3>::div_qr(quotient, remainder, b3, b2); -- EXPECT_LT(quotient.num_bits(), GMP_NUMB_BITS); -- EXPECT_EQ(quotient.as_ulong(), b1.as_ulong()); -- EXPECT_LT(remainder.num_bits(), GMP_NUMB_BITS); -- EXPECT_EQ(remainder.as_ulong(), 42); -+ assert(quotient.num_bits() < GMP_NUMB_BITS); -+ assert(quotient.as_ulong() == b1.as_ulong()); -+ assert(remainder.num_bits() < GMP_NUMB_BITS); -+ assert(remainder.as_ulong() == 42); - - b3a.clear(); -- EXPECT_TRUE(b3a.is_zero()); -- EXPECT_EQ(b3a.num_bits(), 0); -- EXPECT_FALSE(b3.is_zero()); -+ assert(b3a.is_zero()); -+ assert(b3a.num_bits() == 0); -+ assert(!(b3.is_zero())); - - bigint<4> bx = bigint<4>().randomize(); - bigint<4> by = bigint<4>().randomize(); -- EXPECT_FALSE(bx == by); -+ assert(!(bx == by)); - - // TODO: test serialization - } - -+int main(void) -+{ -+ test_bigint(); -+ return 0; -+} -+ -diff --git a/src/snark/libsnark/algebra/fields/tests/test_fields.cpp b/src/snark/libsnark/algebra/fields/tests/test_fields.cpp -index 969800d..a05f601 100644 ---- a/src/snark/libsnark/algebra/fields/tests/test_fields.cpp -+++ b/src/snark/libsnark/algebra/fields/tests/test_fields.cpp -@@ -5,6 +5,9 @@ - * @copyright MIT license (see LICENSE file) - *****************************************************************************/ - #include "common/profiling.hpp" -+#include "algebra/curves/edwards/edwards_pp.hpp" -+#include "algebra/curves/mnt/mnt4/mnt4_pp.hpp" -+#include "algebra/curves/mnt/mnt6/mnt6_pp.hpp" - #ifdef CURVE_BN128 - #include "algebra/curves/bn128/bn128_pp.hpp" - #endif -@@ -12,8 +15,6 @@ - #include "algebra/fields/fp6_3over2.hpp" - #include "algebra/fields/fp12_2over3over2.hpp" - --#include -- - using namespace libsnark; - - template -@@ -28,25 +29,25 @@ void test_field() - FieldT a = FieldT::random_element(); - FieldT a_ser; - a_ser = reserialize(a); -- EXPECT_EQ(a_ser, a); -+ assert(a_ser == a); - - FieldT b = FieldT::random_element(); - FieldT c = FieldT::random_element(); - FieldT d = FieldT::random_element(); - -- EXPECT_NE(a, zero); -- EXPECT_NE(a, one); -+ assert(a != zero); -+ assert(a != one); - -- EXPECT_EQ(a * a, a.squared()); -- EXPECT_EQ((a + b).squared(), a.squared() + a*b + b*a + b.squared()); -- EXPECT_EQ((a + b)*(c + d), a*c + a*d + b*c + b*d); -- EXPECT_EQ(a - b, a + (-b)); -- EXPECT_EQ(a - b, (-b) + a); -+ assert(a * a == a.squared()); -+ assert((a + b).squared() == a.squared() + a*b + b*a + b.squared()); -+ assert((a + b)*(c + d) == a*c + a*d + b*c + b*d); -+ assert(a - b == a + (-b)); -+ assert(a - b == (-b) + a); - -- EXPECT_EQ((a ^ rand1) * (a ^ rand2), (a^randsum)); -+ assert((a ^ rand1) * (a ^ rand2) == (a^randsum)); - -- EXPECT_EQ(a * a.inverse(), one); -- EXPECT_EQ((a + b) * c.inverse(), a * c.inverse() + (b.inverse() * c).inverse()); -+ assert(a * a.inverse() == one); -+ assert((a + b) * c.inverse() == a * c.inverse() + (b.inverse() * c).inverse()); - - } - -@@ -57,7 +58,7 @@ void test_sqrt() - { - FieldT a = FieldT::random_element(); - FieldT asq = a.squared(); -- EXPECT_TRUE(asq.sqrt() == a || asq.sqrt() == -a); -+ assert(asq.sqrt() == a || asq.sqrt() == -a); - } - } - -@@ -65,21 +66,21 @@ template - void test_two_squarings() - { - FieldT a = FieldT::random_element(); -- EXPECT_EQ(a.squared(), a * a); -- EXPECT_EQ(a.squared(), a.squared_complex()); -- EXPECT_EQ(a.squared(), a.squared_karatsuba()); -+ assert(a.squared() == a * a); -+ assert(a.squared() == a.squared_complex()); -+ assert(a.squared() == a.squared_karatsuba()); - } - - template - void test_Frobenius() - { - FieldT a = FieldT::random_element(); -- EXPECT_EQ(a.Frobenius_map(0), a); -+ assert(a.Frobenius_map(0) == a); - FieldT a_q = a ^ FieldT::base_field_char(); - for (size_t power = 1; power < 10; ++power) - { - const FieldT a_qi = a.Frobenius_map(power); -- EXPECT_EQ(a_qi, a_q); -+ assert(a_qi == a_q); - - a_q = a_q ^ FieldT::base_field_char(); - } -@@ -88,10 +89,49 @@ void test_Frobenius() - template - void test_unitary_inverse() - { -- EXPECT_EQ(FieldT::extension_degree() % 2, 0); -+ assert(FieldT::extension_degree() % 2 == 0); - FieldT a = FieldT::random_element(); - FieldT aqcubed_minus1 = a.Frobenius_map(FieldT::extension_degree()/2) * a.inverse(); -- EXPECT_EQ(aqcubed_minus1.inverse(), aqcubed_minus1.unitary_inverse()); -+ assert(aqcubed_minus1.inverse() == aqcubed_minus1.unitary_inverse()); -+} -+ -+template -+void test_cyclotomic_squaring(); -+ -+template<> -+void test_cyclotomic_squaring >() -+{ -+ typedef Fqk FieldT; -+ assert(FieldT::extension_degree() % 2 == 0); -+ FieldT a = FieldT::random_element(); -+ FieldT a_unitary = a.Frobenius_map(FieldT::extension_degree()/2) * a.inverse(); -+ // beta = a^((q^(k/2)-1)*(q+1)) -+ FieldT beta = a_unitary.Frobenius_map(1) * a_unitary; -+ assert(beta.cyclotomic_squared() == beta.squared()); -+} -+ -+template<> -+void test_cyclotomic_squaring >() -+{ -+ typedef Fqk FieldT; -+ assert(FieldT::extension_degree() % 2 == 0); -+ FieldT a = FieldT::random_element(); -+ FieldT a_unitary = a.Frobenius_map(FieldT::extension_degree()/2) * a.inverse(); -+ // beta = a^(q^(k/2)-1) -+ FieldT beta = a_unitary; -+ assert(beta.cyclotomic_squared() == beta.squared()); -+} -+ -+template<> -+void test_cyclotomic_squaring >() -+{ -+ typedef Fqk FieldT; -+ assert(FieldT::extension_degree() % 2 == 0); -+ FieldT a = FieldT::random_element(); -+ FieldT a_unitary = a.Frobenius_map(FieldT::extension_degree()/2) * a.inverse(); -+ // beta = a^((q^(k/2)-1)*(q+1)) -+ FieldT beta = a_unitary.Frobenius_map(1) * a_unitary; -+ assert(beta.cyclotomic_squared() == beta.squared()); - } - - template -@@ -157,16 +197,16 @@ void test_Fp4_tom_cook() - c2 = - (FieldT(5)*(FieldT(4).inverse()))* v0 + (FieldT(2)*(FieldT(3).inverse()))*(v1 + v2) - FieldT(24).inverse()*(v3 + v4) + FieldT(4)*v6 + beta*v6; - c3 = FieldT(12).inverse() * (FieldT(5)*v0 - FieldT(7)*v1) - FieldT(24).inverse()*(v2 - FieldT(7)*v3 + v4 + v5) + FieldT(15)*v6; - -- EXPECT_EQ(res, correct_res); -+ assert(res == correct_res); - - // {v0, v3, v4, v5} - const FieldT u = (FieldT::one() - beta).inverse(); -- EXPECT_EQ(v0, u * c0 + beta * u * c2 - beta * u * FieldT(2).inverse() * v1 - beta * u * FieldT(2).inverse() * v2 + beta * v6); -- EXPECT_EQ(v3, - FieldT(15) * u * c0 - FieldT(30) * u * c1 - FieldT(3) * (FieldT(4) + beta) * u * c2 - FieldT(6) * (FieldT(4) + beta) * u * c3 + (FieldT(24) - FieldT(3) * beta * FieldT(2).inverse()) * u * v1 + (-FieldT(8) + beta * FieldT(2).inverse()) * u * v2 -+ assert(v0 == u * c0 + beta * u * c2 - beta * u * FieldT(2).inverse() * v1 - beta * u * FieldT(2).inverse() * v2 + beta * v6); -+ assert(v3 == - FieldT(15) * u * c0 - FieldT(30) * u * c1 - FieldT(3) * (FieldT(4) + beta) * u * c2 - FieldT(6) * (FieldT(4) + beta) * u * c3 + (FieldT(24) - FieldT(3) * beta * FieldT(2).inverse()) * u * v1 + (-FieldT(8) + beta * FieldT(2).inverse()) * u * v2 - - FieldT(3) * (-FieldT(16) + beta) * v6); -- EXPECT_EQ(v4, - FieldT(15) * u * c0 + FieldT(30) * u * c1 - FieldT(3) * (FieldT(4) + beta) * u * c2 + FieldT(6) * (FieldT(4) + beta) * u * c3 + (FieldT(24) - FieldT(3) * beta * FieldT(2).inverse()) * u * v2 + (-FieldT(8) + beta * FieldT(2).inverse()) * u * v1 -+ assert(v4 == - FieldT(15) * u * c0 + FieldT(30) * u * c1 - FieldT(3) * (FieldT(4) + beta) * u * c2 + FieldT(6) * (FieldT(4) + beta) * u * c3 + (FieldT(24) - FieldT(3) * beta * FieldT(2).inverse()) * u * v2 + (-FieldT(8) + beta * FieldT(2).inverse()) * u * v1 - - FieldT(3) * (-FieldT(16) + beta) * v6); -- EXPECT_EQ(v5, - FieldT(80) * u * c0 - FieldT(240) * u * c1 - FieldT(8) * (FieldT(9) + beta) * u * c2 - FieldT(24) * (FieldT(9) + beta) * u * c3 - FieldT(2) * (-FieldT(81) + beta) * u * v1 + (-FieldT(81) + beta) * u * v2 -+ assert(v5 == - FieldT(80) * u * c0 - FieldT(240) * u * c1 - FieldT(8) * (FieldT(9) + beta) * u * c2 - FieldT(24) * (FieldT(9) + beta) * u * c3 - FieldT(2) * (-FieldT(81) + beta) * u * v1 + (-FieldT(81) + beta) * u * v2 - - FieldT(8) * (-FieldT(81) + beta) * v6); - - // c0 + beta c2 - (beta v1)/2 - (beta v2)/ 2 - (-1 + beta) beta v6, -@@ -176,8 +216,22 @@ void test_Fp4_tom_cook() - } - } - --TEST(algebra, fields) -+int main(void) - { -+ edwards_pp::init_public_params(); -+ test_all_fields(); -+ test_cyclotomic_squaring >(); -+ -+ mnt4_pp::init_public_params(); -+ test_all_fields(); -+ test_Fp4_tom_cook(); -+ test_two_squarings >(); -+ test_cyclotomic_squaring >(); -+ -+ mnt6_pp::init_public_params(); -+ test_all_fields(); -+ test_cyclotomic_squaring >(); -+ - alt_bn128_pp::init_public_params(); - test_field(); - test_Frobenius(); -diff --git a/src/snark/libsnark/algebra/scalar_multiplication/kc_multiexp.tcc b/src/snark/libsnark/algebra/scalar_multiplication/kc_multiexp.tcc -index e9c08d4..6052033 100644 ---- a/src/snark/libsnark/algebra/scalar_multiplication/kc_multiexp.tcc -+++ b/src/snark/libsnark/algebra/scalar_multiplication/kc_multiexp.tcc -@@ -8,6 +8,8 @@ - #ifndef KC_MULTIEXP_TCC_ - #define KC_MULTIEXP_TCC_ - -+#include "common/assert_except.hpp" -+ - namespace libsnark { - - template -@@ -50,7 +52,7 @@ knowledge_commitment kc_multi_exp_with_mixed_addition(const knowledge_co - while (index_it != vec.indices.end() && *index_it < max_idx) - { - const size_t scalar_position = (*index_it) - min_idx; -- assert(scalar_position < scalar_length); -+ assert_except(scalar_position < scalar_length); - - const FieldT scalar = *(scalar_start + scalar_position); - -diff --git a/src/snark/libsnark/algebra/scalar_multiplication/multiexp.tcc b/src/snark/libsnark/algebra/scalar_multiplication/multiexp.tcc -index a6b14c4..5dd19a6 100644 ---- a/src/snark/libsnark/algebra/scalar_multiplication/multiexp.tcc -+++ b/src/snark/libsnark/algebra/scalar_multiplication/multiexp.tcc -@@ -22,6 +22,7 @@ - - #include "common/profiling.hpp" - #include "common/utils.hpp" -+#include "common/assert_except.hpp" - #include "algebra/scalar_multiplication/wnaf.hpp" - - namespace libsnark { -@@ -40,7 +41,7 @@ public: - #if defined(__x86_64__) && defined(USE_ASM) - if (n == 3) - { -- long res; -+ int64_t res; - __asm__ - ("// check for overflow \n\t" - "mov $0, %[res] \n\t" -@@ -58,7 +59,7 @@ public: - } - else if (n == 4) - { -- long res; -+ int64_t res; - __asm__ - ("// check for overflow \n\t" - "mov $0, %[res] \n\t" -@@ -77,7 +78,7 @@ public: - } - else if (n == 5) - { -- long res; -+ int64_t res; - __asm__ - ("// check for overflow \n\t" - "mov $0, %[res] \n\t" -@@ -119,7 +120,7 @@ T naive_exp(typename std::vector::const_iterator vec_start, - bigint scalar_bigint = scalar_it->as_bigint(); - result = result + opt_window_wnaf_exp(*vec_it, scalar_bigint, scalar_bigint.num_bits()); - } -- assert(scalar_it == scalar_end); -+ assert_except(scalar_it == scalar_end); - - return result; - } -@@ -139,7 +140,7 @@ T naive_plain_exp(typename std::vector::const_iterator vec_start, - { - result = result + (*scalar_it) * (*vec_it); - } -- assert(scalar_it == scalar_end); -+ assert_except(scalar_it == scalar_end); - - return result; - } -@@ -185,15 +186,15 @@ T multi_exp_inner(typename std::vector::const_iterator vec_start, - opt_q.emplace_back(ordered_exponent(i, scalar_it->as_bigint())); - } - std::make_heap(opt_q.begin(),opt_q.end()); -- assert(scalar_it == scalar_end); -+ assert_except(scalar_it == scalar_end); - - if (vec_len != odd_vec_len) - { - g.emplace_back(T::zero()); -- opt_q.emplace_back(ordered_exponent(odd_vec_len - 1, bigint(0ul))); -+ opt_q.emplace_back(ordered_exponent(odd_vec_len - 1, bigint(UINT64_C(0)))); - } -- assert(g.size() % 2 == 1); -- assert(opt_q.size() == g.size()); -+ assert_except(g.size() % 2 == 1); -+ assert_except(opt_q.size() == g.size()); - - T opt_result = T::zero(); - -@@ -214,7 +215,7 @@ T multi_exp_inner(typename std::vector::const_iterator vec_start, - const size_t bbits = b.r.num_bits(); - const size_t limit = (abits-bbits >= 20 ? 20 : abits-bbits); - -- if (bbits < 1ul<::const_iterator vec_star - const size_t chunks, - const bool use_multiexp) - { -- assert(std::distance(vec_start, vec_end) == std::distance(scalar_start, scalar_end)); -+ assert_except(std::distance(vec_start, vec_end) == std::distance(scalar_start, scalar_end)); - enter_block("Process scalar vector"); - auto value_it = vec_start; - auto scalar_it = scalar_start; -@@ -389,7 +390,7 @@ size_t get_exp_window_size(const size_t num_scalars) - #endif - } - size_t window = 1; -- for (long i = T::fixed_base_exp_window_table.size()-1; i >= 0; --i) -+ for (int64_t i = T::fixed_base_exp_window_table.size()-1; i >= 0; --i) - { - #ifdef DEBUG - if (!inhibit_profiling_info) -@@ -420,9 +421,9 @@ window_table get_window_table(const size_t scalar_size, - const size_t window, - const T &g) - { -- const size_t in_window = 1ul< --std::vector find_wnaf(const size_t window_size, const bigint &scalar); -+std::vector find_wnaf(const size_t window_size, const bigint &scalar); - - /** - * In additive notation, use wNAF exponentiation (with the given window size) to compute scalar * base. -diff --git a/src/snark/libsnark/algebra/scalar_multiplication/wnaf.tcc b/src/snark/libsnark/algebra/scalar_multiplication/wnaf.tcc -index a5e47e8..4f2e407 100644 ---- a/src/snark/libsnark/algebra/scalar_multiplication/wnaf.tcc -+++ b/src/snark/libsnark/algebra/scalar_multiplication/wnaf.tcc -@@ -17,15 +17,15 @@ - namespace libsnark { - - template --std::vector find_wnaf(const size_t window_size, const bigint &scalar) -+std::vector find_wnaf(const size_t window_size, const bigint &scalar) - { - const size_t length = scalar.max_bits(); // upper bound -- std::vector res(length+1); -+ std::vector res(length+1); - bigint c = scalar; -- long j = 0; -+ int64_t j = 0; - while (!c.is_zero()) - { -- long u; -+ int64_t u; - if ((c.data[0] & 1) == 1) - { - u = c.data[0] % (1u << (window_size+1)); -@@ -59,11 +59,11 @@ std::vector find_wnaf(const size_t window_size, const bigint &scalar) - template - T fixed_window_wnaf_exp(const size_t window_size, const T &base, const bigint &scalar) - { -- std::vector naf = find_wnaf(window_size, scalar); -- std::vector table(1ul<<(window_size-1)); -+ std::vector naf = find_wnaf(window_size, scalar); -+ std::vector table(UINT64_C(1)<<(window_size-1)); - T tmp = base; - T dbl = base.dbl(); -- for (size_t i = 0; i < 1ul<<(window_size-1); ++i) -+ for (size_t i = 0; i < UINT64_C(1)<<(window_size-1); ++i) - { - table[i] = tmp; - tmp = tmp + dbl; -@@ -71,7 +71,7 @@ T fixed_window_wnaf_exp(const size_t window_size, const T &base, const bigint - - T res = T::zero(); - bool found_nonzero = false; -- for (long i = naf.size()-1; i >= 0; --i) -+ for (int64_t i = naf.size()-1; i >= 0; --i) - { - if (found_nonzero) - { -@@ -99,7 +99,7 @@ template - T opt_window_wnaf_exp(const T &base, const bigint &scalar, const size_t scalar_bits) - { - size_t best = 0; -- for (long i = T::wnaf_window_table.size() - 1; i >= 0; --i) -+ for (int64_t i = T::wnaf_window_table.size() - 1; i >= 0; --i) - { - if (scalar_bits >= T::wnaf_window_table[i]) - { -diff --git a/src/snark/libsnark/common/data_structures/merkle_tree.tcc b/src/snark/libsnark/common/data_structures/merkle_tree.tcc -index 281700b..ce28b12 100644 ---- a/src/snark/libsnark/common/data_structures/merkle_tree.tcc -+++ b/src/snark/libsnark/common/data_structures/merkle_tree.tcc -@@ -66,14 +66,14 @@ merkle_tree::merkle_tree(const size_t depth, - assert(log2(contents_as_vector.size()) <= depth); - for (size_t address = 0; address < contents_as_vector.size(); ++address) - { -- const size_t idx = address + (1ul< 0; --layer) - { -@@ -100,13 +100,13 @@ merkle_tree::merkle_tree(const size_t depth, - - if (!contents.empty()) - { -- assert(contents.rbegin()->first < 1ul<first < UINT64_C(1)<first; - const bit_vector value = it->second; -- const size_t idx = address + (1ul<::set_value(const size_t address, - const bit_vector &value) - { - assert(log2(address) <= depth); -- size_t idx = address + (1ul<::get_path(con - { - typename HashT::merkle_authentication_path_type result(depth); - assert(log2(address) <= depth); -- size_t idx = address + (1ul< 0; --layer) - { -@@ -209,7 +209,7 @@ typename HashT::merkle_authentication_path_type merkle_tree::get_path(con - auto it = hashes.find(sibling_idx); - if (layer == depth) - { -- auto it2 = values.find(sibling_idx - ((1ul<second); - result[layer-1].resize(digest_size); - } -@@ -227,7 +227,7 @@ typename HashT::merkle_authentication_path_type merkle_tree::get_path(con - template - void merkle_tree::dump() const - { -- for (size_t i = 0; i < 1ul< ", i); -diff --git a/src/snark/libsnark/common/data_structures/sparse_vector.hpp b/src/snark/libsnark/common/data_structures/sparse_vector.hpp -index 8b134f4..20f1bc2 100644 ---- a/src/snark/libsnark/common/data_structures/sparse_vector.hpp -+++ b/src/snark/libsnark/common/data_structures/sparse_vector.hpp -@@ -32,9 +32,9 @@ std::istream& operator>>(std::istream &in, sparse_vector &v); - template - struct sparse_vector { - -- std::vector indices; -+ std::vector indices; - std::vector values; -- size_t domain_size_ = 0; -+ uint64_t domain_size_ = 0; - - sparse_vector() = default; - sparse_vector(const sparse_vector &other) = default; -@@ -44,7 +44,7 @@ struct sparse_vector { - sparse_vector& operator=(const sparse_vector &other) = default; - sparse_vector& operator=(sparse_vector &&other) = default; - -- T operator[](const size_t idx) const; -+ T operator[](const uint64_t idx) const; - - bool operator==(const sparse_vector &other) const; - bool operator==(const std::vector &other) const; -@@ -52,15 +52,15 @@ - bool is_valid() const; - bool empty() const; - -- size_t domain_size() const; // return domain_size_ -- size_t size() const; // return the number of indices (representing the number of non-zero entries) -- size_t size_in_bits() const; // return the number bits needed to store the sparse vector -+ uint64_t domain_size() const; // return domain_size_ -+ uint64_t size() const; // return the number of indices (representing the number of non-zero entries) -+ uint64_t size_in_bits() const; // return the number bits needed to store the sparse vector - - /* return a pair consisting of the accumulated value and the sparse vector of non-accumulated values */ - template - std::pair > accumulate(const typename std::vector::const_iterator &it_begin, - const typename std::vector::const_iterator &it_end, -- const size_t offset) const; -+ const uint64_t offset) const; - - friend std::ostream& operator<< (std::ostream &out, const sparse_vector &v); - friend std::istream& operator>> (std::istream &in, sparse_vector &v); -diff --git a/src/snark/libsnark/common/data_structures/sparse_vector.tcc b/src/snark/libsnark/common/data_structures/sparse_vector.tcc -index cfc5d75..906ed16 100644 ---- a/src/snark/libsnark/common/data_structures/sparse_vector.tcc -+++ b/src/snark/libsnark/common/data_structures/sparse_vector.tcc -@@ -29,7 +29,7 @@ sparse_vector::sparse_vector(std::vector &&v) : - } - - template --T sparse_vector::operator[](const size_t idx) const -+T sparse_vector::operator[](const uint64_t idx) const - { - auto it = std::lower_bound(indices.begin(), indices.end(), idx); - return (it != indices.end() && *it == idx) ? values[it - indices.begin()] : T(); -@@ -43,7 +43,7 @@ bool sparse_vector::operator==(const sparse_vector &other) const - return false; - } - -- size_t this_pos = 0, other_pos = 0; -+ uint64_t this_pos = 0, other_pos = 0; - while (this_pos < this->indices.size() && other_pos < other.indices.size()) - { - if (this->indices[this_pos] == other.indices[other_pos]) -@@ -103,8 +103,8 @@ bool sparse_vector::operator==(const std::vector &other) const - return false; - } - -- size_t j = 0; -- for (size_t i = 0; i < other.size(); ++i) -+ uint64_t j = 0; -+ for (uint64_t i = 0; i < other.size(); ++i) - { - if (this->indices[j] == i) - { -@@ -134,7 +134,7 @@ bool sparse_vector::is_valid() const - return false; - } - -- for (size_t i = 0; i + 1 < indices.size(); ++i) -+ for (uint64_t i = 0; i + 1 < indices.size(); ++i) - { - if (indices[i] >= indices[i+1]) - { -@@ -157,42 +157,42 @@ bool sparse_vector::empty() const - } - - template --size_t sparse_vector::domain_size() const -+uint64_t sparse_vector::domain_size() const - { - return domain_size_; - } - - template --size_t sparse_vector::size() const -+uint64_t sparse_vector::size() const - { - return indices.size(); - } - - template --size_t sparse_vector::size_in_bits() const -+uint64_t sparse_vector::size_in_bits() const - { -- return indices.size() * (sizeof(size_t) * 8 + T::size_in_bits()); -+ return indices.size() * (sizeof(uint64_t) * 8 + T::size_in_bits()); - } - - template - template - std::pair > sparse_vector::accumulate(const typename std::vector::const_iterator &it_begin, - const typename std::vector::const_iterator &it_end, -- const size_t offset) const -+ const uint64_t offset) const - { - // TODO: does not really belong here. -- const size_t chunks = 1; -+ const uint64_t chunks = 1; - const bool use_multiexp = true; - - T accumulated_value = T::zero(); - sparse_vector resulting_vector; - resulting_vector.domain_size_ = domain_size_; - -- const size_t range_len = it_end - it_begin; -+ const uint64_t range_len = it_end - it_begin; - bool in_block = false; -- size_t first_pos = -1, last_pos = -1; // g++ -flto emits unitialized warning, even though in_block guards for such cases. -+ uint64_t first_pos = -1, last_pos = -1; // g++ -flto emits unitialized warning, even though in_block guards for such cases. - -- for (size_t i = 0; i < indices.size(); ++i) -+ for (uint64_t i = 0; i < indices.size(); ++i) - { - const bool matching_pos = (offset <= indices[i] && indices[i] < offset + range_len); - // printf("i = %zu, pos[i] = %zu, offset = %zu, w_size = %zu\n", i, indices[i], offset, w_size); -@@ -265,7 +265,7 @@ std::ostream& operator<<(std::ostream& out, const sparse_vector &v) - { - out << v.domain_size_ << "\n"; - out << v.indices.size() << "\n"; -- for (const size_t& i : v.indices) -+ for (const uint64_t& i : v.indices) - { - out << i << "\n"; - } -@@ -285,11 +285,11 @@ std::istream& operator>>(std::istream& in, sparse_vector &v) - in >> v.domain_size_; - consume_newline(in); - -- size_t s; -+ uint64_t s; - in >> s; - consume_newline(in); - v.indices.resize(s); -- for (size_t i = 0; i < s; ++i) -+ for (uint64_t i = 0; i < s; ++i) - { - in >> v.indices[i]; - consume_newline(in); -@@ -300,7 +300,7 @@ std::istream& operator>>(std::istream& in, sparse_vector &v) - consume_newline(in); - v.values.reserve(s); - -- for (size_t i = 0; i < s; ++i) -+ for (uint64_t i = 0; i < s; ++i) - { - T t; - in >> t; -diff --git a/src/snark/libsnark/common/profiling.cpp b/src/snark/libsnark/common/profiling.cpp -index d227203..e4a2146 100644 ---- a/src/snark/libsnark/common/profiling.cpp -+++ b/src/snark/libsnark/common/profiling.cpp -@@ -26,29 +26,46 @@ - #include - #endif - -+#ifdef __MACH__ // required to build on MacOS -+#include -+#include -+#include -+#include -+#endif -+ - namespace libsnark { - --long long get_nsec_time() -+int64_t get_nsec_time() - { - auto timepoint = std::chrono::high_resolution_clock::now(); - return std::chrono::duration_cast(timepoint.time_since_epoch()).count(); - } - - /* Return total CPU time consumed by all threads of the process, in nanoseconds. */ --long long get_nsec_cpu_time() -+int64_t get_nsec_cpu_time() - { - ::timespec ts; -+ #ifdef __MACH__ -+ clock_serv_t cclock; -+ mach_timespec_t mts; -+ host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock); -+ clock_get_time(cclock, &mts); -+ mach_port_deallocate(mach_task_self(), cclock); -+ ts.tv_sec = mts.tv_sec; -+ ts.tv_nsec = mts.tv_nsec; -+ #else - if ( ::clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts) ) - throw ::std::runtime_error("clock_gettime(CLOCK_PROCESS_CPUTIME_ID) failed"); - // If we expected this to work, don't silently ignore failures, because that would hide the problem and incur an unnecessarily system-call overhead. So if we ever observe this exception, we should probably add a suitable #ifdef . - //TODO: clock_gettime(CLOCK_PROCESS_CPUTIME_ID) is not supported by native Windows. What about Cygwin? Should we #ifdef on CLOCK_PROCESS_CPUTIME_ID or on __linux__? -+ #endif - return ts.tv_sec * 1000000000ll + ts.tv_nsec; - } - --static long long start_time; --static long long last_time; --static long long start_cpu_time; --static long long last_cpu_time; -+static int64_t start_time; -+static int64_t last_time; -+static int64_t start_cpu_time; -+static int64_t last_cpu_time; - - void start_profiling() - { -@@ -59,20 +76,20 @@ - } - - std::map invocation_counts; --static std::map enter_times; --std::map last_times; --std::map cumulative_times; -+static std::map enter_times; -+std::map last_times; -+std::map cumulative_times; - //TODO: Instead of analogous maps for time and cpu_time, use a single struct-valued map --static std::map enter_cpu_times; --static std::map last_cpu_times; --static std::map, long long> op_counts; --static std::map, long long> cumulative_op_counts; // ((msg, data_point), value) -+static std::map enter_cpu_times; -+static std::map last_cpu_times; -+static std::map, int64_t> op_counts; -+static std::map, int64_t> cumulative_op_counts; // ((msg, data_point), value) - // TODO: Convert op_counts and cumulative_op_counts from pair to structs - static size_t indentation = 0; - - static std::vector block_names; - --static std::list > op_data_points = { -+static std::list > op_data_points = { - #ifdef PROFILE_OP_COUNTS - std::make_pair("Fradd", &Fr::add_cnt), - std::make_pair("Frsub", &Fr::sub_cnt), -@@ -98,7 +115,7 @@ void clear_profiling_counters() - cumulative_times.clear(); - } - --void print_cumulative_time_entry(const std::string &key, const long long factor) -+void print_cumulative_time_entry(const std::string &key, const int64_t factor) - { - const double total_ms = (cumulative_times.at(key) * 1e-6); - const size_t cnt = invocation_counts.at(key); -@@ -106,7 +123,7 @@ void print_cumulative_time_entry(const std::string &key, const long long factor) - printf(" %-45s: %12.5fms = %lld * %0.5fms (%zu invocations, %0.5fms = %lld * %0.5fms per invocation)\n", key.c_str(), total_ms, factor, total_ms/factor, cnt, avg_ms, factor, avg_ms/factor); - } - --void print_cumulative_times(const long long factor) -+void print_cumulative_times(const int64_t factor) - { - printf("Dumping times:\n"); - for (auto& kv : cumulative_times) -@@ -155,7 +172,7 @@ void print_op_profiling(const std::string &msg) - - printf("(opcounts) = ("); - bool first = true; -- for (std::pair p : op_data_points) -+ for (std::pair p : op_data_points) - { - if (!first) - { -@@ -171,14 +188,14 @@ void print_op_profiling(const std::string &msg) - #endif - } - --static void print_times_from_last_and_start(long long now, long long last, -- long long cpu_now, long long cpu_last) -+static void print_times_from_last_and_start(int64_t now, int64_t last, -+ int64_t cpu_now, int64_t cpu_last) - { -- long long time_from_start = now - start_time; -- long long time_from_last = now - last; -+ int64_t time_from_start = now - start_time; -+ int64_t time_from_last = now - last; - -- long long cpu_time_from_start = cpu_now - start_cpu_time; -- long long cpu_time_from_last = cpu_now - cpu_last; -+ int64_t cpu_time_from_start = cpu_now - start_cpu_time; -+ int64_t cpu_time_from_last = cpu_now - cpu_last; - - if (time_from_last != 0) { - double parallelism_from_last = 1.0 * cpu_time_from_last / time_from_last; -@@ -199,8 +216,8 @@ void print_time(const char* msg) - return; - } - -- long long now = get_nsec_time(); -- long long cpu_now = get_nsec_cpu_time(); -+ int64_t now = get_nsec_time(); -+ int64_t cpu_now = get_nsec_cpu_time(); - - printf("%-35s\t", msg); - print_times_from_last_and_start(now, last_time, cpu_now, last_cpu_time); -@@ -231,7 +248,7 @@ void print_indent() - - void op_profiling_enter(const std::string &msg) - { -- for (std::pair p : op_data_points) -+ for (std::pair p : op_data_points) - { - op_counts[std::make_pair(msg, p.first)] = *(p.second); - } -@@ -245,9 +262,9 @@ void enter_block(const std::string &msg, const bool indent) - } - - block_names.emplace_back(msg); -- long long t = get_nsec_time(); -+ int64_t t = get_nsec_time(); - enter_times[msg] = t; -- long long cpu_t = get_nsec_cpu_time(); -+ int64_t cpu_t = get_nsec_cpu_time(); - enter_cpu_times[msg] = cpu_t; - - if (inhibit_profiling_info) -@@ -288,15 +305,15 @@ void leave_block(const std::string &msg, const bool indent) - - ++invocation_counts[msg]; - -- long long t = get_nsec_time(); -+ int64_t t = get_nsec_time(); - last_times[msg] = (t - enter_times[msg]); - cumulative_times[msg] += (t - enter_times[msg]); - -- long long cpu_t = get_nsec_cpu_time(); -+ int64_t cpu_t = get_nsec_cpu_time(); - last_cpu_times[msg] = (cpu_t - enter_cpu_times[msg]); - - #ifdef PROFILE_OP_COUNTS -- for (std::pair p : op_data_points) -+ for (std::pair p : op_data_points) - { - cumulative_op_counts[std::make_pair(msg, p.first)] += *(p.second)-op_counts[std::make_pair(msg, p.first)]; - } -diff --git a/src/snark/libsnark/common/profiling.hpp b/src/snark/libsnark/common/profiling.hpp -index 9619117..4a49610 100644 ---- a/src/snark/libsnark/common/profiling.hpp -+++ b/src/snark/libsnark/common/profiling.hpp -@@ -22,7 +22,7 @@ - namespace libsnark { - - void start_profiling(); --long long get_nsec_time(); -+int64_t get_nsec_time(); - void print_time(const char* msg); - void print_header(const char* msg); - -@@ -31,13 +31,13 @@ void print_indent(); - extern bool inhibit_profiling_info; - extern bool inhibit_profiling_counters; - extern std::map invocation_counts; --extern std::map last_times; --extern std::map cumulative_times; -+extern std::map last_times; -+extern std::map cumulative_times; - - void clear_profiling_counters(); - --void print_cumulative_time_entry(const std::string &key, const long long factor=1); --void print_cumulative_times(const long long factor=1); -+void print_cumulative_time_entry(const std::string &key, const int64_t factor=1); -+void print_cumulative_times(const int64_t factor=1); - void print_cumulative_op_counts(const bool only_fq=false); - - void enter_block(const std::string &msg, const bool indent=true); -diff --git a/src/snark/libsnark/common/serialization.tcc b/src/snark/libsnark/common/serialization.tcc -index 398f978..7983c9f 100644 ---- a/src/snark/libsnark/common/serialization.tcc -+++ b/src/snark/libsnark/common/serialization.tcc -@@ -17,6 +17,7 @@ - #include - #include - #include "common/utils.hpp" -+#include "common/assert_except.hpp" - - namespace libsnark { - -@@ -69,7 +70,7 @@ T reserialize(const T &obj) - ss << obj; - T tmp; - ss >> tmp; -- assert(obj == tmp); -+ assert_except(obj == tmp); - return tmp; - } - -diff --git a/src/snark/libsnark/common/utils.cpp b/src/snark/libsnark/common/utils.cpp -index dd114fd..5bcaf82 100644 ---- a/src/snark/libsnark/common/utils.cpp -+++ b/src/snark/libsnark/common/utils.cpp -@@ -15,11 +15,11 @@ - - namespace libsnark { - --size_t log2(size_t n) -+uint64_t log2(uint64_t n) - /* returns ceil(log2(n)), so 1ul< 1) - { -@@ -30,10 +30,10 @@ size_t log2(size_t n) - return r; - } - --size_t bitreverse(size_t n, const size_t l) -+uint64_t bitreverse(uint64_t n, const uint64_t l) - { -- size_t r = 0; -- for (size_t k = 0; k < l; ++k) -+ uint64_t r = 0; -+ for (uint64_t k = 0; k < l; ++k) - { - r = (r << 1) | (n & 1); - n >>= 1; -@@ -41,20 +41,20 @@ size_t bitreverse(size_t n, const size_t l) - return r; - } - --bit_vector int_list_to_bits(const std::initializer_list &l, const size_t wordsize) -+bit_vector int_list_to_bits(const std::initializer_list &l, const size_t wordsize) - { - bit_vector res(wordsize*l.size()); -- for (size_t i = 0; i < l.size(); ++i) -+ for (uint64_t i = 0; i < l.size(); ++i) - { -- for (size_t j = 0; j < wordsize; ++j) -+ for (uint64_t j = 0; j < wordsize; ++j) - { -- res[i*wordsize + j] = (*(l.begin()+i) & (1ul<<(wordsize-1-j))); -+ res[i*wordsize + j] = (*(l.begin()+i) & (UINT64_C(1)<<(wordsize-1-j))); - } - } - return res; - } - --long long div_ceil(long long x, long long y) -+int64_t div_ceil(int64_t x, int64_t y) - { - return (x + (y-1)) / y; - } -@@ -68,7 +68,7 @@ bool is_little_endian() - - std::string FORMAT(const std::string &prefix, const char* format, ...) - { -- const static size_t MAX_FMT = 256; -+ const static uint64_t MAX_FMT = 256; - char buf[MAX_FMT]; - va_list args; - va_start(args, format); -@@ -81,7 +81,7 @@ std::string FORMAT(const std::string &prefix, const char* format, ...) - void serialize_bit_vector(std::ostream &out, const bit_vector &v) - { - out << v.size() << "\n"; -- for (size_t i = 0; i < v.size(); ++i) -+ for (uint64_t i = 0; i < v.size(); ++i) - { - out << v[i] << "\n"; - } -@@ -89,10 +89,10 @@ void serialize_bit_vector(std::ostream &out, const bit_vector &v) - - void deserialize_bit_vector(std::istream &in, bit_vector &v) - { -- size_t size; -+ uint64_t size; - in >> size; - v.resize(size); -- for (size_t i = 0; i < size; ++i) -+ for (uint64_t i = 0; i < size; ++i) - { - bool b; - in >> b; -diff --git a/src/snark/libsnark/common/utils.hpp b/src/snark/libsnark/common/utils.hpp -index d7d9e89..6879f80 100644 ---- a/src/snark/libsnark/common/utils.hpp -+++ b/src/snark/libsnark/common/utils.hpp -@@ -21,13 +21,13 @@ namespace libsnark { - typedef std::vector bit_vector; - - /// returns ceil(log2(n)), so 1ul< &l, const size_t wordsize); --long long div_ceil(long long x, long long y); -+uint64_t bitreverse(uint64_t n, const uint64_t l); -+bit_vector int_list_to_bits(const std::initializer_list &l, const uint64_t wordsize); -+int64_t div_ceil(int64_t x, int64_t y); - - bool is_little_endian(); - -@@ -46,8 +46,13 @@ void UNUSED(Types&&...) {} - void serialize_bit_vector(std::ostream &out, const bit_vector &v); - void deserialize_bit_vector(std::istream &in, bit_vector &v); - -+#ifdef __APPLE__ - template --size_t size_in_bits(const std::vector &v); -+unsigned long size_in_bits(const std::vector &v); -+#else -+template -+uint64_t size_in_bits(const std::vector &v); -+#endif - - #define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0])) - -diff --git a/src/snark/libsnark/common/utils.tcc b/src/snark/libsnark/common/utils.tcc -index f97178f..4afdc8b 100644 ---- a/src/snark/libsnark/common/utils.tcc -+++ b/src/snark/libsnark/common/utils.tcc -@@ -12,11 +12,19 @@ - - namespace libsnark { - -+#ifdef __APPLE__ -+template -+unsigned long size_in_bits(const std::vector &v) -+{ -+ return v.size() * T::size_in_bits(); -+} -+#else - template - size_t size_in_bits(const std::vector &v) - { - return v.size() * T::size_in_bits(); - } -+#endif - - } // libsnark - -diff --git a/src/snark/libsnark/gadgetlib1/gadgets/basic_gadgets.tcc b/src/snark/libsnark/gadgetlib1/gadgets/basic_gadgets.tcc -index 213b190..bcd2f2c 100644 ---- a/src/snark/libsnark/gadgetlib1/gadgets/basic_gadgets.tcc -+++ b/src/snark/libsnark/gadgetlib1/gadgets/basic_gadgets.tcc -@@ -275,11 +275,11 @@ void test_disjunction_gadget(const size_t n) - disjunction_gadget d(pb, inputs, output, "d"); - d.generate_r1cs_constraints(); - -- for (size_t w = 0; w < 1ul< c(pb, inputs, output, "c"); - c.generate_r1cs_constraints(); - -- for (size_t w = 0; w < 1ul< cmp(pb, n, A, B, less, less_or_eq, "cmp"); - cmp.generate_r1cs_constraints(); - -- for (size_t a = 0; a < 1ul< g(pb, A, B, result, "g"); - g.generate_r1cs_constraints(); - -- for (size_t i = 0; i < 1ul<::generate_r1cs_witness() - { - /* assumes that idx can be fit in ulong; true for our purposes for now */ - const bigint valint = this->pb.val(index).as_bigint(); -- unsigned long idx = valint.as_ulong(); -+ uint64_t idx = valint.as_ulong(); - const bigint arrsize(arr.size()); - - if (idx >= arr.size() || mpn_cmp(valint.data, arrsize.data, FieldT::num_limbs) >= 0) -@@ -619,7 +619,7 @@ void test_loose_multiplexing_gadget(const size_t n) - protoboard pb; - - pb_variable_array arr; -- arr.allocate(pb, 1ul< index, result, success_flag; - index.allocate(pb, "index"); - result.allocate(pb, "result"); -@@ -628,20 +628,20 @@ void test_loose_multiplexing_gadget(const size_t n) - loose_multiplexing_gadget g(pb, arr, index, result, success_flag, "g"); - g.generate_r1cs_constraints(); - -- for (size_t i = 0; i < 1ul<::generate_r1cs_witness() - { - for (size_t i = 0; i < 32; ++i) - { -- const long v = (this->pb.lc_val(X[i]) + this->pb.lc_val(Y[i]) + this->pb.lc_val(Z[i])).as_ulong(); -+ const int64_t v = (this->pb.lc_val(X[i]) + this->pb.lc_val(Y[i]) + this->pb.lc_val(Z[i])).as_ulong(); - this->pb.val(result_bits[i]) = FieldT(v / 2); - } - -diff --git a/src/snark/libsnark/gadgetlib1/gadgets/hashes/sha256/sha256_components.hpp b/src/snark/libsnark/gadgetlib1/gadgets/hashes/sha256/sha256_components.hpp -index c2f31e3..13bbc07 100644 ---- a/src/snark/libsnark/gadgetlib1/gadgets/hashes/sha256/sha256_components.hpp -+++ b/src/snark/libsnark/gadgetlib1/gadgets/hashes/sha256/sha256_components.hpp -@@ -78,7 +78,7 @@ public: - pb_linear_combination_array g; - pb_linear_combination_array h; - pb_variable W; -- long K; -+ int64_t K; - pb_linear_combination_array new_a; - pb_linear_combination_array new_e; - -@@ -92,7 +92,7 @@ public: - const pb_linear_combination_array &g, - const pb_linear_combination_array &h, - const pb_variable &W, -- const long &K, -+ const int64_t &K, - const pb_linear_combination_array &new_a, - const pb_linear_combination_array &new_e, - const std::string &annotation_prefix); -diff --git a/src/snark/libsnark/gadgetlib1/gadgets/hashes/sha256/sha256_components.tcc b/src/snark/libsnark/gadgetlib1/gadgets/hashes/sha256/sha256_components.tcc -index e8f233a..b0e0063 100644 ---- a/src/snark/libsnark/gadgetlib1/gadgets/hashes/sha256/sha256_components.tcc -+++ b/src/snark/libsnark/gadgetlib1/gadgets/hashes/sha256/sha256_components.tcc -@@ -16,7 +16,7 @@ - - namespace libsnark { - --const unsigned long SHA256_K[64] = { -+const uint64_t SHA256_K[64] = { - 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, - 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, - 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, -@@ -27,7 +27,7 @@ const unsigned long SHA256_K[64] = { - 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 - }; - --const unsigned long SHA256_H[8] = { -+const uint64_t SHA256_H[8] = { - 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 - }; - -@@ -149,7 +149,7 @@ sha256_round_function_gadget::sha256_round_function_gadget(protoboard &g, - const pb_linear_combination_array &h, - const pb_variable &W, -- const long &K, -+ const int64_t &K, - const pb_linear_combination_array &new_a, - const pb_linear_combination_array &new_e, - const std::string &annotation_prefix) : -diff --git a/src/snark/libsnark/gadgetlib1/gadgets/hashes/sha256/tests/test_sha256_gadget.cpp b/src/snark/libsnark/gadgetlib1/gadgets/hashes/sha256/tests/test_sha256_gadget.cpp -index 0bfaf3a..471928f 100644 ---- a/src/snark/libsnark/gadgetlib1/gadgets/hashes/sha256/tests/test_sha256_gadget.cpp -+++ b/src/snark/libsnark/gadgetlib1/gadgets/hashes/sha256/tests/test_sha256_gadget.cpp -@@ -10,8 +10,6 @@ - #include "common/profiling.hpp" - #include "gadgetlib1/gadgets/hashes/sha256/sha256_gadget.hpp" - --#include -- - using namespace libsnark; - - template -@@ -37,10 +35,10 @@ void test_two_to_one() - f.generate_r1cs_witness(); - output.generate_r1cs_witness(hash_bv); - -- EXPECT_TRUE(pb.is_satisfied()); -+ assert(pb.is_satisfied()); - } - --TEST(gadgetlib1, sha256) -+int main(void) - { - start_profiling(); - default_ec_pp::init_public_params(); -diff --git a/src/snark/libsnark/gadgetlib1/gadgets/merkle_tree/merkle_authentication_path_variable.tcc b/src/snark/libsnark/gadgetlib1/gadgets/merkle_tree/merkle_authentication_path_variable.tcc -index d773051..b3d805d 100644 ---- a/src/snark/libsnark/gadgetlib1/gadgets/merkle_tree/merkle_authentication_path_variable.tcc -+++ b/src/snark/libsnark/gadgetlib1/gadgets/merkle_tree/merkle_authentication_path_variable.tcc -@@ -41,7 +41,7 @@ void merkle_authentication_path_variable::generate_r1cs_witness(c - - for (size_t i = 0; i < tree_depth; ++i) - { -- if (address & (1ul << (tree_depth-1-i))) -+ if (address & (UINT64_C(1) << (tree_depth-1-i))) - { - left_digests[i].generate_r1cs_witness(path[i]); - } -@@ -58,7 +58,7 @@ merkle_authentication_path merkle_authentication_path_variable::g - merkle_authentication_path result; - for (size_t i = 0; i < tree_depth; ++i) - { -- if (address & (1ul << (tree_depth-1-i))) -+ if (address & (UINT64_C(1) << (tree_depth-1-i))) - { - result.emplace_back(left_digests[i].get_digest()); - } -diff --git a/src/snark/libsnark/gadgetlib1/gadgets/merkle_tree/merkle_tree_check_read_gadget.tcc b/src/snark/libsnark/gadgetlib1/gadgets/merkle_tree/merkle_tree_check_read_gadget.tcc -index 6002a58..2fde4f6 100644 ---- a/src/snark/libsnark/gadgetlib1/gadgets/merkle_tree/merkle_tree_check_read_gadget.tcc -+++ b/src/snark/libsnark/gadgetlib1/gadgets/merkle_tree/merkle_tree_check_read_gadget.tcc -@@ -144,10 +144,10 @@ void test_merkle_tree_check_read_gadget() - bit_vector address_bits; - - size_t address = 0; -- for (long level = tree_depth-1; level >= 0; --level) -+ for (int64_t level = tree_depth-1; level >= 0; --level) - { - const bool computed_is_right = (std::rand() % 2); -- address |= (computed_is_right ? 1ul << (tree_depth-1-level) : 0); -+ address |= (computed_is_right ? UINT64_C(1) << (tree_depth-1-level) : 0); - address_bits.push_back(computed_is_right); - bit_vector other(digest_len); - std::generate(other.begin(), other.end(), [&]() { return std::rand() % 2; }); -diff --git a/src/snark/libsnark/gadgetlib1/gadgets/merkle_tree/merkle_tree_check_update_gadget.hpp b/src/snark/libsnark/gadgetlib1/gadgets/merkle_tree/merkle_tree_check_update_gadget.hpp -index 6ec0ca1..2d6840d 100644 ---- a/src/snark/libsnark/gadgetlib1/gadgets/merkle_tree/merkle_tree_check_update_gadget.hpp -+++ b/src/snark/libsnark/gadgetlib1/gadgets/merkle_tree/merkle_tree_check_update_gadget.hpp -@@ -19,6 +19,7 @@ - - #include "common/data_structures/merkle_tree.hpp" - #include "gadgetlib1/gadget.hpp" -+#include "gadgetlib1/gadgets/hashes/crh_gadget.hpp" - #include "gadgetlib1/gadgets/hashes/hash_io.hpp" - #include "gadgetlib1/gadgets/hashes/digest_selector_gadget.hpp" - #include "gadgetlib1/gadgets/merkle_tree/merkle_authentication_path_variable.hpp" -diff --git a/src/snark/libsnark/gadgetlib1/gadgets/merkle_tree/merkle_tree_check_update_gadget.tcc b/src/snark/libsnark/gadgetlib1/gadgets/merkle_tree/merkle_tree_check_update_gadget.tcc -index 1ac08ed..3e73904 100644 ---- a/src/snark/libsnark/gadgetlib1/gadgets/merkle_tree/merkle_tree_check_update_gadget.tcc -+++ b/src/snark/libsnark/gadgetlib1/gadgets/merkle_tree/merkle_tree_check_update_gadget.tcc -@@ -197,10 +197,10 @@ void test_merkle_tree_check_update_gadget() - bit_vector address_bits; - - size_t address = 0; -- for (long level = tree_depth-1; level >= 0; --level) -+ for (int64_t level = tree_depth-1; level >= 0; --level) - { - const bool computed_is_right = (std::rand() % 2); -- address |= (computed_is_right ? 1ul << (tree_depth-1-level) : 0); -+ address |= (computed_is_right ? UINT64_C(1) << (tree_depth-1-level) : 0); - address_bits.push_back(computed_is_right); - bit_vector other(digest_len); - std::generate(other.begin(), other.end(), [&]() { return std::rand() % 2; }); -diff --git a/src/snark/libsnark/gadgetlib1/gadgets/merkle_tree/tests/test_merkle_tree_gadgets.cpp b/src/snark/libsnark/gadgetlib1/gadgets/merkle_tree/tests/test_merkle_tree_gadgets.cpp -index 27b52f9..8d52c57 100644 ---- a/src/snark/libsnark/gadgetlib1/gadgets/merkle_tree/tests/test_merkle_tree_gadgets.cpp -+++ b/src/snark/libsnark/gadgetlib1/gadgets/merkle_tree/tests/test_merkle_tree_gadgets.cpp -@@ -5,36 +5,44 @@ - * @copyright MIT license (see LICENSE file) - *****************************************************************************/ - --#include "algebra/curves/alt_bn128/alt_bn128_pp.hpp" - #ifdef CURVE_BN128 - #include "algebra/curves/bn128/bn128_pp.hpp" - #endif -+#include "algebra/curves/edwards/edwards_pp.hpp" -+#include "algebra/curves/mnt/mnt4/mnt4_pp.hpp" -+#include "algebra/curves/mnt/mnt6/mnt6_pp.hpp" - #include "gadgetlib1/gadgets/merkle_tree/merkle_tree_check_read_gadget.hpp" - #include "gadgetlib1/gadgets/merkle_tree/merkle_tree_check_update_gadget.hpp" - #include "gadgetlib1/gadgets/hashes/sha256/sha256_gadget.hpp" - --#include -- - using namespace libsnark; - - template - void test_all_merkle_tree_gadgets() - { - typedef Fr FieldT; -+ test_merkle_tree_check_read_gadget >(); - test_merkle_tree_check_read_gadget >(); - -+ test_merkle_tree_check_update_gadget >(); - test_merkle_tree_check_update_gadget >(); - } - --TEST(gadgetlib1, merkle_tree) -+int main(void) - { - start_profiling(); - -- alt_bn128_pp::init_public_params(); -- test_all_merkle_tree_gadgets(); -- - #ifdef CURVE_BN128 // BN128 has fancy dependencies so it may be disabled - bn128_pp::init_public_params(); - test_all_merkle_tree_gadgets(); - #endif -+ -+ edwards_pp::init_public_params(); -+ test_all_merkle_tree_gadgets(); -+ -+ mnt4_pp::init_public_params(); -+ test_all_merkle_tree_gadgets(); -+ -+ mnt6_pp::init_public_params(); -+ test_all_merkle_tree_gadgets(); - } -diff --git a/src/snark/libsnark/gadgetlib1/pb_variable.hpp b/src/snark/libsnark/gadgetlib1/pb_variable.hpp -index fdf64d0..a6c7174 100644 ---- a/src/snark/libsnark/gadgetlib1/pb_variable.hpp -+++ b/src/snark/libsnark/gadgetlib1/pb_variable.hpp -@@ -59,7 +59,7 @@ public: - - void fill_with_field_elements(protoboard &pb, const std::vector& vals) const; - void fill_with_bits(protoboard &pb, const bit_vector& bits) const; -- void fill_with_bits_of_ulong(protoboard &pb, const unsigned long i) const; -+ void fill_with_bits_of_ulong(protoboard &pb, const uint64_t i) const; - void fill_with_bits_of_field_element(protoboard &pb, const FieldT &r) const; - - std::vector get_vals(const protoboard &pb) const; -@@ -120,7 +120,7 @@ public: - - void fill_with_field_elements(protoboard &pb, const std::vector& vals) const; - void fill_with_bits(protoboard &pb, const bit_vector& bits) const; -- void fill_with_bits_of_ulong(protoboard &pb, const unsigned long i) const; -+ void fill_with_bits_of_ulong(protoboard &pb, const uint64_t i) const; - void fill_with_bits_of_field_element(protoboard &pb, const FieldT &r) const; - - std::vector get_vals(const protoboard &pb) const; -diff --git a/src/snark/libsnark/gadgetlib1/pb_variable.tcc b/src/snark/libsnark/gadgetlib1/pb_variable.tcc -index b36b3f8..77c9f13 100644 ---- a/src/snark/libsnark/gadgetlib1/pb_variable.tcc -+++ b/src/snark/libsnark/gadgetlib1/pb_variable.tcc -@@ -65,7 +65,7 @@ void pb_variable_array::fill_with_bits_of_field_element(protoboard --void pb_variable_array::fill_with_bits_of_ulong(protoboard &pb, const unsigned long i) const -+void pb_variable_array::fill_with_bits_of_ulong(protoboard &pb, const uint64_t i) const - { - this->fill_with_bits_of_field_element(pb, FieldT(i, true)); - } -@@ -232,7 +232,7 @@ void pb_linear_combination_array::fill_with_bits_of_field_element(protob - } - - template --void pb_linear_combination_array::fill_with_bits_of_ulong(protoboard &pb, const unsigned long i) const -+void pb_linear_combination_array::fill_with_bits_of_ulong(protoboard &pb, const uint64_t i) const - { - this->fill_with_bits_of_field_element(pb, FieldT(i)); - } -diff --git a/src/snark/libsnark/relations/arithmetic_programs/qap/tests/test_qap.cpp b/src/snark/libsnark/relations/arithmetic_programs/qap/tests/test_qap.cpp -index e20f589..0054eaf 100644 ---- a/src/snark/libsnark/relations/arithmetic_programs/qap/tests/test_qap.cpp -+++ b/src/snark/libsnark/relations/arithmetic_programs/qap/tests/test_qap.cpp -@@ -10,15 +10,13 @@ - #include - #include - --#include "algebra/curves/alt_bn128/alt_bn128_pp.hpp" -+#include "algebra/curves/mnt/mnt6/mnt6_pp.hpp" - #include "algebra/fields/field_utils.hpp" - #include "common/profiling.hpp" - #include "common/utils.hpp" - #include "reductions/r1cs_to_qap/r1cs_to_qap.hpp" - #include "relations/constraint_satisfaction_problems/r1cs/examples/r1cs_examples.hpp" - --#include -- - using namespace libsnark; - - template -@@ -30,7 +28,7 @@ void test_qap(const size_t qap_degree, const size_t num_inputs, const bool binar - See the transformation from R1CS to QAP for why this is the case. - So we need that qap_degree >= num_inputs + 1. - */ -- ASSERT_LE(num_inputs + 1, qap_degree); -+ assert(num_inputs + 1 <= qap_degree); - enter_block("Call to test_qap"); - - const size_t num_constraints = qap_degree - num_inputs - 1; -@@ -53,7 +51,7 @@ void test_qap(const size_t qap_degree, const size_t num_inputs, const bool binar - leave_block("Generate constraint system and assignment"); - - enter_block("Check satisfiability of constraint system"); -- EXPECT_TRUE(example.constraint_system.is_satisfied(example.primary_input, example.auxiliary_input)); -+ assert(example.constraint_system.is_satisfied(example.primary_input, example.auxiliary_input)); - leave_block("Check satisfiability of constraint system"); - - const FieldT t = FieldT::random_element(), -@@ -74,31 +72,44 @@ void test_qap(const size_t qap_degree, const size_t num_inputs, const bool binar - leave_block("Compute QAP witness"); - - enter_block("Check satisfiability of QAP instance 1"); -- EXPECT_TRUE(qap_inst_1.is_satisfied(qap_wit)); -+ assert(qap_inst_1.is_satisfied(qap_wit)); - leave_block("Check satisfiability of QAP instance 1"); - - enter_block("Check satisfiability of QAP instance 2"); -- EXPECT_TRUE(qap_inst_2.is_satisfied(qap_wit)); -+ assert(qap_inst_2.is_satisfied(qap_wit)); - leave_block("Check satisfiability of QAP instance 2"); - - leave_block("Call to test_qap"); - } - --TEST(relations, qap) -+int main() - { - start_profiling(); - -+ mnt6_pp::init_public_params(); -+ - const size_t num_inputs = 10; - -+ const size_t basic_domain_size = UINT64_C(1)< >(1ul << 21, num_inputs, true); -+ test_qap >(basic_domain_size, num_inputs, true); -+ test_qap >(step_domain_size, num_inputs, true); -+ test_qap >(extended_domain_size, num_inputs, true); -+ test_qap >(extended_domain_size_special, num_inputs, true); - - leave_block("Test QAP with binary input"); - - enter_block("Test QAP with field input"); - -- test_qap >(1ul << 21, num_inputs, false); -+ test_qap >(basic_domain_size, num_inputs, false); -+ test_qap >(step_domain_size, num_inputs, false); -+ test_qap >(extended_domain_size, num_inputs, false); -+ test_qap >(extended_domain_size_special, num_inputs, false); - - leave_block("Test QAP with field input"); - } -diff --git a/src/snark/libsnark/relations/variable.hpp b/src/snark/libsnark/relations/variable.hpp -index a9a1449..c63f57b 100644 ---- a/src/snark/libsnark/relations/variable.hpp -+++ b/src/snark/libsnark/relations/variable.hpp -@@ -26,7 +26,7 @@ namespace libsnark { - * Mnemonic typedefs. - */ - typedef size_t var_index_t; --typedef long integer_coeff_t; -+typedef int64_t integer_coeff_t; - - /** - * Forward declaration. -diff --git a/src/snark/libsnark/zk_proof_systems/ppzksnark/r1cs_ppzksnark/examples/run_r1cs_ppzksnark.tcc b/src/snark/libsnark/zk_proof_systems/ppzksnark/r1cs_ppzksnark/examples/run_r1cs_ppzksnark.tcc -index 00af6fe..9bc8758 100644 ---- a/src/snark/libsnark/zk_proof_systems/ppzksnark/r1cs_ppzksnark/examples/run_r1cs_ppzksnark.tcc -+++ b/src/snark/libsnark/zk_proof_systems/ppzksnark/r1cs_ppzksnark/examples/run_r1cs_ppzksnark.tcc -@@ -83,7 +83,7 @@ bool run_r1cs_ppzksnark(const r1cs_example > &example, - } - - print_header("R1CS ppzkSNARK Prover"); -- r1cs_ppzksnark_proof proof = r1cs_ppzksnark_prover(keypair.pk, example.primary_input, example.auxiliary_input, example.constraint_system); -+ r1cs_ppzksnark_proof proof = r1cs_ppzksnark_prover(keypair.pk, example.primary_input, example.auxiliary_input); - printf("\n"); print_indent(); print_mem("after prover"); - - if (test_serialization) -diff --git a/src/snark/libsnark/zk_proof_systems/ppzksnark/r1cs_ppzksnark/r1cs_ppzksnark.hpp b/src/snark/libsnark/zk_proof_systems/ppzksnark/r1cs_ppzksnark/r1cs_ppzksnark.hpp -index 36f6c14..a068b09 100644 ---- a/src/snark/libsnark/zk_proof_systems/ppzksnark/r1cs_ppzksnark/r1cs_ppzksnark.hpp -+++ b/src/snark/libsnark/zk_proof_systems/ppzksnark/r1cs_ppzksnark/r1cs_ppzksnark.hpp -@@ -394,8 +394,7 @@ r1cs_ppzksnark_keypair r1cs_ppzksnark_generator( - template - r1cs_ppzksnark_proof r1cs_ppzksnark_prover(const r1cs_ppzksnark_proving_key &pk, - const r1cs_ppzksnark_primary_input &primary_input, -- const r1cs_ppzksnark_auxiliary_input &auxiliary_input, -- const r1cs_ppzksnark_constraint_system &constraint_system); -+ const r1cs_ppzksnark_auxiliary_input &auxiliary_input); - - /* - Below are four variants of verifier algorithm for the R1CS ppzkSNARK. -diff --git a/src/snark/libsnark/zk_proof_systems/ppzksnark/r1cs_ppzksnark/tests/test_r1cs_ppzksnark.cpp b/src/snark/libsnark/zk_proof_systems/ppzksnark/r1cs_ppzksnark/tests/test_r1cs_ppzksnark.cpp -index 6c6e518..6f8b575 100644 ---- a/src/snark/libsnark/zk_proof_systems/ppzksnark/r1cs_ppzksnark/tests/test_r1cs_ppzksnark.cpp -+++ b/src/snark/libsnark/zk_proof_systems/ppzksnark/r1cs_ppzksnark/tests/test_r1cs_ppzksnark.cpp -@@ -11,14 +11,12 @@ - #include - #include - --#include "algebra/curves/alt_bn128/alt_bn128_pp.hpp" -+#include "common/default_types/r1cs_ppzksnark_pp.hpp" - #include "common/profiling.hpp" - #include "common/utils.hpp" - #include "relations/constraint_satisfaction_problems/r1cs/examples/r1cs_examples.hpp" - #include "zk_proof_systems/ppzksnark/r1cs_ppzksnark/examples/run_r1cs_ppzksnark.hpp" - --#include -- - using namespace libsnark; - - template -@@ -29,16 +27,16 @@ void test_r1cs_ppzksnark(size_t num_constraints, - - const bool test_serialization = true; - r1cs_example > example = generate_r1cs_example_with_binary_input >(num_constraints, input_size); -- example.constraint_system.swap_AB_if_beneficial(); - const bool bit = run_r1cs_ppzksnark(example, test_serialization); -- EXPECT_TRUE(bit); -+ assert(bit); - - print_header("(leave) Test R1CS ppzkSNARK"); - } - --TEST(zk_proof_systems, r1cs_ppzksnark) -+int main() - { -+ default_r1cs_ppzksnark_pp::init_public_params(); - start_profiling(); - -- test_r1cs_ppzksnark(1000, 20); -+ test_r1cs_ppzksnark(1000, 100); - } diff --git a/zcutil/votecoin_build_win32.sh b/zcutil/votecoin_build_win32.sh index 707aa4e0150..2632aaaefab 100755 --- a/zcutil/votecoin_build_win32.sh +++ b/zcutil/votecoin_build_win32.sh @@ -6,8 +6,6 @@ cd "$(dirname "$(readlink -f "$0")")"/.. #'"%#@! #sudo update-alternatives --config x86_64-w64-mingw32-gcc # (configure to use POSIX variant) #sudo update-alternatives --config x86_64-w64-mingw32-g++ # (configure to use POSIX variant) -patch -p1 < ./zcutil/extra/zcash-win32.patch - HOST=x86_64-w64-mingw32 ./zcutil/build.sh --disable-tests || exit 1 cd src