OpenVPN 3 Core Library
Loading...
Searching...
No Matches
test_opensslpki.cpp
Go to the documentation of this file.
1#include "test_common.hpp"
2#include <iostream>
3
12
13using namespace openvpn;
14
16
17template <typename VEC>
18VEC move_contents(VEC &src)
19{
20 VEC v;
21 for (auto &e : src)
22 v.push_back(std::move(e));
23 return v;
24}
25
27{
28 dest.certs = move_contents(src.certs);
29 dest.crls = move_contents(src.crls);
30}
31
32#define CERTDIR UNITTEST_SOURCE_DIR "/pki"
33
35{
36 std::string cert_crl_txt = read_text(CERTDIR "/certcrl.pem");
37
38 CertCRLList ccl, ccl2;
39 ccl.parse_pem(cert_crl_txt, "TEST1");
40 CertCRLList ccl1(ccl);
41 ccl2 = ccl1;
42 ccl2 = ccl1;
43 std::string rend2 = ccl2.render_pem();
44
45 CertCRLList ccl3;
46 ccl3.parse_pem_file(CERTDIR "/certcrl.pem");
47 std::string rend3 = ccl3.render_pem();
48
49 ASSERT_EQ(rend2, rend3);
50
51 CertCRLList ccl4(rend3, "TEST2");
52 CertCRLList ccl5(std::move(ccl4));
53 ccl2 = ccl5;
54 rend2 = ccl2.render_pem();
55 ASSERT_EQ(rend2, rend3);
56
57 CertCRLList ccl6(rend3, "TEST3");
58 move_contents(ccl2, ccl6);
59 rend2 = ccl2.render_pem();
60 ASSERT_EQ(rend2, rend3);
61
62 OpenSSLPKI::X509Store xs(ccl2);
63
64 // std::cout << rend2;
65}
66
67constexpr const char *testcert = "-----BEGIN CERTIFICATE-----\n"
68 "MIIBuzCCAUCgAwIBAgIUEwa9vm0C63Cc/kFu8lFmOKFUdccwCgYIKoZIzj0EAwIw\n"
69 "EzERMA8GA1UEAwwIdW5pdHRlc3QwIBcNMjQwNTE1MTA1NDM3WhgPMjA3OTAyMTYx\n"
70 "MDU0MzdaMBMxETAPBgNVBAMMCHVuaXR0ZXN0MHYwEAYHKoZIzj0CAQYFK4EEACID\n"
71 "YgAEEVRoVjNQeYLPBlst7a7vxm6KUT5TL8iDel5I7Vt0CD2saQ+E0oUrMrk/W7uB\n"
72 "FhbBDbKu+AiXBmudIjQbrx4JiNPD7wouGCY3Up6C6hdDMQAtPqIIWOGj/13OshyY\n"
73 "EX/eo1MwUTAdBgNVHQ4EFgQUONymlHRoIr+aGp7kss/Yl5gEOHQwHwYDVR0jBBgw\n"
74 "FoAUONymlHRoIr+aGp7kss/Yl5gEOHQwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjO\n"
75 "PQQDAgNpADBmAjEAx4NDBMtTW/4qeSdedxpNH4DCnI5iue+22UNTt/dGWBMzcYF7\n"
76 "xW53r2QVcCKzoJABAjEA7//UDtN8gZgfiYaCXh9Qwew8DSsn1+B9mY6e3hQQ00nJ\n"
77 "Qv3xi0OJFoAxAQBG0weY\n"
78 "-----END CERTIFICATE-----";
79
81{
82 BIO *bio_in = ::BIO_new_mem_buf(const_cast<char *>(testcert), static_cast<int>(std::strlen(testcert)));
83
84 ::X509 *cert = ::PEM_read_bio_X509(bio_in, nullptr, nullptr, nullptr);
85
86 ASSERT_TRUE(cert);
87
88 std::string pem_out = OpenSSLPKI::X509_get_pem_encoding(cert);
89
90 EXPECT_EQ(pem_out, testcert);
91
92 ::X509_free(cert);
93 ::BIO_free(bio_in);
94}
95
97{
98 std::string pkey_txt = read_text(CERTDIR "/key.pem");
99
100 OpenSSLPKI::PKey pkey, pkey2;
101 pkey.parse_pem(pkey_txt, "TEST0", nullptr);
102 OpenSSLPKI::PKey pkey1(pkey);
103 pkey2 = pkey1;
104 pkey2 = pkey1;
105 std::string rend2 = pkey2.render_pem();
106
107 OpenSSLPKI::PKey pkey3(pkey_txt, "TEST2", nullptr);
108 std::string rend3 = pkey3.render_pem();
109
110 ASSERT_EQ(rend2, rend3);
111
112 OpenSSLPKI::PKey pkey4(rend3, "TEST3", nullptr);
113 OpenSSLPKI::PKey pkey5(std::move(pkey4));
114 pkey2 = pkey5;
115 rend2 = pkey2.render_pem();
116 ASSERT_EQ(rend2, rend3);
117
118 // std::cout << rend2;
119}
120
122{
123 std::string dh_txt = read_text(CERTDIR "/dh2048.pem");
124
125 OpenSSLPKI::DH dh, dh2;
126 dh.parse_pem(dh_txt);
127 OpenSSLPKI::DH dh1(dh);
128 dh2 = dh1;
129 dh2 = dh1;
130 std::string rend2 = dh2.render_pem();
131
132 OpenSSLPKI::DH dh3(dh_txt);
133 std::string rend3 = dh3.render_pem();
134
135 ASSERT_EQ(rend2, rend3);
136
137 OpenSSLPKI::DH dh4(rend3);
138 OpenSSLPKI::DH dh5(std::move(dh4));
139 dh2 = dh5;
140 rend2 = dh2.render_pem();
141 ASSERT_EQ(rend2, rend3);
142
143 // std::cout << rend2;
144}
145
146static bool verbose_output = false;
147
152
157
void parse_pem_file(const std::string &filename)
Definition cclist.hpp:49
std::string render_pem() const
Definition cclist.hpp:54
void parse_pem(const std::string &content, const std::string &title)
Definition cclist.hpp:44
void parse_pem(const std::string &dh_txt)
std::string render_pem() const
void parse_pem(const std::string &pkey_txt, const std::string &title, SSLLib::Ctx libctx)
Definition pkey.hpp:128
std::string render_pem() const
Definition pkey.hpp:143
static std::string X509_get_pem_encoding(::X509 *cert)
std::string read_text(const std::string &filename, const std::uint64_t max_size=0)
Definition file.hpp:127
void override_logOutput(bool doLogOutput, void(*test_func)())
void test_cert_crl()
CertCRLListTemplate< OpenSSLPKI::X509List, OpenSSLPKI::CRLList > CertCRLList
TEST(PKI, crl)
void test_output_pem()
void test_dh()
void test_pkey()
#define CERTDIR
constexpr const char * testcert
VEC move_contents(VEC &src)
static bool verbose_output