| // Copyright (c) 2013 The Chromium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef QUICHE_QUIC_CORE_CRYPTO_CERT_COMPRESSOR_H_ | |
| #define QUICHE_QUIC_CORE_CRYPTO_CERT_COMPRESSOR_H_ | |
| #include <string> | |
| #include <vector> | |
| #include "absl/strings/string_view.h" | |
| #include "quiche/quic/core/crypto/crypto_protocol.h" | |
| #include "quiche/quic/platform/api/quic_export.h" | |
| namespace quic { | |
| // CertCompressor provides functions for compressing and decompressing | |
| // certificate chains using two techniquies: | |
| // 1) The peer may provide a list of a 64-bit, FNV-1a hashes of certificates | |
| // that they already have. In the event that one of them is to be | |
| // compressed, it can be replaced with just the hash. | |
| // 2) Otherwise the certificates are compressed with zlib using a pre-shared | |
| // dictionary that consists of the certificates handled with the above | |
| // methods and a small chunk of common substrings. | |
| class QUIC_EXPORT_PRIVATE CertCompressor { | |
| public: | |
| CertCompressor() = delete; | |
| // CompressChain compresses the certificates in |certs| and returns a | |
| // compressed representation. client_cached_cert_hashes| contains | |
| // 64-bit, FNV-1a hashes of certificates that the peer already possesses. | |
| static std::string CompressChain(const std::vector<std::string>& certs, | |
| absl::string_view client_cached_cert_hashes); | |
| // DecompressChain decompresses the result of |CompressChain|, given in |in|, | |
| // into a series of certificates that are written to |out_certs|. | |
| // |cached_certs| contains certificates that the peer may have omitted. | |
| static bool DecompressChain(absl::string_view in, | |
| const std::vector<std::string>& cached_certs, | |
| std::vector<std::string>* out_certs); | |
| }; | |
| } // namespace quic | |
| #endif // QUICHE_QUIC_CORE_CRYPTO_CERT_COMPRESSOR_H_ |