1*6777b538SAndroid Build Coastguard Worker // Copyright 2017 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef NET_QUIC_MOCK_DECRYPTER_H_ 6*6777b538SAndroid Build Coastguard Worker #define NET_QUIC_MOCK_DECRYPTER_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <cstddef> 9*6777b538SAndroid Build Coastguard Worker #include <cstdint> 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker #include "base/compiler_specific.h" 12*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h" 13*6777b538SAndroid Build Coastguard Worker #include "net/third_party/quiche/src/quiche/quic/core/crypto/quic_decrypter.h" 14*6777b538SAndroid Build Coastguard Worker #include "net/third_party/quiche/src/quiche/quic/core/quic_types.h" 15*6777b538SAndroid Build Coastguard Worker 16*6777b538SAndroid Build Coastguard Worker namespace net { 17*6777b538SAndroid Build Coastguard Worker 18*6777b538SAndroid Build Coastguard Worker // A MockDecrypter is a QuicDecrypter that strips the last 12 bytes of 19*6777b538SAndroid Build Coastguard Worker // ciphertext (which should be zeroes, but are ignored), and returns the 20*6777b538SAndroid Build Coastguard Worker // remaining ciphertext untouched and ignores the associated data. This is used 21*6777b538SAndroid Build Coastguard Worker // to allow fuzzing to mutate plaintext packets. 22*6777b538SAndroid Build Coastguard Worker class MockDecrypter : public quic::QuicDecrypter { 23*6777b538SAndroid Build Coastguard Worker public: 24*6777b538SAndroid Build Coastguard Worker explicit MockDecrypter(quic::Perspective perspective); 25*6777b538SAndroid Build Coastguard Worker 26*6777b538SAndroid Build Coastguard Worker MockDecrypter(const MockDecrypter&) = delete; 27*6777b538SAndroid Build Coastguard Worker MockDecrypter& operator=(const MockDecrypter&) = delete; 28*6777b538SAndroid Build Coastguard Worker 29*6777b538SAndroid Build Coastguard Worker ~MockDecrypter() override = default; 30*6777b538SAndroid Build Coastguard Worker 31*6777b538SAndroid Build Coastguard Worker // QuicCrypter implementation 32*6777b538SAndroid Build Coastguard Worker bool SetKey(std::string_view key) override; 33*6777b538SAndroid Build Coastguard Worker bool SetNoncePrefix(std::string_view nonce_prefix) override; 34*6777b538SAndroid Build Coastguard Worker bool SetIV(std::string_view iv) override; 35*6777b538SAndroid Build Coastguard Worker bool SetHeaderProtectionKey(std::string_view key) override; 36*6777b538SAndroid Build Coastguard Worker size_t GetKeySize() const override; 37*6777b538SAndroid Build Coastguard Worker size_t GetIVSize() const override; 38*6777b538SAndroid Build Coastguard Worker size_t GetNoncePrefixSize() const override; 39*6777b538SAndroid Build Coastguard Worker 40*6777b538SAndroid Build Coastguard Worker // QuicDecrypter implementation 41*6777b538SAndroid Build Coastguard Worker bool SetPreliminaryKey(std::string_view key) override; 42*6777b538SAndroid Build Coastguard Worker bool SetDiversificationNonce( 43*6777b538SAndroid Build Coastguard Worker const quic::DiversificationNonce& nonce) override; 44*6777b538SAndroid Build Coastguard Worker bool DecryptPacket(uint64_t packet_number, 45*6777b538SAndroid Build Coastguard Worker std::string_view associated_data, 46*6777b538SAndroid Build Coastguard Worker std::string_view ciphertext, 47*6777b538SAndroid Build Coastguard Worker char* output, 48*6777b538SAndroid Build Coastguard Worker size_t* output_length, 49*6777b538SAndroid Build Coastguard Worker size_t max_output_length) override; 50*6777b538SAndroid Build Coastguard Worker std::string GenerateHeaderProtectionMask( 51*6777b538SAndroid Build Coastguard Worker quic::QuicDataReader* sample_reader) override; 52*6777b538SAndroid Build Coastguard Worker uint32_t cipher_id() const override; 53*6777b538SAndroid Build Coastguard Worker quic::QuicPacketCount GetIntegrityLimit() const override; 54*6777b538SAndroid Build Coastguard Worker std::string_view GetKey() const override; 55*6777b538SAndroid Build Coastguard Worker std::string_view GetNoncePrefix() const override; 56*6777b538SAndroid Build Coastguard Worker }; 57*6777b538SAndroid Build Coastguard Worker 58*6777b538SAndroid Build Coastguard Worker } // namespace net 59*6777b538SAndroid Build Coastguard Worker 60*6777b538SAndroid Build Coastguard Worker #endif // NET_QUIC_MOCK_DECRYPTER_H_ 61