Chromium Code Reviews| Index: net/cert/ct_log_verifier.cc |
| diff --git a/net/cert/ct_log_verifier.cc b/net/cert/ct_log_verifier.cc |
| index 1c9374dfd941baf7bcff7bad5cfa8fbda633f788..d21999a50991cac780e86648c633c263fdb2e58f 100644 |
| --- a/net/cert/ct_log_verifier.cc |
| +++ b/net/cert/ct_log_verifier.cc |
| @@ -6,6 +6,7 @@ |
| #include "base/logging.h" |
| #include "net/cert/ct_serialization.h" |
| +#include "net/cert/signed_tree_head.h" |
| namespace net { |
| @@ -26,15 +27,7 @@ bool CTLogVerifier::Verify(const ct::LogEntry& entry, |
| return false; |
| } |
| - if (sct.signature.hash_algorithm != hash_algorithm_) { |
| - DVLOG(1) << "Mismatched hash algorithm. Expected " << hash_algorithm_ |
| - << ", got " << sct.signature.hash_algorithm << "."; |
| - return false; |
| - } |
| - |
| - if (sct.signature.signature_algorithm != signature_algorithm_) { |
| - DVLOG(1) << "Mismatched sig algorithm. Expected " << signature_algorithm_ |
| - << ", got " << sct.signature.signature_algorithm << "."; |
| + if (!SignatureParametersMatch(sct.signature)) { |
| return false; |
| } |
| @@ -53,4 +46,35 @@ bool CTLogVerifier::Verify(const ct::LogEntry& entry, |
| return VerifySignature(serialized_data, sct.signature.signature_data); |
| } |
| +bool CTLogVerifier::SetSignedTreeHead(scoped_ptr<ct::SignedTreeHead> sth) { |
| + if (!SignatureParametersMatch(sth->signature)) { |
| + return false; |
| + } |
|
Ryan Sleevi
2014/04/09 18:23:11
nit: no braces here (or on 30/32), consistent with
Eran Messeri
2014/04/10 21:08:29
Done.
|
| + |
| + std::string serialized_data; |
| + ct::EncodeTreeHeadSignature(*sth.get(), &serialized_data); |
| + if (VerifySignature(serialized_data, sth->signature.signature_data)) { |
| + sth_.reset(sth.release()); |
| + return true; |
| + } |
| + return false; |
| +} |
| + |
| +bool CTLogVerifier::SignatureParametersMatch( |
| + const ct::DigitallySigned& signature) { |
| + if (signature.hash_algorithm != hash_algorithm_) { |
| + DVLOG(1) << "Mismatched hash algorithm. Expected " << hash_algorithm_ |
| + << ", got " << signature.hash_algorithm << "."; |
| + return false; |
| + } |
| + |
| + if (signature.signature_algorithm != signature_algorithm_) { |
| + DVLOG(1) << "Mismatched sig algorithm. Expected " << signature_algorithm_ |
| + << ", got " << signature.signature_algorithm << "."; |
| + return false; |
| + } |
| + |
| + return true; |
| +} |
| + |
| } // namespace net |