1 /* 2 * Copyright (c) 2015, ARM Limited and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #ifndef __CRYPTO_MOD_H__ 8 #define __CRYPTO_MOD_H__ 9 10 /* Return values */ 11 enum crypto_ret_value { 12 CRYPTO_SUCCESS = 0, 13 CRYPTO_ERR_INIT, 14 CRYPTO_ERR_HASH, 15 CRYPTO_ERR_SIGNATURE, 16 CRYPTO_ERR_UNKNOWN 17 }; 18 19 /* 20 * Cryptographic library descriptor 21 */ 22 typedef struct crypto_lib_desc_s { 23 const char *name; 24 25 /* Initialize library. This function is not expected to fail. All errors 26 * must be handled inside the function, asserting or panicing in case of 27 * a non-recoverable error */ 28 void (*init)(void); 29 30 /* Verify a digital signature. Return one of the 31 * 'enum crypto_ret_value' options */ 32 int (*verify_signature)(void *data_ptr, unsigned int data_len, 33 void *sig_ptr, unsigned int sig_len, 34 void *sig_alg, unsigned int sig_alg_len, 35 void *pk_ptr, unsigned int pk_len); 36 37 /* Verify a hash. Return one of the 'enum crypto_ret_value' options */ 38 int (*verify_hash)(void *data_ptr, unsigned int data_len, 39 void *digest_info_ptr, unsigned int digest_info_len); 40 } crypto_lib_desc_t; 41 42 /* Public functions */ 43 void crypto_mod_init(void); 44 int crypto_mod_verify_signature(void *data_ptr, unsigned int data_len, 45 void *sig_ptr, unsigned int sig_len, 46 void *sig_alg, unsigned int sig_alg_len, 47 void *pk_ptr, unsigned int pk_len); 48 int crypto_mod_verify_hash(void *data_ptr, unsigned int data_len, 49 void *digest_info_ptr, unsigned int digest_info_len); 50 51 /* Macro to register a cryptographic library */ 52 #define REGISTER_CRYPTO_LIB(_name, _init, _verify_signature, _verify_hash) \ 53 const crypto_lib_desc_t crypto_lib_desc = { \ 54 .name = _name, \ 55 .init = _init, \ 56 .verify_signature = _verify_signature, \ 57 .verify_hash = _verify_hash \ 58 } 59 60 #endif /* __CRYPTO_MOD_H__ */ 61