310a77f3efc2b5fbb261f792c2a05546fa83a8bb
[project/bcm63xx/atf.git] / tools / cert_create / include / key.h
1 /*
2 * Copyright (c) 2015-2017, 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 /* Supported hash algorithms */
34 enum{
35 HASH_ALG_SHA256,
36 HASH_ALG_SHA384,
37 HASH_ALG_SHA512,
38 };
39
40 /*
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 */
48 typedef struct key_s {
49 int id; /* Key id */
50 const char *opt; /* Command line option to specify a key */
51 const char *help_msg; /* Help message */
52 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
57 /* Exported API */
58 int key_init(void);
59 key_t *key_get_by_opt(const char *opt);
60 int key_new(key_t *key);
61 int key_create(key_t *key, int type);
62 int key_load(key_t *key, unsigned int *err_code);
63 int key_store(key_t *key);
64
65 /* Macro to register the keys used in the CoT */
66 #define REGISTER_KEYS(_keys) \
67 key_t *keys = &_keys[0]; \
68 const unsigned int num_keys = sizeof(_keys)/sizeof(_keys[0])
69
70 /* Exported variables */
71 extern key_t *keys;
72 extern const unsigned int num_keys;
73
74 #endif /* KEY_H */