xref: /aosp_15_r20/external/cronet/net/cert/signed_tree_head.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2016 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_tree_head.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include <string.h>
8*6777b538SAndroid Build Coastguard Worker 
9*6777b538SAndroid Build Coastguard Worker #include <ostream>
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker #include "base/strings/string_number_conversions.h"
12*6777b538SAndroid Build Coastguard Worker 
13*6777b538SAndroid Build Coastguard Worker namespace net::ct {
14*6777b538SAndroid Build Coastguard Worker 
15*6777b538SAndroid Build Coastguard Worker SignedTreeHead::SignedTreeHead() = default;
16*6777b538SAndroid Build Coastguard Worker 
SignedTreeHead(Version version,const base::Time & timestamp,uint64_t tree_size,const char sha256_root_hash[kSthRootHashLength],const DigitallySigned & signature,const std::string & log_id)17*6777b538SAndroid Build Coastguard Worker SignedTreeHead::SignedTreeHead(Version version,
18*6777b538SAndroid Build Coastguard Worker                                const base::Time& timestamp,
19*6777b538SAndroid Build Coastguard Worker                                uint64_t tree_size,
20*6777b538SAndroid Build Coastguard Worker                                const char sha256_root_hash[kSthRootHashLength],
21*6777b538SAndroid Build Coastguard Worker                                const DigitallySigned& signature,
22*6777b538SAndroid Build Coastguard Worker                                const std::string& log_id)
23*6777b538SAndroid Build Coastguard Worker     : version(version),
24*6777b538SAndroid Build Coastguard Worker       timestamp(timestamp),
25*6777b538SAndroid Build Coastguard Worker       tree_size(tree_size),
26*6777b538SAndroid Build Coastguard Worker       signature(signature),
27*6777b538SAndroid Build Coastguard Worker       log_id(log_id) {
28*6777b538SAndroid Build Coastguard Worker   memcpy(this->sha256_root_hash, sha256_root_hash, kSthRootHashLength);
29*6777b538SAndroid Build Coastguard Worker }
30*6777b538SAndroid Build Coastguard Worker 
31*6777b538SAndroid Build Coastguard Worker SignedTreeHead::SignedTreeHead(const SignedTreeHead& other) = default;
32*6777b538SAndroid Build Coastguard Worker 
33*6777b538SAndroid Build Coastguard Worker SignedTreeHead::~SignedTreeHead() = default;
34*6777b538SAndroid Build Coastguard Worker 
PrintTo(const SignedTreeHead & sth,std::ostream * os)35*6777b538SAndroid Build Coastguard Worker void PrintTo(const SignedTreeHead& sth, std::ostream* os) {
36*6777b538SAndroid Build Coastguard Worker   (*os) << "{\n"
37*6777b538SAndroid Build Coastguard Worker         << "\t\"version\": " << sth.version << ",\n"
38*6777b538SAndroid Build Coastguard Worker         << "\t\"timestamp\": " << sth.timestamp << ",\n"
39*6777b538SAndroid Build Coastguard Worker         << "\t\"tree_size\": " << sth.tree_size << ",\n"
40*6777b538SAndroid Build Coastguard Worker         << "\t\"sha256_root_hash\": \""
41*6777b538SAndroid Build Coastguard Worker         << base::HexEncode(sth.sha256_root_hash, kSthRootHashLength)
42*6777b538SAndroid Build Coastguard Worker         << "\",\n\t\"log_id\": \"" << base::HexEncode(sth.log_id) << "\"\n"
43*6777b538SAndroid Build Coastguard Worker         << "}";
44*6777b538SAndroid Build Coastguard Worker }
45*6777b538SAndroid Build Coastguard Worker 
operator ==(const SignedTreeHead & lhs,const SignedTreeHead & rhs)46*6777b538SAndroid Build Coastguard Worker bool operator==(const SignedTreeHead& lhs, const SignedTreeHead& rhs) {
47*6777b538SAndroid Build Coastguard Worker   return std::tie(lhs.version, lhs.timestamp, lhs.tree_size, lhs.log_id) ==
48*6777b538SAndroid Build Coastguard Worker              std::tie(rhs.version, rhs.timestamp, rhs.tree_size, rhs.log_id) &&
49*6777b538SAndroid Build Coastguard Worker          memcmp(lhs.sha256_root_hash, rhs.sha256_root_hash,
50*6777b538SAndroid Build Coastguard Worker                 kSthRootHashLength) == 0 &&
51*6777b538SAndroid Build Coastguard Worker          lhs.signature.SignatureParametersMatch(
52*6777b538SAndroid Build Coastguard Worker              rhs.signature.hash_algorithm, rhs.signature.signature_algorithm) &&
53*6777b538SAndroid Build Coastguard Worker          lhs.signature.signature_data == rhs.signature.signature_data;
54*6777b538SAndroid Build Coastguard Worker }
55*6777b538SAndroid Build Coastguard Worker 
operator !=(const SignedTreeHead & lhs,const SignedTreeHead & rhs)56*6777b538SAndroid Build Coastguard Worker bool operator!=(const SignedTreeHead& lhs, const SignedTreeHead& rhs) {
57*6777b538SAndroid Build Coastguard Worker   return !(lhs == rhs);
58*6777b538SAndroid Build Coastguard Worker }
59*6777b538SAndroid Build Coastguard Worker 
60*6777b538SAndroid Build Coastguard Worker }  // namespace net::ct
61