Home | History | Annotate | Download | only in crypto
      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