diff options
author | rtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-14 16:25:33 +0000 |
---|---|---|
committer | rtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-14 16:25:33 +0000 |
commit | 14e8106ca5036b98170eb83c68fbc873773596a4 (patch) | |
tree | 9d41bc22f19a2da72bca94b37b2e40532770e62a /crypto/hkdf.cc | |
parent | ce585bf732e8bd85d6aa623c6445f73c5bb89ca4 (diff) | |
download | chromium_src-14e8106ca5036b98170eb83c68fbc873773596a4.zip chromium_src-14e8106ca5036b98170eb83c68fbc873773596a4.tar.gz chromium_src-14e8106ca5036b98170eb83c68fbc873773596a4.tar.bz2 |
Land Recent QUIC Changes
Handle versioning by closing the connection on version mismatch for now.
Merge internal change: 43606997
Number of cleanups from landing recent crypto changes.
Merge internal change: 43606111
Added delta_time_largest_observed to ReceivedPacketInfo to calculate accurate RTT.
Merge internal change: 43582099
Implement server-side QUIC key expansion. The derived keys are still not being used yet.
TODO: Code is in crypto_test_utils needs to be enabled.
Merge internal change: 43570937
Added AbandoningPacket to congestion control to avoid issue with FEC.
Merge internal change: 43570099
Wait infinite (aka wait for next ack) is not handled correctly.
Merge internal change: 43558636
Enable faster stats for QUIC.
Merge internal change: 43557310
Implement QUIC key expansion on the client side. The keys are not being used yet.
Merge internal change: 43515237
Add missing quic_stats files.
Track some connection stats.
Merge internal change: 43506869
Fix bug in WriteQueuedPackets
Merge internal change: 43499600
Small comment change in crypto_handshake's ProcessServerHello method.
Merge internal change: 43448804
R=rch@chromium.org
BUG=
Review URL: https://chromiumcodereview.appspot.com/12806002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@188096 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'crypto/hkdf.cc')
-rw-r--r-- | crypto/hkdf.cc | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/crypto/hkdf.cc b/crypto/hkdf.cc index e621bcb..48babe25 100644 --- a/crypto/hkdf.cc +++ b/crypto/hkdf.cc @@ -72,17 +72,25 @@ HKDF::HKDF(const base::StringPiece& secret, } size_t j = 0; - client_write_key_ = base::StringPiece(reinterpret_cast<char*>(&output_[j]), - key_bytes_to_generate); - j += key_bytes_to_generate; - server_write_key_ = base::StringPiece(reinterpret_cast<char*>(&output_[j]), - key_bytes_to_generate); - j += key_bytes_to_generate; - client_write_iv_ = base::StringPiece(reinterpret_cast<char*>(&output_[j]), - iv_bytes_to_generate); - j += iv_bytes_to_generate; - server_write_iv_ = base::StringPiece(reinterpret_cast<char*>(&output_[j]), - iv_bytes_to_generate); + // On Windows, when the size of output_ is zero, dereference of 0'th element + // results in a crash. C++11 solves this problem by adding a data() getter + // method to std::vector. + if (key_bytes_to_generate > 0) { + client_write_key_ = base::StringPiece(reinterpret_cast<char*>(&output_[j]), + key_bytes_to_generate); + j += key_bytes_to_generate; + server_write_key_ = base::StringPiece(reinterpret_cast<char*>(&output_[j]), + key_bytes_to_generate); + j += key_bytes_to_generate; + } + + if (iv_bytes_to_generate > 0) { + client_write_iv_ = base::StringPiece(reinterpret_cast<char*>(&output_[j]), + iv_bytes_to_generate); + j += iv_bytes_to_generate; + server_write_iv_ = base::StringPiece(reinterpret_cast<char*>(&output_[j]), + iv_bytes_to_generate); + } } HKDF::~HKDF() { |