172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// found in the LICENSE file. 472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#ifndef CRYPTO_SECURE_HASH_H_ 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#define CRYPTO_SECURE_HASH_H_ 772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#pragma once 872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/basictypes.h" 1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace crypto { 1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// A wrapper to calculate secure hashes incrementally, allowing to 1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// be used when the full input is not known in advance. 1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass SecureHash { 1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen public: 1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen enum Algorithm { 1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SHA256, 1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen }; 2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~SecureHash() {} 2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen static SecureHash* Create(Algorithm type); 2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void Update(const void* input, size_t len) = 0; 2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void Finish(void* output, size_t len) = 0; 2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 2772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen protected: 2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SecureHash() {} 2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen private: 3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DISALLOW_COPY_AND_ASSIGN(SecureHash); 3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}; 3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace crypto 3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif // CRYPTO_SECURE_HASH_H_ 37