]> WPIA git - cassiopeia.git/blob - src/crypto/X509.h
b3396276d2509192af0773c49319235f844039bf
[cassiopeia.git] / src / crypto / X509.h
1 #pragma once
2
3 #include <memory>
4 #include <vector>
5
6 #include <openssl/ssl.h>
7
8 #include "db/database.h"
9 #include "crypto/sslUtil.h"
10
11 class X509Req {
12 private:
13     std::shared_ptr<EVP_PKEY> pk;
14     std::shared_ptr<X509_REQ> req;
15     std::shared_ptr<NETSCAPE_SPKI> spki;
16     X509Req( X509_REQ *csr );
17     X509Req( std::string spkac );
18 public:
19     static std::shared_ptr<X509Req> parseCSR( std::string content );
20     static std::shared_ptr<X509Req> parseSPKAC( std::string content );
21     int verify();
22     std::shared_ptr<EVP_PKEY> getPkey() const;
23 };
24
25 class X509Cert {
26 private:
27     std::shared_ptr<X509> target;
28     std::shared_ptr<X509_NAME> subject;
29 public:
30     X509Cert();
31     void addRDN( int nid, std::string data );
32     void setIssuerNameFrom( std::shared_ptr<X509> ca );
33     void setPubkeyFrom( std::shared_ptr<X509Req> r );
34     void setSerialNumber( BIGNUM *num );
35     void setExtensions( std::shared_ptr<X509> caCert, std::vector<std::shared_ptr<SAN>>& sans, Profile& prof, std::string crlURL, std::string crtURL );
36     void setTimes( uint32_t before, uint32_t after );
37     std::shared_ptr<SignedCertificate> sign( std::shared_ptr<EVP_PKEY> caKey, std::string signAlg );
38 };