null_decrypter.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/quic/crypto/null_decrypter.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/quic/quic_utils.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/quic/quic_data_reader.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::StringPiece; 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using std::string; 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool NullDecrypter::SetKey(StringPiece key) { 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return key.empty(); 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool NullDecrypter::SetNoncePrefix(StringPiece nonce_prefix) { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return nonce_prefix.empty(); 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)QuicData* NullDecrypter::Decrypt(QuicPacketSequenceNumber /*sequence_number*/, 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StringPiece associated_data, 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StringPiece ciphertext) { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuicDataReader reader(ciphertext.data(), ciphertext.length()); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint128 hash; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!reader.ReadUInt128(&hash)) { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StringPiece plaintext = reader.ReadRemainingPayload(); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(rch): avoid buffer copy here 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string buffer = associated_data.as_string(); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plaintext.AppendToString(&buffer); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (hash != QuicUtils::FNV1a_128_Hash(buffer.data(), buffer.length())) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new QuicData(plaintext.data(), plaintext.length()); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)StringPiece NullDecrypter::GetKey() const { 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return StringPiece(); 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)StringPiece NullDecrypter::GetNoncePrefix() const { 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return StringPiece(); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace net 53