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