xref: /aosp_15_r20/external/cronet/net/cert/signed_certificate_timestamp.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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 Worker bool 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 Worker void 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 Worker SignedCertificateTimestamp::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(&timestamp) &&
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 Worker void 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 Worker bool 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