| Index: net/socket/ssl_client_socket_impl.cc
|
| diff --git a/net/socket/ssl_client_socket_impl.cc b/net/socket/ssl_client_socket_impl.cc
|
| index 0af70d3e93c25de14b49efb57ddb37f3bcda5934..13172790e914d7696f49b3c3cc38912a7bfa74c3 100644
|
| --- a/net/socket/ssl_client_socket_impl.cc
|
| +++ b/net/socket/ssl_client_socket_impl.cc
|
| @@ -78,9 +78,9 @@ const unsigned int kTbExtNum = 24;
|
|
|
| // Token Binding ProtocolVersions supported.
|
| const uint8_t kTbProtocolVersionMajor = 0;
|
| -const uint8_t kTbProtocolVersionMinor = 8;
|
| +const uint8_t kTbProtocolVersionMinor = 10;
|
| const uint8_t kTbMinProtocolVersionMajor = 0;
|
| -const uint8_t kTbMinProtocolVersionMinor = 6;
|
| +const uint8_t kTbMinProtocolVersionMinor = 10;
|
|
|
| bool EVP_MDToPrivateKeyHash(const EVP_MD* md, SSLPrivateKey::Hash* hash) {
|
| switch (EVP_MD_type(md)) {
|
| @@ -487,7 +487,7 @@ SSLClientSocketImpl::SSLClientSocketImpl(
|
| channel_id_service_(context.channel_id_service),
|
| tb_was_negotiated_(false),
|
| tb_negotiated_param_(TB_PARAM_ECDSAP256),
|
| - tb_signed_ekm_map_(10),
|
| + tb_signature_map_(10),
|
| ssl_(NULL),
|
| transport_bio_(NULL),
|
| transport_(std::move(transport_socket)),
|
| @@ -534,16 +534,16 @@ ChannelIDService* SSLClientSocketImpl::GetChannelIDService() const {
|
| return channel_id_service_;
|
| }
|
|
|
| -Error SSLClientSocketImpl::GetSignedEKMForTokenBinding(
|
| - crypto::ECPrivateKey* key,
|
| - std::vector<uint8_t>* out) {
|
| +Error SSLClientSocketImpl::GetTokenBindingSignature(crypto::ECPrivateKey* key,
|
| + TokenBindingType tb_type,
|
| + std::vector<uint8_t>* out) {
|
| // The same key will be used across multiple requests to sign the same value,
|
| // so the signature is cached.
|
| std::string raw_public_key;
|
| if (!key->ExportRawPublicKey(&raw_public_key))
|
| return ERR_FAILED;
|
| - SignedEkmMap::iterator it = tb_signed_ekm_map_.Get(raw_public_key);
|
| - if (it != tb_signed_ekm_map_.end()) {
|
| + auto it = tb_signature_map_.Get(std::make_pair(tb_type, raw_public_key));
|
| + if (it != tb_signature_map_.end()) {
|
| *out = it->second;
|
| return OK;
|
| }
|
| @@ -557,13 +557,13 @@ Error SSLClientSocketImpl::GetSignedEKMForTokenBinding(
|
| return ERR_FAILED;
|
| }
|
|
|
| - if (!SignTokenBindingEkm(
|
| + if (!CreateTokenBindingSignature(
|
| base::StringPiece(reinterpret_cast<char*>(tb_ekm_buf),
|
| sizeof(tb_ekm_buf)),
|
| - key, out))
|
| + tb_type, key, out))
|
| return ERR_FAILED;
|
|
|
| - tb_signed_ekm_map_.Put(raw_public_key, *out);
|
| + tb_signature_map_.Put(std::make_pair(tb_type, raw_public_key), *out);
|
| return OK;
|
| }
|
|
|
| @@ -1174,9 +1174,12 @@ int SSLClientSocketImpl::DoHandshakeComplete(int result) {
|
| }
|
|
|
| // Check that if token binding was negotiated, then extended master secret
|
| - // must also be negotiated.
|
| - if (tb_was_negotiated_ && !SSL_get_extms_support(ssl_))
|
| + // and renegotiation indication must also be negotiated.
|
| + if (tb_was_negotiated_ &&
|
| + !(SSL_get_extms_support(ssl_) &&
|
| + SSL_get_secure_renegotiation_support(ssl_))) {
|
| return ERR_SSL_PROTOCOL_ERROR;
|
| + }
|
|
|
| const uint8_t* alpn_proto = NULL;
|
| unsigned alpn_len = 0;
|
|
|