From d5404d9b5b2915e095d5e7950ca5f1a005af648f Mon Sep 17 00:00:00 2001 From: Alejandro Cabeza Romero Date: Fri, 8 May 2026 10:42:15 +0200 Subject: [PATCH] Replace native Bytes newtype with bytes crate and expose it as Witness. --- rust/Cargo.lock | 1 + .../src/native.rs | 8 ++--- .../src/native.rs | 8 ++--- .../src/native.rs | 8 ++--- .../src/native.rs | 8 ++--- .../Cargo.toml | 1 + .../src/lib.rs | 2 +- .../src/native/mod.rs | 4 +-- .../src/native/{bytes.rs => witness.rs} | 36 ++----------------- 9 files changed, 24 insertions(+), 52 deletions(-) rename rust/logos-blockchain-circuits-types/src/native/{bytes.rs => witness.rs} (57%) 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) } }