项目简介
本项目整合了两个关键部分。librkcrypto
提供基于硬件的算法接口,利用DMA方式进行数据计算,适用于加解密、认证等场景,依赖于kernel crypto驱动实现。同时,基于C语言实现了TEE(Trusted Execution Environment)客户端API,TEE作为安全环境可执行受信任代码,此部分提供与TEE设备交互的API,保障数据隐私和完整性。
项目的主要特性和功能
librkcrypto部分
- 支持DMA方式进行数据计算,用于加解密、认证场景。
- 可通过
strings
命令或日志打印查询API版本号。 - 适用于RK3588、RK356x等多种芯片平台。
- 不同版本对kernel有特定提交依赖,部分功能对rkbin版本有要求。
TEE客户端API部分
- 上下文管理:创建、初始化和结束TEE上下文,管理与TEE设备的连接。
- 会话管理:打开和关闭TEE会话,建立与TEE设备的通信通道。
- 命令执行:向TEE设备发送命令,执行加密、解密等受信任操作。
- 内存管理:分配和释放共享内存,实现客户端与TEE设备间的数据传输。
- 错误处理:将系统调用错误转换为TEEC错误代码,便于应用程序处理。
- 客户端连接设置:设置客户端连接数据,如UUID,标识连接。
安装使用步骤
编译
Android
```bash $ source build/envsetup.sh $ lunch rk3588_s-userdebug # 以RK3588为例
$ mm
``
编译成功后,根据配置的芯片平台编译出32 - bit或64 - bit目标文件
librkcrypto.so、
librkcrypto_test、
librkcrypto_demo`,Android编译日志将打印目标文件所在的目录。
Linux
- 编译lib、test
bash $ ./build.sh # 编译32-bit和64-bit $ ./build.sh 32 # 只编译32-bit $ ./build.sh 64 # 只编译64-bit
编译成功后,在librkcrypto/out/target
目录生成目标文件librkcrypto.so
、librkcrypto.a
、librkcrypto_test
。 - 编译demo
bash $ cd demo $ make 32 # 或 $ make,只编译32-bit $ make 64 # 只编译64-bit $ make clean # 清除目标文件
编译成功后,在librkcrypto/demo
目录生成目标文件librkcrypto_demo
。
使用
头文件
外部程序调用librkcrypto
API所需的头文件:
```c
include "rkcrypto_common.h" // 通用
include "rkcrypto_core.h" // 调用cipher、hash、hmac等接口时引用
include "rkcrypto_mem.h" // 调用支持dma_fd的接口时引用
include "rkcrypto_otp_key.h" // 调用otp_key相关接口时引用
include "rkcrypto_random.h" // 调用随机数接口时引用
```
库文件
librkcrypto.so
librkcrypto.a
(linux平台)
日志打印
rkcrypto的日志等级划分如下:
等级1 - TRACE_ERROR:错误信息
等级2 - TRACE_INFO:常用信息,例如版本号信息等,默认是等级2
等级3 - TRACE_DEBUG:一般的调试信息
等级4 - TRACE_VERBOSE:冗长的调试信息
可以通过以下方式,按需设置日志等级,设置后将打印当前和低于当前等级的日志,注意设备重启后默认是等级2:
- 使用rkcrypto提供的API:
c
RK_RES rkcrypto_set_trace_level(enum RKCRYPTO_TRACE_LEVEL level);
- 使用指令:
```shell
setprop vendor.rkcrypto.trace.level 1/2/3/4
export rkcrypto_trace_level=1/2/3/4 ```
应用开发说明文档
Rockchip_Developer_Guide_Crypto_HWRNG_CN.pdf
常见问题处理
编译链依赖
CMake中默认编译链为gcc 10.3版本,即gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf
和gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu
。
若没有该编译链版本,编译时会报错,可修改CMakeLists.txt
中的编译链路径和版本:
makefile
set (TOOLCHAIN_PREBUILTS "${CMAKE_CURRENT_SOURCE_DIR}/../../prebuilts")
set (TOOLCHAIN_PATH_ARM32 "gcc/linux-x86/arm/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin")
set (TOOLCHAIN_PATH_AARCH64 "gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin")
若运行时出现GLIBC
版本不一致的报错,可修改编译链版本或者修改设备GLIBC
版本。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】