X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=pppd%2Fsha1.c;h=efb37bec40fe5b3ba0f0c456028cc887532f47eb;hb=bdd34ab1f2f87acb23c6d92feee7354ac53005ff;hp=da142f1a7611b67a31e0ba39da5c36c70de8c1d5;hpb=7e1b44a2e4d84f1564d6a4ac4baa43a8d189ae38;p=ppp.git diff --git a/pppd/sha1.c b/pppd/sha1.c index da142f1..efb37be 100644 --- a/pppd/sha1.c +++ b/pppd/sha1.c @@ -14,10 +14,16 @@ * 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + /* #define SHA1HANDSOFF * Copies data before messing with it. */ #include +#include #include /* htonl() */ +#include #include "sha1.h" static void @@ -121,18 +127,17 @@ SHA1_Update(SHA1_CTX *context, const unsigned char *data, unsigned int len) j = (context->count[0] >> 3) & 63; if ((context->count[0] += len << 3) < (len << 3)) context->count[1]++; context->count[1] += (len >> 29); - if ((j + len) > 63) { - memcpy(&context->buffer[j], data, (i = 64-j)); + i = 64 - j; + while (len >= i) { + memcpy(&context->buffer[j], data, i); SHA1_Transform(context->state, context->buffer); - for ( ; i + 63 < len; i += 64) { - SHA1_Transform(context->state, &data[i]); - } + data += i; + len -= i; + i = 64; j = 0; } - else - i = 0; - memcpy(&context->buffer[j], &data[i], len - i); + memcpy(&context->buffer[j], data, len); }