/* Copyright (C) 2010 The Chromium OS Authors. All rights reserved.
 * Use of this source code is governed by the GPL v2 license that can
 * be found in the LICENSE file.
 * 
 * Parts of this file are derived from the Linux kernel from the file with
 * the same name and path under include/.
 */
#ifndef VERITY_INCLUDE_LINUX_CRYPTO_H_
#define VERITY_INCLUDE_LINUX_CRYPTO_H_

#include <linux/types.h>
#include <openssl/evp.h>

#define CRYPTO_MAX_ALG_NAME 64
struct hash_tfm {
	const EVP_MD *impl;
	EVP_MD_CTX ctx;
};

struct hash_desc {
	struct hash_tfm *tfm;
};

struct scatterlist;

struct hash_tfm *crypto_alloc_hash(const char *alg_name, int a, int b);
void crypto_free_hash(struct hash_tfm *tfm);
unsigned int crypto_hash_digestsize(struct hash_tfm *tfm);
int crypto_hash_init(struct hash_desc *h);
int crypto_hash_digest(struct hash_desc *h, struct scatterlist *sg,
		       unsigned int sz, u8 *dst);
int crypto_hash_update(struct hash_desc *h, struct scatterlist *sg,
		       unsigned int size);
int crypto_hash_final(struct hash_desc *h, u8 *dst);

#endif  /* VERITY_INCLUDE_LINUX_CRYPTO_H_ */
