--- generic/sha.c	Wed Aug  9 15:13:18 2000
+++ generic/sha.c	Fri Feb  8 11:22:17 2002
@@ -30,34 +30,6 @@
 #include "transformInt.h"
 
-#ifndef WORDS_BIGENDIAN
-#define LITTLE_ENDIAN
-#endif
-
-#include "sha/sha.h"
-
-/*
- * Generator description
- * ---------------------
- *
- * The SHA alogrithm is used to compute a cryptographically strong
- * message digest.
- */
-
-#define DIGEST_SIZE               (SHA_DIGESTSIZE)
-#define CTX_TYPE                  sha_trf_info
-#define CHUNK_SIZE                256
-
-/* We cannot use SHA_INFO directly as context cause 'sha_update' handles
- * a chunk smaller then CHUNK_SIZE bytes correct if and only if it is
- * the last chunk. This forces us to buffer the incoming bytes till a chunk
- * is complete before doing an update.
- */
-
-typedef struct _sha_trf_info {
-  SHA_INFO       s;
-  unsigned short count;
-  unsigned char  buf [CHUNK_SIZE]; /* SHA block */
-} sha_trf_info;
-
+#include <sys/types.h>
+#include <sha.h>
 
 /*
@@ -76,9 +48,9 @@
 static Trf_MessageDigestDescription mdDescription = { /* THREADING: constant, read-only => safe */
   "sha",
-  sizeof (CTX_TYPE),
-  DIGEST_SIZE,
-  MDsha_Start,
+  sizeof (SHA_CTX),
+  SHA_DIGEST_LENGTH,
+  SHA_Init,
   MDsha_Update,
-  MDsha_UpdateBuf,
+  SHA_Update,
   MDsha_Final,
   NULL
@@ -113,33 +85,4 @@
  *------------------------------------------------------*
  *
- *	MDsha_Start --
- *
- *	------------------------------------------------*
- *	Initialize the internal state of the message
- *	digest generator.
- *	------------------------------------------------*
- *
- *	Sideeffects:
- *		As of the called procedure.
- *
- *	Result:
- *		None.
- *
- *------------------------------------------------------*
- */
-
-static void
-MDsha_Start (context)
-VOID* context;
-{
-  sha_trf_info* s = (sha_trf_info*) context;
-
-  memset (s, '\0', sizeof (sha_trf_info));
-  sha_init (&s->s);
-}
-
-/*
- *------------------------------------------------------*
- *
  *	MDsha_Update --
  *
@@ -163,79 +106,7 @@
 unsigned int   character;
 {
-  sha_trf_info* s = (sha_trf_info*) context;
-
-  s->buf [s->count] = character;
-  s->count ++;
+  unsigned char buf = character;
 
-  if (s->count == CHUNK_SIZE) {
-    sha_update (&s->s, s->buf, s->count);
-    s->count = 0;
-  }
-}
-
-/*
- *------------------------------------------------------*
- *
- *	MDsha_UpdateBuf --
- *
- *	------------------------------------------------*
- *	Update the internal state of the message digest
- *	generator for a character buffer.
- *	------------------------------------------------*
- *
- *	Sideeffects:
- *		As of the called procedure.
- *
- *	Result:
- *		None.
- *
- *------------------------------------------------------*
- */
-
-static void
-MDsha_UpdateBuf (context, buffer, bufLen)
-VOID* context;
-unsigned char* buffer;
-int   bufLen;
-{
-  sha_trf_info* s = (sha_trf_info*) context;
-
-  if ((s->count + bufLen) < CHUNK_SIZE) {
-    /*
-     * Not enough for full chunk. Remember incoming
-     * data and wait for another call containing more data.
-     */
-
-    memcpy ((VOID*) (s->buf + s->count), (VOID*) buffer, bufLen);
-    s->count += bufLen;
-  } else {
-    /*
-     * Complete chunk with incoming data, update digest,
-     * then use all chunks contained in the buffer. Remember
-     * an incomplete chunk and wait for further calls.
-     */
-
-    int k = CHUNK_SIZE - s->count;
-
-    if (k < CHUNK_SIZE) {
-      memcpy ((VOID*) (s->buf + s->count), (VOID*) buffer, k);
-
-      sha_update (&s->s, s->buf, CHUNK_SIZE);
-
-      buffer += k;
-      bufLen -= k;
-    } /* k == CHUNK_SIZE => internal buffer was empty, so skip it entirely */
-
-    while (bufLen > CHUNK_SIZE) {
-      sha_update (&s->s, buffer, CHUNK_SIZE);
-
-      buffer += CHUNK_SIZE;
-      bufLen -= CHUNK_SIZE;
-    }
-
-    s->count = bufLen;
-    if (bufLen > 0)
-      memcpy ((VOID*) s->buf, (VOID*) buffer, bufLen);
-  }
+  SHA_Update ((SHA_CTX*)context, &buf, 1);
 }
 
@@ -264,26 +135,4 @@
 VOID* digest;
 {
-  sha_trf_info* s = (sha_trf_info*) context;
-
-  if (s->count > 0) {
-    sha_update (&s->s, s->buf, s->count);
-  }
-
-  sha_final  (&s->s);
-
-#ifndef WORDS_BIGENDIAN
-  Trf_FlipRegisterLong (s->s.digest, SHA_DIGESTSIZE);
-#endif
-
-  memcpy (digest, s->s.digest, SHA_DIGESTSIZE);
+  SHA_Final(digest, context);
 }
-
-/*
- * External code from here on.
- *
- * To make smaller object code, but run a little slower, don't use UNROLL_LOOPS.
- * To use NIST's modified SHA of 7/11/94, define USE_MODIFIED_SHA
- */
-
-#define UNROLL_LOOPS
-#include "sha/sha.c"
