(1)、密码学算法的API接口
(trusted-firmware-a/drivers/auth/crypto_mod.c) void crypto_mod_init(void); int crypto_mod_verify_signature(void *data_ptr, unsigned int data_len, void *sig_ptr, unsigned int sig_len, void *sig_alg_ptr, unsigned int sig_alg_len, void *pk_ptr, unsigned int pk_len) int crypto_mod_verify_hash(void *data_ptr, unsigned int data_len, void *digest_info_ptr, unsigned int digest_info_len) int crypto_mod_calc_hash(unsigned int alg, void *data_ptr, unsigned int data_len, unsigned char *output) int crypto_mod_auth_decrypt(enum crypto_dec_algo dec_algo, void *data_ptr, size_t len, const void *key, unsigned int key_len, unsigned int key_flags, const void *iv, unsigned int iv_len, const void *tag, unsigned int tag_len)
(2)、注册密码学算法接口的扩展宏
(trusted-firmware-a/include/drivers/auth/crypto_mod.h)
#if MEASURED_BOOT
#define REGISTER_CRYPTO_LIB(_name, _init, _verify_signature, _verify_hash,
_calc_hash, _auth_decrypt)
const crypto_lib_desc_t crypto_lib_desc = {
.name = _name,
.init = _init,
.verify_signature = _verify_signature,
.verify_hash = _verify_hash,
.calc_hash = _calc_hash,
.auth_decrypt = _auth_decrypt
}
#else
#define REGISTER_CRYPTO_LIB(_name, _init, _verify_signature, _verify_hash,
_auth_decrypt)
const crypto_lib_desc_t crypto_lib_desc = {
.name = _name,
.init = _init,
.verify_signature = _verify_signature,
.verify_hash = _verify_hash,
.auth_decrypt = _auth_decrypt
}
#endif
(3)、在makefile配置使用哪套算法接口
在makefile中mbedtls_crypto和cryptocell_crypto二选一
(trusted-firmware-a/plat/arm/common/arm_common.mk)
ifeq (${ARM_CRYPTOCELL_INTEG},0)
CRYPTO_LIB_MK := drivers/auth/mbedtls/mbedtls_crypto.mk
else
CRYPTO_LIB_MK := drivers/auth/cryptocell/cryptocell_crypto.mk
endif
(4)、注册mbedtls_crypto密码学算法
(trusted-firmware-a/drivers/auth/mbedtls/mbedtls_crypto.c) #define LIB_NAME "mbed TLS" #if MEASURED_BOOT #if TF_MBEDTLS_USE_AES_GCM REGISTER_CRYPTO_LIB(LIB_NAME, init, verify_signature, verify_hash, calc_hash, auth_decrypt); #else REGISTER_CRYPTO_LIB(LIB_NAME, init, verify_signature, verify_hash, calc_hash, NULL); #endif #else #if TF_MBEDTLS_USE_AES_GCM REGISTER_CRYPTO_LIB(LIB_NAME, init, verify_signature, verify_hash, auth_decrypt); #else REGISTER_CRYPTO_LIB(LIB_NAME, init, verify_signature, verify_hash, NULL); #endif #endif
(5)、注册cryptocell_crypto密码学算法
(trusted-firmware-a/drivers/auth/cryptocell/712/cryptocell_crypto.c) #define LIB_NAME "CryptoCell 712 SBROM" REGISTER_CRYPTO_LIB(LIB_NAME, init, verify_signature, verify_hash, NULL);



