Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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",
]
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