1 // Copyright (c) 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_AES_256_GCM_DECRYPTER_H_ 6 #define QUICHE_QUIC_CORE_CRYPTO_AES_256_GCM_DECRYPTER_H_ 7 8 #include <cstdint> 9 10 #include "quiche/quic/core/crypto/aes_base_decrypter.h" 11 #include "quiche/quic/platform/api/quic_export.h" 12 13 namespace quic { 14 15 // An Aes256GcmDecrypter is a QuicDecrypter that implements the 16 // AEAD_AES_256_GCM algorithm specified in RFC 5116 for use in IETF QUIC. 17 // 18 // It uses an authentication tag of 16 bytes (128 bits). It uses a 12 byte IV 19 // that is XOR'd with the packet number to compute the nonce. 20 class QUICHE_EXPORT Aes256GcmDecrypter : public AesBaseDecrypter { 21 public: 22 enum { 23 kAuthTagSize = 16, 24 }; 25 26 Aes256GcmDecrypter(); 27 Aes256GcmDecrypter(const Aes256GcmDecrypter&) = delete; 28 Aes256GcmDecrypter& operator=(const Aes256GcmDecrypter&) = delete; 29 ~Aes256GcmDecrypter() override; 30 31 uint32_t cipher_id() const override; 32 }; 33 34 } // namespace quic 35 36 #endif // QUICHE_QUIC_CORE_CRYPTO_AES_256_GCM_DECRYPTER_H_ 37