Finish abstracting CircuitWitnessInput.

This commit is contained in:
Alejandro Cabeza Romero 2026-05-05 16:58:04 +02:00
parent c7b5f7ac91
commit 900bee972c
No known key found for this signature in database
GPG Key ID: DA3D14AE478030FD
7 changed files with 53 additions and 56 deletions

View File

@ -1,22 +1,20 @@
use std::path::Path;
use lbc_types::{ffi, native::{Bytes, Error}};
use lbc_types::inputs::CircuitDat;
use lbc_common::string::path_as_null_terminated_string;
use crate::ffi::{poc_generate_witness, poc_generate_witness_from_files};
pub(crate) const RAW_CIRCUIT_DAT: &[u8] = include_bytes!(concat!(env!("LBC_POC_LIB_DIR"), "/witness_generator.dat"));
const RAW_CIRCUIT_DAT: &[u8] = include_bytes!(concat!(env!("LBC_POC_LIB_DIR"), "/witness_generator.dat"));
pub struct PocDat;
impl CircuitDat for PocDat {
impl lbc_types::CircuitDat for PocDat {
const DAT: &'static [u8] = RAW_CIRCUIT_DAT;
}
pub type PocWitnessInput<'a> = lbc_types::inputs::CircuitWitnessInput<'a, PocDat>;
pub type PocWitnessInput<'a> = lbc_types::CircuitWitnessInput<'a, PocDat>;
pub fn generate_witness(
input: PocWitnessInput,
) -> Result<Bytes, Error> {
let input: lbc_types::WitnessInput = input.into();
let ffi_input_guard = input.as_ffi();
let ffi_input = ffi_input_guard.as_ref();

View File

@ -1,22 +1,20 @@
use std::path::Path;
use lbc_types::{ffi, native::{Bytes, Error}};
use lbc_types::inputs::CircuitDat;
use lbc_common::string::path_as_null_terminated_string;
use crate::ffi::{pol_generate_witness, pol_generate_witness_from_files};
pub(crate) const RAW_CIRCUIT_DAT: &[u8] = include_bytes!(concat!(env!("LBC_POL_LIB_DIR"), "/witness_generator.dat"));
const RAW_CIRCUIT_DAT: &[u8] = include_bytes!(concat!(env!("LBC_POL_LIB_DIR"), "/witness_generator.dat"));
pub struct PolDat;
impl CircuitDat for PolDat {
impl lbc_types::CircuitDat for PolDat {
const DAT: &'static [u8] = RAW_CIRCUIT_DAT;
}
pub type PolWitnessInput<'a> = lbc_types::inputs::CircuitWitnessInput<'a, PolDat>;
pub type PolWitnessInput<'a> = lbc_types::CircuitWitnessInput<'a, PolDat>;
pub fn generate_witness(
input: PolWitnessInput,
) -> Result<Bytes, Error> {
let input: lbc_types::WitnessInput = input.into();
let ffi_input_guard = input.as_ffi();
let ffi_input = ffi_input_guard.as_ref();

View File

@ -1,22 +1,20 @@
use std::path::Path;
use lbc_types::{ffi, native::{Bytes, Error}};
use lbc_types::inputs::CircuitDat;
use lbc_common::string::path_as_null_terminated_string;
use crate::ffi::{poq_generate_witness, poq_generate_witness_from_files};
pub(crate) const RAW_CIRCUIT_DAT: &[u8] = include_bytes!(concat!(env!("LBC_POQ_LIB_DIR"), "/witness_generator.dat"));
const RAW_CIRCUIT_DAT: &[u8] = include_bytes!(concat!(env!("LBC_POQ_LIB_DIR"), "/witness_generator.dat"));
pub struct PoqDat;
impl CircuitDat for PoqDat {
impl lbc_types::CircuitDat for PoqDat {
const DAT: &'static [u8] = RAW_CIRCUIT_DAT;
}
pub type PoqWitnessInput<'a> = lbc_types::inputs::CircuitWitnessInput<'a, PoqDat>;
pub type PoqWitnessInput<'a> = lbc_types::CircuitWitnessInput<'a, PoqDat>;
pub fn generate_witness(
input: PoqWitnessInput,
) -> Result<Bytes, Error> {
let input: lbc_types::WitnessInput = input.into();
let ffi_input_guard = input.as_ffi();
let ffi_input = ffi_input_guard.as_ref();

View File

@ -1,22 +1,20 @@
use std::path::Path;
use lbc_types::{ffi, native::{Bytes, Error}};
use lbc_types::inputs::CircuitDat;
use lbc_common::string::path_as_null_terminated_string;
use crate::ffi::{signature_generate_witness, signature_generate_witness_from_files};
pub(crate) const RAW_CIRCUIT_DAT: &[u8] = include_bytes!(concat!(env!("LBC_SIGNATURE_LIB_DIR"), "/witness_generator.dat"));
const RAW_CIRCUIT_DAT: &[u8] = include_bytes!(concat!(env!("LBC_SIGNATURE_LIB_DIR"), "/witness_generator.dat"));
pub struct SignatureDat;
impl CircuitDat for SignatureDat {
impl lbc_types::CircuitDat for SignatureDat {
const DAT: &'static [u8] = RAW_CIRCUIT_DAT;
}
pub type SignatureWitnessInput<'a> = lbc_types::inputs::CircuitWitnessInput<'a, SignatureDat>;
pub type SignatureWitnessInput<'a> = lbc_types::CircuitWitnessInput<'a, SignatureDat>;
pub fn generate_witness(
input: SignatureWitnessInput,
) -> Result<Bytes, Error> {
let input: lbc_types::WitnessInput = input.into();
let ffi_input_guard = input.as_ffi();
let ffi_input = ffi_input_guard.as_ref();

View File

@ -7,39 +7,4 @@
pub mod native;
pub mod ffi;
pub use native::witness_input::WitnessInput;
pub mod inputs {
use crate::native::Error;
use crate::WitnessInput;
pub trait CircuitDat {
const DAT: &'static [u8];
}
// TODO: Remove in favour on native::WitnessInput.
pub struct CircuitWitnessInput<'input, Dat> {
inner: WitnessInput<'input>,
_phantom: std::marker::PhantomData<Dat>
}
impl<'input, Dat: CircuitDat> CircuitWitnessInput<'input, Dat> {
pub fn new(inputs_json: String) -> Result<Self, Error> {
let inner = WitnessInput::new(Dat::DAT, inputs_json)?;
Ok(Self { inner, _phantom: Default::default() })
}
}
impl<'input, Dat> From<CircuitWitnessInput<'input, Dat>> for WitnessInput<'input> {
fn from(value: CircuitWitnessInput<'input, Dat>) -> Self {
value.inner
}
}
impl<'input, Dat> From<WitnessInput<'input>> for CircuitWitnessInput<'input, Dat> {
fn from(value: WitnessInput<'input>) -> Self {
Self { inner: value, _phantom: Default::default() }
}
}
}
pub use native::{CircuitDat, CircuitWitnessInput};

View File

@ -0,0 +1,38 @@
use std::ops::Deref;
use crate::native::{WitnessInput, Error};
pub trait CircuitDat {
const DAT: &'static [u8];
}
pub struct CircuitWitnessInput<'input, Dat> {
inner: WitnessInput<'input>,
_phantom: std::marker::PhantomData<Dat>
}
impl<'input, Dat: CircuitDat> CircuitWitnessInput<'input, Dat> {
pub fn new(inputs_json: String) -> Result<Self, Error> {
let inner = WitnessInput::new(Dat::DAT, inputs_json)?;
Ok(Self { inner, _phantom: Default::default() })
}
}
impl<'input, Dat> From<CircuitWitnessInput<'input, Dat>> for WitnessInput<'input> {
fn from(value: CircuitWitnessInput<'input, Dat>) -> Self {
value.inner
}
}
impl<'input, Dat> From<WitnessInput<'input>> for CircuitWitnessInput<'input, Dat> {
fn from(value: WitnessInput<'input>) -> Self {
Self { inner: value, _phantom: Default::default() }
}
}
impl<'input, Dat> Deref for CircuitWitnessInput<'input, Dat> {
type Target = WitnessInput<'input>;
fn deref(&self) -> &Self::Target {
&self.inner
}
}

View File

@ -5,7 +5,9 @@
pub mod bytes;
pub mod status;
pub mod witness_input;
pub mod circuit_witness_input;
pub use bytes::Bytes;
pub use status::{Result, Error};
pub use witness_input::WitnessInput;
pub use circuit_witness_input::{CircuitDat, CircuitWitnessInput};