rust-libteec 0.4.5

Rust implementation of TEE Client API for secure communication with Trusted Applications.
Documentation
# rust-libteec

[![Crates.io](https://img.shields.io/crates/v/rust-libteec.svg)](https://crates.io/crates/rust-libteec)
[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)

## 介绍

基于 GlobalPlatform TEE Client API 规范的 TEE (Trusted Execution Environment) 客户端库的 Rust 实现。该库提供与可信执行环境中的可信应用 (TA) 通信的接口,支持通过机密通信通道(TLS + VSOCK)进行安全数据传输。

## 主要特性

- **完整的 TEEC API 实现**: 支持上下文管理、会话管理、命令调用等所有标准 API
-**机密通信**: 基于 TLS + VSOCK 的加密通信通道,CA 与 TA 之间的所有数据都通过此通道传输
-**共享内存管理**: 管理 MEMREF 类型参数的本地缓冲区(数据通过网络序列化传输)
-**CA 认证**: 自动验证客户端应用的签名和证书链,为 TA 提供 ACL 访问控制信息
-**多参数类型支持**: VALUE、MEMREF(INPUT/OUTPUT/INOUT)、PARTIAL MEMREF 等
-**线程安全**: 使用 DashMap 实现并发安全的缓存和上下文管理

## 软件架构

```
rust-libteec/
├── src/
│   ├── cc_client/          # 机密通信客户端模块
│   │   ├── client.rs       # TLS + VSOCK 客户端实现
│   │   ├── protocol.rs     # 通信协议定义
│   │   ├── psk.rs          # PSK 密钥生成
│   │   └── vsock_define.rs # VSOCK 配置
│   ├── teec/               # TEEC API 实现模块
│   │   ├── ca_auth.rs      # CA 认证和缓存管理
│   │   ├── context.rs      # TEE 上下文管理
│   │   ├── mod.rs          # 主模块和公共 API
│   │   ├── operation.rs    # 操作参数处理
│   │   ├── safe_ptr.rs     # 安全指针封装
│   │   └── shared_memory.rs# 共享内存管理
│   ├── error.rs            # 错误类型定义
│   ├── lib.rs              # 库入口
│   └── teec_trace.rs       # 日志跟踪
├── teec-api-types/         # TEE API 类型定义(子 crate)
├── examples/               # Rust 示例程序
├── c-examples/             # C 语言示例程序
└── tests/                  # 集成测试
```

## 安装教程

### 系统要求

- **Rust 1.80 或更高版本**
- Linux 操作系统(支持 VSOCK)
- GCC(用于编译 C 示例)
- clang
- **CMake 3.16 或更高版本**(Android 交叉编译建议 3.22+)

> **CMake 版本说明**:rust-mbedtls 依赖的 mbedtls-sys 通过 CMake 构建 MbedTLS 库。低版本 CMake 会导致编译失败:
> - CMake < 3.13:Rust `cmake` crate 的 `-B` 构建目录参数不可用
> - CMake < 3.16:Android 交叉编译时 `CMAKE_TOOLCHAIN_FILE` 与 NDK 工具链文件配合不完善
> - CMake < 3.22:NDK r25+ 的 `android.toolchain.cmake` 可能无法正常工作
>
> 可通过 `cmake --version` 检查当前版本,如需升级请参考 [CMake 官方下载页]https://cmake.org/download/
### Linux 构建

```bash
# 构建发布版本
cargo build --release

# 或使用 Makefile
make build
```

### Android 16 交叉编译

使用 NDK r29 和 `cargo-ndk` 交叉编译 aarch64 目标:

1. **下载 Android NDK r29**   ```bash
   # 从 Android 官方下载
   wget https://dl.google.com/android/repository/android-ndk-r29-linux.zip
   unzip android-ndk-r29-linux.zip
   ```
   或通过 Android Studio 的 SDK Manager 安装,NDK 位于 `~/Android/Sdk/ndk/29.x.x/`
2. **安装 cargo-ndk**   ```bash
   cargo install cargo-ndk
   ```

3. **设置 NDK 环境变量**   ```bash
   export ANDROID_NDK_HOME=/path/to/android-ndk-r29
   ```

4. **编译**   ```bash
   cargo ndk --platform 35 build --release --target arm64-v8a
   ```

   - `--platform 35`:对应 Android 16 (API level 35)
   - `--target arm64-v8a`:aarch64 目标架构
   - 编译产物位于 `target/aarch64-linux-android/release/libcc_teec.so`

4. **AOSP 预编译部署**
   `libcc_teec.so` 复制到 AOSP 源码树的预编译目录下,并编写对应的 `Android.bp`
   ```bp
   cc_prebuilt_library_shared {
       name: "libcc_teec",
       srcs: ["libcc_teec.so"],
       compile_multilib: "64",
       shared_libs: ["libc", "libdl"],
       vendor: true,
   }
   ```

   然后在产品的 `device.mk` 中添加:
   ```makefile
   PRODUCT_PACKAGES += libcc_teec
   ```

   编译 AOSP 后 `libcc_teec.so` 安装到设备 `/vendor/lib64/`
5. **编译 C 示例(Android)**
   编译 `libcc_teec.so` 后,可以直接编译并签名 C 示例:
   ```bash
   make android-c-examples
   ```

   或单独操作:
   ```bash
   # 仅编译 C 示例(不签名)
   make -C c-examples android

   # 编译 + 签名
   make -C c-examples android-sign
   ```

   签名后的 C 示例二进制部署到 AOSP 时,编写对应的 `Android.bp`   ```bp
   cc_prebuilt_binary {
       name: "cc-teec",
       srcs: ["cc-teec"],
       vendor: true,
       strip: {
           none: true,
       },
       shared_libs: ["libcc_teec", "libc", "libdl"],
   }
   ```

   > `strip: { none: true }` 用于保留 `.ta_signature` ELF 段,AOSP 默认 strip 会移除该段。

   然后在产品的 `device.mk` 中添加:
   ```makefile
   PRODUCT_PACKAGES += cc-teec
   ```

### 安装到系统(Linux,可选)

```bash
sudo make install
```

## 使用说明

### Rust 项目中使用

在 `Cargo.toml` 中添加依赖:

```toml
[dependencies]
rust-libteec = "0.4"
```

基本使用示例请参考 [examples/cc-teec.rs](examples/cc-teec.rs)。

### 运行示例

```bash
# 运行 Rust 示例
cargo run --release --example cc-teec

# 编译并运行 C 示例
make test-c-examples
```

### 运行测试

```bash
# 运行单元测试
make test

# 运行覆盖率测试
make coverage
```

## 特性标志

- `ca-sign-verify`: 启用 CA 认证功能(默认启用)
- `debug_level_0` ~ `debug_level_4`: 控制日志详细程度(默认 level_2)

## 参与贡献

1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 开启 Pull Request

## 许可证

本项目采用 Apache License 2.0 许可证 - 详见 [LICENSE](LICENSE) 文件

## 联系方式

- 项目主页: https://gitee.com/openkylin/rust-libteec
- 问题反馈: https://gitee.com/openkylin/rust-libteec/issues