// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef EXTENSIONS_BROWSER_COMPUTED_HASHES_H_ #define EXTENSIONS_BROWSER_COMPUTED_HASHES_H_ #include #include #include #include #include "base/memory/scoped_ptr.h" namespace base { class FilePath; class ListValue; } namespace extensions { // A pair of classes for serialization of a set of SHA256 block hashes computed // over the files inside an extension. class ComputedHashes { public: class Reader { public: Reader(); ~Reader(); bool InitFromFile(const base::FilePath& path); // The block size and hashes for |relative_path| will be copied into the // out parameters. bool GetHashes(const base::FilePath& relative_path, int* block_size, std::vector* hashes); private: typedef std::pair > HashInfo; // This maps a relative path to a pair of (block size, hashes) std::map data_; }; class Writer { public: Writer(); ~Writer(); // Adds hashes for |relative_path|. Should not be called more than once // for a given |relative_path|. void AddHashes(const base::FilePath& relative_path, int block_size, const std::vector& hashes); bool WriteToFile(const base::FilePath& path); private: // Each element of this list contains the path and block hashes for one // file. scoped_ptr file_list_; }; // Computes the SHA256 hash of each |block_size| chunk in |contents|, placing // the results into |hashes|. static void ComputeHashesForContent(const std::string& contents, size_t block_size, std::vector* hashes); }; } // namespace extensions #endif // EXTENSIONS_BROWSER_COMPUTED_HASHES_H_