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 9using base::StringPiece; 10using std::string; 11 12namespace net { 13 14const size_t kHashSizeShort = 12; // size of uint128 serialized short 15 16NullEncrypter::NullEncrypter() {} 17 18bool NullEncrypter::SetKey(StringPiece key) { return key.empty(); } 19 20bool NullEncrypter::SetNoncePrefix(StringPiece nonce_prefix) { 21 return nonce_prefix.empty(); 22} 23 24bool 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 37QuicData* 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 47size_t NullEncrypter::GetKeySize() const { return 0; } 48 49size_t NullEncrypter::GetNoncePrefixSize() const { return 0; } 50 51size_t NullEncrypter::GetMaxPlaintextSize(size_t ciphertext_size) const { 52 return ciphertext_size - GetHashLength(); 53} 54 55size_t NullEncrypter::GetCiphertextSize(size_t plaintext_size) const { 56 return plaintext_size + GetHashLength(); 57} 58 59StringPiece NullEncrypter::GetKey() const { return StringPiece(); } 60 61StringPiece NullEncrypter::GetNoncePrefix() const { return StringPiece(); } 62 63size_t NullEncrypter::GetHashLength() const { 64 return kHashSizeShort; 65} 66 67} // namespace net 68