/* --------------------------------- SHA.H ------------------------------- */

/*
 * NIST Secure Hash Algorithm.
 *
 * Written 2 September 1992, Peter C. Gutmann.
 * This implementation placed in the public domain.
 *
 * Modified 1 June 1993, Colin Plumb.
 * Renamed to SHA and comments updated a bit 1 November 1995, Colin Plumb.
 * These modifications placed in the public domain.
 *
 * Comments to pgut1@cs.aukuni.ac.nz
 */

/* Typedefs for various word sizes */
#include "types.h"

/*
 * Since 64-bit machines are the wave of the future, we may as well
 * support them directly.
 */

/* The SHA block size and message digest sizes, in bytes */

#define SHA_BLOCKSIZE	64
#define SHA_DIGESTSIZE	20

/*
 * The structure for storing SHA info.
 * data[] is placed first in case offsets of 0 are faster
 * for some reason; it's the most often accessed field.
 */

struct SHAContext {
	word32 data[ 16 ];		/* SHA data buffer */
	word32 digest[ 5 ];		/* Message digest */
#ifdef HAVE64
	word64 count;
#else
	word32 countHi, countLo;	/* 64-bit byte count */
#endif
};

/* Which standard?  FIPS 180 or FIPS 180.1? */

#define SHA_VERSION 1

/* Whether the machine is little-endian or not */

#if !defined(BIG_ENDIAN) && !defined(LITTLE_ENDIAN)
#define BIG_ENDIAN 1
#endif

void shaInit(struct SHAContext *sha);
void shaTransform(struct SHAContext *sha);
void shaUpdate(struct SHAContext *sha, word8 const *buffer, unsigned count);
void shaFinal(struct SHAContext *shaInfo, word8 *hash);