use crate::error_san::*;
use crate::libcrypto::{CRYPTO_FAILURE, CRYPTO_SUCCESS};
use crate::libssl::err::MesalinkInnerResult;
use crate::{MesalinkOpaquePointerType, MAGIC, MAGIC_SIZE};
use libc::c_int;
use rustls;
#[allow(non_camel_case_types)]
pub struct MESALINK_EVP_PKEY {
magic: [u8; MAGIC_SIZE],
pub inner: rustls::PrivateKey,
}
impl MesalinkOpaquePointerType for MESALINK_EVP_PKEY {
fn check_magic(&self) -> bool {
self.magic == *MAGIC
}
}
impl MESALINK_EVP_PKEY {
pub(crate) fn new(pkey: rustls::PrivateKey) -> Self {
MESALINK_EVP_PKEY {
magic: *MAGIC,
inner: pkey,
}
}
}
#[no_mangle]
pub extern "C" fn mesalink_EVP_PKEY_free(pkey_ptr: *mut MESALINK_EVP_PKEY) {
let _ = check_inner_result!(inner_mesalink_evp_pkey_free(pkey_ptr), CRYPTO_FAILURE);
}
fn inner_mesalink_evp_pkey_free(pkey_ptr: *mut MESALINK_EVP_PKEY) -> MesalinkInnerResult<c_int> {
let _ = sanitize_ptr_for_mut_ref(pkey_ptr)?;
let _ = unsafe { Box::from_raw(pkey_ptr) };
Ok(CRYPTO_SUCCESS)
}