--- generic/rmd160.c 2009-06-18 00:54:44.000000000 -0400 +++ generic/rmd160.c 2009-07-13 00:25:20.000000000 -0400 @@ -29,5 +29,5 @@ #include "transformInt.h" -#include "ripemd/rmd160.h" +#include /* @@ -40,27 +40,4 @@ #define DIGEST_SIZE (20) -/*#define CTX_TYPE */ -#define CONTEXT_SIZE (20) -#define CHUNK_SIZE (64) - -typedef struct ripemd_context { - dword state [5]; /* state variables of ripemd-160 */ - byte buf [CHUNK_SIZE]; /* buffer of 16-dword's */ - byte byteCount; /* number of bytes in buffer */ - dword lowc; /* lower half of a 64bit counter */ - dword highc; /* upper half of a 64bit counter */ -} ripemd_context; - - -/* - * Declarations of internal procedures. - */ - -static void MDrmd160_Start _ANSI_ARGS_ ((VOID* context)); -static void MDrmd160_Update _ANSI_ARGS_ ((VOID* context, unsigned int character)); -static void MDrmd160_UpdateBuf _ANSI_ARGS_ ((VOID* context, unsigned char* buffer, int bufLen)); -static void MDrmd160_Final _ANSI_ARGS_ ((VOID* context, VOID* digest)); -static void CountLength _ANSI_ARGS_ ((ripemd_context* ctx, - unsigned int nbytes)); /* @@ -70,10 +47,10 @@ static Trf_MessageDigestDescription mdDescription = { /* THREADING: constant, read-only => safe */ "ripemd160", - sizeof (ripemd_context), + sizeof (RIPEMD160_CTX), DIGEST_SIZE, - MDrmd160_Start, - MDrmd160_Update, - MDrmd160_UpdateBuf, - MDrmd160_Final, + (Trf_MDStart *)RIPEMD160_Init, + NULL, + (Trf_MDUpdateBuf *)RIPEMD160_Update, + (Trf_MDFinal *)RIPEMD160_Final, NULL }; @@ -103,230 +80,2 @@ return Trf_RegisterMessageDigest (interp, &mdDescription); } - -/* - *------------------------------------------------------* - * - * MDrmd160_Start -- - * - * ------------------------------------------------* - * Initialize the internal state of the message - * digest generator. - * ------------------------------------------------* - * - * Sideeffects: - * As of the called procedure. - * - * Result: - * None. - * - *------------------------------------------------------* - */ - -static void -MDrmd160_Start (context) -VOID* context; -{ - ripemd_context* ctx = (ripemd_context*) context; - - ripemd160_MDinit (ctx->state); - memset (ctx->buf, '\0', CHUNK_SIZE); - - ctx->byteCount = 0; - ctx->lowc = 0; - ctx->highc = 0; -} - -/* - *------------------------------------------------------* - * - * MDrmd160_Update -- - * - * ------------------------------------------------* - * Update the internal state of the message digest - * generator for a single character. - * ------------------------------------------------* - * - * Sideeffects: - * As of the called procedure. - * - * Result: - * None. - * - *------------------------------------------------------* - */ - -static void -MDrmd160_Update (context, character) -VOID* context; -unsigned int character; -{ - ripemd_context* ctx = (ripemd_context*) context; - - ctx->buf [ctx->byteCount] = character; - ctx->byteCount ++; - - if (ctx->byteCount == CHUNK_SIZE) { - CountLength (ctx, CHUNK_SIZE); - -#ifdef WORDS_BIGENDIAN - Trf_FlipRegisterLong (ctx->buf, CHUNK_SIZE); -#endif - ripemd160_compress (ctx->state, (dword*) ctx->buf); - ctx->byteCount = 0; - } -} - -/* - *------------------------------------------------------* - * - * MDrmd160_UpdateBuf -- - * - * ------------------------------------------------* - * Update the internal state of the message digest - * generator for a character buffer. - * ------------------------------------------------* - * - * Sideeffects: - * As of the called procedure. - * - * Result: - * None. - * - *------------------------------------------------------* - */ - -static void -MDrmd160_UpdateBuf (context, buffer, bufLen) -VOID* context; -unsigned char* buffer; -int bufLen; -{ - ripemd_context* ctx = (ripemd_context*) context; - - if ((ctx->byteCount + bufLen) < CHUNK_SIZE) { - /* - * Not enough for full chunk. Remember incoming - * data and wait for another call containing more data. - */ - - memcpy ((VOID*) (ctx->buf + ctx->byteCount), (VOID*) buffer, bufLen); - ctx->byteCount += 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 - ctx->byteCount; - - if (k < CHUNK_SIZE) { - memcpy ((VOID*) (ctx->buf + ctx->byteCount), (VOID*) buffer, k); - - CountLength (ctx, CHUNK_SIZE); - -#ifdef WORDS_BIGENDIAN - Trf_FlipRegisterLong (ctx->buf, CHUNK_SIZE); -#endif - ripemd160_compress (ctx->state, (dword*) ctx->buf); - - buffer += k; - bufLen -= k; - } /* k == CHUNK_SIZE => internal buffer was empty, so skip it entirely */ - - while (bufLen >= CHUNK_SIZE) { - CountLength (ctx, CHUNK_SIZE); - -#ifdef WORDS_BIGENDIAN - Trf_FlipRegisterLong (buffer, CHUNK_SIZE); -#endif - ripemd160_compress (ctx->state, (dword*) buffer); -#ifdef WORDS_BIGENDIAN - Trf_FlipRegisterLong (buffer, CHUNK_SIZE); -#endif - - buffer += CHUNK_SIZE; - bufLen -= CHUNK_SIZE; - } - - ctx->byteCount = bufLen; - if (bufLen > 0) { - memcpy ((VOID*) ctx->buf, (VOID*) buffer, bufLen); - } - } -} - -/* - *------------------------------------------------------* - * - * MDrmd160_Final -- - * - * ------------------------------------------------* - * Generate the digest from the internal state of - * the message digest generator. - * ------------------------------------------------* - * - * Sideeffects: - * As of the called procedure. - * - * Result: - * None. - * - *------------------------------------------------------* - */ - -static void -MDrmd160_Final (context, digest) -VOID* context; -VOID* digest; -{ - ripemd_context* ctx = (ripemd_context*) context; - - CountLength (ctx, ctx->byteCount); - - ripemd160_MDfinish (ctx->state, ctx->buf, ctx->lowc, ctx->highc); - - memcpy (digest, ctx->state, DIGEST_SIZE); -#ifdef WORDS_BIGENDIAN - Trf_FlipRegisterLong (digest, DIGEST_SIZE); -#endif -} - -/* - *------------------------------------------------------* - * - * CountLength -- - * - * ------------------------------------------------* - * Update the 64bit counter in the context structure - * ------------------------------------------------* - * - * Sideeffects: - * See above. - * - * Result: - * None. - * - *------------------------------------------------------* - */ - -static void -CountLength (ctx, nbytes) - ripemd_context* ctx; - unsigned int nbytes; -{ - /* update length counter */ - - if ((ctx->lowc + nbytes) < ctx->lowc) { - /* overflow to msb of length */ - ctx->highc ++; - } - - ctx->lowc += nbytes; -} - -/* - * External code from here on. - */ - -#include "ripemd/rmd160.c"