]> WPIA git - cassiopeia.git/blob - src/X509.h
66165809a2afc2b8813a10e44b6b0803738708fc
[cassiopeia.git] / src / X509.h
1 #pragma once
2
3 #include <memory>
4 #include <vector>
5
6 #include <openssl/ssl.h>
7
8 #include "database.h"
9
10 class X509Req {
11 private:
12     std::shared_ptr<EVP_PKEY> pk;
13     std::shared_ptr<X509_REQ> req;
14     X509Req( X509_REQ* csr );
15 public:
16     static std::shared_ptr<X509Req> parse( std::string filename );
17     int verify();
18     std::shared_ptr<EVP_PKEY> getPkey();
19 };
20
21 class X509Cert {
22 private:
23     std::shared_ptr<X509> target;
24 public:
25     X509Cert();
26     void setIssuerNameFrom( std::shared_ptr<X509> ca );
27     void setPubkeyFrom( std::shared_ptr<X509Req> r );
28     void setSerialNumber( int num );
29     void setExtensions( std::shared_ptr<X509> caCert, std::vector<std::shared_ptr<SAN>>& sans );
30     void setTimes( long before, long after );
31     std::string sign( std::shared_ptr<EVP_PKEY> caKey );
32 };