| // Copyright (c) 2009 The Chromium OS 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 CHROMEOS_PLATFORM_UPDATE_ENGINE_OMAHA_HASH_CALCULATOR_H__ |
| #define CHROMEOS_PLATFORM_UPDATE_ENGINE_OMAHA_HASH_CALCULATOR_H__ |
| |
| #include <string> |
| #include <vector> |
| #include <openssl/sha.h> |
| #include "base/basictypes.h" |
| |
| // Omaha uses base64 encoded SHA-1 as the hash. This class provides a simple |
| // wrapper around OpenSSL providing such a formatted hash of data passed in. |
| // The methods of this class must be called in a very specific order: |
| // First the ctor (of course), then 0 or more calls to Update(), then |
| // Finalize(), then 0 or more calls to hash(). |
| |
| namespace chromeos_update_engine { |
| |
| class OmahaHashCalculator { |
| public: |
| OmahaHashCalculator(); |
| |
| // Update is called with all of the data that should be hashed in order. |
| // Update will read |length| bytes of |data| |
| void Update(const char* data, size_t length); |
| |
| // Call Finalize() when all data has been passed in. This method tells |
| // OpenSSl that no more data will come in and base64 encodes the resulting |
| // hash. |
| void Finalize(); |
| |
| // Gets the hash. Finalize() must have been called. |
| const std::string& hash() const { |
| CHECK(!hash_.empty()) << "Call Finalize() first"; |
| return hash_; |
| } |
| |
| // Used by tests |
| static std::string OmahaHashOfBytes(const void* data, size_t length); |
| static std::string OmahaHashOfString(const std::string& str); |
| static std::string OmahaHashOfData(const std::vector<char>& data); |
| |
| private: |
| // If non-empty, the final base64 encoded hash. Will only be set to |
| // non-empty when Finalize is called. |
| std::string hash_; |
| |
| // The hash state used by OpenSSL |
| SHA_CTX ctx_; |
| DISALLOW_COPY_AND_ASSIGN(OmahaHashCalculator); |
| }; |
| |
| } // namespace chromeos_update_engine |
| |
| #endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_OMAHA_HASH_CALCULATOR_H__ |