1
#pragma once
2

            
3
#include "envoy/config/typed_config.h"
4
#include "envoy/extensions/transport_sockets/tls/v3/cert.pb.h"
5
#include "envoy/registry/registry.h"
6
#include "envoy/ssl/private_key/private_key.h"
7

            
8
namespace Envoy {
9
namespace Ssl {
10

            
11
// Base class which the private key operation provider implementations can register.
12

            
13
class PrivateKeyMethodProviderInstanceFactory : public Config::UntypedFactory {
14
public:
15
  ~PrivateKeyMethodProviderInstanceFactory() override = default;
16

            
17
  /**
18
   * Create a particular PrivateKeyMethodProvider implementation. If the implementation is
19
   * unable to produce a PrivateKeyMethodProvider with the provided parameters, it should throw
20
   * an EnvoyException. The returned pointer should always be valid.
21
   * @param config supplies the custom proto configuration for the PrivateKeyMethodProvider
22
   * @param context supplies the factory context
23
   */
24
  virtual PrivateKeyMethodProviderSharedPtr createPrivateKeyMethodProviderInstance(
25
      const envoy::extensions::transport_sockets::tls::v3::PrivateKeyProvider& config,
26
      Server::Configuration::TransportSocketFactoryContext& factory_context) PURE;
27

            
28
96
  std::string category() const override { return "envoy.tls.key_providers"; };
29
};
30

            
31
} // namespace Ssl
32
} // namespace Envoy