diff --git a/rust/Cargo.lock b/rust/Cargo.lock index beb17ae..b6740cb 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -207,6 +207,7 @@ dependencies = [ name = "logos-blockchain-circuits-types" version = "0.4.2" dependencies = [ + "bytes", "libc", ] diff --git a/rust/logos-blockchain-circuits-poc-sys/src/native.rs b/rust/logos-blockchain-circuits-poc-sys/src/native.rs index 74d1130..dd2a213 100644 --- a/rust/logos-blockchain-circuits-poc-sys/src/native.rs +++ b/rust/logos-blockchain-circuits-poc-sys/src/native.rs @@ -2,7 +2,7 @@ use crate::ffi::{poc_generate_witness, poc_generate_witness_from_files}; use lbc_common::string::path_as_null_terminated_string; use lbc_types::{ ffi, - native::{Bytes, Error}, + native::{Error, Witness}, }; use std::path::Path; @@ -16,7 +16,7 @@ impl<'dat> lbc_types::CircuitDat<'dat> for PocDat { pub type PocWitnessInput<'dat> = lbc_types::CircuitWitnessInput<'dat, PocDat>; -pub fn generate_witness(input: &PocWitnessInput) -> Result { +pub fn generate_witness(input: &PocWitnessInput) -> Result { let ffi_input_guard = input.as_ffi(); let ffi_input = ffi_input_guard.as_ref(); @@ -26,7 +26,7 @@ pub fn generate_witness(input: &PocWitnessInput) -> Result { let status = unsafe { poc_generate_witness(std::ptr::from_ref(ffi_input), &raw mut ffi_output_bytes) }; - status.try_into().map(|()| Bytes::from(ffi_output_bytes)) + status.try_into().map(|()| Witness::from(ffi_output_bytes)) } pub fn generate_witness_from_files(dat: &Path, inputs: &Path, output: &Path) -> Result<(), Error> { @@ -77,6 +77,6 @@ mod tests { witness_output_path.display() ) }); - assert_eq!(output.as_slice(), expected.as_slice()); + assert_eq!(output.iter().as_slice(), expected.as_slice()); } } diff --git a/rust/logos-blockchain-circuits-pol-sys/src/native.rs b/rust/logos-blockchain-circuits-pol-sys/src/native.rs index 9862c59..c6d04c8 100644 --- a/rust/logos-blockchain-circuits-pol-sys/src/native.rs +++ b/rust/logos-blockchain-circuits-pol-sys/src/native.rs @@ -2,7 +2,7 @@ use crate::ffi::{pol_generate_witness, pol_generate_witness_from_files}; use lbc_common::string::path_as_null_terminated_string; use lbc_types::{ ffi, - native::{Bytes, Error}, + native::{Error, Witness}, }; use std::path::Path; @@ -16,7 +16,7 @@ impl<'dat> lbc_types::CircuitDat<'dat> for PolDat { pub type PolWitnessInput<'dat> = lbc_types::CircuitWitnessInput<'dat, PolDat>; -pub fn generate_witness(input: &PolWitnessInput) -> Result { +pub fn generate_witness(input: &PolWitnessInput) -> Result { let ffi_input_guard = input.as_ffi(); let ffi_input = ffi_input_guard.as_ref(); @@ -26,7 +26,7 @@ pub fn generate_witness(input: &PolWitnessInput) -> Result { let status = unsafe { pol_generate_witness(std::ptr::from_ref(ffi_input), &raw mut ffi_output_bytes) }; - status.try_into().map(|()| Bytes::from(ffi_output_bytes)) + status.try_into().map(|()| Witness::from(ffi_output_bytes)) } pub fn generate_witness_from_files(dat: &Path, inputs: &Path, output: &Path) -> Result<(), Error> { @@ -77,6 +77,6 @@ mod tests { witness_output_path.display() ) }); - assert_eq!(output.as_slice(), expected.as_slice()); + assert_eq!(output.iter().as_slice(), expected.as_slice()); } } diff --git a/rust/logos-blockchain-circuits-poq-sys/src/native.rs b/rust/logos-blockchain-circuits-poq-sys/src/native.rs index 8f504f1..5ca04ef 100644 --- a/rust/logos-blockchain-circuits-poq-sys/src/native.rs +++ b/rust/logos-blockchain-circuits-poq-sys/src/native.rs @@ -2,7 +2,7 @@ use crate::ffi::{poq_generate_witness, poq_generate_witness_from_files}; use lbc_common::string::path_as_null_terminated_string; use lbc_types::{ ffi, - native::{Bytes, Error}, + native::{Error, Witness}, }; use std::path::Path; @@ -16,7 +16,7 @@ impl<'dat> lbc_types::CircuitDat<'dat> for PoqDat { pub type PoqWitnessInput<'dat> = lbc_types::CircuitWitnessInput<'dat, PoqDat>; -pub fn generate_witness(input: &PoqWitnessInput) -> Result { +pub fn generate_witness(input: &PoqWitnessInput) -> Result { let ffi_input_guard = input.as_ffi(); let ffi_input = ffi_input_guard.as_ref(); @@ -26,7 +26,7 @@ pub fn generate_witness(input: &PoqWitnessInput) -> Result { let status = unsafe { poq_generate_witness(std::ptr::from_ref(ffi_input), &raw mut ffi_output_bytes) }; - status.try_into().map(|()| Bytes::from(ffi_output_bytes)) + status.try_into().map(|()| Witness::from(ffi_output_bytes)) } pub fn generate_witness_from_files(dat: &Path, inputs: &Path, output: &Path) -> Result<(), Error> { @@ -77,6 +77,6 @@ mod tests { witness_output_path.display() ) }); - assert_eq!(output.as_slice(), expected.as_slice()); + assert_eq!(output.iter().as_slice(), expected.as_slice()); } } diff --git a/rust/logos-blockchain-circuits-signature-sys/src/native.rs b/rust/logos-blockchain-circuits-signature-sys/src/native.rs index 3f5d958..dde8030 100644 --- a/rust/logos-blockchain-circuits-signature-sys/src/native.rs +++ b/rust/logos-blockchain-circuits-signature-sys/src/native.rs @@ -2,7 +2,7 @@ use crate::ffi::{signature_generate_witness, signature_generate_witness_from_fil use lbc_common::string::path_as_null_terminated_string; use lbc_types::{ ffi, - native::{Bytes, Error}, + native::{Error, Witness}, }; use std::path::Path; @@ -18,7 +18,7 @@ impl<'dat> lbc_types::CircuitDat<'dat> for SignatureDat { pub type SignatureWitnessInput<'dat> = lbc_types::CircuitWitnessInput<'dat, SignatureDat>; -pub fn generate_witness(input: &SignatureWitnessInput) -> Result { +pub fn generate_witness(input: &SignatureWitnessInput) -> Result { let ffi_input_guard = input.as_ffi(); let ffi_input = ffi_input_guard.as_ref(); @@ -29,7 +29,7 @@ pub fn generate_witness(input: &SignatureWitnessInput) -> Result { signature_generate_witness(std::ptr::from_ref(ffi_input), &raw mut ffi_output_bytes) }; - status.try_into().map(|()| Bytes::from(ffi_output_bytes)) + status.try_into().map(|()| Witness::from(ffi_output_bytes)) } pub fn generate_witness_from_files(dat: &Path, inputs: &Path, output: &Path) -> Result<(), Error> { @@ -82,6 +82,6 @@ mod tests { witness_output_path.display() ) }); - assert_eq!(output.as_slice(), expected.as_slice()); + assert_eq!(output.iter().as_slice(), expected.as_slice()); } } diff --git a/rust/logos-blockchain-circuits-types/Cargo.toml b/rust/logos-blockchain-circuits-types/Cargo.toml index 73285b6..3a85314 100644 --- a/rust/logos-blockchain-circuits-types/Cargo.toml +++ b/rust/logos-blockchain-circuits-types/Cargo.toml @@ -13,4 +13,5 @@ version.workspace = true workspace = true [dependencies] +bytes = { workspace = true } libc = { workspace = true } diff --git a/rust/logos-blockchain-circuits-types/src/lib.rs b/rust/logos-blockchain-circuits-types/src/lib.rs index 58235c8..bc45c9f 100644 --- a/rust/logos-blockchain-circuits-types/src/lib.rs +++ b/rust/logos-blockchain-circuits-types/src/lib.rs @@ -7,4 +7,4 @@ pub mod ffi; pub mod native; -pub use native::{CircuitDat, CircuitWitnessInput}; +pub use native::{CircuitDat, CircuitWitnessInput, Error}; diff --git a/rust/logos-blockchain-circuits-types/src/native/mod.rs b/rust/logos-blockchain-circuits-types/src/native/mod.rs index f5c4550..8733326 100644 --- a/rust/logos-blockchain-circuits-types/src/native/mod.rs +++ b/rust/logos-blockchain-circuits-types/src/native/mod.rs @@ -2,12 +2,12 @@ //! //! Use them in preference to the types in [`crate::ffi`]. -pub mod bytes; pub mod circuit_witness_input; pub mod status; +pub mod witness; pub mod witness_input; -pub use bytes::Bytes; pub use circuit_witness_input::{CircuitDat, CircuitWitnessInput}; pub use status::{Error, Result}; +pub use witness::Witness; pub use witness_input::WitnessInput; diff --git a/rust/logos-blockchain-circuits-types/src/native/bytes.rs b/rust/logos-blockchain-circuits-types/src/native/witness.rs similarity index 57% rename from rust/logos-blockchain-circuits-types/src/native/bytes.rs rename to rust/logos-blockchain-circuits-types/src/native/witness.rs index 4375e47..9f5181f 100644 --- a/rust/logos-blockchain-circuits-types/src/native/bytes.rs +++ b/rust/logos-blockchain-circuits-types/src/native/witness.rs @@ -4,39 +4,9 @@ use crate::ffi; /// /// When constructing from [`From`], it takes ownership of the underlying value and /// frees it. -pub struct Bytes(Vec); +pub type Witness = bytes::Bytes; -impl Bytes { - #[must_use] - pub fn into_inner(self) -> Vec { - self.0 - } - - #[must_use] - pub fn as_slice(&self) -> &[u8] { - &self.0 - } -} - -impl AsRef<[u8]> for Bytes { - fn as_ref(&self) -> &[u8] { - self.as_slice() - } -} - -impl From> for Bytes { - fn from(value: Vec) -> Self { - Self(value) - } -} - -impl From for Vec { - fn from(value: Bytes) -> Self { - value.into_inner() - } -} - -impl From for Bytes { +impl From for Witness { fn from(mut ffi_value: ffi::Bytes) -> Self { let vec = if ffi_value.size == 0 || ffi_value.data.is_null() { Vec::new() @@ -47,6 +17,6 @@ impl From for Bytes { }; // SAFETY: `ffi_value` is a local variable, so the raw pointer is valid for this call. unsafe { ffi::free_bytes(&raw mut ffi_value) }; - Self(vec) + Self::from(vec) } }