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 QUICHE_EXPORT ChaCha20Poly1305TlsDecrypter : public ChaChaBaseDecrypter {
21  public:
22   enum {
23     kAuthTagSize = 16,
24   };
25 
26   ChaCha20Poly1305TlsDecrypter();
27   ChaCha20Poly1305TlsDecrypter(const ChaCha20Poly1305TlsDecrypter&) = delete;
28   ChaCha20Poly1305TlsDecrypter& operator=(const ChaCha20Poly1305TlsDecrypter&) =
29       delete;
30   ~ChaCha20Poly1305TlsDecrypter() override;
31 
32   uint32_t cipher_id() const override;
33   QuicPacketCount GetIntegrityLimit() const override;
34 };
35 
36 }  // namespace quic
37 
38 #endif  // QUICHE_QUIC_CORE_CRYPTO_CHACHA20_POLY1305_TLS_DECRYPTER_H_
39