d0b2e40d6b
are sometimes faster and never slower. Using -lmd is still possible by building with ``TRF_USE_MD=yes''. Bump PORTREVISION. Use the RIPEMD160* routines from -lcrypto (or -lmd) instead of our own -- just like for md[25] and sha*. Neither -lcrypto nor -lmd provide RIPEMD128 (not strong enough?), so stay with our own implementation. sparc64/amd64 are not expected to work yet...
242 lines
5.8 KiB
Text
242 lines
5.8 KiB
Text
--- generic/rmd160.c Wed Aug 9 15:13:18 2000
|
||
+++ generic/rmd160.c Sat Jul 10 17:17:57 2004
|
||
@@ -29,5 +29,5 @@
|
||
|
||
#include "transformInt.h"
|
||
-#include "ripemd/rmd160.h"
|
||
+#include <openssl/ripemd.h>
|
||
|
||
/*
|
||
@@ -40,16 +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 15-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;
|
||
-
|
||
|
||
/*
|
||
@@ -57,10 +45,6 @@
|
||
*/
|
||
|
||
-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,9 +54,9 @@
|
||
static Trf_MessageDigestDescription mdDescription = { /* THREADING: constant, read-only => safe */
|
||
"ripemd160",
|
||
- sizeof (ripemd_context),
|
||
+ sizeof (RIPEMD160_CTX),
|
||
DIGEST_SIZE,
|
||
- MDrmd160_Start,
|
||
+ (Trf_MDStart *)RIPEMD160_Init,
|
||
MDrmd160_Update,
|
||
- MDrmd160_UpdateBuf,
|
||
+ (Trf_MDUpdateBuf *)RIPEMD160_Update,
|
||
MDrmd160_Final,
|
||
NULL
|
||
@@ -107,37 +91,4 @@
|
||
*------------------------------------------------------*
|
||
*
|
||
- * 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 --
|
||
*
|
||
@@ -161,97 +112,7 @@
|
||
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);
|
||
+ char c = character;
|
||
|
||
-#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);
|
||
- }
|
||
+ RIPEMD160_Update(context, &c, 1);
|
||
}
|
||
|
||
@@ -280,52 +141,4 @@
|
||
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;
|
||
+ (void)RIPEMD160_Final(digest, context);
|
||
}
|
||
-
|
||
-/*
|
||
- * External code from here on.
|
||
- */
|
||
-
|
||
-#include "ripemd/rmd160.c"
|