join 1.0
lightweight network framework library
Loading...
Searching...
No Matches
openssl.hpp
Go to the documentation of this file.
1
25#ifndef __JOIN_OPENSSL_HPP__
26#define __JOIN_OPENSSL_HPP__
27
28// Libraries.
29#include <openssl/bn.h>
30#include <openssl/ecdsa.h>
31#include <openssl/pem.h>
32#include <openssl/x509.h>
33#include <openssl/x509_vfy.h>
34#include <openssl/x509v3.h>
35#include <openssl/evp.h>
36#include <openssl/ssl.h>
37
38// C++.
39#include <memory>
40#include <vector>
41#include <string>
42
43namespace join
44{
49 {
50 constexpr BigNumDelete () noexcept = default;
51
52 void operator ()(BIGNUM* num)
53 {
54 BN_free (num);
55 }
56 };
57
58 using BigNumPtr = std::unique_ptr <BIGNUM, BigNumDelete>;
59
64 {
65 constexpr EcdsaSigDelete () noexcept = default;
66
67 void operator ()(ECDSA_SIG* ecSig)
68 {
69 ECDSA_SIG_free (ecSig);
70 }
71 };
72
73 using EcdsaSigPtr = std::unique_ptr <ECDSA_SIG, EcdsaSigDelete>;
74
79 {
80 constexpr EvpPkeyDelete () noexcept = default;
81
82 void operator ()(EVP_PKEY* evpPkey)
83 {
84 EVP_PKEY_free (evpPkey);
85 }
86 };
87
88 using EvpPkeyPtr = std::unique_ptr <EVP_PKEY, EvpPkeyDelete>;
89
94 {
95 constexpr EvpPkeyCtxDelete () noexcept = default;
96
97 void operator ()(EVP_PKEY_CTX* evpPkeyCtx)
98 {
99 EVP_PKEY_CTX_free (evpPkeyCtx);
100 }
101 };
102
103 using EvpPkeyCtxPtr = std::unique_ptr <EVP_PKEY_CTX, EvpPkeyCtxDelete>;
104
109 {
110 constexpr EvpEncodeCtxDelete () noexcept = default;
111
112 void operator ()(EVP_ENCODE_CTX* evpEncodeCtx)
113 {
114 EVP_ENCODE_CTX_free (evpEncodeCtx);
115 }
116 };
117
118 using EvpEncodeCtxPtr = std::unique_ptr <EVP_ENCODE_CTX, EvpEncodeCtxDelete>;
119
124 {
125 constexpr EvpMdCtxDelete () noexcept = default;
126
127 void operator ()(EVP_MD_CTX* evpMdCtx)
128 {
129 EVP_MD_CTX_free (evpMdCtx);
130 }
131 };
132
133 using EvpMdCtxPtr = std::unique_ptr <EVP_MD_CTX, EvpMdCtxDelete>;
134
135#if OPENSSL_VERSION_NUMBER < 0x30000000L
140 {
141 constexpr HmacCtxDelete () noexcept = default;
142
143 void operator ()(HMAC_CTX* hmacCtx)
144 {
145 HMAC_CTX_free (hmacCtx);
146 }
147 };
148
149 using HmacCtxPtr = std::unique_ptr <HMAC_CTX, HmacCtxDelete>;
150#else
154 struct EvpMacDelete
155 {
156 constexpr EvpMacDelete () noexcept = default;
157
158 void operator ()(EVP_MAC* evpMac)
159 {
160 EVP_MAC_free (evpMac);
161 }
162 };
163
164 using EvpMacPtr = std::unique_ptr <EVP_MAC, EvpMacDelete>;
165
169 struct EvpMacCtxDelete
170 {
171 constexpr EvpMacCtxDelete () noexcept = default;
172
173 void operator ()(EVP_MAC_CTX* evpMacCtx)
174 {
175 EVP_MAC_CTX_free (evpMacCtx);
176 }
177 };
178
179 using EvpMacCtxPtr = std::unique_ptr <EVP_MAC_CTX, EvpMacCtxDelete>;
180#endif
181
186 {
187 constexpr StackOfX509NameDelete () noexcept = default;
188
189 void operator()(STACK_OF (X509_NAME)* stack)
190 {
191 sk_X509_NAME_pop_free (stack, X509_NAME_free);
192 }
193 };
194
195 using StackOfX509NamePtr = std::unique_ptr <STACK_OF (X509_NAME), StackOfX509NameDelete>;
196
201 {
202 constexpr StackOfGeneralNameDelete () noexcept = default;
203
204 void operator ()(STACK_OF (GENERAL_NAME)* stack)
205 {
206 sk_GENERAL_NAME_pop_free (stack, GENERAL_NAME_free);
207 }
208 };
209
210 using StackOfGeneralNamePtr = std::unique_ptr <STACK_OF (GENERAL_NAME), StackOfGeneralNameDelete>;
211
216 {
217 constexpr SslDelete () noexcept = default;
218
219 void operator ()(SSL* p)
220 {
221 SSL_free (p);
222 }
223 };
224
225 using SslPtr = std::unique_ptr <SSL, SslDelete>;
226
231 {
232 constexpr SslCtxDelete () noexcept = default;
233
234 void operator ()(SSL_CTX* p)
235 {
236 SSL_CTX_free (p);
237 }
238 };
239
240 using SslCtxPtr = std::unique_ptr <SSL_CTX, SslCtxDelete>;
241
242#if OPENSSL_VERSION_NUMBER < 0x30000000L
247 {
248 constexpr DhKeyDelete () noexcept = default;
249
250 void operator()(DH* p)
251 {
252 DH_free (p);
253 }
254 };
255
256 using DhKeyPtr = std::unique_ptr <DH, DhKeyDelete>;
257
262 {
263 constexpr EcdhKeyDelete () noexcept = default;
264
265 void operator()(EC_KEY* p)
266 {
267 EC_KEY_free (p);
268 }
269 };
270
271 using EcdhKeyPtr = std::unique_ptr <EC_KEY, EcdhKeyDelete>;
272#endif
273
281 void initializeOpenSSL ();
282
283 // default cipher.
284 extern const std::string defaultCipher;
285
286 // default cipher.
287 extern const std::string defaultCipher_1_3;
288
289#if OPENSSL_VERSION_NUMBER >= 0x30000000L
290 // default curve.
291 extern const std::string defaultCurve;
292#endif
293}
294
295#endif
Definition acceptor.hpp:32
std::unique_ptr< HMAC_CTX, HmacCtxDelete > HmacCtxPtr
Definition openssl.hpp:149
std::unique_ptr< BIGNUM, BigNumDelete > BigNumPtr
Definition openssl.hpp:58
std::unique_ptr< EC_KEY, EcdhKeyDelete > EcdhKeyPtr
Definition openssl.hpp:271
std::unique_ptr< EVP_PKEY_CTX, EvpPkeyCtxDelete > EvpPkeyCtxPtr
Definition openssl.hpp:103
std::unique_ptr< EVP_PKEY, EvpPkeyDelete > EvpPkeyPtr
Definition openssl.hpp:88
std::unique_ptr< SSL, SslDelete > SslPtr
Definition openssl.hpp:225
std::unique_ptr< EVP_MD_CTX, EvpMdCtxDelete > EvpMdCtxPtr
Definition openssl.hpp:133
std::unique_ptr< DH, DhKeyDelete > DhKeyPtr
Definition openssl.hpp:256
void initializeOpenSSL()
initialize the OpenSSL libraries.
Definition openssl.cpp:48
std::unique_ptr< STACK_OF(X509_NAME), StackOfX509NameDelete > StackOfX509NamePtr
Definition openssl.hpp:195
const std::string defaultCipher_1_3
Definition openssl.cpp:39
std::unique_ptr< SSL_CTX, SslCtxDelete > SslCtxPtr
Definition openssl.hpp:240
std::unique_ptr< ECDSA_SIG, EcdsaSigDelete > EcdsaSigPtr
Definition openssl.hpp:73
std::unique_ptr< STACK_OF(GENERAL_NAME), StackOfGeneralNameDelete > StackOfGeneralNamePtr
Definition openssl.hpp:210
std::unique_ptr< EVP_ENCODE_CTX, EvpEncodeCtxDelete > EvpEncodeCtxPtr
Definition openssl.hpp:118
const std::string defaultCipher
Definition openssl.cpp:36
custom functor for BIGNUM deletion.
Definition openssl.hpp:49
constexpr BigNumDelete() noexcept=default
Custom functor for DH key deletion.
Definition openssl.hpp:247
constexpr DhKeyDelete() noexcept=default
Custom functor for ECDH key deletion.
Definition openssl.hpp:262
constexpr EcdhKeyDelete() noexcept=default
custom functor for ECDSA_SIG deletion.
Definition openssl.hpp:64
constexpr EcdsaSigDelete() noexcept=default
custom functor for EVP_ENCODE_CTX deletion.
Definition openssl.hpp:109
constexpr EvpEncodeCtxDelete() noexcept=default
custom functor for EVP_MD_CTX deletion.
Definition openssl.hpp:124
constexpr EvpMdCtxDelete() noexcept=default
custom functor for EVP_PKEY_CTX deletion.
Definition openssl.hpp:94
constexpr EvpPkeyCtxDelete() noexcept=default
custom functor for EVP_PKEY deletion.
Definition openssl.hpp:79
constexpr EvpPkeyDelete() noexcept=default
custom functor for HMAC_CTX deletion.
Definition openssl.hpp:140
constexpr HmacCtxDelete() noexcept=default
custom functor for SSL context deletion.
Definition openssl.hpp:231
constexpr SslCtxDelete() noexcept=default
custom functor for SSL handle deletion.
Definition openssl.hpp:216
constexpr SslDelete() noexcept=default
custom functor for STACK_OF(GENERAL_NAME) deletion.
Definition openssl.hpp:201
constexpr StackOfGeneralNameDelete() noexcept=default
Custom functor for STACK_OF(X509_NAME) deletion.
Definition openssl.hpp:186
constexpr StackOfX509NameDelete() noexcept=default