1
#pragma once
2

            
3
#include "source/common/common/logger.h"
4

            
5
#include "openssl/ssl.h"
6

            
7
namespace Envoy {
8
namespace Extensions {
9
namespace TransportSockets {
10
namespace Tls {
11

            
12
// RFC 8879 TLS Certificate Compression.
13
class CertCompression : protected Logger::Loggable<Logger::Id::connection> {
14
public:
15
  static void registerBrotli(SSL_CTX* ssl_ctx);
16
  static void registerZlib(SSL_CTX* ssl_ctx);
17

            
18
  static int compressBrotli(SSL* ssl, CBB* out, const uint8_t* in, size_t in_len);
19
  static int decompressBrotli(SSL* ssl, CRYPTO_BUFFER** out, size_t uncompressed_len,
20
                              const uint8_t* in, size_t in_len);
21

            
22
  static int compressZlib(SSL* ssl, CBB* out, const uint8_t* in, size_t in_len);
23
  static int decompressZlib(SSL* ssl, CRYPTO_BUFFER** out, size_t uncompressed_len,
24
                            const uint8_t* in, size_t in_len);
25

            
26
  static constexpr int SUCCESS = 1;
27
  static constexpr int FAILURE = 0;
28
};
29

            
30
} // namespace Tls
31
} // namespace TransportSockets
32
} // namespace Extensions
33
} // namespace Envoy