1 // Copyright (c) 2012 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 NET_QUIC_CRYPTO_NULL_DECRYPTER_H_ 6 #define NET_QUIC_CRYPTO_NULL_DECRYPTER_H_ 7 8 #include "base/compiler_specific.h" 9 #include "net/base/net_export.h" 10 #include "net/quic/crypto/quic_decrypter.h" 11 12 namespace net { 13 14 class QuicDataReader; 15 16 // A NullDecrypter is a QuicDecrypter used before a crypto negotiation 17 // has occurred. It does not actually decrypt the payload, but does 18 // verify a hash (fnv128) over both the payload and associated data. 19 class NET_EXPORT_PRIVATE NullDecrypter : public QuicDecrypter { 20 public: 21 NullDecrypter(); ~NullDecrypter()22 virtual ~NullDecrypter() {} 23 24 // QuicDecrypter implementation 25 virtual bool SetKey(base::StringPiece key) OVERRIDE; 26 virtual bool SetNoncePrefix(base::StringPiece nonce_prefix) OVERRIDE; 27 virtual bool Decrypt(base::StringPiece nonce, 28 base::StringPiece associated_data, 29 base::StringPiece ciphertext, 30 unsigned char* output, 31 size_t* output_length) OVERRIDE; 32 virtual QuicData* DecryptPacket(QuicPacketSequenceNumber sequence_number, 33 base::StringPiece associated_data, 34 base::StringPiece ciphertext) OVERRIDE; 35 virtual base::StringPiece GetKey() const OVERRIDE; 36 virtual base::StringPiece GetNoncePrefix() const OVERRIDE; 37 38 private: 39 bool ReadHash(QuicDataReader* reader, uint128* hash); 40 uint128 ComputeHash(const std::string& data) const; 41 42 DISALLOW_COPY_AND_ASSIGN(NullDecrypter); 43 }; 44 45 } // namespace net 46 47 #endif // NET_QUIC_CRYPTO_NULL_DECRYPTER_H_ 48