xref: /aosp_15_r20/external/cronet/net/cert/signed_tree_head.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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