summaryrefslogtreecommitdiffstats
path: root/crypto/hkdf.cc
diff options
context:
space:
mode:
authorrtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-14 16:25:33 +0000
committerrtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-14 16:25:33 +0000
commit14e8106ca5036b98170eb83c68fbc873773596a4 (patch)
tree9d41bc22f19a2da72bca94b37b2e40532770e62a /crypto/hkdf.cc
parentce585bf732e8bd85d6aa623c6445f73c5bb89ca4 (diff)
downloadchromium_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.cc30
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() {