|
|
@ -7,6 +7,10 @@ |
|
|
|
#ifndef CRYPTO_MOD_H |
|
|
|
#define CRYPTO_MOD_H |
|
|
|
|
|
|
|
#define CRYPTO_AUTH_VERIFY_ONLY 1 |
|
|
|
#define CRYPTO_HASH_CALC_ONLY 2 |
|
|
|
#define CRYPTO_AUTH_VERIFY_AND_HASH_CALC 3 |
|
|
|
|
|
|
|
/* Return values */ |
|
|
|
enum crypto_ret_value { |
|
|
|
CRYPTO_SUCCESS = 0, |
|
|
@ -48,6 +52,8 @@ typedef struct crypto_lib_desc_s { |
|
|
|
|
|
|
|
/* Verify a digital signature. Return one of the
|
|
|
|
* 'enum crypto_ret_value' options */ |
|
|
|
#if CRYPTO_SUPPORT == CRYPTO_AUTH_VERIFY_ONLY || \ |
|
|
|
CRYPTO_SUPPORT == CRYPTO_AUTH_VERIFY_AND_HASH_CALC |
|
|
|
int (*verify_signature)(void *data_ptr, unsigned int data_len, |
|
|
|
void *sig_ptr, unsigned int sig_len, |
|
|
|
void *sig_alg, unsigned int sig_alg_len, |
|
|
@ -56,13 +62,17 @@ typedef struct crypto_lib_desc_s { |
|
|
|
/* Verify a hash. Return one of the 'enum crypto_ret_value' options */ |
|
|
|
int (*verify_hash)(void *data_ptr, unsigned int data_len, |
|
|
|
void *digest_info_ptr, unsigned int digest_info_len); |
|
|
|
#endif /* CRYPTO_SUPPORT == CRYPTO_AUTH_VERIFY_ONLY || \ |
|
|
|
CRYPTO_SUPPORT == CRYPTO_AUTH_VERIFY_AND_HASH_CALC */ |
|
|
|
|
|
|
|
#if MEASURED_BOOT || DRTM_SUPPORT |
|
|
|
#if CRYPTO_SUPPORT == CRYPTO_HASH_CALC_ONLY || \ |
|
|
|
CRYPTO_SUPPORT == CRYPTO_AUTH_VERIFY_AND_HASH_CALC |
|
|
|
/* Calculate a hash. Return hash value */ |
|
|
|
int (*calc_hash)(enum crypto_md_algo md_alg, void *data_ptr, |
|
|
|
unsigned int data_len, |
|
|
|
unsigned char output[CRYPTO_MD_MAX_SIZE]); |
|
|
|
#endif /* MEASURED_BOOT || DRTM_SUPPORT */ |
|
|
|
#endif /* CRYPTO_SUPPORT == CRYPTO_HASH_CALC_ONLY || \ |
|
|
|
CRYPTO_SUPPORT == CRYPTO_AUTH_VERIFY_AND_HASH_CALC */ |
|
|
|
|
|
|
|
/*
|
|
|
|
* Authenticated decryption. Return one of the |
|
|
@ -84,25 +94,32 @@ static inline void crypto_mod_init(void) |
|
|
|
} |
|
|
|
#endif /* CRYPTO_SUPPORT */ |
|
|
|
|
|
|
|
#if CRYPTO_SUPPORT == CRYPTO_AUTH_VERIFY_ONLY || \ |
|
|
|
CRYPTO_SUPPORT == CRYPTO_AUTH_VERIFY_AND_HASH_CALC |
|
|
|
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); |
|
|
|
#endif /* CRYPTO_SUPPORT == CRYPTO_AUTH_VERIFY_ONLY || \ |
|
|
|
CRYPTO_SUPPORT == CRYPTO_AUTH_VERIFY_AND_HASH_CALC */ |
|
|
|
|
|
|
|
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); |
|
|
|
|
|
|
|
#if MEASURED_BOOT || DRTM_SUPPORT |
|
|
|
#if CRYPTO_SUPPORT == CRYPTO_HASH_CALC_ONLY || \ |
|
|
|
CRYPTO_SUPPORT == CRYPTO_AUTH_VERIFY_AND_HASH_CALC |
|
|
|
int crypto_mod_calc_hash(enum crypto_md_algo alg, void *data_ptr, |
|
|
|
unsigned int data_len, |
|
|
|
unsigned char output[CRYPTO_MD_MAX_SIZE]); |
|
|
|
#endif /* MEASURED_BOOT || DRTM_SUPPORT */ |
|
|
|
#endif /* CRYPTO_SUPPORT == CRYPTO_HASH_CALC_ONLY || \ |
|
|
|
CRYPTO_SUPPORT == CRYPTO_AUTH_VERIFY_AND_HASH_CALC */ |
|
|
|
|
|
|
|
#if (MEASURED_BOOT || DRTM_SUPPORT) && TRUSTED_BOARD_BOOT |
|
|
|
#if CRYPTO_SUPPORT == CRYPTO_AUTH_VERIFY_AND_HASH_CALC |
|
|
|
/* Macro to register a cryptographic library */ |
|
|
|
#define REGISTER_CRYPTO_LIB(_name, _init, _verify_signature, _verify_hash, \ |
|
|
|
_calc_hash, _auth_decrypt) \ |
|
|
@ -114,7 +131,7 @@ int crypto_mod_calc_hash(enum crypto_md_algo alg, void *data_ptr, |
|
|
|
.calc_hash = _calc_hash, \ |
|
|
|
.auth_decrypt = _auth_decrypt \ |
|
|
|
} |
|
|
|
#elif TRUSTED_BOARD_BOOT |
|
|
|
#elif CRYPTO_SUPPORT == CRYPTO_AUTH_VERIFY_ONLY |
|
|
|
#define REGISTER_CRYPTO_LIB(_name, _init, _verify_signature, _verify_hash, \ |
|
|
|
_auth_decrypt) \ |
|
|
|
const crypto_lib_desc_t crypto_lib_desc = { \ |
|
|
@ -124,14 +141,14 @@ int crypto_mod_calc_hash(enum crypto_md_algo alg, void *data_ptr, |
|
|
|
.verify_hash = _verify_hash, \ |
|
|
|
.auth_decrypt = _auth_decrypt \ |
|
|
|
} |
|
|
|
#elif MEASURED_BOOT || DRTM_SUPPORT |
|
|
|
#elif CRYPTO_SUPPORT == CRYPTO_HASH_CALC_ONLY |
|
|
|
#define REGISTER_CRYPTO_LIB(_name, _init, _calc_hash) \ |
|
|
|
const crypto_lib_desc_t crypto_lib_desc = { \ |
|
|
|
.name = _name, \ |
|
|
|
.init = _init, \ |
|
|
|
.calc_hash = _calc_hash, \ |
|
|
|
} |
|
|
|
#endif /* (MEASURED_BOOT || DRTM_SUPPORT) && TRUSTED_BOARD_BOOT */ |
|
|
|
#endif /* CRYPTO_SUPPORT == CRYPTO_AUTH_VERIFY_AND_HASH_CALC */ |
|
|
|
|
|
|
|
extern const crypto_lib_desc_t crypto_lib_desc; |
|
|
|
|
|
|
|