use teec_protocol::TEE_Parameters;
use super::context::ContextManager;
use super::operation::OperationParams;
use super::shared_memory::SharedMemoryManager;
use super::vmem;
use crate::Result;
use crate::raw;
fn op_params<'a>(operation: *mut raw::TEEC_Operation) -> Result<OperationParams<'a>> {
OperationParams::new(operation)
}
pub fn op_param_types(operation: *mut raw::TEEC_Operation) -> Result<u32> {
op_params(operation).map(|p| p.param_types())
}
pub fn op_get_value(operation: *mut raw::TEEC_Operation, idx: usize) -> Result<(u32, u32)> {
op_params(operation)?.get_value(idx)
}
pub fn op_set_value(operation: *mut raw::TEEC_Operation, idx: usize, a: u32, b: u32) -> Result<()> {
op_params(operation)?.set_value(idx, a, b)
}
pub fn op_get_tmpref_data(operation: *mut raw::TEEC_Operation, idx: usize) -> Result<Vec<u8>> {
op_params(operation)?.get_tmpref_data(idx)
}
pub fn op_set_tmpref_data(
operation: *mut raw::TEEC_Operation,
idx: usize,
data: &[u8],
) -> Result<()> {
op_params(operation)?.set_tmpref_data(idx, data)
}
pub fn op_get_tmpref_size(operation: *mut raw::TEEC_Operation, idx: usize) -> Result<usize> {
op_params(operation)?.get_tmpref_size(idx)
}
pub fn op_get_memref_size(operation: *mut raw::TEEC_Operation, idx: usize) -> Result<usize> {
op_params(operation)?.get_memref_size(idx)
}
pub fn op_get_memref_parent_flags(operation: *mut raw::TEEC_Operation, idx: usize) -> Result<u32> {
op_params(operation)?.get_memref_parent_flags(idx)
}
pub fn op_get_memref_data_whole(
operation: *mut raw::TEEC_Operation,
idx: usize,
) -> Result<Vec<u8>> {
op_params(operation)?.get_memref_data_whole(idx)
}
pub fn op_set_memref_data_whole(
operation: *mut raw::TEEC_Operation,
idx: usize,
data: &[u8],
) -> Result<()> {
op_params(operation)?.set_memref_data_whole(idx, data)
}
pub fn op_get_memref_data_partial(
operation: *mut raw::TEEC_Operation,
idx: usize,
req_flags: u32,
) -> Result<Vec<u8>> {
op_params(operation)?.get_memref_data_partial(idx, req_flags)
}
pub fn op_set_memref_data_partial(
operation: *mut raw::TEEC_Operation,
idx: usize,
data: &[u8],
) -> Result<()> {
op_params(operation)?.set_memref_data_partial(idx, data)
}
pub fn op_update_from_parameters(
operation: *mut raw::TEEC_Operation,
params: TEE_Parameters,
) -> Result<()> {
super::operation::update_operation_from_parameters(operation, params)
}
pub fn shm_allocate(
ctx: *mut raw::TEEC_Context,
shm: *mut raw::TEEC_SharedMemory,
register: bool,
) -> Result<()> {
SharedMemoryManager::allocate(ctx, shm, register)
}
pub fn shm_release(shm: *mut raw::TEEC_SharedMemory) {
SharedMemoryManager::release(shm);
}
pub fn shm_is_registered(shm: *const raw::TEEC_SharedMemory) -> bool {
SharedMemoryManager::is_registered(shm)
}
pub fn shm_read_buffer(
parent: *const raw::TEEC_SharedMemory,
offset: usize,
size: usize,
) -> Result<Vec<u8>> {
SharedMemoryManager::read_buffer_locked(parent, offset, size)
}
pub fn shm_write_buffer(
parent: *const raw::TEEC_SharedMemory,
offset: usize,
data: &[u8],
) -> Result<()> {
SharedMemoryManager::write_buffer_locked(parent, offset, data)
}
pub fn shm_release_by_context(ctx: *mut raw::TEEC_Context) {
SharedMemoryManager::release_by_context(ctx);
}
pub fn ctx_is_registered(ctx: *mut raw::TEEC_Context) -> bool {
ContextManager::is_registered(ctx)
}
pub fn ctx_registered_id(ctx: *mut raw::TEEC_Context) -> Option<i32> {
ContextManager::registered_id(ctx)
}
pub fn ctx_remove(ctx: *mut raw::TEEC_Context) {
ContextManager::remove_context(ctx);
}
pub fn ctx_get_client_ok(ctx: *mut raw::TEEC_Context) -> Result<()> {
ContextManager::get_client(ctx).map(|_| ())
}
pub fn vmem_check_range(maps: &str, start: usize, end: usize, writable: bool) -> Option<bool> {
vmem::check_range_in_maps_for_fuzz(maps, start, end, writable)
}
pub fn vmem_range_readable(start: *const u8, len: usize) -> bool {
vmem::range_readable(start, len)
}
pub fn vmem_range_writable(start: *const u8, len: usize) -> bool {
vmem::range_writable(start, len)
}
pub fn verify_server_identity(long_term_point: &[u8]) -> bool {
crate::cc_client::tofu::verify_server_identity(long_term_point).is_ok()
}
pub fn cc_check_enable() -> i32 {
crate::cc_client::client::cc_check_enable()
}
#[cfg(feature = "ca-sign-verify")]
pub fn ca_auth_info() -> (String, bool) {
let info = super::ca_auth::get_or_verify_ca();
(info.ca_uuid, info.verified)
}
#[cfg(feature = "ca-sign-verify")]
pub fn ca_auth_clear_cache() {
super::ca_auth::clear_cache();
}
pub fn ffi_initialize_context(
name: *const core::ffi::c_char,
ctx: *mut raw::TEEC_Context,
) -> raw::TEEC_Result {
super::c_api::TEEC_InitializeContext(name, ctx)
}
pub fn ffi_finalize_context(ctx: *mut raw::TEEC_Context) {
super::c_api::TEEC_FinalizeContext(ctx);
}
#[allow(clippy::too_many_arguments)]
pub fn ffi_open_session(
ctx: *mut raw::TEEC_Context,
session: *mut raw::TEEC_Session,
destination: *const raw::TEEC_UUID,
connection_method: u32,
connection_data: *const core::ffi::c_void,
operation: *mut raw::TEEC_Operation,
ret_origin: *mut u32,
) -> raw::TEEC_Result {
super::c_api::TEEC_OpenSession(
ctx,
session,
destination,
connection_method,
connection_data,
operation,
ret_origin,
)
}
pub fn ffi_close_session(session: *mut raw::TEEC_Session) {
super::c_api::TEEC_CloseSession(session);
}
pub fn ffi_invoke_command(
session: *mut raw::TEEC_Session,
cmd_id: u32,
operation: *mut raw::TEEC_Operation,
error_origin: *mut u32,
) -> raw::TEEC_Result {
super::c_api::TEEC_InvokeCommand(session, cmd_id, operation, error_origin)
}
pub fn ffi_request_cancellation(operation: *mut raw::TEEC_Operation) {
super::c_api::TEEC_RequestCancellation(operation);
}
pub fn ffi_register_shared_memory(
ctx: *mut raw::TEEC_Context,
shm: *mut raw::TEEC_SharedMemory,
) -> raw::TEEC_Result {
super::c_api::TEEC_RegisterSharedMemory(ctx, shm)
}
pub fn ffi_register_shared_memory_fd(
ctx: *mut raw::TEEC_Context,
shm: *mut raw::TEEC_SharedMemory,
fd: i32,
) -> raw::TEEC_Result {
super::c_api::TEEC_RegisterSharedMemoryFileDescriptor(ctx, shm, fd)
}
pub fn ffi_allocate_shared_memory(
ctx: *mut raw::TEEC_Context,
shm: *mut raw::TEEC_SharedMemory,
) -> raw::TEEC_Result {
super::c_api::TEEC_AllocateSharedMemory(ctx, shm)
}
pub fn ffi_release_shared_memory(shm: *mut raw::TEEC_SharedMemory) {
super::c_api::TEEC_ReleaseSharedMemory(shm);
}