4a1ca02b61
as the source of various digest-algorithms. Years ago, when I was undertaking the replacement of the bundled implementations with those found in the base system, it seemed like OpenSSL will be more stable... Ha-ha. Fix the WWW, while I'm here. PR: 229026 Submitted by: brnrd Reported by: Package Fallout
253 lines
5.8 KiB
Text
253 lines
5.8 KiB
Text
--- generic/sha.c 2009-06-18 04:54:44 UTC
|
||
+++ generic/sha.c
|
||
@@ -27,15 +27,9 @@
|
||
* CVS: $Id: sha.c,v 1.4 2007/10/05 23:12:21 andreas_kupries Exp $
|
||
*/
|
||
|
||
-#include "transformInt.h"
|
||
-#include "sha/sha.h"
|
||
|
||
-#ifdef WORDS_BIGENDIAN
|
||
-#undef LITTLE_ENDIAN
|
||
-#else
|
||
-#undef LITTLE_ENDIAN
|
||
-#define LITTLE_ENDIAN
|
||
-#endif
|
||
+#include "transformInt.h"
|
||
+#include <sha.h>
|
||
|
||
/*
|
||
* Generator description
|
||
@@ -45,32 +41,10 @@
|
||
* message digest.
|
||
*/
|
||
|
||
-#define DIGEST_SIZE (SHA_DIGESTSIZE)
|
||
-#define CTX_TYPE sha_trf_info
|
||
+#define DIGEST_SIZE (20)
|
||
+#define CTX_TYPE SHA_CTX
|
||
#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;
|
||
-
|
||
-
|
||
-/*
|
||
- * Declarations of internal procedures.
|
||
- */
|
||
-
|
||
-static void MDsha_Start _ANSI_ARGS_ ((VOID* context));
|
||
-static void MDsha_Update _ANSI_ARGS_ ((VOID* context, unsigned int character));
|
||
-static void MDsha_UpdateBuf _ANSI_ARGS_ ((VOID* context, unsigned char* buffer, int bufLen));
|
||
-static void MDsha_Final _ANSI_ARGS_ ((VOID* context, VOID* digest));
|
||
-
|
||
/*
|
||
* Generator definition.
|
||
*/
|
||
@@ -79,10 +53,10 @@ static Trf_MessageDigestDescription mdDe
|
||
"sha",
|
||
sizeof (CTX_TYPE),
|
||
DIGEST_SIZE,
|
||
- MDsha_Start,
|
||
- MDsha_Update,
|
||
- MDsha_UpdateBuf,
|
||
- MDsha_Final,
|
||
+ (Trf_MDStart *)SHA_Init,
|
||
+ NULL,
|
||
+ (Trf_MDUpdateBuf *)SHA_Update,
|
||
+ (Trf_MDFinal *)SHA_Final,
|
||
NULL
|
||
};
|
||
|
||
@@ -110,182 +84,4 @@ Tcl_Interp* interp;
|
||
{
|
||
return Trf_RegisterMessageDigest (interp, &mdDescription);
|
||
}
|
||
-
|
||
-/*
|
||
- *------------------------------------------------------*
|
||
- *
|
||
- * 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 --
|
||
- *
|
||
- * ------------------------------------------------*
|
||
- * Update the internal state of the message digest
|
||
- * generator for a single character.
|
||
- * ------------------------------------------------*
|
||
- *
|
||
- * Sideeffects:
|
||
- * As of the called procedure.
|
||
- *
|
||
- * Result:
|
||
- * None.
|
||
- *
|
||
- *------------------------------------------------------*
|
||
- */
|
||
-
|
||
-static void
|
||
-MDsha_Update (context, character)
|
||
-VOID* context;
|
||
-unsigned int character;
|
||
-{
|
||
- sha_trf_info* s = (sha_trf_info*) context;
|
||
|
||
- s->buf [s->count] = character;
|
||
- s->count ++;
|
||
-
|
||
- 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);
|
||
- }
|
||
-}
|
||
-
|
||
-/*
|
||
- *------------------------------------------------------*
|
||
- *
|
||
- * MDsha_Final --
|
||
- *
|
||
- * ------------------------------------------------*
|
||
- * Generate the digest from the internal state of
|
||
- * the message digest generator.
|
||
- * ------------------------------------------------*
|
||
- *
|
||
- * Sideeffects:
|
||
- * As of the called procedure.
|
||
- *
|
||
- * Result:
|
||
- * None.
|
||
- *
|
||
- *------------------------------------------------------*
|
||
- */
|
||
-
|
||
-static void
|
||
-MDsha_Final (context, digest)
|
||
-VOID* context;
|
||
-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);
|
||
-}
|
||
-
|
||
-/*
|
||
- * 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"
|