X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/312e87daabe8afe71c938d6e7f141aa9c5e6a938..76fcbe5c97849dcbbe67434d08e0a22c02fedd51:/apt-pkg/contrib/md5.cc diff --git a/apt-pkg/contrib/md5.cc b/apt-pkg/contrib/md5.cc index ec8228c2b..2bfd70f1b 100644 --- a/apt-pkg/contrib/md5.cc +++ b/apt-pkg/contrib/md5.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: md5.cc,v 1.8 1999/11/16 01:41:49 jgg Exp $ +// $Id: md5.cc,v 1.12 2001/05/13 05:15:03 jgg Exp $ /* ###################################################################### MD5Sum - MD5 Message Digest Algorithm. @@ -35,26 +35,23 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#ifdef __GNUG__ -#pragma implementation "apt-pkg/md5.h" -#endif - #include #include #include -#include #include #include // For htonl #include #include +#include + /*}}}*/ // byteSwap - Swap bytes in a buffer /*{{{*/ // --------------------------------------------------------------------- /* Swap n 32 bit longs in given buffer */ #ifdef WORDS_BIGENDIAN -static void byteSwap(uint8_t *buf, unsigned words) +static void byteSwap(uint32_t *buf, unsigned words) { uint8_t *p = (uint8_t *)buf; @@ -191,7 +188,7 @@ MD5SumValue::MD5SumValue() /* Converts the hex string into a set of chars */ bool MD5SumValue::Set(string Str) { - return Hex2Num(Str.begin(),Str.end(),Sum,sizeof(Sum)); + return Hex2Num(Str,Sum,sizeof(Sum)); } /*}}}*/ // MD5SumValue::Value - Convert the number into a string /*{{{*/ @@ -269,7 +266,7 @@ bool MD5Summation::Add(const unsigned char *data,unsigned long len) // First chunk is an odd size memcpy((unsigned char *)in + 64 - t,data,t); - byteSwap((uint8_t *)in, 16); + byteSwap(in, 16); MD5Transform(buf,in); data += t; len -= t; @@ -278,7 +275,7 @@ bool MD5Summation::Add(const unsigned char *data,unsigned long len) while (len >= 64) { memcpy(in,data,64); - byteSwap((uint8_t *)in,16); + byteSwap(in,16); MD5Transform(buf,in); data += 64; len -= 64; @@ -297,11 +294,16 @@ bool MD5Summation::AddFD(int Fd,unsigned long Size) { unsigned char Buf[64*64]; int Res = 0; - while (Size != 0) + int ToEOF = (Size == 0); + while (Size != 0 || ToEOF) { - Res = read(Fd,Buf,MIN(Size,sizeof(Buf))); - if (Res < 0 || (unsigned)Res != MIN(Size,sizeof(Buf))) - return false; + unsigned n = sizeof(Buf); + if (!ToEOF) n = min(Size,(unsigned long)n); + Res = read(Fd,Buf,n); + if (Res < 0 || (!ToEOF && (unsigned) Res != n)) // error, or short read + return false; + if (ToEOF && Res == 0) // EOF + break; Size -= Res; Add(Buf,Res); } @@ -334,20 +336,20 @@ MD5SumValue MD5Summation::Result() if (count < 0) { memset(p,0,count + 8); - byteSwap((uint8_t *)in, 16); + byteSwap(in, 16); MD5Transform(buf,in); p = (unsigned char *)in; count = 56; } memset(p, 0, count); - byteSwap((unit8_t *)in, 14); + byteSwap(in, 14); // Append length in bits and transform in[14] = bytes[0] << 3; in[15] = bytes[1] << 3 | bytes[0] >> 29; MD5Transform(buf,in); - byteSwap((uint8_t *)buf,4); + byteSwap(buf,4); Done = true; }