mirror of
https://github.com/vacp2p/zerokit.git
synced 2026-01-10 06:08:09 -05:00
Compare commits
1 Commits
test-proof
...
fix/ci-bui
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c6d7172af2 |
33
.github/workflows/ci.yml
vendored
33
.github/workflows/ci.yml
vendored
@@ -92,6 +92,23 @@ jobs:
|
||||
- name: Install stable toolchain
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- uses: Swatinem/rust-cache@v2
|
||||
- name: Install Binaryen
|
||||
if: matrix.crate == 'rln-wasm'
|
||||
run: |
|
||||
BINARYEN_VERSION=125
|
||||
if [[ "${{ matrix.platform }}" == "ubuntu-latest" ]]; then
|
||||
ARCHIVE_NAME=binaryen-version_${BINARYEN_VERSION}-x86_64-linux.tar.gz
|
||||
wget https://github.com/WebAssembly/binaryen/releases/download/version_${BINARYEN_VERSION}/${ARCHIVE_NAME}
|
||||
tar -xzf ${ARCHIVE_NAME}
|
||||
sudo cp binaryen-version_${BINARYEN_VERSION}/bin/* /usr/local/bin/
|
||||
rm -rf binaryen-version_${BINARYEN_VERSION} ${ARCHIVE_NAME}
|
||||
elif [[ "${{ matrix.platform }}" == "macos-latest" ]]; then
|
||||
ARCHIVE_NAME=binaryen-version_${BINARYEN_VERSION}-x86_64-macos.tar.gz
|
||||
wget https://github.com/WebAssembly/binaryen/releases/download/version_${BINARYEN_VERSION}/${ARCHIVE_NAME}
|
||||
tar -xzf ${ARCHIVE_NAME}
|
||||
sudo cp binaryen-version_${BINARYEN_VERSION}/bin/* /usr/local/bin/
|
||||
rm -rf binaryen-version_${BINARYEN_VERSION} ${ARCHIVE_NAME}
|
||||
fi
|
||||
- name: Install dependencies
|
||||
run: make installdeps
|
||||
- name: Build rln-wasm
|
||||
@@ -124,6 +141,22 @@ jobs:
|
||||
components: rust-src
|
||||
targets: wasm32-unknown-unknown
|
||||
- uses: Swatinem/rust-cache@v2
|
||||
- name: Install Binaryen
|
||||
run: |
|
||||
BINARYEN_VERSION=125
|
||||
if [[ "${{ matrix.platform }}" == "ubuntu-latest" ]]; then
|
||||
ARCHIVE_NAME=binaryen-version_${BINARYEN_VERSION}-x86_64-linux.tar.gz
|
||||
wget https://github.com/WebAssembly/binaryen/releases/download/version_${BINARYEN_VERSION}/${ARCHIVE_NAME}
|
||||
tar -xzf ${ARCHIVE_NAME}
|
||||
sudo cp binaryen-version_${BINARYEN_VERSION}/bin/* /usr/local/bin/
|
||||
rm -rf binaryen-version_${BINARYEN_VERSION} ${ARCHIVE_NAME}
|
||||
elif [[ "${{ matrix.platform }}" == "macos-latest" ]]; then
|
||||
ARCHIVE_NAME=binaryen-version_${BINARYEN_VERSION}-x86_64-macos.tar.gz
|
||||
wget https://github.com/WebAssembly/binaryen/releases/download/version_${BINARYEN_VERSION}/${ARCHIVE_NAME}
|
||||
tar -xzf ${ARCHIVE_NAME}
|
||||
sudo cp binaryen-version_${BINARYEN_VERSION}/bin/* /usr/local/bin/
|
||||
rm -rf binaryen-version_${BINARYEN_VERSION} ${ARCHIVE_NAME}
|
||||
fi
|
||||
- name: Install dependencies
|
||||
run: make installdeps
|
||||
- name: Build rln-wasm in parallel mode
|
||||
|
||||
8
.github/workflows/nightly-release.yml
vendored
8
.github/workflows/nightly-release.yml
vendored
@@ -111,6 +111,14 @@ jobs:
|
||||
components: rust-src
|
||||
targets: wasm32-unknown-unknown
|
||||
- uses: Swatinem/rust-cache@v2
|
||||
- name: Install Binaryen
|
||||
run: |
|
||||
BINARYEN_VERSION=125
|
||||
ARCHIVE_NAME=binaryen-version_${BINARYEN_VERSION}-x86_64-linux.tar.gz
|
||||
wget https://github.com/WebAssembly/binaryen/releases/download/version_${BINARYEN_VERSION}/${ARCHIVE_NAME}
|
||||
tar -xzf ${ARCHIVE_NAME}
|
||||
sudo cp binaryen-version_${BINARYEN_VERSION}/bin/* /usr/local/bin/
|
||||
rm -rf binaryen-version_${BINARYEN_VERSION} ${ARCHIVE_NAME}
|
||||
- name: Install dependencies
|
||||
run: make installdeps
|
||||
- name: Build rln-wasm package
|
||||
|
||||
4
Cargo.lock
generated
4
Cargo.lock
generated
@@ -1206,7 +1206,7 @@ checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
|
||||
|
||||
[[package]]
|
||||
name = "rln"
|
||||
version = "1.0.0"
|
||||
version = "0.9.0"
|
||||
dependencies = [
|
||||
"ark-bn254",
|
||||
"ark-ec",
|
||||
@@ -1875,7 +1875,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "zerokit_utils"
|
||||
version = "1.0.0"
|
||||
version = "0.7.0"
|
||||
dependencies = [
|
||||
"ark-bn254",
|
||||
"ark-ff",
|
||||
|
||||
4
Makefile
4
Makefile
@@ -13,13 +13,13 @@ endif
|
||||
|
||||
installdeps: .pre-build
|
||||
ifeq ($(shell uname),Darwin)
|
||||
@brew install ninja
|
||||
@brew install ninja binaryen
|
||||
else ifeq ($(shell uname),Linux)
|
||||
@if [ -f /etc/os-release ] && grep -q "ID=nixos" /etc/os-release; then \
|
||||
echo "Detected NixOS, skipping apt installation."; \
|
||||
else \
|
||||
sudo apt update; \
|
||||
sudo apt install -y cmake ninja-build; \
|
||||
sudo apt install -y cmake ninja-build binaryen; \
|
||||
fi
|
||||
endif
|
||||
@which wasm-pack > /dev/null && wasm-pack --version | grep -q "0.13.1" || cargo install wasm-pack --version=0.13.1
|
||||
|
||||
@@ -13,8 +13,8 @@ path = "src/examples/stateless.rs"
|
||||
required-features = ["stateless"]
|
||||
|
||||
[dependencies]
|
||||
rln = { path = "../rln", version = "1.0.0", default-features = false }
|
||||
zerokit_utils = { path = "../utils", version = "1.0.0", default-features = false }
|
||||
rln = { path = "../rln", version = "0.9.0", default-features = false }
|
||||
zerokit_utils = { path = "../utils", version = "0.7.0", default-features = false }
|
||||
clap = { version = "4.5.53", features = ["cargo", "derive", "env"] }
|
||||
serde_json = "1.0.145"
|
||||
serde = { version = "1.0.228", features = ["derive"] }
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "rln-wasm"
|
||||
version = "1.0.0"
|
||||
version = "0.3.0"
|
||||
edition = "2021"
|
||||
license = "MIT OR Apache-2.0"
|
||||
|
||||
@@ -8,10 +8,10 @@ license = "MIT OR Apache-2.0"
|
||||
crate-type = ["cdylib", "rlib"]
|
||||
|
||||
[dependencies]
|
||||
rln = { path = "../rln", version = "1.0.0", default-features = false, features = [
|
||||
rln = { path = "../rln", version = "0.9.0", default-features = false, features = [
|
||||
"stateless",
|
||||
] }
|
||||
zerokit_utils = { path = "../utils", version = "1.0.0", default-features = false }
|
||||
zerokit_utils = { path = "../utils", version = "0.7.0", default-features = false }
|
||||
num-bigint = { version = "0.4.6", default-features = false }
|
||||
js-sys = "0.3.83"
|
||||
wasm-bindgen = "0.2.106"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "rln"
|
||||
version = "1.0.0"
|
||||
version = "0.9.0"
|
||||
edition = "2021"
|
||||
license = "MIT OR Apache-2.0"
|
||||
description = "APIs to manage, compute and verify zkSNARK proofs and RLN primitives"
|
||||
@@ -46,7 +46,7 @@ ruint = { version = "1.17.0", default-features = false, features = [
|
||||
tiny-keccak = { version = "2.0.2", features = ["keccak"] }
|
||||
zeroize = "1.8.2"
|
||||
tempfile = "3.23.0"
|
||||
zerokit_utils = { version = "1.0.0", path = "../utils", default-features = false }
|
||||
zerokit_utils = { version = "0.7.0", path = "../utils", default-features = false }
|
||||
|
||||
# FFI
|
||||
safer-ffi.version = "0.1"
|
||||
|
||||
@@ -24,7 +24,7 @@ We start by adding zerokit RLN to our `Cargo.toml`
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
rln = "1.0.0"
|
||||
rln = "0.9.0"
|
||||
```
|
||||
|
||||
## Basic Usage Example
|
||||
|
||||
@@ -182,9 +182,9 @@ mod test {
|
||||
#[cfg(not(feature = "stateless"))]
|
||||
mod tree_test {
|
||||
use ark_std::{rand::thread_rng, UniformRand};
|
||||
use rand::{rngs::ThreadRng, Rng};
|
||||
use rand::Rng;
|
||||
use rln::{
|
||||
circuit::{Fr, Proof, DEFAULT_TREE_DEPTH},
|
||||
circuit::{Fr, DEFAULT_TREE_DEPTH},
|
||||
hashers::{hash_to_field_le, poseidon_hash},
|
||||
pm_tree_adapter::PmtreeConfig,
|
||||
protocol::*,
|
||||
@@ -194,57 +194,6 @@ mod test {
|
||||
|
||||
const NO_OF_LEAVES: usize = 256;
|
||||
|
||||
fn setup_rln_proof(
|
||||
mutate_path_elements: bool,
|
||||
) -> (RLN, Proof, RLNProofValues, Fr, ThreadRng) {
|
||||
let tree_depth = DEFAULT_TREE_DEPTH;
|
||||
|
||||
let mut leaves: Vec<Fr> = Vec::new();
|
||||
let mut rng = thread_rng();
|
||||
for _ in 0..NO_OF_LEAVES {
|
||||
leaves.push(Fr::rand(&mut rng));
|
||||
}
|
||||
|
||||
let mut rln = RLN::new(tree_depth, "").unwrap();
|
||||
rln.init_tree_with_leaves(leaves.clone()).unwrap();
|
||||
|
||||
let (identity_secret, id_commitment) = keygen().unwrap();
|
||||
let identity_index = rln.leaves_set();
|
||||
let user_message_limit = Fr::from(100);
|
||||
let rate_commitment = poseidon_hash(&[id_commitment, user_message_limit]).unwrap();
|
||||
rln.set_next_leaf(rate_commitment).unwrap();
|
||||
|
||||
let signal: [u8; 32] = rng.gen();
|
||||
let epoch = hash_to_field_le(b"test-epoch").unwrap();
|
||||
let rln_identifier = hash_to_field_le(b"test-rln-identifier").unwrap();
|
||||
let external_nullifier = poseidon_hash(&[epoch, rln_identifier]).unwrap();
|
||||
let message_id = Fr::from(1);
|
||||
let x = hash_to_field_le(&signal).unwrap();
|
||||
|
||||
let (mut path_elements, identity_path_index) =
|
||||
rln.get_merkle_proof(identity_index).unwrap();
|
||||
|
||||
// Mutate path_elements if requested (simulating mutated path_element)
|
||||
if mutate_path_elements && !path_elements.is_empty() {
|
||||
path_elements[0] = Fr::rand(&mut rng);
|
||||
}
|
||||
|
||||
let rln_witness = RLNWitnessInput::new(
|
||||
identity_secret,
|
||||
user_message_limit,
|
||||
message_id,
|
||||
path_elements,
|
||||
identity_path_index,
|
||||
x,
|
||||
external_nullifier,
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let (proof, proof_values) = rln.generate_rln_proof(&rln_witness).unwrap();
|
||||
|
||||
(rln, proof, proof_values, x, rng)
|
||||
}
|
||||
|
||||
#[test]
|
||||
// We test merkle batch Merkle tree additions
|
||||
fn test_merkle_operations() {
|
||||
@@ -968,113 +917,6 @@ mod test {
|
||||
RLN::new(DEFAULT_TREE_DEPTH, custom_pmtree_config.unwrap());
|
||||
assert!(rln_with_custom_tree_config.is_ok());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_verify_rln_proof_failure_mutated_external_nullifier() {
|
||||
let (rln, proof, mut proof_values, x, _rng) = setup_rln_proof(false);
|
||||
|
||||
// Mutate external_nullifier by adding 1
|
||||
proof_values.external_nullifier += Fr::from(1);
|
||||
|
||||
// Verification should fail
|
||||
let verified = rln.verify_rln_proof(&proof, &proof_values, &x).is_ok();
|
||||
assert!(!verified);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_verify_rln_proof_failure_mutated_x() {
|
||||
let (rln, proof, proof_values, _, mut rng) = setup_rln_proof(false);
|
||||
|
||||
// Generate unrelated x
|
||||
let mutated_x = Fr::rand(&mut rng);
|
||||
|
||||
// Verification should fail
|
||||
let verified = rln
|
||||
.verify_rln_proof(&proof, &proof_values, &mutated_x)
|
||||
.is_ok();
|
||||
assert!(!verified);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_verify_rln_proof_failure_mutated_nullifier() {
|
||||
let (rln, proof, mut proof_values, x, mut rng) = setup_rln_proof(false);
|
||||
|
||||
// Mutate nullifier (simulating mutated message_id)
|
||||
proof_values.nullifier = Fr::rand(&mut rng);
|
||||
|
||||
// Verification should fail
|
||||
let verified = rln.verify_rln_proof(&proof, &proof_values, &x).is_ok();
|
||||
assert!(!verified);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_verify_rln_proof_failure_mutated_root() {
|
||||
let (rln, proof, mut proof_values, x, mut rng) = setup_rln_proof(false);
|
||||
|
||||
// Mutate root (simulating mutated path_element)
|
||||
proof_values.root = Fr::rand(&mut rng);
|
||||
|
||||
// Verification should fail
|
||||
let verified = rln.verify_rln_proof(&proof, &proof_values, &x).is_ok();
|
||||
assert!(!verified);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_verify_with_roots_failure_mutated_external_nullifier() {
|
||||
let (rln, proof, mut proof_values, x, _rng) = setup_rln_proof(false);
|
||||
let roots = vec![rln.get_root()];
|
||||
|
||||
// Mutate external_nullifier by adding 1
|
||||
proof_values.external_nullifier += Fr::from(1);
|
||||
|
||||
// Verification should fail
|
||||
let verified = rln
|
||||
.verify_with_roots(&proof, &proof_values, &x, &roots)
|
||||
.is_ok();
|
||||
assert!(!verified);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_verify_with_roots_failure_mutated_x() {
|
||||
let (rln, proof, proof_values, _, mut rng) = setup_rln_proof(false);
|
||||
let roots = vec![rln.get_root()];
|
||||
|
||||
// Mutate x
|
||||
let mutated_x = Fr::rand(&mut rng);
|
||||
|
||||
// Verification should fail
|
||||
let verified = rln
|
||||
.verify_with_roots(&proof, &proof_values, &mutated_x, &roots)
|
||||
.is_ok();
|
||||
assert!(!verified);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_verify_with_roots_failure_mutated_nullifier() {
|
||||
let (rln, proof, mut proof_values, x, mut rng) = setup_rln_proof(false);
|
||||
let roots = vec![rln.get_root()];
|
||||
|
||||
// Mutate nullifier (simulating mutated message_id)
|
||||
proof_values.nullifier = Fr::rand(&mut rng);
|
||||
|
||||
// Verification should fail
|
||||
let verified = rln
|
||||
.verify_with_roots(&proof, &proof_values, &x, &roots)
|
||||
.is_ok();
|
||||
assert!(!verified);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_verify_with_roots_failure_mutated_root() {
|
||||
let (rln, proof, proof_values, x, _rng) = setup_rln_proof(true);
|
||||
let roots = vec![rln.get_root()];
|
||||
|
||||
// Verification should fail due to mutated path_elements leading to wrong root
|
||||
let verified = rln
|
||||
.verify_with_roots(&proof, &proof_values, &x, &roots)
|
||||
.is_ok();
|
||||
assert!(!verified);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "stateless")]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "zerokit_utils"
|
||||
version = "1.0.0"
|
||||
version = "0.7.0"
|
||||
edition = "2021"
|
||||
license = "MIT OR Apache-2.0"
|
||||
description = "Various utilities for Zerokit"
|
||||
|
||||
@@ -105,7 +105,7 @@ Add zerokit-utils as a dependency to your Cargo.toml file:
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
zerokit-utils = "1.0.0"
|
||||
zerokit-utils = "0.7.0"
|
||||
```
|
||||
|
||||
## Building and Testing
|
||||
|
||||
Reference in New Issue
Block a user