X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Fliblutil%2Fsha1.c;h=a5c026384e6c7271879308066bb9f46e2dcc7f7d;hb=6456e5f5593c09bf6a446e82e690181beed3d077;hp=3c356afc00d639f776637617cf8b51d4b8b3d159;hpb=21c70857f1029309d6bc5a5b6a93d7537494b742;p=openldap diff --git a/libraries/liblutil/sha1.c b/libraries/liblutil/sha1.c index 3c356afc00..a5c026384e 100644 --- a/libraries/liblutil/sha1.c +++ b/libraries/liblutil/sha1.c @@ -1,3 +1,8 @@ +/* $OpenLDAP$ */ +/* + * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. + * COPYING RESTRICTIONS APPLY, see COPYRIGHT file + */ /* Acquired from: * $OpenBSD: sha1.c,v 1.9 1997/07/23 21:12:32 kstailey Exp $ */ @@ -15,19 +20,21 @@ * 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F */ +/* + * This code assumes uint32 is 32 bits and char is 8 bits + */ #include "portable.h" +#include #include - -/* include socket.h to get sys/types.h and/or winsock2.h */ #include - -#if defined(HAVE_SYS_PARAM_H) -#include -#endif +#include #include "lutil_sha1.h" +#ifdef LUTIL_SHA1_BYTES + +/* undefining this will cause pointer alignment errors */ #define SHA1HANDSOFF /* Copies data before messing with it. */ #define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits)))) @@ -36,13 +43,13 @@ * I got the idea of expanding during the round function from SSLeay */ #if BYTE_ORDER == LITTLE_ENDIAN -# define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \ - |(rol(block->l[i],8)&0x00FF00FF)) +# define blk0(i) (block[i] = (rol(block[i],24)&0xFF00FF00) \ + |(rol(block[i],8)&0x00FF00FF)) #else -# define blk0(i) block->l[i] +# define blk0(i) block[i] #endif -#define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \ - ^block->l[(i+2)&15]^block->l[i&15],1)) +#define blk(i) (block[i&15] = rol(block[(i+13)&15]^block[(i+8)&15] \ + ^block[(i+2)&15]^block[i&15],1)) /* * (R0+R1), R2, R3, R4 are the different operations (rounds) used in SHA1 @@ -61,16 +68,12 @@ void lutil_SHA1Transform( uint32 *state, const unsigned char *buffer ) { uint32 a, b, c, d, e; - typedef union char64long16_u { - unsigned char c[64]; - u_int l[16]; - } CHAR64LONG16; #ifdef SHA1HANDSOFF - CHAR64LONG16 block[1]; - (void)memcpy(block, buffer, 64); + uint32 block[16]; + (void)AC_MEMCPY(block, buffer, 64); #else - CHAR64LONG16 *block = (CHAR64LONG16 *)buffer; + uint32 *block = (u_int32 *) buffer; #endif /* Copy context->state[] to working vars */ @@ -148,7 +151,7 @@ lutil_SHA1Update( context->count[1] += (len>>29)+1; j = (j >> 3) & 63; if ((j + len) > 63) { - (void)memcpy(&context->buffer[j], data, (i = 64-j)); + (void)AC_MEMCPY(&context->buffer[j], data, (i = 64-j)); lutil_SHA1Transform(context->state, context->buffer); for ( ; i + 63 < len; i += 64) lutil_SHA1Transform(context->state, &data[i]); @@ -156,7 +159,7 @@ lutil_SHA1Update( } else { i = 0; } - (void)memcpy(&context->buffer[j], &data[i], len - i); + (void)AC_MEMCPY(&context->buffer[j], &data[i], len - i); } @@ -272,3 +275,5 @@ lutil_SHA1Data( const unsigned char *data, size_t len, char *buf ) lutil_SHA1Update(&ctx, data, len); return(lutil_SHA1End(&ctx, buf)); } + +#endif