summaryrefslogtreecommitdiffstats
path: root/chromium/base/md5.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/base/md5.cc')
-rw-r--r--chromium/base/md5.cc16
1 files changed, 14 insertions, 2 deletions
diff --git a/chromium/base/md5.cc b/chromium/base/md5.cc
index 754994c0e56..6227ee66042 100644
--- a/chromium/base/md5.cc
+++ b/chromium/base/md5.cc
@@ -251,8 +251,12 @@ void MD5Final(MD5Digest* digest, MD5Context* context) {
byteReverse(ctx->in, 14);
/* Append length in bits and transform */
- ((uint32 *)ctx->in)[ 14 ] = ctx->bits[0];
- ((uint32 *)ctx->in)[ 15 ] = ctx->bits[1];
+ memcpy(&ctx->in[14 * sizeof(ctx->bits[0])],
+ &ctx->bits[0],
+ sizeof(ctx->bits[0]));
+ memcpy(&ctx->in[15 * sizeof(ctx->bits[1])],
+ &ctx->bits[1],
+ sizeof(ctx->bits[1]));
MD5Transform(ctx->buf, (uint32 *)ctx->in);
byteReverse((unsigned char *)ctx->buf, 4);
@@ -260,6 +264,14 @@ void MD5Final(MD5Digest* digest, MD5Context* context) {
memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */
}
+void MD5IntermediateFinal(MD5Digest* digest, const MD5Context* context) {
+ /* MD5Final mutates the MD5Context*. Make a copy for generating the
+ intermediate value. */
+ MD5Context context_copy;
+ memcpy(&context_copy, context, sizeof(context_copy));
+ MD5Final(digest, &context_copy);
+}
+
std::string MD5DigestToBase16(const MD5Digest& digest) {
static char const zEncode[] = "0123456789abcdef";