pub mod bls;
pub mod cl;
pub mod logger;
pub mod signatures;
use errors::prelude::*;
use std::os::raw::c_char;
#[repr(C)]
pub struct ByteArray {
length: usize,
data: *const u8,
}
impl Default for ByteArray {
fn default() -> ByteArray {
ByteArray {
length: 0,
data: std::ptr::null(),
}
}
}
impl ByteArray {
pub fn to_vec(&self) -> Vec<u8> {
if self.data.is_null() || self.length == 0 {
Vec::new()
} else {
unsafe { std::slice::from_raw_parts(self.data, self.length).to_vec() }
}
}
}
impl From<&Vec<u8>> for ByteArray {
fn from(input: &Vec<u8>) -> ByteArray {
ByteArray {
length: input.len(),
data: input.as_slice().as_ptr() as *const u8,
}
}
}
impl From<&[u8]> for ByteArray {
fn from(input: &[u8]) -> ByteArray {
ByteArray {
length: input.len(),
data: input.as_ptr() as *const u8,
}
}
}
#[derive(Debug, PartialEq, Copy, Clone)]
#[repr(usize)]
pub enum ErrorCode {
Success = 0,
CommonInvalidParam1 = 100,
CommonInvalidParam2 = 101,
CommonInvalidParam3 = 102,
CommonInvalidParam4 = 103,
CommonInvalidParam5 = 104,
CommonInvalidParam6 = 105,
CommonInvalidParam7 = 106,
CommonInvalidParam8 = 107,
CommonInvalidParam9 = 108,
CommonInvalidParam10 = 109,
CommonInvalidParam11 = 110,
CommonInvalidParam12 = 111,
CommonInvalidState = 112,
CommonInvalidStructure = 113,
CommonIOError = 114,
AnoncredsRevocationAccumulatorIsFull = 115,
AnoncredsInvalidRevocationAccumulatorIndex = 116,
AnoncredsCredentialRevoked = 117,
AnoncredsProofRejected = 118,
}
#[no_mangle]
pub extern "C" fn ursa_get_current_error(error_json_p: *mut *const c_char) {
trace!(
"ursa_get_current_error >>> error_json_p: {:?}",
error_json_p
);
let error = get_current_error_c_json();
unsafe { *error_json_p = error };
trace!("ursa_get_current_error: <<<");
}
#[cfg(test)]
mod tests {
use super::*;
use ffi::cl::issuer::ursa_cl_credential_private_key_from_json;
use std::ptr;
use utils::ctypes::*;
#[test]
fn ursa_get_current_error_works() {
ursa_cl_credential_private_key_from_json(ptr::null(), &mut ptr::null());
let mut error_json_p: *const c_char = ptr::null();
ursa_get_current_error(&mut error_json_p);
let error_json_1 = c_str_to_string(error_json_p).unwrap();
assert!(error_json_1.is_some());
let credential_priv_key = string_to_cstring("some wrong data".to_string());
ursa_cl_credential_private_key_from_json(credential_priv_key.as_ptr(), &mut ptr::null());
ursa_get_current_error(&mut error_json_p);
let error_json_2 = c_str_to_string(error_json_p).unwrap();
assert!(error_json_2.is_some());
assert_ne!(error_json_1.unwrap(), error_json_2.unwrap());
}
}