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_ENCRYPTER_H_
6 #define QUICHE_QUIC_CORE_CRYPTO_CHACHA20_POLY1305_TLS_ENCRYPTER_H_
7 
8 #include "quiche/quic/core/crypto/chacha_base_encrypter.h"
9 #include "quiche/quic/platform/api/quic_export.h"
10 
11 namespace quic {
12 
13 // A ChaCha20Poly1305Encrypter is a QuicEncrypter that implements the
14 // AEAD_CHACHA20_POLY1305 algorithm specified in RFC 7539 for use in IETF QUIC.
15 //
16 // It uses an authentication tag of 16 bytes (128 bits). It uses a 12 byte IV
17 // that is XOR'd with the packet number to compute the nonce.
18 class QUICHE_EXPORT ChaCha20Poly1305TlsEncrypter : public ChaChaBaseEncrypter {
19  public:
20   enum {
21     kAuthTagSize = 16,
22   };
23 
24   ChaCha20Poly1305TlsEncrypter();
25   ChaCha20Poly1305TlsEncrypter(const ChaCha20Poly1305TlsEncrypter&) = delete;
26   ChaCha20Poly1305TlsEncrypter& operator=(const ChaCha20Poly1305TlsEncrypter&) =
27       delete;
28   ~ChaCha20Poly1305TlsEncrypter() override;
29 
30   QuicPacketCount GetConfidentialityLimit() const override;
31 };
32 
33 }  // namespace quic
34 
35 #endif  // QUICHE_QUIC_CORE_CRYPTO_CHACHA20_POLY1305_TLS_ENCRYPTER_H_
36