|
|
|
#ifndef SSL_H
|
|
|
|
#define SSL_H
|
|
|
|
|
|
|
|
#include <openssl/ossl_typ.h>
|
|
|
|
#include <openssl/ssl.h>
|
|
|
|
#include <openssl/err.h>
|
|
|
|
#include <openssl/x509.h>
|
|
|
|
#include <openssl/pem.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
|
|
#include "config.h"
|
|
|
|
|
|
|
|
typedef struct CertList CertList;
|
|
|
|
struct CertList {
|
|
|
|
char *host;
|
|
|
|
EVP_PKEY *key;
|
|
|
|
X509 *cert;
|
|
|
|
CertList *next;
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
X509 *cert;
|
|
|
|
EVP_PKEY *pkey;
|
|
|
|
CertList *certs;
|
|
|
|
} CertificateAutority;
|
|
|
|
|
|
|
|
|
|
|
|
SSL_CTX* setup_ctx(CertList *certItem);
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* generate_ca_key
|
|
|
|
* Genreates a EVP_PKEY for the certificate authority
|
|
|
|
*/
|
|
|
|
EVP_PKEY* generate_ca_key();
|
|
|
|
|
|
|
|
/*
|
|
|
|
* generate_ca_cert
|
|
|
|
* Genreates a x509 cert for the certificate authority
|
|
|
|
* @param EVP_PKEY pkey - the pkey for the ca
|
|
|
|
*/
|
|
|
|
X509* generate_ca_cert(EVP_PKEY * pkey);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* generate_site_cert
|
|
|
|
* Genreates a signed x509 cert for the host authority
|
|
|
|
* @param EVP_PKEY pkey - the pkey for the ca
|
|
|
|
* @param X509 caCert - the cert for the ca
|
|
|
|
* @param char* host - the common name for the certificate
|
|
|
|
*/
|
|
|
|
X509* generate_site_cert( EVP_PKEY *pkey, X509 *caCert, char *host );
|
|
|
|
|
|
|
|
/*
|
|
|
|
* create_and_save_key
|
|
|
|
* Genreates a EVP_PKEY for the CA and saves it
|
|
|
|
* @param char[] keyfile - the name of the file
|
|
|
|
*/
|
|
|
|
bool create_and_save_key(char keyfile[]);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* create_and_save_cert
|
|
|
|
* Genreates a cert for the CA and saves it
|
|
|
|
* @param char[] certfile - the name of the file
|
|
|
|
* @param EVP_PKEY pkey - the pkey for the ca
|
|
|
|
*/
|
|
|
|
bool create_and_save_cert(char certfile[], EVP_PKEY *pkey);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* read_private_key
|
|
|
|
* Reades a priveate key from the keyfile
|
|
|
|
* @param char[] keyfile - the name of the file
|
|
|
|
*/
|
|
|
|
EVP_PKEY* read_private_key(char keyfile[]);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* read_cert
|
|
|
|
* Reades a cert from the certfile
|
|
|
|
* @param char[] certfile - the name of the file
|
|
|
|
*/
|
|
|
|
X509* read_cert(char certfile[]);
|
|
|
|
/*
|
|
|
|
* newCertListItem
|
|
|
|
* Creates an element of the CertList linked list
|
|
|
|
* @param char* host - the common name for the certificate
|
|
|
|
* @param EVP_PKEY key - the pkey
|
|
|
|
* @param X509 cert - the cert
|
|
|
|
*/
|
|
|
|
CertList *newCertListItem(char *host, EVP_PKEY *key, X509 *cert);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* getLastCertListItem
|
|
|
|
* Gets the last element in the linked list
|
|
|
|
* @param CertList item - An item in the linked list
|
|
|
|
*/
|
|
|
|
CertList *getLastCertListItem(CertList *item);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* countCertListItems
|
|
|
|
* counts the elements in the linked list
|
|
|
|
* @param CertList item - the first item in the linked list
|
|
|
|
*/
|
|
|
|
unsigned int countCertListItems(CertList *item);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* countCertListItems
|
|
|
|
* Returns the certList item with the specified host
|
|
|
|
* @param CertList item - the first item in the linked list
|
|
|
|
* @param char* host - the host we are looking for
|
|
|
|
* returns null if not there
|
|
|
|
*/
|
|
|
|
CertList *findCertListItem( CertList *item, char *host );
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* ifndef SSL_ */
|