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_ENCRYPTER_H_ 6*6777b538SAndroid Build Coastguard Worker #define NET_QUIC_MOCK_ENCRYPTER_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <cstddef> 9*6777b538SAndroid Build Coastguard Worker #include <limits> 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_encrypter.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 MockEncrypter is a QuicEncrypter that returns this plaintext followed by 12 19*6777b538SAndroid Build Coastguard Worker // bytes of zeroes. No encryption or MAC is applied. This is used to allow 20*6777b538SAndroid Build Coastguard Worker // fuzzing to mutate plaintext packets. 21*6777b538SAndroid Build Coastguard Worker class MockEncrypter : public quic::QuicEncrypter { 22*6777b538SAndroid Build Coastguard Worker public: 23*6777b538SAndroid Build Coastguard Worker explicit MockEncrypter(quic::Perspective perspective); 24*6777b538SAndroid Build Coastguard Worker 25*6777b538SAndroid Build Coastguard Worker MockEncrypter(const MockEncrypter&) = delete; 26*6777b538SAndroid Build Coastguard Worker MockEncrypter& operator=(const MockEncrypter&) = delete; 27*6777b538SAndroid Build Coastguard Worker 28*6777b538SAndroid Build Coastguard Worker ~MockEncrypter() override = default; 29*6777b538SAndroid Build Coastguard Worker 30*6777b538SAndroid Build Coastguard Worker // QuicEncrypter implementation 31*6777b538SAndroid Build Coastguard Worker bool SetKey(std::string_view key) override; 32*6777b538SAndroid Build Coastguard Worker bool SetNoncePrefix(std::string_view nonce_prefix) override; 33*6777b538SAndroid Build Coastguard Worker bool SetHeaderProtectionKey(std::string_view key) override; 34*6777b538SAndroid Build Coastguard Worker bool SetIV(std::string_view iv) override; 35*6777b538SAndroid Build Coastguard Worker bool EncryptPacket(uint64_t packet_number, 36*6777b538SAndroid Build Coastguard Worker std::string_view associated_data, 37*6777b538SAndroid Build Coastguard Worker std::string_view plaintext, 38*6777b538SAndroid Build Coastguard Worker char* output, 39*6777b538SAndroid Build Coastguard Worker size_t* output_length, 40*6777b538SAndroid Build Coastguard Worker size_t max_output_length) override; 41*6777b538SAndroid Build Coastguard Worker std::string GenerateHeaderProtectionMask(std::string_view sample) override; 42*6777b538SAndroid Build Coastguard Worker size_t GetKeySize() const override; 43*6777b538SAndroid Build Coastguard Worker size_t GetNoncePrefixSize() const override; 44*6777b538SAndroid Build Coastguard Worker size_t GetIVSize() const override; 45*6777b538SAndroid Build Coastguard Worker size_t GetMaxPlaintextSize(size_t ciphertext_size) const override; 46*6777b538SAndroid Build Coastguard Worker size_t GetCiphertextSize(size_t plaintext_size) const override; 47*6777b538SAndroid Build Coastguard Worker quic::QuicPacketCount GetConfidentialityLimit() const override; 48*6777b538SAndroid Build Coastguard Worker std::string_view GetKey() const override; 49*6777b538SAndroid Build Coastguard Worker std::string_view GetNoncePrefix() const override; 50*6777b538SAndroid Build Coastguard Worker }; 51*6777b538SAndroid Build Coastguard Worker 52*6777b538SAndroid Build Coastguard Worker } // namespace net 53*6777b538SAndroid Build Coastguard Worker 54*6777b538SAndroid Build Coastguard Worker #endif // NET_QUIC_MOCK_ENCRYPTER_H_ 55