blob: 304fa6154f80fa8ca92342c3f44d12ffddce1ea2 [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 {
Soby Mathew2fd70f62017-08-31 11:50:29 +010025 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 */
Juan Castilloa2224ab2015-06-30 13:36:57 +010027#ifndef OPENSSL_NO_EC
28 KEY_ALG_ECDSA,
29#endif /* OPENSSL_NO_EC */
30 KEY_ALG_MAX_NUM
Juan Castillof9f39c32015-06-01 16:34:23 +010031};
32
Juan Castillo11abdcd2014-10-21 11:30:42 +010033/*
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 */
41typedef struct key_s {
42 int id; /* Key id */
Juan Castillo1218dd52015-07-03 16:23:16 +010043 const char *opt; /* Command line option to specify a key */
Juan Castillo212f7382015-12-15 16:37:57 +000044 const char *help_msg; /* Help message */
Juan Castillo11abdcd2014-10-21 11:30:42 +010045 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
Juan Castilloe6d30e92015-06-12 11:27:59 +010050/* Exported API */
Juan Castillo1218dd52015-07-03 16:23:16 +010051int key_init(void);
52key_t *key_get_by_opt(const char *opt);
Masahiro Yamadabccb1092017-02-06 21:15:01 +090053int key_new(key_t *key);
Juan Castillof9f39c32015-06-01 16:34:23 +010054int key_create(key_t *key, int type);
55int key_load(key_t *key, unsigned int *err_code);
Juan Castillo11abdcd2014-10-21 11:30:42 +010056int key_store(key_t *key);
57
Juan Castilloe6d30e92015-06-12 11:27:59 +010058/* Macro to register the keys used in the CoT */
59#define REGISTER_KEYS(_keys) \
60 key_t *keys = &_keys[0]; \
Sandrine Bailleuxdf8de2d2016-01-04 15:49:23 +000061 const unsigned int num_keys = sizeof(_keys)/sizeof(_keys[0])
Juan Castilloe6d30e92015-06-12 11:27:59 +010062
63/* Exported variables */
64extern key_t *keys;
65extern const unsigned int num_keys;
66
Juan Castillo11abdcd2014-10-21 11:30:42 +010067#endif /* KEY_H_ */