SSP21-CPP
Factory.h
Go to the documentation of this file.
1 #ifndef SSP21_FACTORY_H
2 #define SSP21_FACTORY_H
3 
4 /** @file
5  * @brief Factory methods to create a protocol stack.
6  *
7  * To create an initiator, use one of the following functions:
8  * - @ref ssp21::initiator::factory::shared_secret_mode()
9  * - @ref ssp21::initiator::factory::qkd_mode()
10  * - @ref ssp21::initiator::factory::preshared_public_key_mode()
11  * - @ref ssp21::initiator::factory::certificate_public_key_mode()
12  *
13  * To create a responder, use one of the following functions:
14  * - @ref ssp21::responder::factory::shared_secret_mode()
15  * - @ref ssp21::responder::factory::preshared_public_key_mode()
16  * - @ref ssp21::responder::factory::qkd_mode()
17  * - @ref ssp21::responder::factory::certificate_public_key_mode()
18  */
19 
20 #include "ssp21/crypto/BufferTypes.h"
21 #include "ssp21/crypto/CryptoLayerConfig.h"
22 #include "ssp21/crypto/CryptoSuite.h"
23 #include "ssp21/crypto/IKeyLookup.h"
24 #include "ssp21/crypto/IKeySource.h"
25 #include "ssp21/crypto/StaticKeys.h"
26 #include "ssp21/link/Addresses.h"
27 #include "ssp21/stack/IStack.h"
28 #include "ssp21/util/SecureDynamicBuffer.h"
29 
30 #include "exe4cpp/IExecutor.h"
31 #include "log4cpp/Logger.h"
32 
33 #include <memory>
34 
35 namespace ssp21
36 {
37  /**
38  * @brief Responder namespace.
39  */
40  namespace responder
41  {
42  /**
43  * @brief Responder factory functions.
44  */
45  namespace factory
46  {
47  /**
48  * @brief Create a shared secret responder stack.
49  * @param addresses Link-layer addresses used
50  * @param config Responder configuration
51  * @param logger Logger used by the stack
52  * @param executor Executor used by the stack
53  * @param key Shared secret
54  * @return Stack to which an @ref IUpperLayer and an @ref ILowerLayer must be bind
55  */
56  std::shared_ptr<IStack> shared_secret_mode(
57  const Addresses& addresses,
58  const ResponderConfig& config,
59  const log4cpp::Logger& logger,
60  const std::shared_ptr<exe4cpp::IExecutor>& executor,
61  const std::shared_ptr<const SymmetricKey>& key
62  );
63 
64  /**
65  * @brief Create a quantum key destribution (QKD) responder stack.
66  * @param addresses Link-layer addresses used
67  * @param config Responder configuration
68  * @param logger Logger used by the stack
69  * @param executor Executor used by the stack
70  * @param key_lookup Key lookup interface
71  * @return Stack to which an @ref IUpperLayer and an @ref ILowerLayer must be bind
72  */
73  std::shared_ptr<IStack> qkd_mode(
74  const Addresses& addresses,
75  const ResponderConfig& config,
76  const log4cpp::Logger& logger,
77  const std::shared_ptr<exe4cpp::IExecutor>& executor,
78  const std::shared_ptr<IKeyLookup>& key_lookup
79  );
80 
81  /**
82  * @brief Create a preshared public key responder stack.
83  * @param addresses Link-layer addresses used
84  * @param config Responder configuration
85  * @param logger Logger used by the stack
86  * @param executor Executor used by the stack
87  * @param local_keys Local key pair
88  * @param remote_public_key Remote preshared public key
89  * @return Stack to which an @ref IUpperLayer and an @ref ILowerLayer must be bind
90  */
91  std::shared_ptr<IStack> preshared_public_key_mode(
92  const Addresses& addresses,
93  const ResponderConfig& config,
94  const log4cpp::Logger& logger,
95  const std::shared_ptr<exe4cpp::IExecutor>& executor,
96  const StaticKeys& local_keys,
97  const std::shared_ptr<const PublicKey>& remote_public_key
98  );
99 
100  /**
101  * @brief Create a certificate-based responder stack.
102  * @param addresses Link-layer addresses used
103  * @param config Responder configuration
104  * @param logger Logger used by the stack
105  * @param executor Executor used by the stack
106  * @param local_keys Local key pair
107  * @param anchor_cert_file_data Root certificate file
108  * @param presented_chain_file_data Certificate chain to present to the remote
109  * @return Stack to which an @ref IUpperLayer and an @ref ILowerLayer must be bind
110  */
111  std::shared_ptr<IStack> certificate_public_key_mode(
112  const Addresses& addresses,
113  const ResponderConfig& config,
114  const log4cpp::Logger& logger,
115  const std::shared_ptr<exe4cpp::IExecutor>& executor,
116  const StaticKeys& local_keys,
117  const std::shared_ptr<ssp21::SecureDynamicBuffer>& anchor_cert_file_data,
118  const std::shared_ptr<ssp21::SecureDynamicBuffer>& presented_chain_file_data
119  );
120 
121  }
122 
123  }
124 
125  /**
126  * @brief Initiator namespace.
127  */
128  namespace initiator
129  {
130  /**
131  * @brief Initiator factory functions.
132  */
133  namespace factory
134  {
135  /**
136  * @brief Create a shared secret initiator stack.
137  * @param addresses Link-layer addresses used
138  * @param config Responder configuration
139  * @param logger Logger used by the stack
140  * @param executor Executor used by the stack
141  * @param crypto_suite Cryptographic modes that will be requested
142  * @param key Shared secret
143  * @return Stack to which an @ref IUpperLayer and an @ref ILowerLayer must be bind
144  *
145  * @note The only valid @ref HandshakeEphemeral for this mode is @ref HandshakeEphemeral::nonce.
146  */
147  std::shared_ptr<IStack> shared_secert_mode(
148  const Addresses& addresses,
149  const InitiatorConfig& config,
150  const log4cpp::Logger& logger,
151  const std::shared_ptr<exe4cpp::IExecutor>& executor,
152  const CryptoSuite& crypto_suite,
153  const std::shared_ptr<const SymmetricKey>& key
154  );
155 
156  /**
157  * @brief Create a quantum key distribution (QKD) initiator stack.
158  * @param addresses Link-layer addresses used
159  * @param config Responder configuration
160  * @param logger Logger used by the stack
161  * @param executor Executor used by the stack
162  * @param crypto_suite Cryptographic modes that will be requested
163  * @param key_source Key source interface
164  * @return Stack to which an @ref IUpperLayer and an @ref ILowerLayer must be bind
165  *
166  * @note The only valid @ref HandshakeEphemeral for this mode is @ref HandshakeEphemeral::none.
167  */
168  std::shared_ptr<IStack> qkd_mode(
169  const Addresses& addresses,
170  const InitiatorConfig& config,
171  const log4cpp::Logger& logger,
172  const std::shared_ptr<exe4cpp::IExecutor>& executor,
173  const CryptoSuite& crypto_suite,
174  const std::shared_ptr<IKeySource>& key_source
175  );
176 
177  /**
178  * @brief Create a preshared public key initiator stack.
179  * @param addresses Link-layer addresses used
180  * @param config Responder configuration
181  * @param logger Logger used by the stack
182  * @param executor Executor used by the stack
183  * @param crypto_suite Cryptographic modes that will be requested
184  * @param local_keys Local key pair
185  * @param remote_public_key Remote public key
186  * @return Stack to which an @ref IUpperLayer and an @ref ILowerLayer must be bind
187  *
188  * @note The only valid @ref HandshakeEphemeral for this mode is @ref HandshakeEphemeral::x25519.
189  */
190  std::shared_ptr<IStack> preshared_public_key_mode(
191  const Addresses& addresses,
192  const InitiatorConfig& config,
193  const log4cpp::Logger& logger,
194  const std::shared_ptr<exe4cpp::IExecutor>& executor,
195  const CryptoSuite& crypto_suite,
196  const StaticKeys& local_keys,
197  const std::shared_ptr<const PublicKey>& remote_public_key
198  );
199 
200  /**
201  * @brief Create a certificate-based initiator stack.
202  * @param addresses Link-layer addresses used
203  * @param config Responder configuration
204  * @param logger Logger used by the stack
205  * @param executor Executor used by the stack
206  * @param crypto_suite Cryptographic modes that will be requested
207  * @param local_keys Local key pair
208  * @param anchor_cert_file_data Root certificate file
209  * @param presented_chain_file_data Certificate chain to present to the remote
210  * @return Stack to which an @ref IUpperLayer and an @ref ILowerLayer must be bind
211  *
212  * @note The only valid @ref HandshakeEphemeral for this mode is @ref HandshakeEphemeral::x25519.
213  */
214  std::shared_ptr<IStack> certificate_public_key_mode(
215  const Addresses& addresses,
216  const InitiatorConfig& config,
217  const log4cpp::Logger& logger,
218  const std::shared_ptr<exe4cpp::IExecutor>& executor,
219  const CryptoSuite& crypto_suite,
220  const StaticKeys& local_keys,
221  const std::shared_ptr<ssp21::SecureDynamicBuffer>& anchor_cert_file_data,
222  const std::shared_ptr<ssp21::SecureDynamicBuffer>& presented_chain_file_data
223  );
224 
225  }
226  }
227 }
228 
229 #endif
SSP21-cpp main namespace.
Definition: BufferTypes.h:12
std::shared_ptr< IStack > preshared_public_key_mode(const Addresses &addresses, const ResponderConfig &config, const log4cpp::Logger &logger, const std::shared_ptr< exe4cpp::IExecutor > &executor, const StaticKeys &local_keys, const std::shared_ptr< const PublicKey > &remote_public_key)
Create a preshared public key responder stack.
Interface ssp21::IStack.
std::shared_ptr< IStack > preshared_public_key_mode(const Addresses &addresses, const InitiatorConfig &config, const log4cpp::Logger &logger, const std::shared_ptr< exe4cpp::IExecutor > &executor, const CryptoSuite &crypto_suite, const StaticKeys &local_keys, const std::shared_ptr< const PublicKey > &remote_public_key)
Create a preshared public key initiator stack.
std::shared_ptr< IStack > certificate_public_key_mode(const Addresses &addresses, const ResponderConfig &config, const log4cpp::Logger &logger, const std::shared_ptr< exe4cpp::IExecutor > &executor, const StaticKeys &local_keys, const std::shared_ptr< ssp21::SecureDynamicBuffer > &anchor_cert_file_data, const std::shared_ptr< ssp21::SecureDynamicBuffer > &presented_chain_file_data)
Create a certificate-based responder stack.
std::shared_ptr< IStack > shared_secret_mode(const Addresses &addresses, const ResponderConfig &config, const log4cpp::Logger &logger, const std::shared_ptr< exe4cpp::IExecutor > &executor, const std::shared_ptr< const SymmetricKey > &key)
Create a shared secret responder stack.
Structure ssp21::Addresses.
std::shared_ptr< IStack > qkd_mode(const Addresses &addresses, const ResponderConfig &config, const log4cpp::Logger &logger, const std::shared_ptr< exe4cpp::IExecutor > &executor, const std::shared_ptr< IKeyLookup > &key_lookup)
Create a quantum key destribution (QKD) responder stack.
std::shared_ptr< IStack > certificate_public_key_mode(const Addresses &addresses, const InitiatorConfig &config, const log4cpp::Logger &logger, const std::shared_ptr< exe4cpp::IExecutor > &executor, const CryptoSuite &crypto_suite, const StaticKeys &local_keys, const std::shared_ptr< ssp21::SecureDynamicBuffer > &anchor_cert_file_data, const std::shared_ptr< ssp21::SecureDynamicBuffer > &presented_chain_file_data)
Create a certificate-based initiator stack.
Link-layer pair of addresses.
Definition: Addresses.h:16
std::shared_ptr< IStack > shared_secert_mode(const Addresses &addresses, const InitiatorConfig &config, const log4cpp::Logger &logger, const std::shared_ptr< exe4cpp::IExecutor > &executor, const CryptoSuite &crypto_suite, const std::shared_ptr< const SymmetricKey > &key)
Create a shared secret initiator stack.
std::shared_ptr< IStack > qkd_mode(const Addresses &addresses, const InitiatorConfig &config, const log4cpp::Logger &logger, const std::shared_ptr< exe4cpp::IExecutor > &executor, const CryptoSuite &crypto_suite, const std::shared_ptr< IKeySource > &key_source)
Create a quantum key distribution (QKD) initiator stack.