OpenVPN 3 Core Library
Loading...
Searching...
No Matches
cryptodcsel.hpp
Go to the documentation of this file.
1// OpenVPN -- An application to securely tunnel IP networks
2// over a single port, with support for SSL/TLS-based
3// session authentication and key exchange,
4// packet encryption, packet authentication, and
5// packet compression.
6//
7// Copyright (C) 2012- OpenVPN Inc.
8//
9// SPDX-License-Identifier: MPL-2.0 OR AGPL-3.0-only WITH openvpn3-openssl-exception
10//
11
12// Select appropriate OpenVPN protocol data channel implementation
13
14#ifndef OPENVPN_CRYPTO_CRYPTODCSEL_H
15#define OPENVPN_CRYPTO_CRYPTODCSEL_H
16
23
24namespace openvpn {
25
26OPENVPN_EXCEPTION(crypto_dc_select);
27
31template <typename CRYPTO_API>
33{
34 public:
36
38 const Frame::Ptr &frame_arg,
39 const SessionStats::Ptr &stats_arg,
40 const StrongRandomAPI::Ptr &rng_arg)
41 : frame(frame_arg),
42 stats(stats_arg),
43 rng(rng_arg),
44 libctx(libctx_arg)
45 {
46 }
47
49 {
50 const CryptoAlgs::Alg &alg = CryptoAlgs::get(dc_settings.cipher());
51 if (alg.mode() == CryptoAlgs::CBC_HMAC)
52 return new CryptoContextCHM<CRYPTO_API>(libctx, std::move(dc_settings), frame, stats, rng);
53 else if (alg.mode() == CryptoAlgs::AEAD && dc_settings.useEpochKeys())
54 return new AEADEpoch::CryptoContext<CRYPTO_API>(libctx, std::move(dc_settings), frame, stats);
55 else if (alg.mode() == CryptoAlgs::AEAD)
56 return new AEAD::CryptoContext<CRYPTO_API>(libctx, std::move(dc_settings), frame, stats);
57 else
58 OPENVPN_THROW(crypto_dc_select, alg.name() << ": only CBC/HMAC and AEAD cipher modes supported");
59 }
60
61 private:
66};
67
68} // namespace openvpn
69
70#endif
const char * name() const
CryptoDCContext::Ptr new_obj(CryptoDCSettingsData dc_settings) override
StrongRandomAPI::Ptr rng
RCPtr< CryptoDCSelect > Ptr
CryptoDCSelect(SSLLib::Ctx libctx_arg, const Frame::Ptr &frame_arg, const SessionStats::Ptr &stats_arg, const StrongRandomAPI::Ptr &rng_arg)
SessionStats::Ptr stats
CryptoAlgs::Type cipher() const
Definition cryptodc.hpp:120
The smart pointer class.
Definition rc.hpp:119
#define OPENVPN_EXCEPTION(C)
#define OPENVPN_THROW(exc, stuff)
const Alg & get(const Type type)
Implementation of the base classes for random number generators.