59 lines
1.4 KiB
C
59 lines
1.4 KiB
C
/* --------------------------------- 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);
|