Commit 8bb19a10 authored by Ryan Hamilton's avatar Ryan Hamilton Committed by Commit Bot

Add a CreateDefaultContext() method to ProofVerifier

Add a CreateDefaultContext() method to QUIC's ProofVerifier
interface which allows a proof verifier to supply a valid,
but generic context.

Applications, like Chrome, will create per-connection contexts
based on the requests which initiate them. But this method
allows a generic context to be used by the toy client and
reduces code diffs.

Merge internal change: 203811282

Change-Id: I051a87bfded65597fa2bd4a74203f74c84f336d9
Reviewed-on: https://chromium-review.googlesource.com/1130945
Commit-Queue: Ryan Hamilton <rch@chromium.org>
Reviewed-by: default avatarZhongyi Shi <zhongyi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#577239}
parent 779569a6
......@@ -586,6 +586,7 @@ quic::QuicAsyncStatus ProofVerifierChromium::VerifyProof(
std::unique_ptr<quic::ProofVerifyDetails>* verify_details,
std::unique_ptr<quic::ProofVerifierCallback> callback) {
if (!verify_context) {
DLOG(FATAL) << "Missing proof verify context";
*error_details = "Missing context";
return quic::QUIC_FAILURE;
}
......@@ -631,6 +632,12 @@ quic::QuicAsyncStatus ProofVerifierChromium::VerifyCertChain(
return status;
}
std::unique_ptr<quic::ProofVerifyContext>
ProofVerifierChromium::CreateDefaultContext() {
return std::make_unique<ProofVerifyContextChromium>(0,
net::NetLogWithSource());
}
void ProofVerifierChromium::OnJobComplete(Job* job) {
active_jobs_.erase(job);
}
......
......@@ -97,6 +97,7 @@ class NET_EXPORT_PRIVATE ProofVerifierChromium : public quic::ProofVerifier {
std::string* error_details,
std::unique_ptr<quic::ProofVerifyDetails>* verify_details,
std::unique_ptr<quic::ProofVerifierCallback> callback) override;
std::unique_ptr<quic::ProofVerifyContext> CreateDefaultContext() override;
private:
class Job;
......
......@@ -107,6 +107,11 @@ class QUIC_EXPORT_PRIVATE ProofVerifier {
QuicString* error_details,
std::unique_ptr<ProofVerifyDetails>* details,
std::unique_ptr<ProofVerifierCallback> callback) = 0;
// Returns a ProofVerifyContext instance which can be use for subsequent
// verifications. Applications may chose create a different context and
// supply it for verifications instead.
virtual std::unique_ptr<ProofVerifyContext> CreateDefaultContext() = 0;
};
} // namespace quic
......
......@@ -131,7 +131,7 @@ std::unique_ptr<QuicCryptoClientStreamBase>
QuicSpdyClientSession::CreateQuicCryptoStream() {
return QuicMakeUnique<QuicCryptoClientStream>(
server_id_, this,
new net::ProofVerifyContextChromium(0, net::NetLogWithSource()),
crypto_config_->proof_verifier()->CreateDefaultContext().release(),
crypto_config_, this);
}
......
......@@ -59,6 +59,10 @@ class FakeProofVerifier : public ProofVerifier {
return QUIC_PENDING;
}
std::unique_ptr<ProofVerifyContext> CreateDefaultContext() override {
return nullptr;
}
void Activate() { active_ = true; }
size_t NumPendingCallbacks() const { return pending_ops_.size(); }
......
......@@ -96,6 +96,10 @@ class InsecureProofVerifier : public ProofVerifier {
std::unique_ptr<ProofVerifierCallback> callback) override {
return QUIC_SUCCESS;
}
std::unique_ptr<ProofVerifyContext> CreateDefaultContext() override {
return nullptr;
}
};
} // namespace
......
......@@ -229,6 +229,10 @@ class FakeProofVerifier : public ProofVerifier {
return success_ ? QUIC_SUCCESS : QUIC_FAILURE;
}
std::unique_ptr<ProofVerifyContext> CreateDefaultContext() override {
return nullptr;
}
private:
// Whether or not proof verification succeeds.
bool success_;
......
......@@ -98,6 +98,10 @@ class RecordingProofVerifier : public ProofVerifier {
return QUIC_SUCCESS;
}
std::unique_ptr<ProofVerifyContext> CreateDefaultContext() override {
return verifier_->CreateDefaultContext();
}
const string& common_name() const { return common_name_; }
const string& cert_sct() const { return cert_sct_; }
......
......@@ -135,6 +135,9 @@ class FakeProofVerifier : public ProofVerifier {
std::unique_ptr<quic::ProofVerifierCallback> /*callback*/) override {
return quic::QUIC_SUCCESS;
}
std::unique_ptr<quic::ProofVerifyContext> CreateDefaultContext() override {
return nullptr;
}
};
int main(int argc, char* argv[]) {
......
......@@ -132,6 +132,10 @@ class FakeProofVerifier : public quic::ProofVerifier {
std::unique_ptr<quic::ProofVerifierCallback> callback) override {
return quic::QUIC_SUCCESS;
}
std::unique_ptr<quic::ProofVerifyContext> CreateDefaultContext() override {
return nullptr;
}
};
int main(int argc, char* argv[]) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment