mirror of
https://git.freebsd.org/ports.git
synced 2025-06-01 10:56:27 -04:00
author. As before, we modify the author's code to use either OpenSSL's -lcrypto or BSD's -lmd /directly/ instead of compiling the bundled definitions digests. We also link with -lz and -lbz2 instead of dlopen-ing them at run-time.
244 lines
5.6 KiB
Text
244 lines
5.6 KiB
Text
--- generic/sha.c 2009-07-12 21:34:41.000000000 -0400
|
||
+++ generic/sha.c 2009-07-12 23:11:26.000000000 -0400
|
||
@@ -29,12 +29,5 @@
|
||
|
||
#include "transformInt.h"
|
||
-#include "sha/sha.h"
|
||
-
|
||
-#ifdef WORDS_BIGENDIAN
|
||
-#undef LITTLE_ENDIAN
|
||
-#else
|
||
-#undef LITTLE_ENDIAN
|
||
-#define LITTLE_ENDIAN
|
||
-#endif
|
||
+#include <openssl/sha.h>
|
||
|
||
/*
|
||
@@ -46,30 +39,8 @@
|
||
*/
|
||
|
||
-#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.
|
||
@@ -80,8 +51,8 @@
|
||
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
|
||
};
|
||
@@ -111,181 +82,2 @@
|
||
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"
|