fix clang-format script
This commit is contained in:
parent
4a41f183a3
commit
4d6fc314ed
10 changed files with 263 additions and 252 deletions
|
@ -30,7 +30,7 @@ jobs:
|
|||
key: v4-cargo-cache-{{ arch }}-{{ checksum "Cargo.lock" }}
|
||||
test:
|
||||
docker:
|
||||
- image: rustlang/rust:nightly-slim
|
||||
- image: rustlang/rust:nightly
|
||||
steps:
|
||||
- checkout
|
||||
- run:
|
||||
|
@ -41,25 +41,30 @@ jobs:
|
|||
command: cargo generate-lockfile
|
||||
- restore_cache:
|
||||
keys:
|
||||
- v4-cargo-cache-{{ arch }}-{{ checksum "Cargo.lock" }}
|
||||
- run:
|
||||
name: Check format
|
||||
command: rustup component add rustfmt; cargo fmt --all -- --check
|
||||
- run:
|
||||
name: Check cpp format
|
||||
command: apt-get install -y clang-format; sh scripts/clang-format.sh
|
||||
- v4-cargo-cache-{{ arch }}-{{ checksum "Cargo.lock" }}
|
||||
# - run:
|
||||
# name: Check format
|
||||
# command: rustup component add rustfmt; cargo fmt --all -- --check
|
||||
- run:
|
||||
name: Install libsnark prerequisites
|
||||
command: ./scripts/install_libsnark_prerequisites.sh
|
||||
- run:
|
||||
name: Check cpp format (clang-format)
|
||||
command: |
|
||||
apt-get update -y
|
||||
apt-get install -y lsb-release software-properties-common
|
||||
bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"
|
||||
apt-get install -y clang-format
|
||||
bash scripts/clang-format.sh zokrates_core/lib
|
||||
- run:
|
||||
name: Build
|
||||
command: ZOKRATES_HOME=$(pwd)/zokrates_stdlib/stdlib/ WITH_LIBSNARK=1 RUSTFLAGS="-D warnings" ./build.sh
|
||||
- run:
|
||||
name: Run tests
|
||||
command: ZOKRATES_HOME=$(pwd)/zokrates_stdlib/stdlib/ WITH_LIBSNARK=1 RUSTFLAGS="-D warnings" ./test.sh
|
||||
# - run:
|
||||
# name: Generate code coverage report
|
||||
# command: ./scripts/cov.sh
|
||||
- run:
|
||||
name: Generate code coverage report
|
||||
command: ./scripts/cov.sh
|
||||
wasm_test:
|
||||
docker:
|
||||
- image: rustlang/rust:nightly-slim
|
||||
|
@ -151,4 +156,4 @@ workflows:
|
|||
- wasm_test
|
||||
- integration_test
|
||||
- zokrates_js_build
|
||||
- zokrates_js_test
|
||||
- zokrates_js_test
|
|
@ -1,14 +1,17 @@
|
|||
#!/bin/bash
|
||||
|
||||
cd zokrates_core/lib
|
||||
clang-format -i -style=WebKit -verbose *.cpp *.hpp
|
||||
dir=$1
|
||||
ret=0
|
||||
|
||||
modified=`git status | grep "modified"`
|
||||
if [[ -z $modified ]]; then
|
||||
exit 0;
|
||||
fi
|
||||
for file in $dir/*.cpp $dir/*.hpp; do
|
||||
clang-format -i -style=WebKit -verbose $file
|
||||
out=$(git diff --exit-code $file)
|
||||
|
||||
git diff
|
||||
git reset HEAD --hard
|
||||
if [ $? -ne 0 ]; then
|
||||
ret=1
|
||||
echo "ERROR: clang-format diff in: $file"
|
||||
echo "$out"
|
||||
fi
|
||||
done
|
||||
|
||||
exit 1
|
||||
exit $ret
|
|
@ -1,5 +1,6 @@
|
|||
#include "ffi.hpp"
|
||||
|
||||
void __free(uint8_t* ptr) {
|
||||
free(ptr);
|
||||
void __free(uint8_t* ptr)
|
||||
{
|
||||
free(ptr);
|
||||
}
|
|
@ -1,26 +1,33 @@
|
|||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include <cstdlib>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct buffer_t {
|
||||
uint8_t* data;
|
||||
int32_t length;
|
||||
uint8_t* data;
|
||||
int32_t length;
|
||||
};
|
||||
|
||||
struct setup_result_t {
|
||||
buffer_t vk;
|
||||
buffer_t pk;
|
||||
setup_result_t(buffer_t& vk_buf, buffer_t& pk_buf) : vk(vk_buf), pk(pk_buf) { }
|
||||
setup_result_t(buffer_t& vk_buf, buffer_t& pk_buf)
|
||||
: vk(vk_buf)
|
||||
, pk(pk_buf)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
struct proof_result_t {
|
||||
buffer_t proof;
|
||||
proof_result_t(buffer_t& proof_buf) : proof(proof_buf) { }
|
||||
proof_result_t(buffer_t& proof_buf)
|
||||
: proof(proof_buf)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
void __free(uint8_t* ptr);
|
||||
|
@ -29,7 +36,8 @@ void __free(uint8_t* ptr);
|
|||
} // extern "C"
|
||||
#endif
|
||||
|
||||
static inline void __alloc(buffer_t* buffer, size_t length) {
|
||||
static inline void __alloc(buffer_t* buffer, size_t length)
|
||||
{
|
||||
buffer->data = (uint8_t*)malloc(length);
|
||||
buffer->length = length;
|
||||
}
|
|
@ -5,11 +5,11 @@
|
|||
* @date 2017
|
||||
*/
|
||||
|
||||
#include "util.hpp"
|
||||
#include "gm17.hpp"
|
||||
#include "util.hpp"
|
||||
#include <cassert>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
|
||||
// contains definition of alt_bn128 ec public parameters
|
||||
#include "libff/algebra/curves/alt_bn128/alt_bn128_pp.hpp"
|
||||
|
@ -23,108 +23,112 @@ using namespace libsnark;
|
|||
using std::cout;
|
||||
using std::endl;
|
||||
|
||||
namespace gm17
|
||||
namespace gm17 {
|
||||
r1cs_se_ppzksnark_constraint_system<libff::alt_bn128_pp> createConstraintSystem(const uint8_t* A, const uint8_t* B, const uint8_t* C, int32_t A_len, int32_t B_len, int32_t C_len, int32_t constraints, int32_t variables, int32_t inputs)
|
||||
{
|
||||
r1cs_se_ppzksnark_constraint_system<libff::alt_bn128_pp> createConstraintSystem(const uint8_t* A, const uint8_t* B, const uint8_t* C, int32_t A_len, int32_t B_len, int32_t C_len, int32_t constraints, int32_t variables, int32_t inputs)
|
||||
{
|
||||
r1cs_se_ppzksnark_constraint_system<libff::alt_bn128_pp> cs;
|
||||
cs.primary_input_size = inputs;
|
||||
cs.auxiliary_input_size = variables - inputs - 1; // ~one not included
|
||||
r1cs_se_ppzksnark_constraint_system<libff::alt_bn128_pp> cs;
|
||||
cs.primary_input_size = inputs;
|
||||
cs.auxiliary_input_size = variables - inputs - 1; // ~one not included
|
||||
|
||||
cout << "num variables: " << variables <<endl;
|
||||
cout << "num constraints: " << constraints <<endl;
|
||||
cout << "num inputs: " << inputs <<endl;
|
||||
cout << "num variables: " << variables << endl;
|
||||
cout << "num constraints: " << constraints << endl;
|
||||
cout << "num inputs: " << inputs << endl;
|
||||
|
||||
struct VariableValueMapping {
|
||||
int constraint_id;
|
||||
int variable_id;
|
||||
uint8_t variable_value[32];
|
||||
};
|
||||
struct VariableValueMapping {
|
||||
int constraint_id;
|
||||
int variable_id;
|
||||
uint8_t variable_value[32];
|
||||
};
|
||||
|
||||
const VariableValueMapping* A_vvmap = (VariableValueMapping*) A;
|
||||
const VariableValueMapping* B_vvmap = (VariableValueMapping*) B;
|
||||
const VariableValueMapping* C_vvmap = (VariableValueMapping*) C;
|
||||
const VariableValueMapping* A_vvmap = (VariableValueMapping*)A;
|
||||
const VariableValueMapping* B_vvmap = (VariableValueMapping*)B;
|
||||
const VariableValueMapping* C_vvmap = (VariableValueMapping*)C;
|
||||
|
||||
int A_id = 0;
|
||||
int B_id = 0;
|
||||
int C_id = 0;
|
||||
int A_id = 0;
|
||||
int B_id = 0;
|
||||
int C_id = 0;
|
||||
|
||||
// initialize curve parameters
|
||||
libff::alt_bn128_pp::init_public_params();
|
||||
// initialize curve parameters
|
||||
libff::alt_bn128_pp::init_public_params();
|
||||
|
||||
for (int row = 0; row < constraints; row++)
|
||||
{
|
||||
linear_combination<libff::Fr<libff::alt_bn128_pp> > lin_comb_A, lin_comb_B, lin_comb_C;
|
||||
while (A_id < A_len && A_vvmap[A_id].constraint_id == row) {
|
||||
libff::bigint<libff::alt_bn128_r_limbs> value = libsnarkBigintFromBytes(A_vvmap[A_id].variable_value);
|
||||
if (!value.is_zero()) {
|
||||
lin_comb_A.add_term(A_vvmap[A_id].variable_id, value);
|
||||
}
|
||||
A_id++;
|
||||
for (int row = 0; row < constraints; row++) {
|
||||
linear_combination<libff::Fr<libff::alt_bn128_pp>> lin_comb_A, lin_comb_B, lin_comb_C;
|
||||
while (A_id < A_len && A_vvmap[A_id].constraint_id == row) {
|
||||
libff::bigint<libff::alt_bn128_r_limbs> value = libsnarkBigintFromBytes(A_vvmap[A_id].variable_value);
|
||||
if (!value.is_zero()) {
|
||||
lin_comb_A.add_term(A_vvmap[A_id].variable_id, value);
|
||||
}
|
||||
while (B_id < B_len && B_vvmap[B_id].constraint_id == row) {
|
||||
libff::bigint<libff::alt_bn128_r_limbs> value = libsnarkBigintFromBytes(B_vvmap[B_id].variable_value);
|
||||
if (!value.is_zero()) {
|
||||
lin_comb_B.add_term(B_vvmap[B_id].variable_id, value);
|
||||
}
|
||||
B_id++;
|
||||
}
|
||||
while (C_id < C_len && C_vvmap[C_id].constraint_id == row) {
|
||||
libff::bigint<libff::alt_bn128_r_limbs> value = libsnarkBigintFromBytes(C_vvmap[C_id].variable_value);
|
||||
if (!value.is_zero()) {
|
||||
lin_comb_C.add_term(C_vvmap[C_id].variable_id, value);
|
||||
}
|
||||
C_id++;
|
||||
}
|
||||
cs.add_constraint(r1cs_constraint<libff::Fr<libff::alt_bn128_pp> >(lin_comb_A, lin_comb_B, lin_comb_C));
|
||||
A_id++;
|
||||
}
|
||||
return cs;
|
||||
}
|
||||
|
||||
r1cs_se_ppzksnark_keypair<libff::alt_bn128_pp> generateKeypair(const r1cs_se_ppzksnark_constraint_system<libff::alt_bn128_pp> &cs) {
|
||||
return r1cs_se_ppzksnark_generator<libff::alt_bn128_pp>(cs); //from r1cs_se_ppzksnark.hpp
|
||||
}
|
||||
|
||||
std::string serializeVerificationKey(r1cs_se_ppzksnark_verification_key<libff::alt_bn128_pp>* vk)
|
||||
{
|
||||
std::stringstream ss;
|
||||
unsigned queryLength = vk->query.size();
|
||||
|
||||
ss << "vk.h = " << outputPointG2AffineAsHex(vk->H) << endl;
|
||||
ss << "vk.g_alpha = " << outputPointG1AffineAsHex(vk->G_alpha) << endl;
|
||||
ss << "vk.h_beta = " << outputPointG2AffineAsHex(vk->H_beta) << endl;
|
||||
ss << "vk.g_gamma = " << outputPointG1AffineAsHex(vk->G_gamma) << endl;
|
||||
ss << "vk.h_gamma = " << outputPointG2AffineAsHex(vk->H_gamma) << endl;
|
||||
ss << "vk.query.len() = " << queryLength << endl;
|
||||
for (size_t i = 0; i < queryLength; ++i)
|
||||
{
|
||||
auto vk_query_i = outputPointG1AffineAsHex(vk->query[i]);
|
||||
ss << "vk.query[" << i << "] = " << vk_query_i << endl;
|
||||
}
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
std::string serializeProof(r1cs_se_ppzksnark_proof<libff::alt_bn128_pp>* proof, const uint8_t* public_inputs, int32_t public_inputs_length)
|
||||
{
|
||||
std::stringstream ss;
|
||||
ss << "{" << "\n";
|
||||
ss << "\t\"proof\": {" << "\n";
|
||||
ss << "\t\t\"a\": " << outputPointG1AffineAsHexJson(proof->A) << ",\n";
|
||||
ss << "\t\t\"b\": " << outputPointG2AffineAsHexJson(proof->B) << ",\n";
|
||||
ss << "\t\t\"c\": " << outputPointG1AffineAsHexJson(proof->C) << "\n";
|
||||
ss << "\t}," << "\n";
|
||||
ss << "\t\"inputs\": " << "[";
|
||||
for (int i = 1; i < public_inputs_length; i++) {
|
||||
if (i != 1) {
|
||||
ss << ",";
|
||||
while (B_id < B_len && B_vvmap[B_id].constraint_id == row) {
|
||||
libff::bigint<libff::alt_bn128_r_limbs> value = libsnarkBigintFromBytes(B_vvmap[B_id].variable_value);
|
||||
if (!value.is_zero()) {
|
||||
lin_comb_B.add_term(B_vvmap[B_id].variable_id, value);
|
||||
}
|
||||
ss << outputInputAsHex(libsnarkBigintFromBytes(public_inputs + i * 32));
|
||||
B_id++;
|
||||
}
|
||||
ss << "]" << "\n";
|
||||
ss << "}" << "\n";
|
||||
std::string str = ss.str();
|
||||
return str;
|
||||
while (C_id < C_len && C_vvmap[C_id].constraint_id == row) {
|
||||
libff::bigint<libff::alt_bn128_r_limbs> value = libsnarkBigintFromBytes(C_vvmap[C_id].variable_value);
|
||||
if (!value.is_zero()) {
|
||||
lin_comb_C.add_term(C_vvmap[C_id].variable_id, value);
|
||||
}
|
||||
C_id++;
|
||||
}
|
||||
cs.add_constraint(r1cs_constraint<libff::Fr<libff::alt_bn128_pp>>(lin_comb_A, lin_comb_B, lin_comb_C));
|
||||
}
|
||||
return cs;
|
||||
}
|
||||
|
||||
r1cs_se_ppzksnark_keypair<libff::alt_bn128_pp> generateKeypair(const r1cs_se_ppzksnark_constraint_system<libff::alt_bn128_pp>& cs)
|
||||
{
|
||||
return r1cs_se_ppzksnark_generator<libff::alt_bn128_pp>(cs); //from r1cs_se_ppzksnark.hpp
|
||||
}
|
||||
|
||||
std::string serializeVerificationKey(r1cs_se_ppzksnark_verification_key<libff::alt_bn128_pp>* vk)
|
||||
{
|
||||
std::stringstream ss;
|
||||
unsigned queryLength = vk->query.size();
|
||||
|
||||
ss << "vk.h = " << outputPointG2AffineAsHex(vk->H) << endl;
|
||||
ss << "vk.g_alpha = " << outputPointG1AffineAsHex(vk->G_alpha) << endl;
|
||||
ss << "vk.h_beta = " << outputPointG2AffineAsHex(vk->H_beta) << endl;
|
||||
ss << "vk.g_gamma = " << outputPointG1AffineAsHex(vk->G_gamma) << endl;
|
||||
ss << "vk.h_gamma = " << outputPointG2AffineAsHex(vk->H_gamma) << endl;
|
||||
ss << "vk.query.len() = " << queryLength << endl;
|
||||
for (size_t i = 0; i < queryLength; ++i) {
|
||||
auto vk_query_i = outputPointG1AffineAsHex(vk->query[i]);
|
||||
ss << "vk.query[" << i << "] = " << vk_query_i << endl;
|
||||
}
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
std::string serializeProof(r1cs_se_ppzksnark_proof<libff::alt_bn128_pp>* proof, const uint8_t* public_inputs, int32_t public_inputs_length)
|
||||
{
|
||||
std::stringstream ss;
|
||||
ss << "{"
|
||||
<< "\n";
|
||||
ss << "\t\"proof\": {"
|
||||
<< "\n";
|
||||
ss << "\t\t\"a\": " << outputPointG1AffineAsHexJson(proof->A) << ",\n";
|
||||
ss << "\t\t\"b\": " << outputPointG2AffineAsHexJson(proof->B) << ",\n";
|
||||
ss << "\t\t\"c\": " << outputPointG1AffineAsHexJson(proof->C) << "\n";
|
||||
ss << "\t},"
|
||||
<< "\n";
|
||||
ss << "\t\"inputs\": "
|
||||
<< "[";
|
||||
for (int i = 1; i < public_inputs_length; i++) {
|
||||
if (i != 1) {
|
||||
ss << ",";
|
||||
}
|
||||
ss << outputInputAsHex(libsnarkBigintFromBytes(public_inputs + i * 32));
|
||||
}
|
||||
ss << "]"
|
||||
<< "\n";
|
||||
ss << "}"
|
||||
<< "\n";
|
||||
std::string str = ss.str();
|
||||
return str;
|
||||
}
|
||||
}
|
||||
|
||||
setup_result_t gm17_setup(const uint8_t* A, const uint8_t* B, const uint8_t* C, int32_t A_len, int32_t B_len, int32_t C_len, int32_t constraints, int32_t variables, int32_t inputs)
|
||||
|
@ -175,7 +179,7 @@ proof_result_t gm17_generate_proof(buffer_t* pk_buf, const uint8_t* public_input
|
|||
ss >> proving_key;
|
||||
|
||||
// assign variables based on witness values, excludes ~one
|
||||
r1cs_variable_assignment<libff::Fr<libff::alt_bn128_pp> > full_variable_assignment;
|
||||
r1cs_variable_assignment<libff::Fr<libff::alt_bn128_pp>> full_variable_assignment;
|
||||
for (int i = 1; i < public_inputs_length; i++) {
|
||||
full_variable_assignment.push_back(libff::Fr<libff::alt_bn128_pp>(libsnarkBigintFromBytes(public_inputs + i * 32)));
|
||||
}
|
||||
|
|
|
@ -22,16 +22,14 @@ setup_result_t gm17_setup(
|
|||
int32_t C_len,
|
||||
int32_t constraints,
|
||||
int32_t variables,
|
||||
int32_t inputs
|
||||
);
|
||||
int32_t inputs);
|
||||
|
||||
proof_result_t gm17_generate_proof(
|
||||
buffer_t* pk_buf,
|
||||
const uint8_t* public_inputs,
|
||||
int32_t public_inputs_length,
|
||||
const uint8_t* private_inputs,
|
||||
int32_t private_inputs_length
|
||||
);
|
||||
int32_t private_inputs_length);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
|
|
|
@ -5,11 +5,11 @@
|
|||
* @date 2017
|
||||
*/
|
||||
|
||||
#include "util.hpp"
|
||||
#include "pghr13.hpp"
|
||||
#include "util.hpp"
|
||||
#include <cassert>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
|
||||
// contains definitions of alt_bn128 ec public parameters
|
||||
#include "libff/algebra/curves/alt_bn128/alt_bn128_pp.hpp"
|
||||
|
@ -23,116 +23,121 @@ using namespace libsnark;
|
|||
using std::cout;
|
||||
using std::endl;
|
||||
|
||||
namespace pghr13
|
||||
namespace pghr13 {
|
||||
r1cs_ppzksnark_constraint_system<libff::alt_bn128_pp> createConstraintSystem(const uint8_t* A, const uint8_t* B, const uint8_t* C, int A_len, int B_len, int C_len, int constraints, int variables, int inputs)
|
||||
{
|
||||
r1cs_ppzksnark_constraint_system<libff::alt_bn128_pp> createConstraintSystem(const uint8_t* A, const uint8_t* B, const uint8_t* C, int A_len, int B_len, int C_len, int constraints, int variables, int inputs)
|
||||
{
|
||||
r1cs_ppzksnark_constraint_system<libff::alt_bn128_pp> cs;
|
||||
cs.primary_input_size = inputs;
|
||||
cs.auxiliary_input_size = variables - inputs - 1; // ~one not included
|
||||
r1cs_ppzksnark_constraint_system<libff::alt_bn128_pp> cs;
|
||||
cs.primary_input_size = inputs;
|
||||
cs.auxiliary_input_size = variables - inputs - 1; // ~one not included
|
||||
|
||||
cout << "num variables: " << variables <<endl;
|
||||
cout << "num constraints: " << constraints <<endl;
|
||||
cout << "num inputs: " << inputs <<endl;
|
||||
cout << "num variables: " << variables << endl;
|
||||
cout << "num constraints: " << constraints << endl;
|
||||
cout << "num inputs: " << inputs << endl;
|
||||
|
||||
struct VariableValueMapping {
|
||||
int constraint_id;
|
||||
int variable_id;
|
||||
uint8_t variable_value[32];
|
||||
};
|
||||
struct VariableValueMapping {
|
||||
int constraint_id;
|
||||
int variable_id;
|
||||
uint8_t variable_value[32];
|
||||
};
|
||||
|
||||
const VariableValueMapping* A_vvmap = (VariableValueMapping*) A;
|
||||
const VariableValueMapping* B_vvmap = (VariableValueMapping*) B;
|
||||
const VariableValueMapping* C_vvmap = (VariableValueMapping*) C;
|
||||
const VariableValueMapping* A_vvmap = (VariableValueMapping*)A;
|
||||
const VariableValueMapping* B_vvmap = (VariableValueMapping*)B;
|
||||
const VariableValueMapping* C_vvmap = (VariableValueMapping*)C;
|
||||
|
||||
int A_id = 0;
|
||||
int B_id = 0;
|
||||
int C_id = 0;
|
||||
int A_id = 0;
|
||||
int B_id = 0;
|
||||
int C_id = 0;
|
||||
|
||||
// initialize curve parameters
|
||||
libff::alt_bn128_pp::init_public_params();
|
||||
// initialize curve parameters
|
||||
libff::alt_bn128_pp::init_public_params();
|
||||
|
||||
for (int row = 0; row < constraints; row++) {
|
||||
linear_combination<libff::Fr<libff::alt_bn128_pp> > lin_comb_A, lin_comb_B, lin_comb_C;
|
||||
while (A_id < A_len && A_vvmap[A_id].constraint_id == row) {
|
||||
libff::bigint<libff::alt_bn128_r_limbs> value = libsnarkBigintFromBytes(A_vvmap[A_id].variable_value);
|
||||
if (!value.is_zero()) {
|
||||
lin_comb_A.add_term(A_vvmap[A_id].variable_id, value);
|
||||
}
|
||||
A_id++;
|
||||
for (int row = 0; row < constraints; row++) {
|
||||
linear_combination<libff::Fr<libff::alt_bn128_pp>> lin_comb_A, lin_comb_B, lin_comb_C;
|
||||
while (A_id < A_len && A_vvmap[A_id].constraint_id == row) {
|
||||
libff::bigint<libff::alt_bn128_r_limbs> value = libsnarkBigintFromBytes(A_vvmap[A_id].variable_value);
|
||||
if (!value.is_zero()) {
|
||||
lin_comb_A.add_term(A_vvmap[A_id].variable_id, value);
|
||||
}
|
||||
while (B_id < B_len && B_vvmap[B_id].constraint_id == row) {
|
||||
libff::bigint<libff::alt_bn128_r_limbs> value = libsnarkBigintFromBytes(B_vvmap[B_id].variable_value);
|
||||
if (!value.is_zero()) {
|
||||
lin_comb_B.add_term(B_vvmap[B_id].variable_id, value);
|
||||
}
|
||||
B_id++;
|
||||
}
|
||||
while (C_id < C_len && C_vvmap[C_id].constraint_id == row) {
|
||||
libff::bigint<libff::alt_bn128_r_limbs> value = libsnarkBigintFromBytes(C_vvmap[C_id].variable_value);
|
||||
if (!value.is_zero()) {
|
||||
lin_comb_C.add_term(C_vvmap[C_id].variable_id, value);
|
||||
}
|
||||
C_id++;
|
||||
}
|
||||
cs.add_constraint(r1cs_constraint<libff::Fr<libff::alt_bn128_pp> >(lin_comb_A, lin_comb_B, lin_comb_C));
|
||||
A_id++;
|
||||
}
|
||||
return cs;
|
||||
}
|
||||
|
||||
r1cs_ppzksnark_keypair<libff::alt_bn128_pp> generateKeypair(const r1cs_ppzksnark_constraint_system<libff::alt_bn128_pp> &cs) {
|
||||
return r1cs_ppzksnark_generator<libff::alt_bn128_pp>(cs); // from r1cs_ppzksnark.hpp
|
||||
}
|
||||
|
||||
std::string serializeVerificationKey(r1cs_ppzksnark_verification_key<libff::alt_bn128_pp>* vk)
|
||||
{
|
||||
std::stringstream ss;
|
||||
unsigned icLength = vk->encoded_IC_query.rest.indices.size() + 1;
|
||||
|
||||
ss << "vk.a = " << outputPointG2AffineAsHex(vk->alphaA_g2) << endl;
|
||||
ss << "vk.b = " << outputPointG1AffineAsHex(vk->alphaB_g1) << endl;
|
||||
ss << "vk.c = " << outputPointG2AffineAsHex(vk->alphaC_g2) << endl;
|
||||
ss << "vk.gamma = " << outputPointG2AffineAsHex(vk->gamma_g2) << endl;
|
||||
ss << "vk.gamma_beta_1 = " << outputPointG1AffineAsHex(vk->gamma_beta_g1) << endl;
|
||||
ss << "vk.gamma_beta_2 = " << outputPointG2AffineAsHex(vk->gamma_beta_g2) << endl;
|
||||
ss << "vk.z = " << outputPointG2AffineAsHex(vk->rC_Z_g2) << endl;
|
||||
ss << "vk.ic.len() = " << icLength << endl;
|
||||
ss << "vk.ic[0] = " << outputPointG1AffineAsHex(vk->encoded_IC_query.first) << endl;
|
||||
for (size_t i = 1; i < icLength; ++i)
|
||||
{
|
||||
auto vk_ic_i = outputPointG1AffineAsHex(vk->encoded_IC_query.rest.values[i - 1]);
|
||||
ss << "vk.ic[" << i << "] = " << vk_ic_i << endl;
|
||||
}
|
||||
std::string str = ss.str();
|
||||
return str;
|
||||
}
|
||||
|
||||
std::string serializeProof(r1cs_ppzksnark_proof<libff::alt_bn128_pp>* proof, const uint8_t* public_inputs, int public_inputs_length)
|
||||
{
|
||||
std::stringstream ss;
|
||||
ss << "{" << "\n";
|
||||
ss << "\t\"proof\": {" << "\n";
|
||||
ss << "\t\t\"a\": " << outputPointG1AffineAsHexJson(proof->g_A.g) << ",\n";
|
||||
ss << "\t\t\"a_p\": " << outputPointG1AffineAsHexJson(proof->g_A.h) << ",\n";
|
||||
ss << "\t\t\"b\": " << outputPointG2AffineAsHexJson(proof->g_B.g) << ",\n";
|
||||
ss << "\t\t\"b_p\": " << outputPointG1AffineAsHexJson(proof->g_B.h) << ",\n";
|
||||
ss << "\t\t\"c\": " << outputPointG1AffineAsHexJson(proof->g_C.g) << ",\n";
|
||||
ss << "\t\t\"c_p\": " << outputPointG1AffineAsHexJson(proof->g_C.h) << ",\n";
|
||||
ss << "\t\t\"h\": " << outputPointG1AffineAsHexJson(proof->g_H) << ",\n";
|
||||
ss << "\t\t\"k\": " << outputPointG1AffineAsHexJson(proof->g_K) << "\n";
|
||||
ss << "\t}," << "\n";
|
||||
ss << "\t\"inputs\": " << "[";
|
||||
for (int i = 1; i < public_inputs_length; i++) {
|
||||
if (i != 1) {
|
||||
ss << ",";
|
||||
while (B_id < B_len && B_vvmap[B_id].constraint_id == row) {
|
||||
libff::bigint<libff::alt_bn128_r_limbs> value = libsnarkBigintFromBytes(B_vvmap[B_id].variable_value);
|
||||
if (!value.is_zero()) {
|
||||
lin_comb_B.add_term(B_vvmap[B_id].variable_id, value);
|
||||
}
|
||||
ss << outputInputAsHex(libsnarkBigintFromBytes(public_inputs + i * 32));
|
||||
B_id++;
|
||||
}
|
||||
ss << "]" << "\n";
|
||||
ss << "}" << "\n";
|
||||
std::string str = ss.str();
|
||||
return str;
|
||||
while (C_id < C_len && C_vvmap[C_id].constraint_id == row) {
|
||||
libff::bigint<libff::alt_bn128_r_limbs> value = libsnarkBigintFromBytes(C_vvmap[C_id].variable_value);
|
||||
if (!value.is_zero()) {
|
||||
lin_comb_C.add_term(C_vvmap[C_id].variable_id, value);
|
||||
}
|
||||
C_id++;
|
||||
}
|
||||
cs.add_constraint(r1cs_constraint<libff::Fr<libff::alt_bn128_pp>>(lin_comb_A, lin_comb_B, lin_comb_C));
|
||||
}
|
||||
return cs;
|
||||
}
|
||||
|
||||
r1cs_ppzksnark_keypair<libff::alt_bn128_pp> generateKeypair(const r1cs_ppzksnark_constraint_system<libff::alt_bn128_pp>& cs)
|
||||
{
|
||||
return r1cs_ppzksnark_generator<libff::alt_bn128_pp>(cs); // from r1cs_ppzksnark.hpp
|
||||
}
|
||||
|
||||
std::string serializeVerificationKey(r1cs_ppzksnark_verification_key<libff::alt_bn128_pp>* vk)
|
||||
{
|
||||
std::stringstream ss;
|
||||
unsigned icLength = vk->encoded_IC_query.rest.indices.size() + 1;
|
||||
|
||||
ss << "vk.a = " << outputPointG2AffineAsHex(vk->alphaA_g2) << endl;
|
||||
ss << "vk.b = " << outputPointG1AffineAsHex(vk->alphaB_g1) << endl;
|
||||
ss << "vk.c = " << outputPointG2AffineAsHex(vk->alphaC_g2) << endl;
|
||||
ss << "vk.gamma = " << outputPointG2AffineAsHex(vk->gamma_g2) << endl;
|
||||
ss << "vk.gamma_beta_1 = " << outputPointG1AffineAsHex(vk->gamma_beta_g1) << endl;
|
||||
ss << "vk.gamma_beta_2 = " << outputPointG2AffineAsHex(vk->gamma_beta_g2) << endl;
|
||||
ss << "vk.z = " << outputPointG2AffineAsHex(vk->rC_Z_g2) << endl;
|
||||
ss << "vk.ic.len() = " << icLength << endl;
|
||||
ss << "vk.ic[0] = " << outputPointG1AffineAsHex(vk->encoded_IC_query.first) << endl;
|
||||
for (size_t i = 1; i < icLength; ++i) {
|
||||
auto vk_ic_i = outputPointG1AffineAsHex(vk->encoded_IC_query.rest.values[i - 1]);
|
||||
ss << "vk.ic[" << i << "] = " << vk_ic_i << endl;
|
||||
}
|
||||
std::string str = ss.str();
|
||||
return str;
|
||||
}
|
||||
|
||||
std::string serializeProof(r1cs_ppzksnark_proof<libff::alt_bn128_pp>* proof, const uint8_t* public_inputs, int public_inputs_length)
|
||||
{
|
||||
std::stringstream ss;
|
||||
ss << "{"
|
||||
<< "\n";
|
||||
ss << "\t\"proof\": {"
|
||||
<< "\n";
|
||||
ss << "\t\t\"a\": " << outputPointG1AffineAsHexJson(proof->g_A.g) << ",\n";
|
||||
ss << "\t\t\"a_p\": " << outputPointG1AffineAsHexJson(proof->g_A.h) << ",\n";
|
||||
ss << "\t\t\"b\": " << outputPointG2AffineAsHexJson(proof->g_B.g) << ",\n";
|
||||
ss << "\t\t\"b_p\": " << outputPointG1AffineAsHexJson(proof->g_B.h) << ",\n";
|
||||
ss << "\t\t\"c\": " << outputPointG1AffineAsHexJson(proof->g_C.g) << ",\n";
|
||||
ss << "\t\t\"c_p\": " << outputPointG1AffineAsHexJson(proof->g_C.h) << ",\n";
|
||||
ss << "\t\t\"h\": " << outputPointG1AffineAsHexJson(proof->g_H) << ",\n";
|
||||
ss << "\t\t\"k\": " << outputPointG1AffineAsHexJson(proof->g_K) << "\n";
|
||||
ss << "\t},"
|
||||
<< "\n";
|
||||
ss << "\t\"inputs\": "
|
||||
<< "[";
|
||||
for (int i = 1; i < public_inputs_length; i++) {
|
||||
if (i != 1) {
|
||||
ss << ",";
|
||||
}
|
||||
ss << outputInputAsHex(libsnarkBigintFromBytes(public_inputs + i * 32));
|
||||
}
|
||||
ss << "]"
|
||||
<< "\n";
|
||||
ss << "}"
|
||||
<< "\n";
|
||||
std::string str = ss.str();
|
||||
return str;
|
||||
}
|
||||
}
|
||||
|
||||
setup_result_t pghr13_setup(const uint8_t* A, const uint8_t* B, const uint8_t* C, int32_t A_len, int32_t B_len, int32_t C_len, int32_t constraints, int32_t variables, int32_t inputs)
|
||||
|
@ -184,7 +189,7 @@ proof_result_t pghr13_generate_proof(buffer_t* pk_buf, const uint8_t* public_inp
|
|||
ss >> proving_key;
|
||||
|
||||
// assign variables based on witness values, excludes ~one
|
||||
r1cs_variable_assignment<libff::Fr<libff::alt_bn128_pp> > full_variable_assignment;
|
||||
r1cs_variable_assignment<libff::Fr<libff::alt_bn128_pp>> full_variable_assignment;
|
||||
for (int i = 1; i < public_inputs_length; i++) {
|
||||
full_variable_assignment.push_back(libff::Fr<libff::alt_bn128_pp>(libsnarkBigintFromBytes(public_inputs + i * 32)));
|
||||
}
|
||||
|
|
|
@ -22,16 +22,14 @@ setup_result_t pghr13_setup(
|
|||
int32_t C_len,
|
||||
int32_t constraints,
|
||||
int32_t variables,
|
||||
int32_t inputs
|
||||
);
|
||||
int32_t inputs);
|
||||
|
||||
proof_result_t pghr13_generate_proof(
|
||||
buffer_t* pk_buf,
|
||||
const uint8_t* public_inputs,
|
||||
int32_t public_inputs_length,
|
||||
const uint8_t* private_inputs,
|
||||
int32_t private_inputs_length
|
||||
);
|
||||
int32_t private_inputs_length);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
|
|
|
@ -16,7 +16,7 @@ libff::bigint<libff::alt_bn128_r_limbs> libsnarkBigintFromBytes(const uint8_t* _
|
|||
x.data[3 - i] |= uint64_t(_x[i * 8 + j]) << (8 * (7 - j));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return x;
|
||||
}
|
||||
|
||||
|
@ -36,7 +36,8 @@ std::string HexStringFromLibsnarkBigint(libff::bigint<libff::alt_bn128_r_limbs>
|
|||
return ss.str();
|
||||
}
|
||||
|
||||
std::string outputInputAsHex(libff::bigint<libff::alt_bn128_r_limbs> _x) {
|
||||
std::string outputInputAsHex(libff::bigint<libff::alt_bn128_r_limbs> _x)
|
||||
{
|
||||
return "\"0x" + HexStringFromLibsnarkBigint(_x) + "\"";
|
||||
}
|
||||
|
||||
|
@ -44,38 +45,26 @@ std::string outputPointG1AffineAsHex(libff::alt_bn128_G1 _p)
|
|||
{
|
||||
libff::alt_bn128_G1 aff = _p;
|
||||
aff.to_affine_coordinates();
|
||||
return "0x" +
|
||||
HexStringFromLibsnarkBigint(aff.X.as_bigint()) + ", 0x" +
|
||||
HexStringFromLibsnarkBigint(aff.Y.as_bigint());
|
||||
return "0x" + HexStringFromLibsnarkBigint(aff.X.as_bigint()) + ", 0x" + HexStringFromLibsnarkBigint(aff.Y.as_bigint());
|
||||
}
|
||||
|
||||
std::string outputPointG1AffineAsHexJson(libff::alt_bn128_G1 _p)
|
||||
{
|
||||
libff::alt_bn128_G1 aff = _p;
|
||||
aff.to_affine_coordinates();
|
||||
return "[\"0x" +
|
||||
HexStringFromLibsnarkBigint(aff.X.as_bigint()) + "\", \"0x" +
|
||||
HexStringFromLibsnarkBigint(aff.Y.as_bigint())+"\"]";
|
||||
return "[\"0x" + HexStringFromLibsnarkBigint(aff.X.as_bigint()) + "\", \"0x" + HexStringFromLibsnarkBigint(aff.Y.as_bigint()) + "\"]";
|
||||
}
|
||||
|
||||
std::string outputPointG2AffineAsHex(libff::alt_bn128_G2 _p)
|
||||
{
|
||||
libff::alt_bn128_G2 aff = _p;
|
||||
aff.to_affine_coordinates();
|
||||
return "[0x" +
|
||||
HexStringFromLibsnarkBigint(aff.X.c1.as_bigint()) + ", 0x" +
|
||||
HexStringFromLibsnarkBigint(aff.X.c0.as_bigint()) + "], [0x" +
|
||||
HexStringFromLibsnarkBigint(aff.Y.c1.as_bigint()) + ", 0x" +
|
||||
HexStringFromLibsnarkBigint(aff.Y.c0.as_bigint()) + "]";
|
||||
return "[0x" + HexStringFromLibsnarkBigint(aff.X.c1.as_bigint()) + ", 0x" + HexStringFromLibsnarkBigint(aff.X.c0.as_bigint()) + "], [0x" + HexStringFromLibsnarkBigint(aff.Y.c1.as_bigint()) + ", 0x" + HexStringFromLibsnarkBigint(aff.Y.c0.as_bigint()) + "]";
|
||||
}
|
||||
|
||||
std::string outputPointG2AffineAsHexJson(libff::alt_bn128_G2 _p)
|
||||
{
|
||||
libff::alt_bn128_G2 aff = _p;
|
||||
aff.to_affine_coordinates();
|
||||
return "[[\"0x" +
|
||||
HexStringFromLibsnarkBigint(aff.X.c1.as_bigint()) + "\", \"0x" +
|
||||
HexStringFromLibsnarkBigint(aff.X.c0.as_bigint()) + "\"], [\"0x" +
|
||||
HexStringFromLibsnarkBigint(aff.Y.c1.as_bigint()) + "\", \"0x" +
|
||||
HexStringFromLibsnarkBigint(aff.Y.c0.as_bigint()) + "\"]]";
|
||||
return "[[\"0x" + HexStringFromLibsnarkBigint(aff.X.c1.as_bigint()) + "\", \"0x" + HexStringFromLibsnarkBigint(aff.X.c0.as_bigint()) + "\"], [\"0x" + HexStringFromLibsnarkBigint(aff.Y.c1.as_bigint()) + "\", \"0x" + HexStringFromLibsnarkBigint(aff.Y.c0.as_bigint()) + "\"]]";
|
||||
}
|
||||
|
|
|
@ -4,10 +4,10 @@
|
|||
#include "libff/algebra/curves/alt_bn128/alt_bn128_pp.hpp"
|
||||
|
||||
#include <cassert>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
|
||||
libff::bigint<libff::alt_bn128_r_limbs> libsnarkBigintFromBytes(const uint8_t* _x);
|
||||
std::string HexStringFromLibsnarkBigint(libff::bigint<libff::alt_bn128_r_limbs> _x);
|
||||
|
|
Loading…
Reference in a new issue