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