应用编程
用户空间编程使用 CE 时,根据使用场景和需求的不同,有几层 API 可以选择:
-
AF_ALG Socket API
-
Libkcapi API
-
OpenSSL API
AF_ALG API
相关 API 可参考头文件 linux/if_alg.h
cat /proc/crypto
name : ctr(aes)
driver : ctr-aes-aic
module : kernel
priority : 400
refcnt : 1
selftest : passed
internal : no
type : skcipher
async : yes
blocksize : 16
min keysize : 16
max keysize : 32
ivsize : 16
chunksize : 16
walksize : 16
name : cbc(aes)
driver : cbc-aes-aic
module : kernel
priority : 400
refcnt : 1
selftest : passed
internal : no
type : skcipher
async : yes
blocksize : 16
min keysize : 16
max keysize : 32
ivsize : 16
chunksize : 16
walksize : 16
......
这里的 /proc/crypto 是目标平台上的文件
AF_ALG API 的特点:
-
效率高
-
接口灵活
-
较为复杂
Libkcapi API
SDK 已经提供对应的 libkcapi 库,默认配置已经支持
-
对称密钥算法
-
非对称密钥算法
-
消息摘要算法
-
随机数读取
如果需要修改对应包的编译配置,可在 Luban SDK 顶层目录执行 make menuconfig 或 make m。
Third-party packages --->
-*- libkcapi --->
[*] use prebuilt binary instead of building from source
[*] enable asym algorithm support
[*] build enc application
[*] build hasher application
[*] build rng read application
[*] build speed-test program
[*] build test program
Libkcapi 的特点:
-
接口简单
-
效率高
基于 Libkcapi API 的参考示例 source/artinchip/test-ce/kcapi/。
OpenSSL API
Luban SDK 通过 OpenSSL 的 Engine 机制,以实现 Engine 库的方式,已经完成了对 OpenSSL 的对接。 无论是通过 OpenSSL 的命令行,还是通过使用库编程,都可以使用到 CE。
Engine 库有两个,根据不同的目的进行使用。
Engine | 库和路径 | 说明 |
---|---|---|
aic engine | usr/lib/libengine_aic.so | 实现 CE 所提供的对称密钥算法、RSA 算法和消息摘要算法该 Engine 实现的都是标准算法。 |
huk engine | usr/lib/libengine_huk.so | 实现了 HUK 保护的 AES 算法,可用于本地数据保护。使用该 Engine 时,输入的密钥会被 HUK 进行一次解密,然后才用于 AES 加解密。HUK 每一颗芯片不同,因此使用该 Engine 加密后的数据,仅当前平台可解密。 |
命令行中使用指定 Engine 的示例:
openssl enc -engine aic -p -nosalt -nopad -aes-128-ecb -e -K 0123 -in data.bin -out enc.bin
上述示例中,通过 -engine aic 指定了使用 aic engine。
当在 openssl.cnf 文件中配置了默认的 Engine 之后,命令行中可以忽略 -engine 参数。 具体配置可参考 /etc/ssl/openssl_aic.cnf 文件。
openssl_conf = openssl_def
[openssl_def]
engines = engine_section
[engine_section]
aic = aic_section
[aic_section]
engine_id = aic
dynamic_path = /usr/lib/libengine_aic.so
default_algorithms = CIPHERS,DIGESTS,RSA
Libopenssl API 的特点:
-
功能强大
-
调用效率稍差
基于 Libopenssl API 的参考示例: source/artinchip/test-ce/openssl/