| Index: mozilla/security/nss/lib/freebl/md5.c
|
| ===================================================================
|
| --- mozilla/security/nss/lib/freebl/md5.c (revision 180595)
|
| +++ mozilla/security/nss/lib/freebl/md5.c (working copy)
|
| @@ -523,7 +523,8 @@
|
| md5_compress(cx, cx->u.w);
|
|
|
| /* Copy the resulting values out of the chain variables into return buf. */
|
| - *digestLen = MD5_HASH_LEN;
|
| + if (digestLen)
|
| + *digestLen = MD5_HASH_LEN;
|
| #ifndef IS_LITTLE_ENDIAN
|
| cx->cv[0] = lendian(cx->cv[0]);
|
| cx->cv[1] = lendian(cx->cv[1]);
|
| @@ -533,6 +534,32 @@
|
| memcpy(digest, cx->cv, MD5_HASH_LEN);
|
| }
|
|
|
| +void
|
| +MD5_EndRaw(MD5Context *cx, unsigned char *digest,
|
| + unsigned int *digestLen, unsigned int maxDigestLen)
|
| +{
|
| +#ifndef IS_LITTLE_ENDIAN
|
| + PRUint32 tmp;
|
| +#endif
|
| + PRUint32 cv[4];
|
| +
|
| + if (maxDigestLen < MD5_HASH_LEN) {
|
| + PORT_SetError(SEC_ERROR_INVALID_ARGS);
|
| + return;
|
| + }
|
| +
|
| + memcpy(cv, cx->cv, sizeof(cv));
|
| +#ifndef IS_LITTLE_ENDIAN
|
| + cv[0] = lendian(cv[0]);
|
| + cv[1] = lendian(cv[1]);
|
| + cv[2] = lendian(cv[2]);
|
| + cv[3] = lendian(cv[3]);
|
| +#endif
|
| + memcpy(digest, cv, MD5_HASH_LEN);
|
| + if (digestLen)
|
| + *digestLen = MD5_HASH_LEN;
|
| +}
|
| +
|
| unsigned int
|
| MD5_FlattenSize(MD5Context *cx)
|
| {
|
|
|