2014-10-21 11:30:42 +01:00
|
|
|
/*
|
2017-11-09 05:51:58 +00:00
|
|
|
* Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
|
2014-10-21 11:30:42 +01:00
|
|
|
*
|
2017-05-03 09:38:09 +01:00
|
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
2014-10-21 11:30:42 +01:00
|
|
|
*/
|
|
|
|
|
2018-11-08 10:20:19 +00:00
|
|
|
#ifndef CERT_H
|
|
|
|
#define CERT_H
|
2014-10-21 11:30:42 +01:00
|
|
|
|
|
|
|
#include <openssl/ossl_typ.h>
|
|
|
|
#include <openssl/x509.h>
|
2015-06-12 11:27:59 +01:00
|
|
|
#include "ext.h"
|
2014-10-21 11:30:42 +01:00
|
|
|
#include "key.h"
|
|
|
|
|
2018-03-29 14:29:55 +01:00
|
|
|
#define CERT_MAX_EXT 5
|
2015-06-12 11:27:59 +01:00
|
|
|
|
2014-10-21 11:30:42 +01:00
|
|
|
/*
|
|
|
|
* This structure contains information related to the generation of the
|
|
|
|
* certificates. All these fields must be known and specified at build time
|
|
|
|
* except for the file name, which is picked up from the command line at
|
|
|
|
* run time.
|
|
|
|
*
|
|
|
|
* One instance of this structure must be created for each of the certificates
|
|
|
|
* present in the chain of trust.
|
|
|
|
*
|
|
|
|
* If the issuer points to this same instance, the generated certificate will
|
|
|
|
* be self-signed.
|
|
|
|
*/
|
|
|
|
typedef struct cert_s cert_t;
|
|
|
|
struct cert_s {
|
|
|
|
int id; /* Unique identifier */
|
|
|
|
|
2015-07-03 16:23:16 +01:00
|
|
|
const char *opt; /* Command line option to pass filename */
|
2014-10-21 11:30:42 +01:00
|
|
|
const char *fn; /* Filename to save the certificate */
|
|
|
|
const char *cn; /* Subject CN (Company Name) */
|
2015-12-15 16:37:57 +00:00
|
|
|
const char *help_msg; /* Help message */
|
2014-10-21 11:30:42 +01:00
|
|
|
|
2015-06-12 11:27:59 +01:00
|
|
|
/* These fields must be defined statically */
|
|
|
|
int key; /* Key to be signed */
|
|
|
|
int issuer; /* Issuer certificate */
|
|
|
|
int ext[CERT_MAX_EXT]; /* Certificate extensions */
|
|
|
|
int num_ext; /* Number of extensions in the certificate */
|
2014-10-21 11:30:42 +01:00
|
|
|
|
2015-06-12 11:27:59 +01:00
|
|
|
X509 *x; /* X509 certificate container */
|
2014-10-21 11:30:42 +01:00
|
|
|
};
|
|
|
|
|
2015-06-12 11:27:59 +01:00
|
|
|
/* Exported API */
|
2015-07-03 16:23:16 +01:00
|
|
|
int cert_init(void);
|
|
|
|
cert_t *cert_get_by_opt(const char *opt);
|
2014-10-21 11:30:42 +01:00
|
|
|
int cert_add_ext(X509 *issuer, X509 *subject, int nid, char *value);
|
2017-11-09 05:51:58 +00:00
|
|
|
int cert_new(
|
|
|
|
int key_alg,
|
|
|
|
int md_alg,
|
|
|
|
cert_t *cert,
|
|
|
|
int days,
|
|
|
|
int ca,
|
|
|
|
STACK_OF(X509_EXTENSION) * sk);
|
2014-10-21 11:30:42 +01:00
|
|
|
|
2015-06-12 11:27:59 +01:00
|
|
|
/* Macro to register the certificates used in the CoT */
|
|
|
|
#define REGISTER_COT(_certs) \
|
|
|
|
cert_t *certs = &_certs[0]; \
|
2016-01-04 15:49:23 +00:00
|
|
|
const unsigned int num_certs = sizeof(_certs)/sizeof(_certs[0])
|
2015-06-12 11:27:59 +01:00
|
|
|
|
|
|
|
/* Exported variables */
|
|
|
|
extern cert_t *certs;
|
|
|
|
extern const unsigned int num_certs;
|
|
|
|
|
2018-11-08 10:20:19 +00:00
|
|
|
#endif /* CERT_H */
|