OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/quic/core/quic_crypto_stream.h" | 5 #include "net/quic/core/quic_crypto_stream.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/strings/string_piece.h" | 9 #include "base/strings/string_piece.h" |
10 #include "net/quic/core/crypto/crypto_handshake.h" | 10 #include "net/quic/core/crypto/crypto_handshake.h" |
11 #include "net/quic/core/crypto/crypto_utils.h" | 11 #include "net/quic/core/crypto/crypto_utils.h" |
12 #include "net/quic/core/quic_connection.h" | 12 #include "net/quic/core/quic_connection.h" |
13 #include "net/quic/core/quic_flags.h" | 13 #include "net/quic/core/quic_flags.h" |
14 #include "net/quic/core/quic_session.h" | 14 #include "net/quic/core/quic_session.h" |
15 #include "net/quic/core/quic_utils.h" | 15 #include "net/quic/core/quic_utils.h" |
16 | 16 |
17 using std::string; | 17 using std::string; |
18 using base::StringPiece; | 18 using base::StringPiece; |
19 using net::SpdyPriority; | 19 using net::SpdyPriority; |
20 | 20 |
21 namespace net { | 21 namespace net { |
22 | 22 |
23 #define ENDPOINT \ | 23 #define ENDPOINT \ |
24 (session()->perspective() == Perspective::IS_SERVER ? "Server: " : "Client:" \ | 24 (session()->perspective() == Perspective::IS_SERVER ? "Server: " : "Client:" \ |
25 " ") | 25 " ") |
26 | 26 |
27 QuicCryptoStream::QuicCryptoStream(QuicSession* session) | 27 QuicCryptoStream::QuicCryptoStream(QuicSession* session) |
28 : ReliableQuicStream(kCryptoStreamId, session), | 28 : ReliableQuicStream(kCryptoStreamId, session), |
29 encryption_established_(false), | 29 encryption_established_(false), |
30 handshake_confirmed_(false) { | 30 handshake_confirmed_(false), |
| 31 crypto_negotiated_params_(new QuicCryptoNegotiatedParameters) { |
31 crypto_framer_.set_visitor(this); | 32 crypto_framer_.set_visitor(this); |
32 // The crypto stream is exempt from connection level flow control. | 33 // The crypto stream is exempt from connection level flow control. |
33 DisableConnectionFlowControlForThisStream(); | 34 DisableConnectionFlowControlForThisStream(); |
34 } | 35 } |
35 | 36 |
| 37 QuicCryptoStream::~QuicCryptoStream() {} |
| 38 |
36 // static | 39 // static |
37 QuicByteCount QuicCryptoStream::CryptoMessageFramingOverhead( | 40 QuicByteCount QuicCryptoStream::CryptoMessageFramingOverhead( |
38 QuicVersion version) { | 41 QuicVersion version) { |
39 return QuicPacketCreator::StreamFramePacketOverhead( | 42 return QuicPacketCreator::StreamFramePacketOverhead( |
40 version, PACKET_8BYTE_CONNECTION_ID, | 43 version, PACKET_8BYTE_CONNECTION_ID, |
41 /*include_version=*/true, | 44 /*include_version=*/true, |
42 /*include_path_id=*/true, | 45 /*include_path_id=*/true, |
43 /*include_diversification_nonce=*/true, PACKET_1BYTE_PACKET_NUMBER, | 46 /*include_diversification_nonce=*/true, PACKET_1BYTE_PACKET_NUMBER, |
44 /*offset=*/0); | 47 /*offset=*/0); |
45 } | 48 } |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
91 bool QuicCryptoStream::ExportKeyingMaterial(StringPiece label, | 94 bool QuicCryptoStream::ExportKeyingMaterial(StringPiece label, |
92 StringPiece context, | 95 StringPiece context, |
93 size_t result_len, | 96 size_t result_len, |
94 string* result) const { | 97 string* result) const { |
95 if (!handshake_confirmed()) { | 98 if (!handshake_confirmed()) { |
96 DLOG(ERROR) << "ExportKeyingMaterial was called before forward-secure" | 99 DLOG(ERROR) << "ExportKeyingMaterial was called before forward-secure" |
97 << "encryption was established."; | 100 << "encryption was established."; |
98 return false; | 101 return false; |
99 } | 102 } |
100 return CryptoUtils::ExportKeyingMaterial( | 103 return CryptoUtils::ExportKeyingMaterial( |
101 crypto_negotiated_params_.subkey_secret, label, context, result_len, | 104 crypto_negotiated_params_->subkey_secret, label, context, result_len, |
102 result); | 105 result); |
103 } | 106 } |
104 | 107 |
105 bool QuicCryptoStream::ExportTokenBindingKeyingMaterial(string* result) const { | 108 bool QuicCryptoStream::ExportTokenBindingKeyingMaterial(string* result) const { |
106 if (!encryption_established()) { | 109 if (!encryption_established()) { |
107 QUIC_BUG << "ExportTokenBindingKeyingMaterial was called before initial" | 110 QUIC_BUG << "ExportTokenBindingKeyingMaterial was called before initial" |
108 << "encryption was established."; | 111 << "encryption was established."; |
109 return false; | 112 return false; |
110 } | 113 } |
111 return CryptoUtils::ExportKeyingMaterial( | 114 return CryptoUtils::ExportKeyingMaterial( |
112 crypto_negotiated_params_.initial_subkey_secret, "EXPORTER-Token-Binding", | 115 crypto_negotiated_params_->initial_subkey_secret, |
| 116 "EXPORTER-Token-Binding", |
113 /* context= */ "", 32, result); | 117 /* context= */ "", 32, result); |
114 } | 118 } |
115 | 119 |
116 const QuicCryptoNegotiatedParameters& | 120 const QuicCryptoNegotiatedParameters& |
117 QuicCryptoStream::crypto_negotiated_params() const { | 121 QuicCryptoStream::crypto_negotiated_params() const { |
118 return crypto_negotiated_params_; | 122 return *crypto_negotiated_params_; |
119 } | 123 } |
120 | 124 |
121 } // namespace net | 125 } // namespace net |
OLD | NEW |