Initial commit
This commit is contained in:
commit
45111d6576
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
target
|
||||
Cargo.lock
|
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
[submodule "tinysnark/libsnark"]
|
||||
path = tinysnark/libsnark
|
||||
url = git://github.com/scipr-lab/libsnark.git
|
13
Cargo.toml
Normal file
13
Cargo.toml
Normal file
@ -0,0 +1,13 @@
|
||||
[package]
|
||||
name = "bellman"
|
||||
version = "0.0.1"
|
||||
authors = ["Sean Bowe <ewillbefull@gmail.com>"]
|
||||
homepage = "https://github.com/ebfull/bellman"
|
||||
repository = "https://github.com/ebfull/bellman"
|
||||
documentation = "https://github.com/ebfull/bellman"
|
||||
license = "MIT"
|
||||
description = "zk-SNARK library"
|
||||
|
||||
[dependencies.tinysnark]
|
||||
path = "tinysnark"
|
||||
version = "0.0.1"
|
21
LICENSE-MIT
Normal file
21
LICENSE-MIT
Normal file
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 Sean Bowe
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
1
README.md
Normal file
1
README.md
Normal file
@ -0,0 +1 @@
|
||||
Bellman is a Rust language zk-SNARK crate.
|
5
src/main.rs
Normal file
5
src/main.rs
Normal file
@ -0,0 +1,5 @@
|
||||
extern crate tinysnark;
|
||||
|
||||
fn main() {
|
||||
tinysnark::test();
|
||||
}
|
2
tinysnark/.gitignore
vendored
Normal file
2
tinysnark/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
target
|
||||
Cargo.lock
|
13
tinysnark/Cargo.toml
Normal file
13
tinysnark/Cargo.toml
Normal file
@ -0,0 +1,13 @@
|
||||
[package]
|
||||
name = "tinysnark"
|
||||
homepage = "https://github.com/ebfull/bellman"
|
||||
repository = "https://github.com/ebfull/bellman"
|
||||
documentation = "https://github.com/ebfull/bellman"
|
||||
license = "MIT"
|
||||
description = "Tiny libsnark bindings"
|
||||
version = "0.0.1"
|
||||
authors = ["Sean Bowe <ewillbefull@gmail.com>"]
|
||||
build = "build.rs"
|
||||
|
||||
[build-dependencies]
|
||||
gcc = "0.3"
|
40
tinysnark/build.rs
Normal file
40
tinysnark/build.rs
Normal file
@ -0,0 +1,40 @@
|
||||
extern crate gcc;
|
||||
|
||||
fn main() {
|
||||
// we don't need ate-pairing for ALT_BN128, but
|
||||
// i'll keep this in case i need it for some reason...
|
||||
/*
|
||||
let mut cfg = gcc::Config::new();
|
||||
|
||||
cfg.cpp(true)
|
||||
.define("BN_SUPPORT_SNARK", None)
|
||||
.include("ate-pairing/include")
|
||||
.include("xbyak")
|
||||
.file("ate-pairing/src/zm.cpp")
|
||||
.file("ate-pairing/src/zm2.cpp")
|
||||
.compile("libzm.a");
|
||||
*/
|
||||
|
||||
println!("cargo:rustc-link-lib=gmp");
|
||||
println!("cargo:rustc-link-lib=gmpxx");
|
||||
|
||||
let mut cfg = gcc::Config::new();
|
||||
|
||||
cfg.cpp(true)
|
||||
.define("NO_PROCPS", None)
|
||||
.define("STATIC", None)
|
||||
.define("CURVE_ALT_BN128", None)
|
||||
.flag("-std=c++11")
|
||||
.include("libsnark/src")
|
||||
.file("tinysnark.cpp")
|
||||
.file("libsnark/src/algebra/curves/alt_bn128/alt_bn128_g1.cpp")
|
||||
.file("libsnark/src/algebra/curves/alt_bn128/alt_bn128_g2.cpp")
|
||||
.file("libsnark/src/algebra/curves/alt_bn128/alt_bn128_init.cpp")
|
||||
.file("libsnark/src/algebra/curves/alt_bn128/alt_bn128_pairing.cpp")
|
||||
.file("libsnark/src/algebra/curves/alt_bn128/alt_bn128_pp.cpp")
|
||||
.file("libsnark/src/common/utils.cpp")
|
||||
.file("libsnark/src/common/profiling.cpp")
|
||||
;
|
||||
|
||||
cfg.compile("libtinysnark.a");
|
||||
}
|
1
tinysnark/libsnark
Submodule
1
tinysnark/libsnark
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 0b928a7b36717db6f67ff7e1e34dfa3bfaee1c97
|
9
tinysnark/src/lib.rs
Normal file
9
tinysnark/src/lib.rs
Normal file
@ -0,0 +1,9 @@
|
||||
extern "C" {
|
||||
fn tinysnark_init_public_params();
|
||||
fn tinysnark_test();
|
||||
}
|
||||
|
||||
pub fn test() {
|
||||
unsafe { tinysnark_init_public_params(); }
|
||||
unsafe { tinysnark_test(); }
|
||||
}
|
42
tinysnark/tinysnark.cpp
Normal file
42
tinysnark/tinysnark.cpp
Normal file
@ -0,0 +1,42 @@
|
||||
/*
|
||||
This is a wrapper around libsnark which provides basic R1CS
|
||||
zk-SNARK support using the ALT_BN128 curve.
|
||||
*/
|
||||
|
||||
#include "gadgetlib1/gadgets/basic_gadgets.hpp"
|
||||
#include "zk_proof_systems/ppzksnark/r1cs_ppzksnark/r1cs_ppzksnark.hpp"
|
||||
#include "common/default_types/r1cs_ppzksnark_pp.hpp"
|
||||
#include "common/utils.hpp"
|
||||
|
||||
using namespace libsnark;
|
||||
using namespace std;
|
||||
|
||||
extern "C" void tinysnark_init_public_params() {
|
||||
default_r1cs_ppzksnark_pp::init_public_params();
|
||||
}
|
||||
|
||||
extern "C" void tinysnark_test() {
|
||||
typedef Fr<default_r1cs_ppzksnark_pp> FieldT;
|
||||
|
||||
protoboard<FieldT> pb;
|
||||
|
||||
linear_combination<FieldT> sum;
|
||||
|
||||
sum = sum + 1;
|
||||
|
||||
pb.add_r1cs_constraint(r1cs_constraint<FieldT>(1, sum, 1), "testing");
|
||||
|
||||
assert(pb.is_satisfied());
|
||||
|
||||
const r1cs_constraint_system<FieldT> constraint_system = pb.get_constraint_system();
|
||||
|
||||
cout << "Number of R1CS constraints: " << constraint_system.num_constraints() << endl;
|
||||
|
||||
auto keypair = r1cs_ppzksnark_generator<default_r1cs_ppzksnark_pp>(constraint_system);
|
||||
|
||||
auto proof = r1cs_ppzksnark_prover<default_r1cs_ppzksnark_pp>(keypair.pk, pb.primary_input(), pb.auxiliary_input());
|
||||
|
||||
r1cs_primary_input<FieldT> input;
|
||||
|
||||
assert(r1cs_ppzksnark_verifier_strong_IC<default_r1cs_ppzksnark_pp>(keypair.vk, input, proof));
|
||||
}
|
Loading…
Reference in New Issue
Block a user