| Index: net/quic/crypto/proof_source_chromium_openssl.cc
|
| diff --git a/net/quic/crypto/proof_source_chromium_openssl.cc b/net/quic/crypto/proof_source_chromium_openssl.cc
|
| index 92e621e41466f3e0158a8243a4796b2fe997dfdb..b03c05d5c495367eb34ab72ef6069b1e2381b4fd 100644
|
| --- a/net/quic/crypto/proof_source_chromium_openssl.cc
|
| +++ b/net/quic/crypto/proof_source_chromium_openssl.cc
|
| @@ -82,6 +82,8 @@ bool ProofSourceChromium::Initialize(const base::FilePath& cert_path,
|
| bool ProofSourceChromium::GetProof(const IPAddress& server_ip,
|
| const string& hostname,
|
| const string& server_config,
|
| + QuicVersion quic_version,
|
| + base::StringPiece chlo_hash,
|
| bool ecdsa_ok,
|
| scoped_refptr<ProofSource::Chain>* out_chain,
|
| string* out_signature,
|
| @@ -91,18 +93,41 @@ bool ProofSourceChromium::GetProof(const IPAddress& server_ip,
|
| crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE);
|
| crypto::ScopedEVP_MD_CTX sign_context(EVP_MD_CTX_create());
|
| EVP_PKEY_CTX* pkey_ctx;
|
| - if (!EVP_DigestSignInit(sign_context.get(), &pkey_ctx, EVP_sha256(), nullptr,
|
| - private_key_->key()) ||
|
| - !EVP_PKEY_CTX_set_rsa_padding(pkey_ctx, RSA_PKCS1_PSS_PADDING) ||
|
| - !EVP_PKEY_CTX_set_rsa_pss_saltlen(pkey_ctx, -1) ||
|
| - !EVP_DigestSignUpdate(
|
| - sign_context.get(),
|
| - reinterpret_cast<const uint8_t*>(kProofSignatureLabel),
|
| - sizeof(kProofSignatureLabel)) ||
|
| - !EVP_DigestSignUpdate(
|
| - sign_context.get(),
|
| - reinterpret_cast<const uint8_t*>(server_config.data()),
|
| - server_config.size())) {
|
| +
|
| + if (quic_version > QUIC_VERSION_30) {
|
| + uint32_t len = chlo_hash.length();
|
| + if (!EVP_DigestSignInit(sign_context.get(), &pkey_ctx, EVP_sha256(),
|
| + nullptr, private_key_->key()) ||
|
| + !EVP_PKEY_CTX_set_rsa_padding(pkey_ctx, RSA_PKCS1_PSS_PADDING) ||
|
| + !EVP_PKEY_CTX_set_rsa_pss_saltlen(pkey_ctx, -1) ||
|
| + !EVP_DigestSignUpdate(
|
| + sign_context.get(),
|
| + reinterpret_cast<const uint8_t*>(kProofSignatureLabel),
|
| + sizeof(kProofSignatureLabel)) ||
|
| + !EVP_DigestSignUpdate(sign_context.get(),
|
| + reinterpret_cast<const uint8_t*>(&len),
|
| + sizeof(len)) ||
|
| + !EVP_DigestSignUpdate(
|
| + sign_context.get(),
|
| + reinterpret_cast<const uint8_t*>(chlo_hash.data()), len) ||
|
| + !EVP_DigestSignUpdate(
|
| + sign_context.get(),
|
| + reinterpret_cast<const uint8_t*>(server_config.data()),
|
| + server_config.size())) {
|
| + return false;
|
| + }
|
| + } else if (!EVP_DigestSignInit(sign_context.get(), &pkey_ctx, EVP_sha256(),
|
| + nullptr, private_key_->key()) ||
|
| + !EVP_PKEY_CTX_set_rsa_padding(pkey_ctx, RSA_PKCS1_PSS_PADDING) ||
|
| + !EVP_PKEY_CTX_set_rsa_pss_saltlen(pkey_ctx, -1) ||
|
| + !EVP_DigestSignUpdate(
|
| + sign_context.get(),
|
| + reinterpret_cast<const uint8_t*>(kProofSignatureLabelOld),
|
| + sizeof(kProofSignatureLabelOld)) ||
|
| + !EVP_DigestSignUpdate(
|
| + sign_context.get(),
|
| + reinterpret_cast<const uint8_t*>(server_config.data()),
|
| + server_config.size())) {
|
| return false;
|
| }
|
|
|
|
|