xref: /rk3399_ARM-atf/tools/cert_create/include/key.h (revision 82cb2c1ad9897473743f08437d0a3995bed561b9)
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,
26 #ifndef OPENSSL_NO_EC
27 	KEY_ALG_ECDSA,
28 #endif /* OPENSSL_NO_EC */
29 	KEY_ALG_MAX_NUM
30 };
31 
32 /*
33  * This structure contains the relevant information to create the keys
34  * required to sign the certificates.
35  *
36  * One instance of this structure must be created for each key, usually in an
37  * array fashion. The filename is obtained at run time from the command line
38  * parameters
39  */
40 typedef struct key_s {
41 	int id;			/* Key id */
42 	const char *opt;	/* Command line option to specify a key */
43 	const char *help_msg;	/* Help message */
44 	const char *desc;	/* Key description (debug purposes) */
45 	char *fn;		/* Filename to load/store the key */
46 	EVP_PKEY *key;		/* Key container */
47 } key_t;
48 
49 /* Exported API */
50 int key_init(void);
51 key_t *key_get_by_opt(const char *opt);
52 int key_new(key_t *key);
53 int key_create(key_t *key, int type);
54 int key_load(key_t *key, unsigned int *err_code);
55 int key_store(key_t *key);
56 
57 /* Macro to register the keys used in the CoT */
58 #define REGISTER_KEYS(_keys) \
59 	key_t *keys = &_keys[0]; \
60 	const unsigned int num_keys = sizeof(_keys)/sizeof(_keys[0])
61 
62 /* Exported variables */
63 extern key_t *keys;
64 extern const unsigned int num_keys;
65 
66 #endif /* KEY_H_ */
67