consensus: add stub groth16::Verifier
Co-authored-by: Deirdre Connolly <deirdre@zfnd.org>
This commit is contained in:
parent
eb56666d30
commit
9dc8d76d68
|
|
@ -3186,6 +3186,7 @@ dependencies = [
|
|||
"displaydoc",
|
||||
"futures",
|
||||
"futures-util",
|
||||
"jubjub 0.5.1",
|
||||
"metrics",
|
||||
"once_cell",
|
||||
"rand 0.7.3",
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@ edition = "2018"
|
|||
[dependencies]
|
||||
chrono = "0.4.19"
|
||||
color-eyre = "0.5"
|
||||
displaydoc = "0.1.7"
|
||||
jubjub = "0.5.1"
|
||||
once_cell = "1.4"
|
||||
rand = "0.7"
|
||||
redjubjub = "0.2"
|
||||
|
|
@ -28,7 +30,6 @@ tower-batch = { path = "../tower-batch/" }
|
|||
zebra-chain = { path = "../zebra-chain" }
|
||||
zebra-state = { path = "../zebra-state" }
|
||||
zebra-script = { path = "../zebra-script" }
|
||||
displaydoc = "0.1.7"
|
||||
|
||||
[dev-dependencies]
|
||||
rand = "0.7"
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
//! Asynchronous verification of cryptographic primitives.
|
||||
|
||||
pub mod groth16;
|
||||
pub mod redjubjub;
|
||||
|
||||
/// The maximum batch size for any of the batch verifiers.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,55 @@
|
|||
use std::{
|
||||
future::Future,
|
||||
pin::Pin,
|
||||
task::{Context, Poll},
|
||||
};
|
||||
|
||||
use tower::Service;
|
||||
|
||||
use zebra_chain::primitives::Groth16Proof;
|
||||
|
||||
use crate::BoxError;
|
||||
|
||||
/// Provides verification of Groth16 proofs for a specific statement.
|
||||
///
|
||||
/// Groth16 proofs require a proof verification key; the [`Verifier`] type is
|
||||
/// responsible for ownership of the PVK.
|
||||
pub struct Verifier {
|
||||
// XXX this needs to hold on to a verification key
|
||||
}
|
||||
|
||||
impl Verifier {
|
||||
/// Create a new Groth16 verifier, supplying the encoding of the verification key.
|
||||
pub fn new(_encoded_verification_key: &[u8]) -> Result<Self, BoxError> {
|
||||
// parse and turn into a bellman type,
|
||||
// so that users don't have to have the entire bellman api
|
||||
unimplemented!();
|
||||
}
|
||||
}
|
||||
|
||||
// XXX this is copied from the WIP batch bellman impl,
|
||||
// in the future, replace with a re export
|
||||
|
||||
pub struct Item {
|
||||
pub proof: Groth16Proof,
|
||||
pub public_inputs: Vec<jubjub::Fr>,
|
||||
}
|
||||
|
||||
// XXX in the future, Verifier will implement
|
||||
// Service<BatchControl<Item>>> and be wrapped in a Batch
|
||||
// to get a Service<Item>
|
||||
// but for now, just implement Service<Item> and do unbatched verif.
|
||||
//impl Service<BatchControl<Item>> for Verifier {
|
||||
impl Service<Item> for Verifier {
|
||||
type Response = ();
|
||||
type Error = BoxError;
|
||||
type Future = Pin<Box<dyn Future<Output = Result<(), BoxError>> + Send + 'static>>;
|
||||
|
||||
fn poll_ready(&mut self, _cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
|
||||
Poll::Ready(Ok(()))
|
||||
}
|
||||
|
||||
fn call(&mut self, _req: Item) -> Self::Future {
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue