Home | History | Annotate | Download | only in include
      1 /*
      2  * Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
      3  *
      4  * SPDX-License-Identifier: BSD-3-Clause
      5  */
      6 
      7 #ifndef KEY_H_
      8 #define KEY_H_
      9 
     10 #include <openssl/ossl_typ.h>
     11 
     12 #define RSA_KEY_BITS		2048
     13 
     14 /* Error codes */
     15 enum {
     16 	KEY_ERR_NONE,
     17 	KEY_ERR_MALLOC,
     18 	KEY_ERR_FILENAME,
     19 	KEY_ERR_OPEN,
     20 	KEY_ERR_LOAD
     21 };
     22 
     23 /* Supported key algorithms */
     24 enum {
     25 	KEY_ALG_RSA,		/* RSA PSS as defined by PKCS#1 v2.1 (default) */
     26 	KEY_ALG_RSA_1_5,	/* RSA as defined by PKCS#1 v1.5 */
     27 #ifndef OPENSSL_NO_EC
     28 	KEY_ALG_ECDSA,
     29 #endif /* OPENSSL_NO_EC */
     30 	KEY_ALG_MAX_NUM
     31 };
     32 
     33 /*
     34  * This structure contains the relevant information to create the keys
     35  * required to sign the certificates.
     36  *
     37  * One instance of this structure must be created for each key, usually in an
     38  * array fashion. The filename is obtained at run time from the command line
     39  * parameters
     40  */
     41 typedef struct key_s {
     42 	int id;			/* Key id */
     43 	const char *opt;	/* Command line option to specify a key */
     44 	const char *help_msg;	/* Help message */
     45 	const char *desc;	/* Key description (debug purposes) */
     46 	char *fn;		/* Filename to load/store the key */
     47 	EVP_PKEY *key;		/* Key container */
     48 } key_t;
     49 
     50 /* Exported API */
     51 int key_init(void);
     52 key_t *key_get_by_opt(const char *opt);
     53 int key_new(key_t *key);
     54 int key_create(key_t *key, int type);
     55 int key_load(key_t *key, unsigned int *err_code);
     56 int key_store(key_t *key);
     57 
     58 /* Macro to register the keys used in the CoT */
     59 #define REGISTER_KEYS(_keys) \
     60 	key_t *keys = &_keys[0]; \
     61 	const unsigned int num_keys = sizeof(_keys)/sizeof(_keys[0])
     62 
     63 /* Exported variables */
     64 extern key_t *keys;
     65 extern const unsigned int num_keys;
     66 
     67 #endif /* KEY_H_ */
     68