rust-libteec 0.6.4

Rust implementation of TEE Client API for secure communication with Trusted Applications.
// SPDX-License-Identifier: Apache-2.0
// Copyright (C) 2025-2026 KylinSoft Co., Ltd. <https://www.kylinos.cn/>
// See LICENSES for license details.

//! # rust-libteec
//!
//! GlobalPlatform TEE Client API 的 Rust 实现,提供与可信执行环境(TEE)通信的接口。
//!
//! ## 主要功能
//!
//! - **TEE 上下文管理**: 初始化和销毁 TEE 连接
//! - **会话管理**: 打开/关闭与 Trusted Application 的会话
//! - **命令调用**: 在 TA 中执行命令并传递参数(通过机密通信通道序列化传输)
//! - **共享内存**: 管理 MEMREF 类型参数的本地缓冲区(数据通过机密通信通道传输,非真正共享)
//! - **机密通信**: 基于 TLS + VSOCK 的加密通信通道,CA 与 TA 之间的所有数据都通过此通道传输
//! - **CA 认证**: 自动验证客户端应用的签名和证书链,为 TA 提供 ACL 访问控制信息
//!
//! ## 特性标志
//!
//! - `ca-sign-verify`: 启用 CA 认证功能(默认启用)
//! - `debug_level_0` ~ `debug_level_4`: 控制日志详细程度(默认 level_2)

mod cc_client;
mod error;
mod teec;
mod teec_trace;

pub use self::{
    error::{Error, ErrorKind, ErrorOrigin, Result},
    teec::{
        TEEC_AllocateSharedMemory, TEEC_CloseSession, TEEC_FinalizeContext, TEEC_InitializeContext,
        TEEC_InvokeCommand, TEEC_OpenSession, TEEC_RegisterSharedMemory,
        TEEC_RegisterSharedMemoryFileDescriptor, TEEC_ReleaseSharedMemory,
        TEEC_RequestCancellation,
    },
    teec_trace::*,
};

#[cfg(feature = "ca-sign-verify")]
pub use self::teec::{clear_cache, get_or_verify_ca};

/// 重新导出 GP TEE Client API 原始类型(常量、结构体、联合体等),
/// 以 `raw` 模块别名暴露给 FFI 边界使用。
pub use teec_api_types as raw;

/// CA 认证信息,包含 CA 的 UUID 与验签结果,
/// 在 OpenSession 时随请求发送给 TA 用于 ACL 访问控制。
pub use teec_protocol::CaAuthInfo;
/// 模糊测试专用导出:仅在 `fuzz` feature 启用时暴露内部函数,
/// 使 fuzzer 能直接调用实际代码路径而非复刻逻辑,从而测量真实覆盖率。
#[cfg(feature = "fuzz")]
pub mod fuzz {
    use teec_protocol::TEE_Parameters;

    use crate::Result;
    use crate::raw::{TEEC_Operation, TEEC_UUID};

    /// 暴露 `teec::uuid_to_string` 给 fuzzer(包装 pub(crate) 实现,避免代码重复)。
    pub fn uuid_to_string(uuid: &TEEC_UUID) -> Result<String> {
        crate::teec::uuid_to_string(uuid)
    }

    /// 暴露 `teec::build_parameters_from_operation` 给 fuzzer。
    /// 该函数包含 12+ match 分支,是参数构建路径中分支覆盖的关键点。
    pub fn build_parameters_from_operation(
        operation: *mut TEEC_Operation,
    ) -> Result<TEE_Parameters> {
        crate::teec::build_parameters_from_operation(operation)
    }

    /// 暴露 vsock CID 配置读取给 fuzzer(环境变量解析 + 默认值回退)。
    pub fn get_vsock_cid() -> u32 {
        crate::cc_client::vsock_define::get_vsock_cid()
    }

    /// 暴露 vsock 端口配置读取给 fuzzer(环境变量解析 + 默认值回退)。
    pub fn get_vsock_port() -> u32 {
        crate::cc_client::vsock_define::get_vsock_port()
    }
}