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 #ifndef NET_CERT_MERKLE_AUDIT_PROOF_H_ 6*6777b538SAndroid Build Coastguard Worker #define NET_CERT_MERKLE_AUDIT_PROOF_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 <string> 11*6777b538SAndroid Build Coastguard Worker #include <vector> 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h" 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker namespace net::ct { 16*6777b538SAndroid Build Coastguard Worker 17*6777b538SAndroid Build Coastguard Worker // Returns the length of the audit path for a leaf at |leaf_index| in a Merkle 18*6777b538SAndroid Build Coastguard Worker // tree containing |tree_size| leaves. 19*6777b538SAndroid Build Coastguard Worker // The |leaf_index| must be less than the |tree_size|. 20*6777b538SAndroid Build Coastguard Worker NET_EXPORT uint64_t CalculateAuditPathLength(uint64_t leaf_index, 21*6777b538SAndroid Build Coastguard Worker uint64_t tree_size); 22*6777b538SAndroid Build Coastguard Worker 23*6777b538SAndroid Build Coastguard Worker // Audit proof for a Merkle tree leaf, as defined in section 2.1.1. of RFC6962. 24*6777b538SAndroid Build Coastguard Worker struct NET_EXPORT MerkleAuditProof { 25*6777b538SAndroid Build Coastguard Worker MerkleAuditProof(); 26*6777b538SAndroid Build Coastguard Worker MerkleAuditProof(const MerkleAuditProof& other); 27*6777b538SAndroid Build Coastguard Worker MerkleAuditProof(uint64_t leaf_index, 28*6777b538SAndroid Build Coastguard Worker uint64_t tree_size, 29*6777b538SAndroid Build Coastguard Worker const std::vector<std::string>& audit_path); 30*6777b538SAndroid Build Coastguard Worker ~MerkleAuditProof(); 31*6777b538SAndroid Build Coastguard Worker 32*6777b538SAndroid Build Coastguard Worker // Index of the tree leaf in the log. 33*6777b538SAndroid Build Coastguard Worker // Must be provided when fetching the proof from the log. 34*6777b538SAndroid Build Coastguard Worker uint64_t leaf_index = 0; 35*6777b538SAndroid Build Coastguard Worker 36*6777b538SAndroid Build Coastguard Worker // The proof works only in conjunction with an STH for this tree size. 37*6777b538SAndroid Build Coastguard Worker // Must be provided when fetching the proof from the log. 38*6777b538SAndroid Build Coastguard Worker uint64_t tree_size = 0; 39*6777b538SAndroid Build Coastguard Worker 40*6777b538SAndroid Build Coastguard Worker // Audit path nodes. 41*6777b538SAndroid Build Coastguard Worker // Using the leaf hash and these nodes, the STH hash can be reconstructed to 42*6777b538SAndroid Build Coastguard Worker // prove that leaf was included in the log's tree. 43*6777b538SAndroid Build Coastguard Worker std::vector<std::string> nodes; 44*6777b538SAndroid Build Coastguard Worker }; 45*6777b538SAndroid Build Coastguard Worker 46*6777b538SAndroid Build Coastguard Worker } // namespace net::ct 47*6777b538SAndroid Build Coastguard Worker 48*6777b538SAndroid Build Coastguard Worker #endif // NET_CERT_MERKLE_AUDIT_PROOF_H_ 49