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",
|
"displaydoc",
|
||||||
"futures",
|
"futures",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
|
"jubjub 0.5.1",
|
||||||
"metrics",
|
"metrics",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"rand 0.7.3",
|
"rand 0.7.3",
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@ edition = "2018"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
chrono = "0.4.19"
|
chrono = "0.4.19"
|
||||||
color-eyre = "0.5"
|
color-eyre = "0.5"
|
||||||
|
displaydoc = "0.1.7"
|
||||||
|
jubjub = "0.5.1"
|
||||||
once_cell = "1.4"
|
once_cell = "1.4"
|
||||||
rand = "0.7"
|
rand = "0.7"
|
||||||
redjubjub = "0.2"
|
redjubjub = "0.2"
|
||||||
|
|
@ -28,7 +30,6 @@ tower-batch = { path = "../tower-batch/" }
|
||||||
zebra-chain = { path = "../zebra-chain" }
|
zebra-chain = { path = "../zebra-chain" }
|
||||||
zebra-state = { path = "../zebra-state" }
|
zebra-state = { path = "../zebra-state" }
|
||||||
zebra-script = { path = "../zebra-script" }
|
zebra-script = { path = "../zebra-script" }
|
||||||
displaydoc = "0.1.7"
|
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
rand = "0.7"
|
rand = "0.7"
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
//! Asynchronous verification of cryptographic primitives.
|
//! Asynchronous verification of cryptographic primitives.
|
||||||
|
|
||||||
|
pub mod groth16;
|
||||||
pub mod redjubjub;
|
pub mod redjubjub;
|
||||||
|
|
||||||
/// The maximum batch size for any of the batch verifiers.
|
/// 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