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.so、librkcrypto.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