]> WPIA git - cassiopeia.git/blob - src/X509.h
upd: add file I/O util funcs.
[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     std::shared_ptr<NETSCAPE_SPKI> spki;
15     X509Req( X509_REQ* csr );
16     X509Req( std::string spkac );
17 public:
18     static std::shared_ptr<X509Req> parse( std::string content );
19     static std::shared_ptr<X509Req> parseSPKAC( std::string content );
20     int verify();
21     std::shared_ptr<EVP_PKEY> getPkey();
22 };
23
24 class X509Cert {
25 private:
26     std::shared_ptr<X509> target;
27     std::shared_ptr<X509_NAME> subject;
28 public:
29     X509Cert();
30     void addRDN( int nid, std::string data );
31     void setIssuerNameFrom( std::shared_ptr<X509> ca );
32     void setPubkeyFrom( std::shared_ptr<X509Req> r );
33     void setSerialNumber( BIGNUM* num );
34     void setExtensions( std::shared_ptr<X509> caCert, std::vector<std::shared_ptr<SAN>>& sans );
35     void setTimes( uint32_t before, uint32_t after );
36     std::shared_ptr<SignedCertificate> sign( std::shared_ptr<EVP_PKEY> caKey, std::string signAlg );
37 };