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 #include "net/quic/crypto/null_encrypter.h" 6 #include "net/quic/quic_data_writer.h" 7 #include "net/quic/quic_utils.h" 8 9 using base::StringPiece; 10 using std::string; 11 12 namespace net { 13 14 const size_t kHashSizeShort = 12; // size of uint128 serialized short 15 16 NullEncrypter::NullEncrypter() {} 17 18 bool NullEncrypter::SetKey(StringPiece key) { return key.empty(); } 19 20 bool NullEncrypter::SetNoncePrefix(StringPiece nonce_prefix) { 21 return nonce_prefix.empty(); 22 } 23 24 bool NullEncrypter::Encrypt( 25 StringPiece /*nonce*/, 26 StringPiece associated_data, 27 StringPiece plaintext, 28 unsigned char* output) { 29 string buffer = associated_data.as_string(); 30 plaintext.AppendToString(&buffer); 31 uint128 hash = QuicUtils::FNV1a_128_Hash(buffer.data(), buffer.length()); 32 QuicUtils::SerializeUint128Short(hash, output); 33 memcpy(output + GetHashLength(), plaintext.data(), plaintext.size()); 34 return true; 35 } 36 37 QuicData* NullEncrypter::EncryptPacket( 38 QuicPacketSequenceNumber /*sequence_number*/, 39 StringPiece associated_data, 40 StringPiece plaintext) { 41 const size_t len = plaintext.size() + GetHashLength(); 42 uint8* buffer = new uint8[len]; 43 Encrypt(StringPiece(), associated_data, plaintext, buffer); 44 return new QuicData(reinterpret_cast<char*>(buffer), len, true); 45 } 46 47 size_t NullEncrypter::GetKeySize() const { return 0; } 48 49 size_t NullEncrypter::GetNoncePrefixSize() const { return 0; } 50 51 size_t NullEncrypter::GetMaxPlaintextSize(size_t ciphertext_size) const { 52 return ciphertext_size - GetHashLength(); 53 } 54 55 size_t NullEncrypter::GetCiphertextSize(size_t plaintext_size) const { 56 return plaintext_size + GetHashLength(); 57 } 58 59 StringPiece NullEncrypter::GetKey() const { return StringPiece(); } 60 61 StringPiece NullEncrypter::GetNoncePrefix() const { return StringPiece(); } 62 63 size_t NullEncrypter::GetHashLength() const { 64 return kHashSizeShort; 65 } 66 67 } // namespace net 68