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