Index: net/quic/crypto/proof_test.cc |
=================================================================== |
--- net/quic/crypto/proof_test.cc (revision 214032) |
+++ net/quic/crypto/proof_test.cc (working copy) |
@@ -89,68 +89,6 @@ |
#endif // 0 |
} |
-// TestProofVerifierCallback is a simple callback for a ProofVerifier that |
-// signals a TestCompletionCallback when called and stores the results from the |
-// ProofVerifier in pointers passed to the constructor. |
-class TestProofVerifierCallback : public ProofVerifierCallback { |
- public: |
- TestProofVerifierCallback(TestCompletionCallback* comp_callback, |
- bool* ok, |
- std::string* error_details) |
- : comp_callback_(comp_callback), |
- ok_(ok), |
- error_details_(error_details) {} |
- |
- virtual void Run(bool ok, |
- const std::string& error_details, |
- scoped_ptr<ProofVerifyDetails>* details) OVERRIDE { |
- *ok_ = ok; |
- *error_details_ = error_details; |
- |
- comp_callback_->callback().Run(0); |
- } |
- |
- private: |
- TestCompletionCallback* const comp_callback_; |
- bool* const ok_; |
- std::string* const error_details_; |
-}; |
- |
-// RunVerification runs |verifier->VerifyProof| and asserts that the result |
-// matches |expected_ok|. |
-static void RunVerification(ProofVerifier* verifier, |
- const std::string& hostname, |
- const std::string& server_config, |
- const vector<std::string>& certs, |
- const std::string& proof, |
- bool expected_ok) { |
- scoped_ptr<ProofVerifyDetails> details; |
- TestCompletionCallback comp_callback; |
- bool ok; |
- std::string error_details; |
- TestProofVerifierCallback* callback = |
- new TestProofVerifierCallback(&comp_callback, &ok, &error_details); |
- |
- ProofVerifier::Status status = verifier->VerifyProof( |
- hostname, server_config, certs, proof, &error_details, &details, |
- callback); |
- |
- switch (status) { |
- case ProofVerifier::FAILURE: |
- ASSERT_FALSE(expected_ok); |
- ASSERT_NE("", error_details); |
- return; |
- case ProofVerifier::SUCCESS: |
- ASSERT_TRUE(expected_ok); |
- ASSERT_EQ("", error_details); |
- return; |
- case ProofVerifier::PENDING: |
- comp_callback.WaitForResult(); |
- ASSERT_EQ(expected_ok, ok); |
- break; |
- } |
-} |
- |
static string PEMCertFileToDER(const string& file_name) { |
base::FilePath certs_dir = GetTestCertsDirectory(); |
scoped_refptr<X509Certificate> cert = |
@@ -289,26 +227,48 @@ |
for (size_t i = 0; i < signatures.size(); i++) { |
const string& signature = signatures[i]; |
+ int rv; |
+ TestCompletionCallback callback; |
+ rv = verifier->VerifyProof(hostname, server_config, certs, signature, |
+ &error_details, &cert_verify_result, |
+ callback.callback()); |
+ rv = callback.GetResult(rv); |
+ ASSERT_EQ(OK, rv); |
+ ASSERT_EQ("", error_details); |
+ ASSERT_FALSE(IsCertStatusError(cert_verify_result.cert_status)); |
- RunVerification( |
- verifier.get(), hostname, server_config, certs, signature, true); |
- RunVerification( |
- verifier.get(), "foo.com", server_config, certs, signature, false); |
- RunVerification( |
- verifier.get(), hostname, server_config.substr(1, string::npos), |
- certs, signature, false); |
+ rv = verifier->VerifyProof("foo.com", server_config, certs, signature, |
+ &error_details, &cert_verify_result, |
+ callback.callback()); |
+ rv = callback.GetResult(rv); |
+ ASSERT_EQ(ERR_FAILED, rv); |
+ ASSERT_NE("", error_details); |
+ rv = verifier->VerifyProof(hostname, server_config.substr(1, string::npos), |
+ certs, signature, &error_details, |
+ &cert_verify_result, callback.callback()); |
+ rv = callback.GetResult(rv); |
+ ASSERT_EQ(ERR_FAILED, rv); |
+ ASSERT_NE("", error_details); |
+ |
const string corrupt_signature = "1" + signature; |
- RunVerification( |
- verifier.get(), hostname, server_config, certs, corrupt_signature, |
- false); |
+ rv = verifier->VerifyProof(hostname, server_config, certs, |
+ corrupt_signature, &error_details, |
+ &cert_verify_result, callback.callback()); |
+ rv = callback.GetResult(rv); |
+ ASSERT_EQ(ERR_FAILED, rv); |
+ ASSERT_NE("", error_details); |
vector<string> wrong_certs; |
for (size_t i = 1; i < certs.size(); i++) { |
wrong_certs.push_back(certs[i]); |
} |
- RunVerification(verifier.get(), hostname, server_config, wrong_certs, |
- signature, false); |
+ rv = verifier->VerifyProof("foo.com", server_config, wrong_certs, signature, |
+ &error_details, &cert_verify_result, |
+ callback.callback()); |
+ rv = callback.GetResult(rv); |
+ ASSERT_EQ(ERR_FAILED, rv); |
+ ASSERT_NE("", error_details); |
} |
} |
@@ -380,35 +340,60 @@ |
for (size_t i = 0; i < signatures.size(); i++) { |
const string& signature = signatures[i]; |
+ int rv; |
+ TestCompletionCallback callback; |
+ rv = verifier->VerifyProof(hostname, server_config, certs, signature, |
+ &error_details, &cert_verify_result, |
+ callback.callback()); |
+ rv = callback.GetResult(rv); |
+ ASSERT_EQ(OK, rv); |
+ ASSERT_EQ("", error_details); |
+ ASSERT_FALSE(IsCertStatusError(cert_verify_result.cert_status)); |
- RunVerification( |
- verifier.get(), hostname, server_config, certs, signature, true); |
- RunVerification( |
- verifier.get(), "foo.com", server_config, certs, signature, false); |
- RunVerification( |
- verifier.get(), hostname, server_config.substr(1, string::npos), |
- certs, signature, false); |
+ rv = verifier->VerifyProof("foo.com", server_config, certs, signature, |
+ &error_details, &cert_verify_result, |
+ callback.callback()); |
+ rv = callback.GetResult(rv); |
+ ASSERT_EQ(ERR_FAILED, rv); |
+ ASSERT_NE("", error_details); |
+ rv = verifier->VerifyProof(hostname, server_config.substr(1, string::npos), |
+ certs, signature, &error_details, |
+ &cert_verify_result, callback.callback()); |
+ rv = callback.GetResult(rv); |
+ ASSERT_EQ(ERR_FAILED, rv); |
+ ASSERT_NE("", error_details); |
+ |
// An ECDSA signature is DER-encoded. Corrupt the last byte so that the |
// signature can still be DER-decoded correctly. |
string corrupt_signature = signature; |
corrupt_signature[corrupt_signature.size() - 1] += 1; |
- RunVerification( |
- verifier.get(), hostname, server_config, certs, corrupt_signature, |
- false); |
+ rv = verifier->VerifyProof(hostname, server_config, certs, |
+ corrupt_signature, &error_details, |
+ &cert_verify_result, callback.callback()); |
+ rv = callback.GetResult(rv); |
+ ASSERT_EQ(ERR_FAILED, rv); |
+ ASSERT_NE("", error_details); |
// Prepending a "1" makes the DER invalid. |
const string bad_der_signature1 = "1" + signature; |
- RunVerification( |
- verifier.get(), hostname, server_config, certs, bad_der_signature1, |
- false); |
+ rv = verifier->VerifyProof(hostname, server_config, certs, |
+ bad_der_signature1, &error_details, |
+ &cert_verify_result, callback.callback()); |
+ rv = callback.GetResult(rv); |
+ ASSERT_EQ(ERR_FAILED, rv); |
+ ASSERT_NE("", error_details); |
vector<string> wrong_certs; |
for (size_t i = 1; i < certs.size(); i++) { |
wrong_certs.push_back(certs[i]); |
} |
- RunVerification( |
- verifier.get(), hostname, server_config, wrong_certs, signature, false); |
+ rv = verifier->VerifyProof("foo.com", server_config, wrong_certs, signature, |
+ &error_details, &cert_verify_result, |
+ callback.callback()); |
+ rv = callback.GetResult(rv); |
+ ASSERT_EQ(ERR_FAILED, rv); |
+ ASSERT_NE("", error_details); |
} |
} |