1*6777b538SAndroid Build Coastguard Worker // Copyright 2014 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 #ifndef NET_CERT_SIGNED_TREE_HEAD_H_ 6*6777b538SAndroid Build Coastguard Worker #define NET_CERT_SIGNED_TREE_HEAD_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <stdint.h> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include <iosfwd> 11*6777b538SAndroid Build Coastguard Worker #include <string> 12*6777b538SAndroid Build Coastguard Worker #include <vector> 13*6777b538SAndroid Build Coastguard Worker 14*6777b538SAndroid Build Coastguard Worker #include "base/time/time.h" 15*6777b538SAndroid Build Coastguard Worker #include "net/base/hash_value.h" 16*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h" 17*6777b538SAndroid Build Coastguard Worker #include "net/cert/signed_certificate_timestamp.h" 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker namespace net::ct { 20*6777b538SAndroid Build Coastguard Worker 21*6777b538SAndroid Build Coastguard Worker static const uint8_t kSthRootHashLength = 32; 22*6777b538SAndroid Build Coastguard Worker 23*6777b538SAndroid Build Coastguard Worker // Signed Tree Head as defined in section 3.5. of RFC6962 24*6777b538SAndroid Build Coastguard Worker struct NET_EXPORT SignedTreeHead { 25*6777b538SAndroid Build Coastguard Worker // Version enum in RFC 6962, Section 3.2. Note that while in the current 26*6777b538SAndroid Build Coastguard Worker // RFC the STH and SCT share the versioning scheme, there are plans in 27*6777b538SAndroid Build Coastguard Worker // RFC6962-bis to use separate versions, so using a separate scheme here. 28*6777b538SAndroid Build Coastguard Worker enum Version { V1 = 0, }; 29*6777b538SAndroid Build Coastguard Worker 30*6777b538SAndroid Build Coastguard Worker SignedTreeHead(); 31*6777b538SAndroid Build Coastguard Worker SignedTreeHead(Version version, 32*6777b538SAndroid Build Coastguard Worker const base::Time& timestamp, 33*6777b538SAndroid Build Coastguard Worker uint64_t tree_size, 34*6777b538SAndroid Build Coastguard Worker const char sha256_root_hash[kSthRootHashLength], 35*6777b538SAndroid Build Coastguard Worker const DigitallySigned& signature, 36*6777b538SAndroid Build Coastguard Worker const std::string& log_id); 37*6777b538SAndroid Build Coastguard Worker SignedTreeHead(const SignedTreeHead& other); 38*6777b538SAndroid Build Coastguard Worker ~SignedTreeHead(); 39*6777b538SAndroid Build Coastguard Worker 40*6777b538SAndroid Build Coastguard Worker Version version; 41*6777b538SAndroid Build Coastguard Worker base::Time timestamp; 42*6777b538SAndroid Build Coastguard Worker uint64_t tree_size; 43*6777b538SAndroid Build Coastguard Worker char sha256_root_hash[kSthRootHashLength]; 44*6777b538SAndroid Build Coastguard Worker DigitallySigned signature; 45*6777b538SAndroid Build Coastguard Worker 46*6777b538SAndroid Build Coastguard Worker // Added in RFC6962-bis, Appendix A. Needed to identify which log 47*6777b538SAndroid Build Coastguard Worker // this STH belongs to. 48*6777b538SAndroid Build Coastguard Worker std::string log_id; 49*6777b538SAndroid Build Coastguard Worker }; 50*6777b538SAndroid Build Coastguard Worker 51*6777b538SAndroid Build Coastguard Worker NET_EXPORT void PrintTo(const SignedTreeHead& sth, std::ostream* os); 52*6777b538SAndroid Build Coastguard Worker 53*6777b538SAndroid Build Coastguard Worker NET_EXPORT bool operator==(const SignedTreeHead& lhs, 54*6777b538SAndroid Build Coastguard Worker const SignedTreeHead& rhs); 55*6777b538SAndroid Build Coastguard Worker NET_EXPORT bool operator!=(const SignedTreeHead& lhs, 56*6777b538SAndroid Build Coastguard Worker const SignedTreeHead& rhs); 57*6777b538SAndroid Build Coastguard Worker 58*6777b538SAndroid Build Coastguard Worker } // namespace net::ct 59*6777b538SAndroid Build Coastguard Worker 60*6777b538SAndroid Build Coastguard Worker #endif // NET_CERT_SIGNED_TREE_HEAD_H_ 61