X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=crypto%2Fmd32_common.h;h=5e62d405232a8bf12499e00c652f24bdde9e3657;hp=977ea8e73bb20d7d8044ba0fd6cf5d8dc7a56413;hb=1cbde6e4fa6a5bde5a62109acb58e02f1990608f;hpb=bd3576d2ddedb0492f5bd3c1e47c15778e4fbe3c diff --git a/crypto/md32_common.h b/crypto/md32_common.h index 977ea8e73b..5e62d40523 100644 --- a/crypto/md32_common.h +++ b/crypto/md32_common.h @@ -94,6 +94,8 @@ * in original (data) byte order, implemented externally (it * actually is optional if data and host are of the same * "endianess"). + * HASH_MAKE_STRING + * macro convering context variables to an ASCII hash string. * * Optional macros: * @@ -178,8 +180,10 @@ #undef ROTATE #ifndef PEDANTIC # if defined(_MSC_VER) -# define ROTATE(a,n) _lrotl(a,n) -# elif defined(__GNUC__) && __GNUC__>=2 +# define ROTATE(a,n) _lrotl(a,n) +# elif defined(__MWERKS__) +# define ROTATE(a,n) __rol(a,n) +# elif defined(__GNUC__) && __GNUC__>=2 && !defined(NO_ASM) /* * Some GNU C inline assembler templates. Note that these are * rotates by *constant* number of bits! But that's exactly @@ -211,7 +215,7 @@ * Engage compiler specific "fetch in reverse byte order" * intrinsic function if available. */ -# if defined(__GNUC__) && __GNUC__>=2 +# if defined(__GNUC__) && __GNUC__>=2 && !defined(NO_ASM) /* some GNU C inline assembler templates by */ # if defined(__i386) && !defined(I386_ONLY) # define BE_FETCH32(a) ({ register unsigned int l=(a);\ @@ -315,7 +319,7 @@ # endif #endif -#if !defined(HASH_BLOCK_DATA_ORDER_ALIGNED) && HASH_BLOCK_DATA_ORDER_ALIGNED!=1 +#if !defined(HASH_BLOCK_DATA_ORDER_ALIGNED) #ifndef HASH_BLOCK_DATA_ORDER #error "HASH_BLOCK_DATA_ORDER must be defined!" #endif @@ -461,13 +465,14 @@ void HASH_UPDATE (HASH_CTX *c, const unsigned char *data, unsigned long len) sw=len/HASH_CBLOCK; if (sw > 0) { -#if defined(HASH_BLOCK_DATA_ORDER_ALIGNED) && HASH_BLOCK_DATA_ORDER_ALIGNED!=1 +#if defined(HASH_BLOCK_DATA_ORDER_ALIGNED) /* * Note that HASH_BLOCK_DATA_ORDER_ALIGNED gets defined * only if sizeof(HASH_LONG)==4. */ if ((((unsigned long)data)%4) == 0) { + /* data is properly aligned so that we can cast it: */ HASH_BLOCK_DATA_ORDER_ALIGNED (c,(HASH_LONG *)data,sw); sw*=HASH_CBLOCK; data+=sw; @@ -486,7 +491,7 @@ void HASH_UPDATE (HASH_CTX *c, const unsigned char *data, unsigned long len) #endif #if defined(HASH_BLOCK_DATA_ORDER) { - HASH_BLOCK_DATA_ORDER (c,(HASH_LONG *)data,sw); + HASH_BLOCK_DATA_ORDER(c,data,sw); sw*=HASH_CBLOCK; data+=sw; len-=sw; @@ -510,10 +515,11 @@ void HASH_UPDATE (HASH_CTX *c, const unsigned char *data, unsigned long len) } -void HASH_TRANSFORM (HASH_CTX *c, unsigned char *data) +void HASH_TRANSFORM (HASH_CTX *c, const unsigned char *data) { -#if defined(HASH_BLOCK_DATA_ORDER_ALIGNED) && HASH_BLOCK_DATA_ORDER_ALIGNED!=1 +#if defined(HASH_BLOCK_DATA_ORDER_ALIGNED) if ((((unsigned long)data)%4) == 0) + /* data is properly aligned so that we can cast it: */ HASH_BLOCK_DATA_ORDER_ALIGNED (c,(HASH_LONG *)data,1); else #if !defined(HASH_BLOCK_DATA_ORDER) @@ -524,7 +530,7 @@ void HASH_TRANSFORM (HASH_CTX *c, unsigned char *data) #endif #endif #if defined(HASH_BLOCK_DATA_ORDER) - HASH_BLOCK_DATA_ORDER (c,(HASH_LONG *)data,1); + HASH_BLOCK_DATA_ORDER (c,data,1); #endif } @@ -579,10 +585,11 @@ void HASH_FINAL (unsigned char *md, HASH_CTX *c) #endif HASH_BLOCK_HOST_ORDER (c,p,1); - l=c->A; HOST_l2c(l,md); - l=c->B; HOST_l2c(l,md); - l=c->C; HOST_l2c(l,md); - l=c->D; HOST_l2c(l,md); +#ifndef HASH_MAKE_STRING +#error "HASH_MAKE_STRING must be defined!" +#else + HASH_MAKE_STRING(c,md); +#endif c->num=0; /* clear stuff, HASH_BLOCK may be leaving some stuff on the stack