Vanetza
 
Loading...
Searching...
No Matches
backend.cpp
1#include <vanetza/common/factory.hpp>
2#include <vanetza/security/backend.hpp>
3#include <cassert>
4
5namespace
6{
7
9
10template<typename T>
11class BackendRegistrar
12{
13public:
14 BackendRegistrar(const std::string& name)
15 {
16 auto f = []() { return std::unique_ptr<vanetza::security::Backend> { new T() }; };
17 bool success = backend_factory.add(name, f) && backend_factory.configure_default(name);
18 assert(success);
19 }
20};
21
22} // namespace
23
24// order of VANETZA_REGISTER_CRYPTO_BACKEND invocation defines priority: last registered one will be default
25#define VANETZA_REGISTER_CRYPTO_BACKEND(clazz) \
26 namespace { \
27 using namespace vanetza::security; \
28 static const BackendRegistrar<clazz> clazz##Factory(clazz::backend_name); \
29 }
30
31#include <vanetza/security/backend_null.hpp>
32VANETZA_REGISTER_CRYPTO_BACKEND(BackendNull)
33
34#ifdef VANETZA_WITH_CRYPTOPP
35# include <vanetza/security/backend_cryptopp.hpp>
36 VANETZA_REGISTER_CRYPTO_BACKEND(BackendCryptoPP)
37#endif
38
39#ifdef VANETZA_WITH_OPENSSL
40# include <vanetza/security/backend_openssl.hpp>
41 VANETZA_REGISTER_CRYPTO_BACKEND(BackendOpenSsl)
42#endif
43
44namespace vanetza
45{
46namespace security
47{
48
49const Factory<Backend>& builtin_backends()
50{
51 return backend_factory;
52}
53
54std::unique_ptr<Backend> create_backend(const std::string& name, const Factory<Backend>& factory)
55{
56 if (name == "default") {
57 return factory.create();
58 } else {
59 return factory.create(name);
60 }
61}
62
63} // namespace security
64} // namespace vanetza
bool configure_default(const std::string &name)
Definition: factory.hpp:70
bool add(const std::string &name, Function f)
Definition: factory.hpp:60