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