1*6777b538SAndroid Build Coastguard Worker // Copyright 2013 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include "net/cert/signed_certificate_timestamp.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #include "base/pickle.h" 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Worker namespace net::ct { 10*6777b538SAndroid Build Coastguard Worker operator ()(const scoped_refptr<SignedCertificateTimestamp> & lhs,const scoped_refptr<SignedCertificateTimestamp> & rhs) const11*6777b538SAndroid Build Coastguard Workerbool SignedCertificateTimestamp::LessThan::operator()( 12*6777b538SAndroid Build Coastguard Worker const scoped_refptr<SignedCertificateTimestamp>& lhs, 13*6777b538SAndroid Build Coastguard Worker const scoped_refptr<SignedCertificateTimestamp>& rhs) const { 14*6777b538SAndroid Build Coastguard Worker if (lhs.get() == rhs.get()) 15*6777b538SAndroid Build Coastguard Worker return false; 16*6777b538SAndroid Build Coastguard Worker if (lhs->signature.signature_data != rhs->signature.signature_data) 17*6777b538SAndroid Build Coastguard Worker return lhs->signature.signature_data < rhs->signature.signature_data; 18*6777b538SAndroid Build Coastguard Worker if (lhs->log_id != rhs->log_id) 19*6777b538SAndroid Build Coastguard Worker return lhs->log_id < rhs->log_id; 20*6777b538SAndroid Build Coastguard Worker if (lhs->timestamp != rhs->timestamp) 21*6777b538SAndroid Build Coastguard Worker return lhs->timestamp < rhs->timestamp; 22*6777b538SAndroid Build Coastguard Worker if (lhs->extensions != rhs->extensions) 23*6777b538SAndroid Build Coastguard Worker return lhs->extensions < rhs->extensions; 24*6777b538SAndroid Build Coastguard Worker if (lhs->origin != rhs->origin) 25*6777b538SAndroid Build Coastguard Worker return lhs->origin < rhs->origin; 26*6777b538SAndroid Build Coastguard Worker return lhs->version < rhs->version; 27*6777b538SAndroid Build Coastguard Worker } 28*6777b538SAndroid Build Coastguard Worker 29*6777b538SAndroid Build Coastguard Worker SignedCertificateTimestamp::SignedCertificateTimestamp() = default; 30*6777b538SAndroid Build Coastguard Worker 31*6777b538SAndroid Build Coastguard Worker SignedCertificateTimestamp::~SignedCertificateTimestamp() = default; 32*6777b538SAndroid Build Coastguard Worker Persist(base::Pickle * pickle)33*6777b538SAndroid Build Coastguard Workervoid SignedCertificateTimestamp::Persist(base::Pickle* pickle) { 34*6777b538SAndroid Build Coastguard Worker pickle->WriteInt(version); 35*6777b538SAndroid Build Coastguard Worker pickle->WriteString(log_id); 36*6777b538SAndroid Build Coastguard Worker pickle->WriteInt64(timestamp.ToInternalValue()); 37*6777b538SAndroid Build Coastguard Worker pickle->WriteString(extensions); 38*6777b538SAndroid Build Coastguard Worker pickle->WriteInt(signature.hash_algorithm); 39*6777b538SAndroid Build Coastguard Worker pickle->WriteInt(signature.signature_algorithm); 40*6777b538SAndroid Build Coastguard Worker pickle->WriteString(signature.signature_data); 41*6777b538SAndroid Build Coastguard Worker pickle->WriteInt(origin); 42*6777b538SAndroid Build Coastguard Worker pickle->WriteString(log_description); 43*6777b538SAndroid Build Coastguard Worker } 44*6777b538SAndroid Build Coastguard Worker 45*6777b538SAndroid Build Coastguard Worker // static 46*6777b538SAndroid Build Coastguard Worker scoped_refptr<SignedCertificateTimestamp> CreateFromPickle(base::PickleIterator * iter)47*6777b538SAndroid Build Coastguard WorkerSignedCertificateTimestamp::CreateFromPickle(base::PickleIterator* iter) { 48*6777b538SAndroid Build Coastguard Worker int version; 49*6777b538SAndroid Build Coastguard Worker int64_t timestamp; 50*6777b538SAndroid Build Coastguard Worker int hash_algorithm; 51*6777b538SAndroid Build Coastguard Worker int sig_algorithm; 52*6777b538SAndroid Build Coastguard Worker auto sct = base::MakeRefCounted<SignedCertificateTimestamp>(); 53*6777b538SAndroid Build Coastguard Worker int origin; 54*6777b538SAndroid Build Coastguard Worker // string values are set directly 55*6777b538SAndroid Build Coastguard Worker if (!(iter->ReadInt(&version) && 56*6777b538SAndroid Build Coastguard Worker iter->ReadString(&sct->log_id) && 57*6777b538SAndroid Build Coastguard Worker iter->ReadInt64(×tamp) && 58*6777b538SAndroid Build Coastguard Worker iter->ReadString(&sct->extensions) && 59*6777b538SAndroid Build Coastguard Worker iter->ReadInt(&hash_algorithm) && 60*6777b538SAndroid Build Coastguard Worker iter->ReadInt(&sig_algorithm) && 61*6777b538SAndroid Build Coastguard Worker iter->ReadString(&sct->signature.signature_data) && 62*6777b538SAndroid Build Coastguard Worker iter->ReadInt(&origin) && 63*6777b538SAndroid Build Coastguard Worker iter->ReadString(&sct->log_description))) { 64*6777b538SAndroid Build Coastguard Worker return nullptr; 65*6777b538SAndroid Build Coastguard Worker } 66*6777b538SAndroid Build Coastguard Worker // Now set the rest of the member variables: 67*6777b538SAndroid Build Coastguard Worker sct->version = static_cast<Version>(version); 68*6777b538SAndroid Build Coastguard Worker sct->timestamp = base::Time::FromInternalValue(timestamp); 69*6777b538SAndroid Build Coastguard Worker sct->signature.hash_algorithm = 70*6777b538SAndroid Build Coastguard Worker static_cast<DigitallySigned::HashAlgorithm>(hash_algorithm); 71*6777b538SAndroid Build Coastguard Worker sct->signature.signature_algorithm = 72*6777b538SAndroid Build Coastguard Worker static_cast<DigitallySigned::SignatureAlgorithm>(sig_algorithm); 73*6777b538SAndroid Build Coastguard Worker sct->origin = static_cast<Origin>(origin); 74*6777b538SAndroid Build Coastguard Worker return sct; 75*6777b538SAndroid Build Coastguard Worker } 76*6777b538SAndroid Build Coastguard Worker 77*6777b538SAndroid Build Coastguard Worker SignedEntryData::SignedEntryData() = default; 78*6777b538SAndroid Build Coastguard Worker 79*6777b538SAndroid Build Coastguard Worker SignedEntryData::~SignedEntryData() = default; 80*6777b538SAndroid Build Coastguard Worker Reset()81*6777b538SAndroid Build Coastguard Workervoid SignedEntryData::Reset() { 82*6777b538SAndroid Build Coastguard Worker type = SignedEntryData::LOG_ENTRY_TYPE_X509; 83*6777b538SAndroid Build Coastguard Worker leaf_certificate.clear(); 84*6777b538SAndroid Build Coastguard Worker tbs_certificate.clear(); 85*6777b538SAndroid Build Coastguard Worker } 86*6777b538SAndroid Build Coastguard Worker 87*6777b538SAndroid Build Coastguard Worker DigitallySigned::DigitallySigned() = default; 88*6777b538SAndroid Build Coastguard Worker 89*6777b538SAndroid Build Coastguard Worker DigitallySigned::~DigitallySigned() = default; 90*6777b538SAndroid Build Coastguard Worker SignatureParametersMatch(HashAlgorithm other_hash_algorithm,SignatureAlgorithm other_signature_algorithm) const91*6777b538SAndroid Build Coastguard Workerbool DigitallySigned::SignatureParametersMatch( 92*6777b538SAndroid Build Coastguard Worker HashAlgorithm other_hash_algorithm, 93*6777b538SAndroid Build Coastguard Worker SignatureAlgorithm other_signature_algorithm) const { 94*6777b538SAndroid Build Coastguard Worker return (hash_algorithm == other_hash_algorithm) && 95*6777b538SAndroid Build Coastguard Worker (signature_algorithm == other_signature_algorithm); 96*6777b538SAndroid Build Coastguard Worker } 97*6777b538SAndroid Build Coastguard Worker } // namespace net::ct 98