summaryrefslogtreecommitdiff
path: root/devel/tcl-trf/files/patch-sha
diff options
context:
space:
mode:
authorMikhail Teterin <mi@FreeBSD.org>2009-07-13 05:30:15 +0000
committerMikhail Teterin <mi@FreeBSD.org>2009-07-13 05:30:15 +0000
commit52b76e132728a3a0e13436f09f10391aec3e259b (patch)
tree8034266eeceaa3f8301733562c746f4e853afb28 /devel/tcl-trf/files/patch-sha
parent- Update to 1.1.1 (diff)
Resurrect this port from the Attic based on the new version from the
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.
Notes
Notes: svn path=/head/; revision=237667
Diffstat (limited to 'devel/tcl-trf/files/patch-sha')
-rw-r--r--devel/tcl-trf/files/patch-sha244
1 files changed, 244 insertions, 0 deletions
diff --git a/devel/tcl-trf/files/patch-sha b/devel/tcl-trf/files/patch-sha
new file mode 100644
index 000000000000..ecf491b8df47
--- /dev/null
+++ b/devel/tcl-trf/files/patch-sha
@@ -0,0 +1,244 @@
+--- 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"