mirror of
https://github.com/logos-blockchain/logos-blockchain-circuits.git
synced 2026-05-18 23:39:47 +00:00
Implement ffi and native PoQ functions.
This commit is contained in:
parent
de11d81252
commit
67b35faf4f
@ -0,0 +1,12 @@
|
||||
use std::ffi::c_char;
|
||||
use lbc_types::ffi::{Bytes, Status, WitnessInput};
|
||||
|
||||
unsafe extern "C" {
|
||||
pub fn poq_generate_witness(input: *const WitnessInput, output: *mut Bytes) -> Status;
|
||||
|
||||
pub fn poq_generate_witness_from_files(
|
||||
dat: *const c_char,
|
||||
inputs: *const c_char,
|
||||
output: *const c_char,
|
||||
) -> Status;
|
||||
}
|
||||
@ -1 +1,4 @@
|
||||
pub mod ffi;
|
||||
mod ffi;
|
||||
pub mod native;
|
||||
|
||||
pub use native::{generate_witness, generate_witness_from_files};
|
||||
|
||||
43
rust/logos-blockchain-circuits-poq-sys/src/native.rs
Normal file
43
rust/logos-blockchain-circuits-poq-sys/src/native.rs
Normal file
@ -0,0 +1,43 @@
|
||||
use std::ffi::c_char;
|
||||
use std::path::Path;
|
||||
use lbc_types::{ffi, native::{Bytes, Error, WitnessInput}};
|
||||
use crate::ffi::{poq_generate_witness, poq_generate_witness_from_files};
|
||||
|
||||
pub fn generate_witness(
|
||||
input: WitnessInput,
|
||||
) -> Result<Bytes, Error> {
|
||||
let ffi_input_guard = input.as_ffi();
|
||||
let ffi_input = ffi_input_guard.as_ref();
|
||||
|
||||
let mut ffi_output_bytes = ffi::Bytes {
|
||||
data: std::ptr::null_mut(),
|
||||
size: 0
|
||||
};
|
||||
|
||||
let status = unsafe {
|
||||
poq_generate_witness(
|
||||
ffi_input as *const ffi::WitnessInput,
|
||||
&mut ffi_output_bytes as *mut ffi::Bytes
|
||||
)
|
||||
};
|
||||
|
||||
status.try_into().map(|()| { Bytes::from(ffi_output_bytes) })
|
||||
}
|
||||
|
||||
pub fn generate_witness_from_files(
|
||||
dat: &Path,
|
||||
inputs: &Path,
|
||||
output: &Path,
|
||||
) -> Result<(), Error> {
|
||||
let dat = dat.to_str().ok_or_else(|| Error::InvalidInput)?; // TODO: Message
|
||||
let inputs = inputs.to_str().ok_or_else(|| Error::InvalidInput)?;
|
||||
let output = output.to_str().ok_or_else(|| Error::InvalidInput)?;
|
||||
|
||||
unsafe {
|
||||
poq_generate_witness_from_files (
|
||||
dat.as_ptr() as *const c_char,
|
||||
inputs.as_ptr() as *const c_char,
|
||||
output.as_ptr() as *const c_char
|
||||
)
|
||||
}.try_into()
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user