Have the eVRF take a Zeroizing private key

This commit is contained in:
Luke Parker
2024-07-23 19:23:21 -04:00
parent b6e688076f
commit b7103038cb
2 changed files with 8 additions and 7 deletions

View File

@@ -185,7 +185,7 @@ impl Evrf {
pub fn prove<C: EvrfCurve>( pub fn prove<C: EvrfCurve>(
rng: &mut (impl RngCore + CryptoRng), rng: &mut (impl RngCore + CryptoRng),
generators: &Generators<C>, generators: &Generators<C>,
evrf_private_key: <<C as EvrfCurve>::EmbeddedCurve as Ciphersuite>::F, evrf_private_key: Zeroizing<<<C as EvrfCurve>::EmbeddedCurve as Ciphersuite>::F>,
invocation: [u8; 32], invocation: [u8; 32],
quantity: usize, quantity: usize,
) -> Result<EvrfProveResult<C>, AcError> ) -> Result<EvrfProveResult<C>, AcError>
@@ -202,7 +202,7 @@ impl Evrf {
let transcript = Blake2s256::digest( let transcript = Blake2s256::digest(
[ [
invocation.as_slice(), invocation.as_slice(),
(<<C as EvrfCurve>::EmbeddedCurve as Ciphersuite>::generator() * evrf_private_key) (<<C as EvrfCurve>::EmbeddedCurve as Ciphersuite>::generator() * *evrf_private_key)
.to_bytes() .to_bytes()
.as_ref(), .as_ref(),
] ]
@@ -303,7 +303,7 @@ impl Evrf {
generator_tables.push(GeneratorTable::new(&curve_spec, x, y)); generator_tables.push(GeneratorTable::new(&curve_spec, x, y));
} }
let dh = generator * evrf_private_key; let dh = generator * *evrf_private_key;
{ {
for coefficient in &dlog { for coefficient in &dlog {
let mut coefficient = *coefficient; let mut coefficient = *coefficient;

View File

@@ -2,7 +2,7 @@ use std::time::Instant;
use rand_core::OsRng; use rand_core::OsRng;
use zeroize::Zeroize; use zeroize::{Zeroize, Zeroizing};
use generic_array::typenum::{Sum, Diff, Quot, U, U1, U2}; use generic_array::typenum::{Sum, Diff, Quot, U, U1, U2};
use blake2::{Digest, Blake2b512}; use blake2::{Digest, Blake2b512};
@@ -66,9 +66,10 @@ impl EvrfCurve for Pallas {
#[test] #[test]
fn pasta_test() { fn pasta_test() {
let generators = generators(1024); let generators = generators(1024);
let vesta_private_key = <Vesta as Ciphersuite>::F::random(&mut OsRng); let vesta_private_key = Zeroizing::new(<Vesta as Ciphersuite>::F::random(&mut OsRng));
let time = Instant::now(); let time = Instant::now();
let res = Evrf::prove::<Pallas>(&mut OsRng, &generators, vesta_private_key, [0; 32], 1).unwrap(); let res =
Evrf::prove::<Pallas>(&mut OsRng, &generators, vesta_private_key.clone(), [0; 32], 1).unwrap();
println!("Proving time: {:?}", Instant::now() - time); println!("Proving time: {:?}", Instant::now() - time);
let time = Instant::now(); let time = Instant::now();
@@ -77,7 +78,7 @@ fn pasta_test() {
&mut OsRng, &mut OsRng,
&generators, &generators,
&mut verifier, &mut verifier,
Vesta::generator() * vesta_private_key, Vesta::generator() * *vesta_private_key,
[0; 32], [0; 32],
1, 1,
&res.proof, &res.proof,