signed_certificate_timestamp.cc revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cert/signed_certificate_timestamp.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/pickle.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ct { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SignedCertificateTimestamp::LessThan::operator()( 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const scoped_refptr<SignedCertificateTimestamp>& lhs, 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const scoped_refptr<SignedCertificateTimestamp>& rhs) const { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (lhs.get() == rhs.get()) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (lhs->signature.signature_data != rhs->signature.signature_data) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return lhs->signature.signature_data < rhs->signature.signature_data; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (lhs->log_id != rhs->log_id) 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return lhs->log_id < rhs->log_id; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (lhs->timestamp != rhs->timestamp) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return lhs->timestamp < rhs->timestamp; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (lhs->extensions != rhs->extensions) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return lhs->extensions < rhs->extensions; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return lhs->version < rhs->version; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SignedCertificateTimestamp::SignedCertificateTimestamp() {} 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SignedCertificateTimestamp::~SignedCertificateTimestamp() {} 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SignedCertificateTimestamp::Persist(Pickle* pickle) { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(pickle->WriteInt(version)); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(pickle->WriteString(log_id)); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(pickle->WriteInt64(timestamp.ToInternalValue())); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(pickle->WriteString(extensions)); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(pickle->WriteInt(signature.hash_algorithm)); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(pickle->WriteInt(signature.signature_algorithm)); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(pickle->WriteString(signature.signature_data)); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(pickle->WriteInt(origin)); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(pickle->WriteString(log_description)); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scoped_refptr<SignedCertificateTimestamp> 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SignedCertificateTimestamp::CreateFromPickle(PickleIterator* iter) { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int version; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 timestamp; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int hash_algorithm; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int sig_algorithm; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<SignedCertificateTimestamp> sct( 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new SignedCertificateTimestamp()); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int origin; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // string values are set directly 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!(iter->ReadInt(&version) && 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter->ReadString(&sct->log_id) && 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter->ReadInt64(×tamp) && 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter->ReadString(&sct->extensions) && 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter->ReadInt(&hash_algorithm) && 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter->ReadInt(&sig_algorithm) && 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter->ReadString(&sct->signature.signature_data) && 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter->ReadInt(&origin) && 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter->ReadString(&sct->log_description))) { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now set the rest of the member variables: 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sct->version = static_cast<Version>(version); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sct->timestamp = base::Time::FromInternalValue(timestamp); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sct->signature.hash_algorithm = 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<DigitallySigned::HashAlgorithm>(hash_algorithm); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sct->signature.signature_algorithm = 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<DigitallySigned::SignatureAlgorithm>(sig_algorithm); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sct->origin = static_cast<Origin>(origin); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sct; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)LogEntry::LogEntry() {} 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)LogEntry::~LogEntry() {} 81 82void LogEntry::Reset() { 83 type = LogEntry::LOG_ENTRY_TYPE_X509; 84 leaf_certificate.clear(); 85 tbs_certificate.clear(); 86} 87 88DigitallySigned::DigitallySigned() {} 89 90DigitallySigned::~DigitallySigned() {} 91 92} // namespace ct 93 94} // namespace net 95