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