Name Date Size #Lines LOC

..--

demo/H05-Jun-2025-1,5501,253

docs/H05-Jun-2025-

include/H05-Jun-2025-1,765963

perf_reports/H05-Jun-2025-823747

src/H05-Jun-2025-3,7052,779

test/H05-Jun-2025-30,47019,820

third_party/H05-Jun-2025-15,6969,027

Android.mkH A D05-Jun-20251.9 KiB5227

CMakeLists.txtH A D05-Jun-20253.6 KiB9176

README.mdH A D05-Jun-20255.2 KiB219137

build.shH A D05-Jun-20252.2 KiB7461

README.md

1# librkcrypto
2
3librkcrypto提供基于硬件的算法接口,支持使用DMA的方式对数据进行计算,可用于各种加解密、认证等场景。
4
5librkcrypto依赖于kernel crypto驱动实现,驱动开发和应用API开发请参考文档`Rockchip_Developer_Guide_Crypto_HWRNG_CN.pdf`。
6
7## 版本号查询
8
9通过以下方式查询API版本号。
10
11- **strings命令查询**
12
13```bash
14# 以linux平台64位为例
15$ strings /lib64/librkcrypto.so |grep api |grep version
16rkcrypto api version 1.2.0
17```
18
19- **日志打印**
20
21当每个进程首次调用librkcrypto时,会打印版本号
22
23```bash
24RKCRYPTO I[rk_crypto_init, 262]: rkcrypto api version 1.2.0
25```
26
27## 适用芯片平台
28
29RK3588 | RK356x | RV1109 | RV1126 | RK3326/PX30 | RK3308 | RV1106/03
30
31部分API不适用于部分芯片平台,详见应用开发说明文档。
32
33## 版本依赖
34
35### V1.2.0
36
37kernel-4.19 需更新至以下提交:
38
39```shell
40c255a0aa097a crypto: rockchip: rk3326/px30 add aes gcm support
41```
42
43kernel-5.10 需更新至以下提交:
44
45```shell
4647e85085826d crypto: rockchip: rk3326/px30 add aes gcm support
47```
48
49### V1.1.0
50
51kernel-4.19 需更新至以下提交:
52
53```shell
541e549d833bc3 crypto: rockchip: v2: ahash init/update/final use hardware crypto
55```
56
57kernel-5.10 需更新至以下提交:
58
59```shell
604d2020372e7e crypto: rockchip: v2: ahash fix hash_algo2name setting error.
61```
62
63若需要使用 otp key 加解密功能,rkbin需更新至以下提交:
64
651. RK3588
66
67   ```shell
68   23ca562 rk3588: bl32: update version to v1.07
69   ```
70
712. RK356x
72
73   ```shell
74   86e9bb7 rk3568: bl32: update version to v2.07
75   ```
76
773. RV1109/RV1126
78
79   ```shell
80   42eea81 rv1126: tee: update version to v2.05
81   ```
82
83## 目录说明
84
85**demo:** API使用示例
86
87**docs:** 应用开发说明文档
88
89**include:** 头文件
90
91**src:** 用户空间的驱动及API实现
92
93**test:** API测试代码
94
95**third_party:** 第三方开源代码
96
97## 编译说明
98
99### Android
100
101- **编译lib、test、demo**
102
103```bash
104# 在android工程目录下执行
105$ source build/envsetup.sh
106$ lunch rk3588_s-userdebug    # 以RK3588为例
107
108# cd 到librkcypto目录,执行
109$ mm
110```
111
112编译成功后,根据配置的芯片平台编译出32-bit或64-bit目标文件librkcrypto.so、librkcrypto_test、librkcrypto_demo。Android编译日志将打印目标文件所在的目录。
113
114### Linux
115
116- **编译lib、test**
117
118```bash
119# 在linux工程中的librkcrypto目录下执行
120$ ./build.sh       # 编译32-bit和64-bit
121$ ./build.sh 32    # 只编译32-bit
122$ ./build.sh 64    # 只编译64-bit
123```
124
125编译成功后,在librkcrypto/out/target目录生成目标文件librkcrypto.solibrkcrypto.a、librkcrypto_test。
126
127- **编译demo**
128
129```bash
130# 在librkcrypto工程目录下执行
131$ cd demo
132$ make 32    # 或 $ make,只编译32-bit
133$ make 64    # 只编译64-bit
134$ make clean # 清除目标文件
135```
136
137编译成功后,在librkcrypto/demo目录生成目标文件librkcrypto_demo。
138
139## 使用说明
140
141- **头文件**
142
143以下是外部程序调用librkcrypto API所需的头文件。
144
145```c
146#include "rkcrypto_common.h"     // 通用
147#include "rkcrypto_core.h"       // 调用cipher、hash、hmac等接口时引用
148#include "rkcrypto_mem.h"        // 调用支持dma_fd的接口时引用
149#include "rkcrypto_otp_key.h"    // 调用otp_key相关接口时引用
150#include "rkcrypto_random.h"     // 调用随机数接口时引用
151```
152
153- **库文件**
154
155  `librkcrypto.so`
156
157  `librkcrypto.a` (linux平台)
158
159- **日志打印**
160
161  rkcrypto的日志等级划分如下:
162
163  等级1 - TRACE_ERROR:错误信息
164
165  等级2 - TRACE_INFO:常用信息,例如版本号信息等,默认是等级2
166
167  等级3 - TRACE_DEBUG:一般的调试信息
168
169  等级4 - TRACE_VERBOSE:冗长的调试信息
170
171  可以通过以下方式,按需设置日志等级,设置后将打印当前和低于当前等级的日志,注意设备重启后默认是等级2:
172
173  - 使用rkcrypto提供的API:
174
175  ```c
176  RK_RES rkcrypto_set_trace_level(enum RKCRYPTO_TRACE_LEVEL level);
177  ```
178
179  - 使用指令:
180
181  ```shell
182  # Android
183  setprop vendor.rkcrypto.trace.level 1/2/3/4
184
185  # Linux
186  export rkcrypto_trace_level=1/2/3/4
187  ```
188
189- **应用开发说明文档**
190
191  `Rockchip_Developer_Guide_Crypto_HWRNG_CN.pdf`
192
193## FAQ
194
195- **编译链依赖**
196
197  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`。
198
199  若没有该编译链版本,编译时会报类似如下错误:
200
201  ```makefile
202  make[2]: librkcrypto/../../prebuilts/gcc/linux-x86/arm/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-gcc: Command not found
203  ```
204
205  可以修改CMakeLists.txt中的编译链路径和版本:
206
207  ```makefile
208  set (TOOLCHAIN_PREBUILTS "${CMAKE_CURRENT_SOURCE_DIR}/../../prebuilts")
209  set (TOOLCHAIN_PATH_ARM32 "gcc/linux-x86/arm/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin")
210  set (TOOLCHAIN_PATH_AARCH64 "gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin")
211  ```
212
213  若运行时出现如下报错,则是编译链GLIBC版本与设备上GLIBC版本不一致,请修改编译链版本或者修改设备GLIBC版本。
214
215  ```shell
216  version 'GLIBC_2.29' not found (required by /lib/librkcrypto.so)
217  ```
218
219