use cl::prover::*;
use cl::*;
use errors::ToErrorCode;
use ffi::ErrorCode;
use utils::ctypes::CTypesUtils;
use utils::json::{JsonEncodable, JsonDecodable};
use libc::c_char;
use std::os::raw::c_void;
#[no_mangle]
pub extern fn indy_crypto_cl_prover_new_master_secret(master_secret_p: *mut *const c_void) -> ErrorCode {
trace!("indy_crypto_cl_prover_new_master_secret: >>> {:?}", master_secret_p);
check_useful_c_ptr!(master_secret_p, ErrorCode::CommonInvalidParam1);
let res = match Prover::new_master_secret() {
Ok(master_secret) => {
trace!("indy_crypto_cl_prover_new_master_secret: master_secret: {:?}", master_secret);
unsafe {
*master_secret_p = Box::into_raw(Box::new(master_secret)) as *const c_void;
trace!("indy_crypto_cl_prover_new_master_secret: *master_secret_p: {:?}", *master_secret_p);
}
ErrorCode::Success
}
Err(err) => err.to_error_code()
};
trace!("indy_crypto_cl_prover_new_master_secret: <<< res: {:?}", res);
res
}
#[no_mangle]
pub extern fn indy_crypto_cl_master_secret_to_json(master_secret: *const c_void,
master_secret_json_p: *mut *const c_char) -> ErrorCode {
trace!("indy_crypto_cl_master_secret_to_json: >>> master_secret: {:?}, master_secret_json_p: {:?}", master_secret, master_secret_json_p);
check_useful_c_reference!(master_secret, MasterSecret, ErrorCode::CommonInvalidParam1);
check_useful_c_ptr!(master_secret_json_p, ErrorCode::CommonInvalidParam2);
trace!("indy_crypto_cl_master_secret_to_json: entity >>> master_secret: {:?}", master_secret);
let res = match master_secret.to_json() {
Ok(master_secret_json) => {
trace!("indy_crypto_cl_master_secret_to_json: master_secret_json: {:?}", master_secret_json);
unsafe {
let master_secret_json = CTypesUtils::string_to_cstring(master_secret_json);
*master_secret_json_p = master_secret_json.into_raw();
trace!("indy_crypto_cl_master_secret_to_json: master_secret_json_p: {:?}", *master_secret_json_p);
}
ErrorCode::Success
}
Err(err) => err.to_error_code()
};
trace!("indy_crypto_cl_master_secret_to_json: <<< res: {:?}", res);
res
}
#[no_mangle]
pub extern fn indy_crypto_cl_master_secret_from_json(master_secret_json: *const c_char,
master_secret_p: *mut *const c_void) -> ErrorCode {
trace!("indy_crypto_cl_master_secret_from_json: >>> master_secret_json: {:?}, master_secret_p: {:?}", master_secret_json, master_secret_p);
check_useful_c_str!(master_secret_json, ErrorCode::CommonInvalidParam1);
check_useful_c_ptr!(master_secret_p, ErrorCode::CommonInvalidParam2);
trace!("indy_crypto_cl_master_secret_from_json: entity: master_secret_json: {:?}", master_secret_json);
let res = match MasterSecret::from_json(&master_secret_json) {
Ok(master_secret) => {
trace!("indy_crypto_cl_master_secret_from_json: master_secret: {:?}", master_secret);
unsafe {
*master_secret_p = Box::into_raw(Box::new(master_secret)) as *const c_void;
trace!("indy_crypto_cl_master_secret_from_json: *master_secret_p: {:?}", *master_secret_p);
}
ErrorCode::Success
}
Err(err) => err.to_error_code()
};
trace!("indy_crypto_cl_master_secret_from_json: <<< res: {:?}", res);
res
}
#[no_mangle]
pub extern fn indy_crypto_cl_master_secret_free(master_secret: *const c_void) -> ErrorCode {
trace!("indy_crypto_cl_master_secret_free: >>> master_secret: {:?}", master_secret);
check_useful_c_ptr!(master_secret, ErrorCode::CommonInvalidParam1);
let master_secret = unsafe { Box::from_raw(master_secret as *mut MasterSecret); };
trace!("indy_crypto_cl_master_secret_free: entity: master_secret: {:?}", master_secret);
let res = ErrorCode::Success;
trace!("indy_crypto_cl_master_secret_free: <<< res: {:?}", res);
res
}
#[no_mangle]
pub extern fn indy_crypto_cl_prover_blind_credential_secrets(credential_pub_key: *const c_void,
credential_key_correctness_proof: *const c_void,
credential_values: *const c_void,
credential_nonce: *const c_void,
blinded_credential_secrets_p: *mut *const c_void,
credential_secrets_blinding_factors_p: *mut *const c_void,
blinded_credential_secrets_correctness_proof_p: *mut *const c_void) -> ErrorCode {
trace!("indy_crypto_cl_prover_blind_credential_secrets: >>> credential_pub_key: {:?}, \
credential_key_correctness_proof: {:?}, \
credential_values: {:?}, \
credential_nonce: {:?}, \
blinded_credential_secrets_p: {:?}, \
credential_secrets_blinding_factors_p: {:?}, \
blinded_credential_secrets_correctness_proof_p: {:?}",
credential_pub_key,
credential_key_correctness_proof,
credential_values,
credential_nonce,
blinded_credential_secrets_p,
credential_secrets_blinding_factors_p,
blinded_credential_secrets_correctness_proof_p);
check_useful_c_reference!(credential_pub_key, CredentialPublicKey, ErrorCode::CommonInvalidParam1);
check_useful_c_reference!(credential_key_correctness_proof, CredentialKeyCorrectnessProof, ErrorCode::CommonInvalidParam2);
check_useful_c_reference!(credential_values, CredentialValues, ErrorCode::CommonInvalidParam3);
check_useful_c_reference!(credential_nonce, Nonce, ErrorCode::CommonInvalidParam4);
check_useful_c_ptr!(blinded_credential_secrets_p, ErrorCode::CommonInvalidParam5);
check_useful_c_ptr!(credential_secrets_blinding_factors_p, ErrorCode::CommonInvalidParam6);
check_useful_c_ptr!(blinded_credential_secrets_correctness_proof_p, ErrorCode::CommonInvalidParam7);
trace!("indy_crypto_cl_prover_blind_credential_secrets: inputs: credential_pub_key: {:?}, \
credential_key_correctness_proof: {:?}, \
credential_values: {:?}, \
credential_nonce: {:?}",
credential_pub_key,
credential_key_correctness_proof,
credential_values,
credential_nonce);
let res = match Prover::blind_credential_secrets(credential_pub_key,
credential_key_correctness_proof,
credential_values,
credential_nonce) {
Ok((blinded_credential_secrets, credential_secrets_blinding_factors, blinded_credential_secrets_correctness_proof)) => {
trace!("indy_crypto_cl_prover_blind_credential_secrets: blinded_credential_secrets: {:?}, \
credential_secrets_blinding_factors: {:?}, \
blinded_credential_secrets_correctness_proof: {:?}",
blinded_credential_secrets,
credential_secrets_blinding_factors,
blinded_credential_secrets_correctness_proof);
unsafe {
*blinded_credential_secrets_p = Box::into_raw(Box::new(blinded_credential_secrets)) as *const c_void;
*credential_secrets_blinding_factors_p = Box::into_raw(Box::new(credential_secrets_blinding_factors)) as *const c_void;
*blinded_credential_secrets_correctness_proof_p = Box::into_raw(Box::new(blinded_credential_secrets_correctness_proof)) as *const c_void;
trace!("indy_crypto_cl_prover_blind_credential_secrets: *blinded_credential_secrets_p: {:?}, \
*credential_secrets_blinding_factors_p: {:?}, \
*blinded_credential_secrets_correctness_proof_p: {:?}",
*blinded_credential_secrets_p,
*credential_secrets_blinding_factors_p,
*blinded_credential_secrets_correctness_proof_p);
}
ErrorCode::Success
}
Err(err) => err.to_error_code()
};
trace!("indy_crypto_cl_prover_blind_credential_secrets: <<< res: {:?}", res);
res
}
#[no_mangle]
pub extern fn indy_crypto_cl_blinded_master_secret_to_json(blinded_master_secret: *const c_void,
blinded_master_secret_json_p: *mut *const c_char) -> ErrorCode {
trace!("indy_crypto_cl_blinded_master_secret_to_json: >>> blinded_master_secret: {:?}, blinded_master_secret_json_p: {:?}", blinded_master_secret, blinded_master_secret_json_p);
check_useful_c_reference!(blinded_master_secret, BlindedCredentialSecrets, ErrorCode::CommonInvalidParam1);
check_useful_c_ptr!(blinded_master_secret_json_p, ErrorCode::CommonInvalidParam2);
trace!("indy_crypto_cl_blinded_master_secret_to_json: entity >>> blinded_master_secret: {:?}", blinded_master_secret);
let res = match blinded_master_secret.to_json() {
Ok(blinded_master_secret_json) => {
trace!("indy_crypto_cl_blinded_master_secret_to_json: blinded_master_secret_json: {:?}", blinded_master_secret_json);
unsafe {
let blinded_master_secret_json = CTypesUtils::string_to_cstring(blinded_master_secret_json);
*blinded_master_secret_json_p = blinded_master_secret_json.into_raw();
trace!("indy_crypto_cl_blinded_master_secret_to_json: blinded_master_secret_json_p: {:?}", *blinded_master_secret_json_p);
}
ErrorCode::Success
}
Err(err) => err.to_error_code()
};
trace!("indy_crypto_cl_blinded_master_secret_to_json: <<< res: {:?}", res);
res
}
#[no_mangle]
pub extern fn indy_crypto_cl_blinded_master_secret_from_json(blinded_master_secret_json: *const c_char,
blinded_master_secret_p: *mut *const c_void) -> ErrorCode {
trace!("indy_crypto_cl_blinded_master_secret_from_json: >>> blinded_master_secret_json: {:?}, blinded_master_secret_p: {:?}", blinded_master_secret_json, blinded_master_secret_p);
check_useful_c_str!(blinded_master_secret_json, ErrorCode::CommonInvalidParam1);
check_useful_c_ptr!(blinded_master_secret_p, ErrorCode::CommonInvalidParam2);
trace!("indy_crypto_cl_blinded_master_secret_from_json: entity: blinded_master_secret_json: {:?}", blinded_master_secret_json);
let res = match BlindedCredentialSecrets::from_json(&blinded_master_secret_json) {
Ok(blinded_master_secret) => {
trace!("indy_crypto_cl_blinded_master_secret_from_json: blinded_master_secret: {:?}", blinded_master_secret);
unsafe {
*blinded_master_secret_p = Box::into_raw(Box::new(blinded_master_secret)) as *const c_void;
trace!("indy_crypto_cl_blinded_master_secret_from_json: *blinded_master_secret_p: {:?}", *blinded_master_secret_p);
}
ErrorCode::Success
}
Err(err) => err.to_error_code()
};
trace!("indy_crypto_cl_blinded_master_secret_from_json: <<< res: {:?}", res);
res
}
#[no_mangle]
pub extern fn indy_crypto_cl_blinded_master_secret_free(blinded_master_secret: *const c_void) -> ErrorCode {
trace!("indy_crypto_cl_blinded_master_secret_free: >>> blinded_master_secret: {:?}", blinded_master_secret);
check_useful_c_ptr!(blinded_master_secret, ErrorCode::CommonInvalidParam1);
let blinded_master_secret = unsafe { Box::from_raw(blinded_master_secret as *mut MasterSecret); };
trace!("indy_crypto_cl_master_secret_free: entity: blinded_master_secret: {:?}", blinded_master_secret);
let res = ErrorCode::Success;
trace!("indy_crypto_cl_blinded_master_secret_free: <<< res: {:?}", res);
res
}
#[no_mangle]
pub extern fn indy_crypto_cl_master_secret_blinding_data_to_json(master_secret_blinding_data: *const c_void,
master_secret_blinding_data_json_p: *mut *const c_char) -> ErrorCode {
trace!("indy_crypto_cl_master_secret_blinding_data_to_json: >>> master_secret_blinding_data: {:?}, master_secret_blinding_data_json_p: {:?}", master_secret_blinding_data, master_secret_blinding_data_json_p);
check_useful_c_reference!(master_secret_blinding_data, BlindedCredentialSecrets, ErrorCode::CommonInvalidParam1);
check_useful_c_ptr!(master_secret_blinding_data_json_p, ErrorCode::CommonInvalidParam2);
trace!("indy_crypto_cl_master_secret_blinding_data_to_json: entity >>> master_secret_blinding_data: {:?}", master_secret_blinding_data);
let res = match master_secret_blinding_data.to_json() {
Ok(master_secret_blinding_data_json) => {
trace!("indy_crypto_cl_master_secret_blinding_data_to_json: master_secret_blinding_data_json: {:?}", master_secret_blinding_data_json);
unsafe {
let master_secret_blinding_data_json = CTypesUtils::string_to_cstring(master_secret_blinding_data_json);
*master_secret_blinding_data_json_p = master_secret_blinding_data_json.into_raw();
trace!("indy_crypto_cl_master_secret_blinding_data_to_json: master_secret_blinding_data_json_p: {:?}", *master_secret_blinding_data_json_p);
}
ErrorCode::Success
}
Err(err) => err.to_error_code()
};
trace!("indy_crypto_cl_blinded_master_secret_to_json: <<< res: {:?}", res);
res
}
#[no_mangle]
pub extern fn indy_crypto_cl_master_secret_blinding_data_from_json(master_secret_blinding_data_json: *const c_char,
master_secret_blinding_data_p: *mut *const c_void) -> ErrorCode {
trace!("indy_crypto_cl_master_secret_blinding_data_from_json: >>> master_secret_blinding_data_json: {:?}, blinded_master_secret_p: {:?}", master_secret_blinding_data_json, master_secret_blinding_data_p);
check_useful_c_str!(master_secret_blinding_data_json, ErrorCode::CommonInvalidParam1);
check_useful_c_ptr!(master_secret_blinding_data_p, ErrorCode::CommonInvalidParam2);
trace!("indy_crypto_cl_master_secret_blinding_data_from_json: entity: master_secret_blinding_data_json: {:?}", master_secret_blinding_data_json);
let res = match BlindedCredentialSecrets::from_json(&master_secret_blinding_data_json) {
Ok(master_secret_blinding_data) => {
trace!("indy_crypto_cl_master_secret_blinding_data_from_json: master_secret_blinding_data: {:?}", master_secret_blinding_data);
unsafe {
*master_secret_blinding_data_p = Box::into_raw(Box::new(master_secret_blinding_data)) as *const c_void;
trace!("indy_crypto_cl_master_secret_blinding_data_from_json: *blinded_master_secret_p: {:?}", *master_secret_blinding_data_p);
}
ErrorCode::Success
}
Err(err) => err.to_error_code()
};
trace!("indy_crypto_cl_master_secret_blinding_data_from_json: <<< res: {:?}", res);
res
}
#[no_mangle]
pub extern fn indy_crypto_cl_master_secret_blinding_data_free(master_secret_blinding_data: *const c_void) -> ErrorCode {
trace!("indy_crypto_cl_master_secret_blinding_data_free: >>> master_secret_blinding_data: {:?}", master_secret_blinding_data);
check_useful_c_ptr!(master_secret_blinding_data, ErrorCode::CommonInvalidParam1);
let master_secret_blinding_data = unsafe { Box::from_raw(master_secret_blinding_data as *mut BlindedCredentialSecrets); };
trace!("indy_crypto_cl_master_secret_blinding_data_free: entity: master_secret_blinding_data: {:?}", master_secret_blinding_data);
let res = ErrorCode::Success;
trace!("indy_crypto_cl_master_secret_blinding_data_free: <<< res: {:?}", res);
res
}
#[no_mangle]
pub extern fn indy_crypto_cl_blinded_master_secret_correctness_proof_to_json(blinded_master_secret_correctness_proof: *const c_void,
blinded_master_secret_correctness_proof_json_p: *mut *const c_char) -> ErrorCode {
trace!("indy_crypto_cl_blinded_master_secret_correctness_proof_to_json: >>> blinded_master_secret_correctness_proof: {:?},\
blinded_master_secret_correctness_proof_json_p: {:?}", blinded_master_secret_correctness_proof, blinded_master_secret_correctness_proof_json_p);
check_useful_c_reference!(blinded_master_secret_correctness_proof, BlindedCredentialSecretsCorrectnessProof, ErrorCode::CommonInvalidParam1);
check_useful_c_ptr!(blinded_master_secret_correctness_proof_json_p, ErrorCode::CommonInvalidParam2);
trace!("indy_crypto_cl_blinded_master_secret_correctness_proof_to_json: entity >>> blinded_master_secret_correctness_proof: {:?}",
blinded_master_secret_correctness_proof);
let res = match blinded_master_secret_correctness_proof.to_json() {
Ok(blinded_master_secret_correctness_proof_json) => {
trace!("indy_crypto_cl_blinded_master_secret_correctness_proof_to_json: blinded_master_secret_correctness_proof: {:?}",
blinded_master_secret_correctness_proof_json);
unsafe {
let blinded_master_secret_correctness_proof_json = CTypesUtils::string_to_cstring(blinded_master_secret_correctness_proof_json);
*blinded_master_secret_correctness_proof_json_p = blinded_master_secret_correctness_proof_json.into_raw();
trace!("indy_crypto_cl_blinded_master_secret_correctness_proof_to_json: blinded_master_secret_correctness_proof_json_p: {:?}",
*blinded_master_secret_correctness_proof_json_p);
}
ErrorCode::Success
}
Err(err) => err.to_error_code()
};
trace!("indy_crypto_cl_blinded_master_secret_correctness_proof_to_json: <<< res: {:?}", res);
res
}
#[no_mangle]
pub extern fn indy_crypto_cl_blinded_master_secret_correctness_proof_from_json(blinded_master_secret_correctness_proof_json: *const c_char,
blinded_master_secret_correctness_proof_p: *mut *const c_void) -> ErrorCode {
trace!("indy_crypto_cl_blinded_master_secret_correctness_proof_from_json: >>> blinded_master_secret_correctness_proof_json: {:?},\
blinded_master_secret_correctness_proof_p: {:?}", blinded_master_secret_correctness_proof_json, blinded_master_secret_correctness_proof_p);
check_useful_c_str!(blinded_master_secret_correctness_proof_json, ErrorCode::CommonInvalidParam1);
check_useful_c_ptr!(blinded_master_secret_correctness_proof_p, ErrorCode::CommonInvalidParam2);
trace!("indy_crypto_cl_blinded_master_secret_correctness_proof_from_json: entity: blinded_master_secret_correctness_proof_json: {:?}",
blinded_master_secret_correctness_proof_json);
let res = match BlindedCredentialSecretsCorrectnessProof::from_json(&blinded_master_secret_correctness_proof_json) {
Ok(blinded_master_secret_correctness_proof) => {
trace!("indy_crypto_cl_blinded_master_secret_correctness_proof_from_json: blinded_master_secret_correctness_proof: {:?}",
blinded_master_secret_correctness_proof);
unsafe {
*blinded_master_secret_correctness_proof_p = Box::into_raw(Box::new(blinded_master_secret_correctness_proof)) as *const c_void;
trace!("indy_crypto_cl_blinded_master_secret_correctness_proof_from_json: *blinded_master_secret_correctness_proof_p: {:?}",
*blinded_master_secret_correctness_proof_p);
}
ErrorCode::Success
}
Err(err) => err.to_error_code()
};
trace!("indy_crypto_cl_blinded_master_secret_correctness_proof_from_json: <<< res: {:?}", res);
res
}
#[no_mangle]
pub extern fn indy_crypto_cl_blinded_master_secret_correctness_proof_free(blinded_master_secret_correctness_proof: *const c_void) -> ErrorCode {
trace!("indy_crypto_cl_blinded_master_secret_correctness_proof_free: >>> blinded_master_secret_correctness_proof: {:?}",
blinded_master_secret_correctness_proof);
check_useful_c_ptr!(blinded_master_secret_correctness_proof, ErrorCode::CommonInvalidParam1);
let blinded_master_secret_correctness_proof = unsafe { Box::from_raw(blinded_master_secret_correctness_proof as *mut BlindedCredentialSecretsCorrectnessProof); };
trace!("indy_crypto_cl_blinded_master_secret_correctness_proof_free: entity: blinded_master_secret_correctness_proof: {:?}", blinded_master_secret_correctness_proof);
let res = ErrorCode::Success;
trace!("indy_crypto_cl_blinded_master_secret_correctness_proof_free: <<< res: {:?}", res);
res
}
#[no_mangle]
#[allow(unused_variables)]
pub extern fn indy_crypto_cl_prover_process_credential_signature(credential_signature: *const c_void,
credential_values: *const c_void,
signature_correctness_proof: *const c_void,
credential_secrets_blinding_factors: *const c_void,
credential_pub_key: *const c_void,
credential_issuance_nonce: *const c_void,
rev_key_pub: *const c_void,
rev_reg: *const c_void,
witness: *const c_void) -> ErrorCode {
trace!("indy_crypto_cl_prover_process_credential_signature: >>> credential_signature: {:?}, \
credential_values: {:?}, \
signature_correctness_proof: {:?}, \
credential_secrets_blinding_factors: {:?}, \
credential_pub_key: {:?}, \
credential_issuance_nonce: {:?}, \
rev_key_pub: {:?}, \
rev_reg {:?}, \
witness {:?}",
credential_signature,
credential_values,
signature_correctness_proof,
credential_secrets_blinding_factors,
credential_pub_key,
credential_issuance_nonce,
rev_key_pub,
rev_reg,
witness);
check_useful_mut_c_reference!(credential_signature, CredentialSignature, ErrorCode::CommonInvalidParam1);
check_useful_c_reference!(credential_values, CredentialValues, ErrorCode::CommonInvalidParam1);
check_useful_c_reference!(signature_correctness_proof, SignatureCorrectnessProof, ErrorCode::CommonInvalidParam2);
check_useful_c_reference!(credential_secrets_blinding_factors, CredentialSecretsBlindingFactors, ErrorCode::CommonInvalidParam3);
check_useful_c_reference!(credential_pub_key, CredentialPublicKey, ErrorCode::CommonInvalidParam4);
check_useful_c_reference!(credential_issuance_nonce, Nonce, ErrorCode::CommonInvalidParam5);
check_useful_opt_c_reference!(rev_key_pub, RevocationKeyPublic);
check_useful_opt_c_reference!(rev_reg, RevocationRegistry);
check_useful_opt_c_reference!(witness, Witness);
trace!("indy_crypto_cl_prover_process_credential_signature: >>> credential_signature: {:?}, \
credential_values: {:?}, \
signature_correctness_proof: {:?}, \
credential_secrets_blinding_factors: {:?}, \
credential_pub_key: {:?}, \
credential_issuance_nonce: {:?}, \
rev_key_pub: {:?}, \
rev_reg {:?}, \
witness {:?}",
credential_signature,
credential_values,
signature_correctness_proof,
credential_secrets_blinding_factors,
credential_pub_key,
credential_issuance_nonce,
rev_key_pub,
rev_reg,
witness);
let res = match Prover::process_credential_signature(credential_signature,
credential_values,
signature_correctness_proof,
credential_secrets_blinding_factors,
credential_pub_key,
credential_issuance_nonce,
rev_key_pub,
rev_reg,
witness) {
Ok(()) => ErrorCode::Success,
Err(err) => err.to_error_code()
};
trace!("indy_crypto_cl_prover_process_credential_signature: <<< res: {:?}", res);
ErrorCode::Success
}
#[no_mangle]
pub extern fn indy_crypto_cl_prover_new_proof_builder(proof_builder_p: *mut *const c_void) -> ErrorCode {
trace!("indy_crypto_cl_prover_new_proof_builder: >>> {:?}", proof_builder_p);
check_useful_c_ptr!(proof_builder_p, ErrorCode::CommonInvalidParam1);
let res = match Prover::new_proof_builder() {
Ok(proof_builder) => {
trace!("indy_crypto_cl_prover_new_proof_builder: proof_builder: {:?}", proof_builder);
unsafe {
*proof_builder_p = Box::into_raw(Box::new(proof_builder)) as *const c_void;
trace!("indy_crypto_cl_prover_new_proof_builder: *proof_builder_p: {:?}", *proof_builder_p);
}
ErrorCode::Success
}
Err(err) => err.to_error_code()
};
trace!("indy_crypto_cl_prover_new_proof_builder: <<< res: {:?}", res);
res
}
#[no_mangle]
pub extern fn indy_crypto_cl_proof_builder_add_sub_proof_request(proof_builder: *const c_void,
key_id: *const c_char,
sub_proof_request: *const c_void,
credential_schema: *const c_void,
non_credential_schema_elements: *const c_void,
credential_signature: *const c_void,
credential_values: *const c_void,
credential_pub_key: *const c_void,
rev_reg: *const c_void,
witness: *const c_void) -> ErrorCode {
trace!("indy_crypto_cl_proof_builder_add_sub_proof_request: >>> proof_builder: {:?}\n\
key_id: {:?}\n\
sub_proof_request: {:?}\n\
credential_schema: {:?}\n\
non_credential_schema_elements: {:?}\n\
credential_signature: {:?}\n\
credential_values: {:?}\n\
credential_pub_key: {:?}\n\
rev_reg: {:?}\n\
witness: {:?}",
proof_builder, key_id, sub_proof_request, credential_schema, non_credential_schema_elements, credential_signature, credential_values, credential_pub_key, rev_reg, witness);
check_useful_mut_c_reference!(proof_builder, ProofBuilder, ErrorCode::CommonInvalidParam1);
check_useful_c_str!(key_id, ErrorCode::CommonInvalidParam2);
check_useful_c_reference!(sub_proof_request, SubProofRequest, ErrorCode::CommonInvalidParam3);
check_useful_c_reference!(credential_schema, CredentialSchema, ErrorCode::CommonInvalidParam4);
check_useful_c_reference!(non_credential_schema_elements, NonCredentialSchemaElements, ErrorCode::CommonInvalidParam5);
check_useful_c_reference!(credential_signature, CredentialSignature, ErrorCode::CommonInvalidParam6);
check_useful_c_reference!(credential_values, CredentialValues, ErrorCode::CommonInvalidParam7);
check_useful_c_reference!(credential_pub_key, CredentialPublicKey, ErrorCode::CommonInvalidParam8);
check_useful_opt_c_reference!(rev_reg, RevocationRegistry);
check_useful_opt_c_reference!(witness, Witness);
trace!("indy_crypto_cl_proof_builder_add_sub_proof_request: entities: proof_builder: {:?}\n\
key_id: {:?}\n\
sub_proof_request: {:?}\n\
credential_schema: {:?}\n\
non_credential_schema_elements: {:?}\n\
credential_signature: {:?}\n\
credential_values: {:?}\n\
credential_pub_key: {:?}\n\
rev_reg: {:?}\n\
witness: {:?}",
proof_builder, key_id, sub_proof_request, credential_schema, non_credential_schema_elements, credential_signature, credential_values, credential_pub_key, rev_reg, witness);
let res = match proof_builder.add_sub_proof_request(&key_id,
sub_proof_request,
credential_schema,
non_credential_schema_elements,
credential_signature,
credential_values,
credential_pub_key,
rev_reg,
witness) {
Ok(()) => ErrorCode::Success,
Err(err) => err.to_error_code()
};
trace!("indy_crypto_cl_proof_builder_add_sub_proof_request: <<< res: {:?}", res);
ErrorCode::Success
}
#[no_mangle]
pub extern fn indy_crypto_cl_proof_builder_finalize(proof_builder: *const c_void,
nonce: *const c_void,
proof_p: *mut *const c_void) -> ErrorCode {
trace!("indy_crypto_cl_proof_builder_finalize: >>> proof_builder: {:?}, nonce: {:?}, proof_p: {:?}",
proof_builder, nonce, proof_p);
check_useful_c_ptr!(proof_builder, ErrorCode::CommonInvalidParam1);
check_useful_c_reference!(nonce, Nonce, ErrorCode::CommonInvalidParam2);
check_useful_c_ptr!(proof_p, ErrorCode::CommonInvalidParam4);
let proof_builder = unsafe { Box::from_raw(proof_builder as *mut ProofBuilder) };
trace!("indy_crypto_cl_proof_builder_finalize: entities: proof_builder: {:?}, nonce: {:?}",
proof_builder, nonce);
let res = match proof_builder.finalize(nonce) {
Ok(proof) => {
trace!("indy_crypto_cl_proof_builder_finalize: proof: {:?}", proof);
unsafe {
*proof_p = Box::into_raw(Box::new(proof)) as *const c_void;
trace!("indy_crypto_cl_proof_builder_finalize: *proof_p: {:?}", *proof_p);
}
ErrorCode::Success
}
Err(err) => err.to_error_code()
};
trace!("indy_crypto_cl_proof_builder_finalize: <<< res: {:?}", res);
res
}
#[no_mangle]
pub extern fn indy_crypto_cl_proof_to_json(proof: *const c_void,
proof_json_p: *mut *const c_char) -> ErrorCode {
trace!("indy_crypto_cl_proof_to_json: >>> proof: {:?}, proof_json_p: {:?}", proof, proof_json_p);
check_useful_c_reference!(proof, Proof, ErrorCode::CommonInvalidParam1);
check_useful_c_ptr!(proof_json_p, ErrorCode::CommonInvalidParam2);
trace!("indy_crypto_cl_proof_to_json: entity >>> proof: {:?}", proof);
let res = match proof.to_json() {
Ok(proof_json) => {
trace!("indy_crypto_cl_proof_to_json: proof_json: {:?}", proof_json);
unsafe {
let proof_json = CTypesUtils::string_to_cstring(proof_json);
*proof_json_p = proof_json.into_raw();
trace!("indy_crypto_cl_proof_to_json: proof_json_p: {:?}", *proof_json_p);
}
ErrorCode::Success
}
Err(err) => err.to_error_code()
};
trace!("indy_crypto_cl_proof_to_json: <<< res: {:?}", res);
res
}
#[no_mangle]
pub extern fn indy_crypto_cl_proof_from_json(proof_json: *const c_char,
proof_p: *mut *const c_void) -> ErrorCode {
trace!("indy_crypto_cl_proof_from_json: >>> proof_json: {:?}, proof_p: {:?}", proof_json, proof_p);
check_useful_c_str!(proof_json, ErrorCode::CommonInvalidParam1);
check_useful_c_ptr!(proof_p, ErrorCode::CommonInvalidParam2);
trace!("indy_crypto_cl_proof_from_json: entity: proof_json: {:?}", proof_json);
let res = match Proof::from_json(&proof_json) {
Ok(proof) => {
trace!("indy_crypto_cl_proof_from_json: proof: {:?}", proof);
unsafe {
*proof_p = Box::into_raw(Box::new(proof)) as *const c_void;
trace!("indy_crypto_cl_proof_from_json: *proof_p: {:?}", *proof_p);
}
ErrorCode::Success
}
Err(err) => err.to_error_code()
};
trace!("indy_crypto_cl_proof_from_json: <<< res: {:?}", res);
res
}
#[no_mangle]
pub extern fn indy_crypto_cl_proof_free(proof: *const c_void) -> ErrorCode {
trace!("indy_crypto_cl_proof_free: >>> proof: {:?}", proof);
check_useful_c_ptr!(proof, ErrorCode::CommonInvalidParam1);
let proof = unsafe { Box::from_raw(proof as *mut Proof); };
trace!("indy_crypto_cl_proof_free: entity: proof: {:?}", proof);
let res = ErrorCode::Success;
trace!("indy_crypto_cl_proof_free: <<< res: {:?}", res);
res
}
#[cfg(test)]
mod tests {
use super::*;
}
pub mod mocks {
}