blob: 4b9e88258c3ef9468c6114cda95f103f99124ff1 [file] [log] [blame]
Juan Castillo11abdcd2014-10-21 11:30:42 +01001/*
2 * Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
3 *
dp-armfa3cf0b2017-05-03 09:38:09 +01004 * SPDX-License-Identifier: BSD-3-Clause
Juan Castillo11abdcd2014-10-21 11:30:42 +01005 */
6
7#ifndef KEY_H_
8#define KEY_H_
9
10#include <openssl/ossl_typ.h>
11
12#define RSA_KEY_BITS 2048
13
Juan Castillof9f39c32015-06-01 16:34:23 +010014/* Error codes */
15enum {
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 */
24enum {
25 KEY_ALG_RSA,
Juan Castilloa2224ab2015-06-30 13:36:57 +010026#ifndef OPENSSL_NO_EC
27 KEY_ALG_ECDSA,
28#endif /* OPENSSL_NO_EC */
29 KEY_ALG_MAX_NUM
Juan Castillof9f39c32015-06-01 16:34:23 +010030};
31
Juan Castillo11abdcd2014-10-21 11:30:42 +010032/*
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 */
40typedef struct key_s {
41 int id; /* Key id */
Juan Castillo1218dd52015-07-03 16:23:16 +010042 const char *opt; /* Command line option to specify a key */
Juan Castillo212f7382015-12-15 16:37:57 +000043 const char *help_msg; /* Help message */
Juan Castillo11abdcd2014-10-21 11:30:42 +010044 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
Juan Castilloe6d30e92015-06-12 11:27:59 +010049/* Exported API */
Juan Castillo1218dd52015-07-03 16:23:16 +010050int key_init(void);
51key_t *key_get_by_opt(const char *opt);
Masahiro Yamadabccb1092017-02-06 21:15:01 +090052int key_new(key_t *key);
Juan Castillof9f39c32015-06-01 16:34:23 +010053int key_create(key_t *key, int type);
54int key_load(key_t *key, unsigned int *err_code);
Juan Castillo11abdcd2014-10-21 11:30:42 +010055int key_store(key_t *key);
56
Juan Castilloe6d30e92015-06-12 11:27:59 +010057/* Macro to register the keys used in the CoT */
58#define REGISTER_KEYS(_keys) \
59 key_t *keys = &_keys[0]; \
Sandrine Bailleuxdf8de2d2016-01-04 15:49:23 +000060 const unsigned int num_keys = sizeof(_keys)/sizeof(_keys[0])
Juan Castilloe6d30e92015-06-12 11:27:59 +010061
62/* Exported variables */
63extern key_t *keys;
64extern const unsigned int num_keys;
65
Juan Castillo11abdcd2014-10-21 11:30:42 +010066#endif /* KEY_H_ */