Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(375)

Side by Side Diff: net/quic/crypto/proof_test.cc

Issue 20898003: Revert 213862 "net: make QUIC ProofVerifier more generic." (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1578/src/
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/quic/crypto/crypto_handshake.cc ('k') | net/quic/crypto/proof_verifier.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/files/file_path.h" 5 #include "base/files/file_path.h"
6 #include "net/base/net_errors.h" 6 #include "net/base/net_errors.h"
7 #include "net/base/test_completion_callback.h" 7 #include "net/base/test_completion_callback.h"
8 #include "net/base/test_data_directory.h" 8 #include "net/base/test_data_directory.h"
9 #include "net/cert/cert_status_flags.h" 9 #include "net/cert/cert_status_flags.h"
10 #include "net/cert/cert_verify_result.h" 10 #include "net/cert/cert_verify_result.h"
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 } 82 }
83 rv = verifier->VerifyProof("foo.com", server_config, wrong_certs, signature, 83 rv = verifier->VerifyProof("foo.com", server_config, wrong_certs, signature,
84 &error_details, &cert_verify_result, 84 &error_details, &cert_verify_result,
85 callback.callback()); 85 callback.callback());
86 rv = callback.GetResult(rv); 86 rv = callback.GetResult(rv);
87 ASSERT_EQ(ERR_FAILED, rv); 87 ASSERT_EQ(ERR_FAILED, rv);
88 ASSERT_NE("", error_details); 88 ASSERT_NE("", error_details);
89 #endif // 0 89 #endif // 0
90 } 90 }
91 91
92 // TestProofVerifierCallback is a simple callback for a ProofVerifier that
93 // signals a TestCompletionCallback when called and stores the results from the
94 // ProofVerifier in pointers passed to the constructor.
95 class TestProofVerifierCallback : public ProofVerifierCallback {
96 public:
97 TestProofVerifierCallback(TestCompletionCallback* comp_callback,
98 bool* ok,
99 std::string* error_details)
100 : comp_callback_(comp_callback),
101 ok_(ok),
102 error_details_(error_details) {}
103
104 virtual void Run(bool ok,
105 const std::string& error_details,
106 scoped_ptr<ProofVerifyDetails>* details) OVERRIDE {
107 *ok_ = ok;
108 *error_details_ = error_details;
109
110 comp_callback_->callback().Run(0);
111 }
112
113 private:
114 TestCompletionCallback* const comp_callback_;
115 bool* const ok_;
116 std::string* const error_details_;
117 };
118
119 // RunVerification runs |verifier->VerifyProof| and asserts that the result
120 // matches |expected_ok|.
121 static void RunVerification(ProofVerifier* verifier,
122 const std::string& hostname,
123 const std::string& server_config,
124 const vector<std::string>& certs,
125 const std::string& proof,
126 bool expected_ok) {
127 scoped_ptr<ProofVerifyDetails> details;
128 TestCompletionCallback comp_callback;
129 bool ok;
130 std::string error_details;
131 TestProofVerifierCallback* callback =
132 new TestProofVerifierCallback(&comp_callback, &ok, &error_details);
133
134 ProofVerifier::Status status = verifier->VerifyProof(
135 hostname, server_config, certs, proof, &error_details, &details,
136 callback);
137
138 switch (status) {
139 case ProofVerifier::FAILURE:
140 ASSERT_FALSE(expected_ok);
141 ASSERT_NE("", error_details);
142 return;
143 case ProofVerifier::SUCCESS:
144 ASSERT_TRUE(expected_ok);
145 ASSERT_EQ("", error_details);
146 return;
147 case ProofVerifier::PENDING:
148 comp_callback.WaitForResult();
149 ASSERT_EQ(expected_ok, ok);
150 break;
151 }
152 }
153
154 static string PEMCertFileToDER(const string& file_name) { 92 static string PEMCertFileToDER(const string& file_name) {
155 base::FilePath certs_dir = GetTestCertsDirectory(); 93 base::FilePath certs_dir = GetTestCertsDirectory();
156 scoped_refptr<X509Certificate> cert = 94 scoped_refptr<X509Certificate> cert =
157 ImportCertFromFile(certs_dir, file_name); 95 ImportCertFromFile(certs_dir, file_name);
158 CHECK_NE(static_cast<X509Certificate*>(NULL), cert); 96 CHECK_NE(static_cast<X509Certificate*>(NULL), cert);
159 97
160 string der_bytes; 98 string der_bytes;
161 CHECK(X509Certificate::GetDEREncoded(cert->os_cert_handle(), &der_bytes)); 99 CHECK(X509Certificate::GetDEREncoded(cert->os_cert_handle(), &der_bytes));
162 return der_bytes; 100 return der_bytes;
163 } 101 }
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 vector<string> signatures(3); 220 vector<string> signatures(3);
283 signatures[0].assign(reinterpret_cast<const char*>(signature_data_0), 221 signatures[0].assign(reinterpret_cast<const char*>(signature_data_0),
284 sizeof(signature_data_0)); 222 sizeof(signature_data_0));
285 signatures[1].assign(reinterpret_cast<const char*>(signature_data_1), 223 signatures[1].assign(reinterpret_cast<const char*>(signature_data_1),
286 sizeof(signature_data_1)); 224 sizeof(signature_data_1));
287 signatures[2].assign(reinterpret_cast<const char*>(signature_data_2), 225 signatures[2].assign(reinterpret_cast<const char*>(signature_data_2),
288 sizeof(signature_data_2)); 226 sizeof(signature_data_2));
289 227
290 for (size_t i = 0; i < signatures.size(); i++) { 228 for (size_t i = 0; i < signatures.size(); i++) {
291 const string& signature = signatures[i]; 229 const string& signature = signatures[i];
230 int rv;
231 TestCompletionCallback callback;
232 rv = verifier->VerifyProof(hostname, server_config, certs, signature,
233 &error_details, &cert_verify_result,
234 callback.callback());
235 rv = callback.GetResult(rv);
236 ASSERT_EQ(OK, rv);
237 ASSERT_EQ("", error_details);
238 ASSERT_FALSE(IsCertStatusError(cert_verify_result.cert_status));
292 239
293 RunVerification( 240 rv = verifier->VerifyProof("foo.com", server_config, certs, signature,
294 verifier.get(), hostname, server_config, certs, signature, true); 241 &error_details, &cert_verify_result,
295 RunVerification( 242 callback.callback());
296 verifier.get(), "foo.com", server_config, certs, signature, false); 243 rv = callback.GetResult(rv);
297 RunVerification( 244 ASSERT_EQ(ERR_FAILED, rv);
298 verifier.get(), hostname, server_config.substr(1, string::npos), 245 ASSERT_NE("", error_details);
299 certs, signature, false); 246
247 rv = verifier->VerifyProof(hostname, server_config.substr(1, string::npos),
248 certs, signature, &error_details,
249 &cert_verify_result, callback.callback());
250 rv = callback.GetResult(rv);
251 ASSERT_EQ(ERR_FAILED, rv);
252 ASSERT_NE("", error_details);
300 253
301 const string corrupt_signature = "1" + signature; 254 const string corrupt_signature = "1" + signature;
302 RunVerification( 255 rv = verifier->VerifyProof(hostname, server_config, certs,
303 verifier.get(), hostname, server_config, certs, corrupt_signature, 256 corrupt_signature, &error_details,
304 false); 257 &cert_verify_result, callback.callback());
258 rv = callback.GetResult(rv);
259 ASSERT_EQ(ERR_FAILED, rv);
260 ASSERT_NE("", error_details);
305 261
306 vector<string> wrong_certs; 262 vector<string> wrong_certs;
307 for (size_t i = 1; i < certs.size(); i++) { 263 for (size_t i = 1; i < certs.size(); i++) {
308 wrong_certs.push_back(certs[i]); 264 wrong_certs.push_back(certs[i]);
309 } 265 }
310 RunVerification(verifier.get(), hostname, server_config, wrong_certs, 266 rv = verifier->VerifyProof("foo.com", server_config, wrong_certs, signature,
311 signature, false); 267 &error_details, &cert_verify_result,
268 callback.callback());
269 rv = callback.GetResult(rv);
270 ASSERT_EQ(ERR_FAILED, rv);
271 ASSERT_NE("", error_details);
312 } 272 }
313 } 273 }
314 274
315 // A known answer test that allows us to test ProofVerifier without a working 275 // A known answer test that allows us to test ProofVerifier without a working
316 // ProofSource. 276 // ProofSource.
317 // TODO(rtenneti): Enable VerifyECDSAKnownAnswerTest on Windows. Disabled this 277 // TODO(rtenneti): Enable VerifyECDSAKnownAnswerTest on Windows. Disabled this
318 // test because X509Certificate::GetPublicKeyInfo is not returning the correct 278 // test because X509Certificate::GetPublicKeyInfo is not returning the correct
319 // type for ECDSA certificates. 279 // type for ECDSA certificates.
320 #if defined(OS_WIN) 280 #if defined(OS_WIN)
321 #define MAYBE_VerifyECDSAKnownAnswerTest DISABLED_VerifyECDSAKnownAnswerTest 281 #define MAYBE_VerifyECDSAKnownAnswerTest DISABLED_VerifyECDSAKnownAnswerTest
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 vector<string> signatures(3); 333 vector<string> signatures(3);
374 signatures[0].assign(reinterpret_cast<const char*>(signature_data_0), 334 signatures[0].assign(reinterpret_cast<const char*>(signature_data_0),
375 sizeof(signature_data_0)); 335 sizeof(signature_data_0));
376 signatures[1].assign(reinterpret_cast<const char*>(signature_data_1), 336 signatures[1].assign(reinterpret_cast<const char*>(signature_data_1),
377 sizeof(signature_data_1)); 337 sizeof(signature_data_1));
378 signatures[2].assign(reinterpret_cast<const char*>(signature_data_2), 338 signatures[2].assign(reinterpret_cast<const char*>(signature_data_2),
379 sizeof(signature_data_2)); 339 sizeof(signature_data_2));
380 340
381 for (size_t i = 0; i < signatures.size(); i++) { 341 for (size_t i = 0; i < signatures.size(); i++) {
382 const string& signature = signatures[i]; 342 const string& signature = signatures[i];
343 int rv;
344 TestCompletionCallback callback;
345 rv = verifier->VerifyProof(hostname, server_config, certs, signature,
346 &error_details, &cert_verify_result,
347 callback.callback());
348 rv = callback.GetResult(rv);
349 ASSERT_EQ(OK, rv);
350 ASSERT_EQ("", error_details);
351 ASSERT_FALSE(IsCertStatusError(cert_verify_result.cert_status));
383 352
384 RunVerification( 353 rv = verifier->VerifyProof("foo.com", server_config, certs, signature,
385 verifier.get(), hostname, server_config, certs, signature, true); 354 &error_details, &cert_verify_result,
386 RunVerification( 355 callback.callback());
387 verifier.get(), "foo.com", server_config, certs, signature, false); 356 rv = callback.GetResult(rv);
388 RunVerification( 357 ASSERT_EQ(ERR_FAILED, rv);
389 verifier.get(), hostname, server_config.substr(1, string::npos), 358 ASSERT_NE("", error_details);
390 certs, signature, false); 359
360 rv = verifier->VerifyProof(hostname, server_config.substr(1, string::npos),
361 certs, signature, &error_details,
362 &cert_verify_result, callback.callback());
363 rv = callback.GetResult(rv);
364 ASSERT_EQ(ERR_FAILED, rv);
365 ASSERT_NE("", error_details);
391 366
392 // An ECDSA signature is DER-encoded. Corrupt the last byte so that the 367 // An ECDSA signature is DER-encoded. Corrupt the last byte so that the
393 // signature can still be DER-decoded correctly. 368 // signature can still be DER-decoded correctly.
394 string corrupt_signature = signature; 369 string corrupt_signature = signature;
395 corrupt_signature[corrupt_signature.size() - 1] += 1; 370 corrupt_signature[corrupt_signature.size() - 1] += 1;
396 RunVerification( 371 rv = verifier->VerifyProof(hostname, server_config, certs,
397 verifier.get(), hostname, server_config, certs, corrupt_signature, 372 corrupt_signature, &error_details,
398 false); 373 &cert_verify_result, callback.callback());
374 rv = callback.GetResult(rv);
375 ASSERT_EQ(ERR_FAILED, rv);
376 ASSERT_NE("", error_details);
399 377
400 // Prepending a "1" makes the DER invalid. 378 // Prepending a "1" makes the DER invalid.
401 const string bad_der_signature1 = "1" + signature; 379 const string bad_der_signature1 = "1" + signature;
402 RunVerification( 380 rv = verifier->VerifyProof(hostname, server_config, certs,
403 verifier.get(), hostname, server_config, certs, bad_der_signature1, 381 bad_der_signature1, &error_details,
404 false); 382 &cert_verify_result, callback.callback());
383 rv = callback.GetResult(rv);
384 ASSERT_EQ(ERR_FAILED, rv);
385 ASSERT_NE("", error_details);
405 386
406 vector<string> wrong_certs; 387 vector<string> wrong_certs;
407 for (size_t i = 1; i < certs.size(); i++) { 388 for (size_t i = 1; i < certs.size(); i++) {
408 wrong_certs.push_back(certs[i]); 389 wrong_certs.push_back(certs[i]);
409 } 390 }
410 RunVerification( 391 rv = verifier->VerifyProof("foo.com", server_config, wrong_certs, signature,
411 verifier.get(), hostname, server_config, wrong_certs, signature, false); 392 &error_details, &cert_verify_result,
393 callback.callback());
394 rv = callback.GetResult(rv);
395 ASSERT_EQ(ERR_FAILED, rv);
396 ASSERT_NE("", error_details);
412 } 397 }
413 } 398 }
414 399
415 } // namespace test 400 } // namespace test
416 } // namespace net 401 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/crypto/crypto_handshake.cc ('k') | net/quic/crypto/proof_verifier.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698