OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "net/quic/crypto/proof_verifier_chromium.h" | 5 #include "net/quic/crypto/proof_verifier_chromium.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 | 358 |
359 bool ok = verifier.VerifyInitRSAPSS( | 359 bool ok = verifier.VerifyInitRSAPSS( |
360 hash_alg, mask_hash_alg, hash_len, | 360 hash_alg, mask_hash_alg, hash_len, |
361 reinterpret_cast<const uint8_t*>(signature.data()), signature.size(), | 361 reinterpret_cast<const uint8_t*>(signature.data()), signature.size(), |
362 reinterpret_cast<const uint8_t*>(spki.data()), spki.size()); | 362 reinterpret_cast<const uint8_t*>(spki.data()), spki.size()); |
363 if (!ok) { | 363 if (!ok) { |
364 DLOG(WARNING) << "VerifyInitRSAPSS failed"; | 364 DLOG(WARNING) << "VerifyInitRSAPSS failed"; |
365 return false; | 365 return false; |
366 } | 366 } |
367 } else if (type == X509Certificate::kPublicKeyTypeECDSA) { | 367 } else if (type == X509Certificate::kPublicKeyTypeECDSA) { |
368 // This is the algorithm ID for ECDSA with SHA-256. Parameters are ABSENT. | 368 if (!verifier.VerifyInit(crypto::SignatureVerifier::ECDSA_SHA256, |
369 // RFC 5758: | 369 reinterpret_cast<const uint8_t*>(signature.data()), |
370 // ecdsa-with-SHA256 OBJECT IDENTIFIER ::= { iso(1) member-body(2) | 370 signature.size(), |
371 // us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 2 } | 371 reinterpret_cast<const uint8_t*>(spki.data()), |
372 // ... | 372 spki.size())) { |
373 // When the ecdsa-with-SHA224, ecdsa-with-SHA256, ecdsa-with-SHA384, or | |
374 // ecdsa-with-SHA512 algorithm identifier appears in the algorithm field | |
375 // as an AlgorithmIdentifier, the encoding MUST omit the parameters | |
376 // field. That is, the AlgorithmIdentifier SHALL be a SEQUENCE of one | |
377 // component, the OID ecdsa-with-SHA224, ecdsa-with-SHA256, ecdsa-with- | |
378 // SHA384, or ecdsa-with-SHA512. | |
379 // See also RFC 5480, Appendix A. | |
380 static const uint8_t kECDSAWithSHA256AlgorithmID[] = { | |
381 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, | |
382 }; | |
383 | |
384 if (!verifier.VerifyInit( | |
385 kECDSAWithSHA256AlgorithmID, sizeof(kECDSAWithSHA256AlgorithmID), | |
386 reinterpret_cast<const uint8_t*>(signature.data()), | |
387 signature.size(), reinterpret_cast<const uint8_t*>(spki.data()), | |
388 spki.size())) { | |
389 DLOG(WARNING) << "VerifyInit failed"; | 373 DLOG(WARNING) << "VerifyInit failed"; |
390 return false; | 374 return false; |
391 } | 375 } |
392 } else { | 376 } else { |
393 LOG(ERROR) << "Unsupported public key type " << type; | 377 LOG(ERROR) << "Unsupported public key type " << type; |
394 return false; | 378 return false; |
395 } | 379 } |
396 | 380 |
397 verifier.VerifyUpdate(reinterpret_cast<const uint8_t*>(kProofSignatureLabel), | 381 verifier.VerifyUpdate(reinterpret_cast<const uint8_t*>(kProofSignatureLabel), |
398 sizeof(kProofSignatureLabel)); | 382 sizeof(kProofSignatureLabel)); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 } | 434 } |
451 return status; | 435 return status; |
452 } | 436 } |
453 | 437 |
454 void ProofVerifierChromium::OnJobComplete(Job* job) { | 438 void ProofVerifierChromium::OnJobComplete(Job* job) { |
455 active_jobs_.erase(job); | 439 active_jobs_.erase(job); |
456 delete job; | 440 delete job; |
457 } | 441 } |
458 | 442 |
459 } // namespace net | 443 } // namespace net |
OLD | NEW |