xref: /aosp_15_r20/external/cronet/net/quic/mock_decrypter.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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