Chromium Code Reviews| Index: net/spdy/spdy_session.cc |
| diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc |
| index 0e859c50c9340eac66f1d362052c2821d03de073..119fd9fe04387d35c073fdb066b648a08a911edb 100644 |
| --- a/net/spdy/spdy_session.cc |
| +++ b/net/spdy/spdy_session.cc |
| @@ -31,6 +31,7 @@ |
| #include "net/base/server_bound_cert_service.h" |
| #include "net/http/http_network_session.h" |
| #include "net/http/http_server_properties.h" |
| +#include "net/spdy/spdy_credential_builder.h" |
| #include "net/spdy/spdy_frame_builder.h" |
| #include "net/spdy/spdy_http_utils.h" |
| #include "net/spdy/spdy_protocol.h" |
| @@ -626,42 +627,15 @@ SpdyCredentialControlFrame* SpdySession::CreateCredentialFrame( |
| const std::string& cert, |
| RequestPriority priority) { |
| DCHECK(is_secure_); |
| - unsigned char secret[32]; // 32 bytes from the spec |
| - GetSSLClientSocket()->ExportKeyingMaterial("SPDY certificate proof", |
| - true, origin, |
| - secret, arraysize(secret)); |
| - |
| - // Convert the key string into a vector<unit8> |
| - std::vector<uint8> key_data; |
| - for (size_t i = 0; i < key.length(); i++) { |
| - key_data.push_back(key[i]); |
| - } |
| - |
| - std::vector<uint8> proof; |
| - switch (type) { |
| - case CLIENT_CERT_ECDSA_SIGN: { |
| - base::StringPiece spki_piece; |
| - asn1::ExtractSPKIFromDERCert(cert, &spki_piece); |
| - std::vector<uint8> spki(spki_piece.data(), |
| - spki_piece.data() + spki_piece.size()); |
| - scoped_ptr<crypto::ECPrivateKey> private_key( |
| - crypto::ECPrivateKey::CreateFromEncryptedPrivateKeyInfo( |
| - ServerBoundCertService::kEPKIPassword, key_data, spki)); |
| - scoped_ptr<crypto::ECSignatureCreator> creator( |
| - crypto::ECSignatureCreator::Create(private_key.get())); |
| - creator->Sign(secret, arraysize(secret), &proof); |
| - break; |
| - } |
| - default: |
| - NOTREACHED(); |
| - } |
| + SSLClientSocket* ssl_socket = GetSSLClientSocket(); |
| + DCHECK(ssl_socket); |
| + DCHECK(ssl_socket->WasChannelIDSent()); |
| SpdyCredential credential; |
| - GURL origin_url(origin); |
| - credential.slot = |
| - credential_state_.SetHasCredential(origin_url); |
| - credential.certs.push_back(cert); |
| - credential.proof.assign(proof.begin(), proof.end()); |
| + std::string tls_unique; |
| + ssl_socket->GetTLSUniqueChannelBinding(&tls_unique); |
| + size_t slot = credential_state_.SetHasCredential(GURL(origin)); |
| + SpdyCredentialBuilder::Build(tls_unique, type, key, cert, slot, &credential); |
|
ramant (doing other things)
2012/08/02 00:03:05
nit: should we consider checking errors returned b
jar (doing other things)
2012/08/02 16:21:56
I think you skipped this question somehow. I thin
Ryan Hamilton
2012/08/02 16:42:39
Eeek! You're exactly right, of course. Done.
|
| DCHECK(buffered_spdy_framer_.get()); |
| scoped_ptr<SpdyCredentialControlFrame> credential_frame( |