X-Git-Url: https://git.ozlabs.org/?p=ppp.git;a=blobdiff_plain;f=pppd%2Fsha1.c;h=4e51cee506c237ce2385ad3ed94003e31c9f1914;hp=b56a7c9a6efb80decccd448a57838f3960377efb;hb=f1a34da3b2f5336e4993a729e5ac2130d0e0595a;hpb=bcfa20820fc9ff3b25bcf62308e3e737c1897dc6 diff --git a/pppd/sha1.c b/pppd/sha1.c index b56a7c9..4e51cee 100644 --- a/pppd/sha1.c +++ b/pppd/sha1.c @@ -17,9 +17,14 @@ /* #define SHA1HANDSOFF * Copies data before messing with it. */ #include +#include #include /* htonl() */ +#include #include "sha1.h" +static void +SHA1_Transform(u_int32_t[5], const unsigned char[64]); + #define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits)))) /* blk0() and blk() perform the initial expand. */ @@ -38,12 +43,13 @@ /* Hash a single 512-bit block. This is the core of the algorithm. */ -void SHA1_Transform(unsigned long state[5], const unsigned char buffer[64]) +static void +SHA1_Transform(u_int32_t state[5], const unsigned char buffer[64]) { - unsigned long a, b, c, d, e; + u_int32_t a, b, c, d, e; typedef union { unsigned char c[64]; - unsigned long l[16]; + u_int32_t l[16]; } CHAR64LONG16; CHAR64LONG16 *block; @@ -94,7 +100,8 @@ void SHA1_Transform(unsigned long state[5], const unsigned char buffer[64]) /* SHA1Init - Initialize new context */ -void SHA1_Init(SHA1_CTX *context) +void +SHA1_Init(SHA1_CTX *context) { /* SHA1 initialization constants */ context->state[0] = 0x67452301; @@ -108,33 +115,34 @@ void SHA1_Init(SHA1_CTX *context) /* Run your data through this. */ -void SHA1_Update(SHA1_CTX *context, const unsigned char *data, unsigned int len) +void +SHA1_Update(SHA1_CTX *context, const unsigned char *data, unsigned int len) { unsigned int i, j; 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); } /* Add padding and return the message digest. */ -void SHA1_Final(unsigned char digest[20], SHA1_CTX *context) +void +SHA1_Final(unsigned char digest[20], SHA1_CTX *context) { - unsigned long i, j; + u_int32_t i, j; unsigned char finalcount[8]; for (i = 0; i < 8; i++) {