X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=lib_generic%2Fmd5.c;h=78ef47535e9a395cc0bd221d4fdd03844edcd6b8;hb=10a3367955bc2033b288915f8f10d0e507fe2fa1;hp=a51da451b745a15d2331c4ad677d8758d772d7e8;hpb=0ede0c383530a418cf98be9122371a86573cd0db;p=u-boot diff --git a/lib_generic/md5.c b/lib_generic/md5.c index a51da451b7..78ef47535e 100644 --- a/lib_generic/md5.c +++ b/lib_generic/md5.c @@ -25,9 +25,13 @@ and to fit the cifs vfs by Steve French sfrench@us.ibm.com */ +#ifndef USE_HOSTCC +#include +#endif /* USE_HOSTCC */ +#include #include #include -#include +#include static void MD5Transform(__u32 buf[4], __u32 const in[16]); @@ -272,3 +276,39 @@ md5 (unsigned char *input, int len, unsigned char output[16]) MD5Update(&context, input, len); MD5Final(output, &context); } + + +/* + * Calculate and store in 'output' the MD5 digest of 'len' bytes at 'input'. + * 'output' must have enough space to hold 16 bytes. If 'chunk' Trigger the + * watchdog every 'chunk_sz' bytes of input processed. + */ +void +md5_wd (unsigned char *input, int len, unsigned char output[16], + unsigned int chunk_sz) +{ + struct MD5Context context; +#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG) + unsigned char *end, *curr; + int chunk; +#endif + + MD5Init(&context); + +#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG) + curr = input; + end = input + len; + while (curr < end) { + chunk = end - curr; + if (chunk > chunk_sz) + chunk = chunk_sz; + MD5Update(&context, curr, chunk); + curr += chunk; + WATCHDOG_RESET (); + } +#else + MD5Update(&context, input, len); +#endif + + MD5Final(output, &context); +}