• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef QUICHE_QUIC_CORE_CRYPTO_CHACHA20_POLY1305_TLS_DECRYPTER_H_
6 #define QUICHE_QUIC_CORE_CRYPTO_CHACHA20_POLY1305_TLS_DECRYPTER_H_
7 
8 #include <cstdint>
9 
10 #include "quiche/quic/core/crypto/chacha_base_decrypter.h"
11 #include "quiche/quic/platform/api/quic_export.h"
12 
13 namespace quic {
14 
15 // A ChaCha20Poly1305TlsDecrypter is a QuicDecrypter that implements the
16 // AEAD_CHACHA20_POLY1305 algorithm specified in RFC 7539 for use in IETF QUIC.
17 //
18 // It uses an authentication tag of 16 bytes (128 bits). It uses a 12 bytes IV
19 // that is XOR'd with the packet number to compute the nonce.
20 class QUIC_EXPORT_PRIVATE ChaCha20Poly1305TlsDecrypter
21     : public ChaChaBaseDecrypter {
22  public:
23   enum {
24     kAuthTagSize = 16,
25   };
26 
27   ChaCha20Poly1305TlsDecrypter();
28   ChaCha20Poly1305TlsDecrypter(const ChaCha20Poly1305TlsDecrypter&) = delete;
29   ChaCha20Poly1305TlsDecrypter& operator=(const ChaCha20Poly1305TlsDecrypter&) =
30       delete;
31   ~ChaCha20Poly1305TlsDecrypter() override;
32 
33   uint32_t cipher_id() const override;
34   QuicPacketCount GetIntegrityLimit() const override;
35 };
36 
37 }  // namespace quic
38 
39 #endif  // QUICHE_QUIC_CORE_CRYPTO_CHACHA20_POLY1305_TLS_DECRYPTER_H_
40