X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FSupport%2FMD5.cpp;h=514466c750fcc911947581de151cbe14c127c53f;hb=78832c6e7d33094c6ef9e99b07dac6f60c0a1207;hp=6cd040bd1b541a1de3b010d39b4a9efca99722ab;hpb=f7306f224e7f85c2690256636613422c4a7b8230;p=oota-llvm.git diff --git a/lib/Support/MD5.cpp b/lib/Support/MD5.cpp index 6cd040bd1b5..514466c750f 100644 --- a/lib/Support/MD5.cpp +++ b/lib/Support/MD5.cpp @@ -72,8 +72,8 @@ namespace llvm { /// \brief This processes one or more 64-byte data blocks, but does NOT update ///the bit counters. There are no alignment requirements. -const unsigned char *MD5::body(ArrayRef Data) { - const unsigned char *ptr; +const uint8_t *MD5::body(ArrayRef Data) { + const uint8_t *ptr; MD5_u32plus a, b, c, d; MD5_u32plus saved_a, saved_b, saved_c, saved_d; unsigned long Size = Data.size(); @@ -183,11 +183,11 @@ MD5::MD5() : a(0x67452301), b(0xefcdab89), c(0x98badcfe), d(0x10325476), hi(0), lo(0) { } -/// Incrementally add \p size of \p data to the hash. -void MD5::update(ArrayRef Data) { +/// Incrementally add the bytes in \p Data to the hash. +void MD5::update(ArrayRef Data) { MD5_u32plus saved_lo; unsigned long used, free; - const unsigned char *Ptr = Data.data(); + const uint8_t *Ptr = Data.data(); unsigned long Size = Data.size(); saved_lo = lo; @@ -208,17 +208,25 @@ void MD5::update(ArrayRef Data) { memcpy(&buffer[used], Ptr, free); Ptr = Ptr + free; Size -= free; - body(ArrayRef(buffer, 64)); + body(ArrayRef(buffer, 64)); } if (Size >= 64) { - Ptr = body(ArrayRef(Ptr, Size & ~(unsigned long) 0x3f)); + Ptr = body(ArrayRef(Ptr, Size & ~(unsigned long) 0x3f)); Size &= 0x3f; } memcpy(buffer, Ptr, Size); } +/// Add the bytes in the StringRef \p Str to the hash. +// Note that this isn't a string and so this won't include any trailing NULL +// bytes. +void MD5::update(StringRef Str) { + ArrayRef SVal((const uint8_t *)Str.data(), Str.size()); + update(SVal); +} + /// \brief Finish the hash and place the resulting hash into \p result. /// \param result is assumed to be a minimum of 16-bytes in size. void MD5::final(MD5Result &result) { @@ -232,7 +240,7 @@ void MD5::final(MD5Result &result) { if (free < 8) { memset(&buffer[used], 0, free); - body(ArrayRef(buffer, 64)); + body(ArrayRef(buffer, 64)); used = 0; free = 64; } @@ -249,7 +257,7 @@ void MD5::final(MD5Result &result) { buffer[62] = hi >> 16; buffer[63] = hi >> 24; - body(ArrayRef(buffer, 64)); + body(ArrayRef(buffer, 64)); result[0] = a; result[1] = a >> 8;