blob: 1a253cc713cccee21352a1000fcd97f9469a65d9 [file] [log] [blame]
Juan Castillo11abdcd2014-10-21 11:30:42 +01001/*
Qixiang Xu76a5a9b2017-11-09 13:51:58 +08002 * Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
Juan Castillo11abdcd2014-10-21 11:30:42 +01003 *
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
Qixiang Xu76a5a9b2017-11-09 13:51:58 +080033/* Supported hash algorithms */
34enum{
35 HASH_ALG_SHA256,
36 HASH_ALG_SHA384,
37 HASH_ALG_SHA512,
38};
39
Juan Castillo11abdcd2014-10-21 11:30:42 +010040/*
41 * This structure contains the relevant information to create the keys
42 * required to sign the certificates.
43 *
44 * One instance of this structure must be created for each key, usually in an
45 * array fashion. The filename is obtained at run time from the command line
46 * parameters
47 */
48typedef struct key_s {
49 int id; /* Key id */
Juan Castillo1218dd52015-07-03 16:23:16 +010050 const char *opt; /* Command line option to specify a key */
Juan Castillo212f7382015-12-15 16:37:57 +000051 const char *help_msg; /* Help message */
Juan Castillo11abdcd2014-10-21 11:30:42 +010052 const char *desc; /* Key description (debug purposes) */
53 char *fn; /* Filename to load/store the key */
54 EVP_PKEY *key; /* Key container */
55} key_t;
56
Juan Castilloe6d30e92015-06-12 11:27:59 +010057/* Exported API */
Juan Castillo1218dd52015-07-03 16:23:16 +010058int key_init(void);
59key_t *key_get_by_opt(const char *opt);
Masahiro Yamadabccb1092017-02-06 21:15:01 +090060int key_new(key_t *key);
Juan Castillof9f39c32015-06-01 16:34:23 +010061int key_create(key_t *key, int type);
62int key_load(key_t *key, unsigned int *err_code);
Juan Castillo11abdcd2014-10-21 11:30:42 +010063int key_store(key_t *key);
64
Juan Castilloe6d30e92015-06-12 11:27:59 +010065/* Macro to register the keys used in the CoT */
66#define REGISTER_KEYS(_keys) \
67 key_t *keys = &_keys[0]; \
Sandrine Bailleuxdf8de2d2016-01-04 15:49:23 +000068 const unsigned int num_keys = sizeof(_keys)/sizeof(_keys[0])
Juan Castilloe6d30e92015-06-12 11:27:59 +010069
70/* Exported variables */
71extern key_t *keys;
72extern const unsigned int num_keys;
73
Juan Castillo11abdcd2014-10-21 11:30:42 +010074#endif /* KEY_H_ */