Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ schnorrkel = { version = "0.10.2", default-features = false, features = ["u64_ba
ark-serialize = { version = "0.5", default-features = false, features = ["derive"] }
ark-scale = { version = "0.0.13", default-features = false }
ark-vrf = { version = "0.1.0", default-features = false, features = ["bandersnatch", "ring"] }
spin = { version = "0.9", default-features = false, features = ["once"], optional = true }
spin = { version = "0.9", default-features = false, features = ["once"] }
rand = { version = "0.8", features = ["getrandom"] }

[dev-dependencies]
Expand All @@ -42,11 +42,8 @@ std = [
"ark-vrf/std",
"ark-vrf/parallel"
]
# Small ring 255, default to 16127
small-ring = []
# Prover for no-std environments with deterministic ring-proof.
# Not for production, may be useful for testing.
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why? FRAME is single threaded so a spin lock wont slow us down.

no-std-prover = [
"spin",
"ark-vrf/test-vectors",
]
2 changes: 2 additions & 0 deletions Justfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
bench:
bash scripts/bench_on_ref_hw.sh
17 changes: 17 additions & 0 deletions scripts/bench_on_ref_hw.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/bin/bash

# Benchmark script to run on Parity reference hardware server. Open a devops ticket to get access.
set -e

SERVER="scaleway"
REMOTE_DIR="~/verifiable"
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"

echo "Syncing files to $SERVER..."
rsync -avz --progress \
--exclude 'target' \
--exclude '.git' \
"$PROJECT_DIR/" "$SERVER:$REMOTE_DIR/"

echo "Running benchmarks on $SERVER..."
ssh "$SERVER" "source ~/.cargo/env && cd $REMOTE_DIR && cargo t -r open_validate_works --quiet -- --nocapture --test-threads=1"
23 changes: 14 additions & 9 deletions src/bin/generate_test_keys.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use verifiable::ring_vrf_impl::BandersnatchVrfVerifiable;
use verifiable::GenerateVerifiable;
use rand::RngCore;
use verifiable::ring_vrf_impl::RingParams;

const PROOF_PREFIX: &[u8] = b"pop register using";
const VOUCHER_NAMES: [&str; 2] = ["TEST_VOUCHER_KEY_1", "TEST_VOUCHER_KEY_2"];
Expand All @@ -25,8 +26,8 @@ fn print_byte_array(name: &str, data: &[u8]) {
println!();
}

fn validate_keys(member: &verifiable::ring_vrf_impl::EncodedPublicKey, message: &[u8], signature: &[u8; 96]) {
let is_valid = BandersnatchVrfVerifiable::verify_signature(signature, message, member);
fn validate_keys<R: RingParams>(member: &verifiable::ring_vrf_impl::EncodedPublicKey, message: &[u8], signature: &[u8; 96]) {
let is_valid = BandersnatchVrfVerifiable::<R>::verify_signature(signature, message, member);

if is_valid {
eprintln!("All generated keys are valid");
Expand All @@ -37,32 +38,36 @@ fn validate_keys(member: &verifiable::ring_vrf_impl::EncodedPublicKey, message:
}

fn main() {
do_main::<verifiable::ring_vrf_impl::SmallRingParams>();
}

fn do_main<R: RingParams>() {
let mut rng = rand::thread_rng();

let mut entropy = [0u8; 32];
let mut candidate_address = [0u8; 32];
rng.fill_bytes(&mut entropy);
rng.fill_bytes(&mut candidate_address);

let secret = BandersnatchVrfVerifiable::new_secret(entropy);
let member = BandersnatchVrfVerifiable::member_from_secret(&secret);
let secret = BandersnatchVrfVerifiable::<R>::new_secret(entropy);
let member = BandersnatchVrfVerifiable::<R>::member_from_secret(&secret);

let mut message = Vec::new();
message.extend_from_slice(PROOF_PREFIX);
message.extend_from_slice(&candidate_address);

let signature = BandersnatchVrfVerifiable::sign(&secret, &message).unwrap();
let signature = BandersnatchVrfVerifiable::<R>::sign(&secret, &message).unwrap();

print_byte_array("TEST_PUBLIC_KEY", &member.0);
print_byte_array("TEST_VRF_SIGNATURE", &signature);

for i in 0..2 {
let mut voucher_entropy = [0u8; 32];
rng.fill_bytes(&mut voucher_entropy);
let voucher_secret = BandersnatchVrfVerifiable::new_secret(voucher_entropy);
let voucher_member = BandersnatchVrfVerifiable::member_from_secret(&voucher_secret);
let voucher_secret = BandersnatchVrfVerifiable::<R>::new_secret(voucher_entropy);
let voucher_member = BandersnatchVrfVerifiable::<R>::member_from_secret(&voucher_secret);
print_byte_array(VOUCHER_NAMES[i], &voucher_member.0);
}

validate_keys(&member, &message, &signature);
}
validate_keys::<R>(&member, &message, &signature);
}
Loading