[Linux-ha-dev] Re: [Linux-ha-cvs] Linux-HA CVS: lib by alan from 24.221.212.80

Lars Marowsky-Bree lmb at suse.de
Fri Sep 10 11:22:40 MDT 2004


On 2004-09-10T01:55:42,
   linux-ha-cvs at lists.community.tummy.com said:

> linux-ha CVS committal
> 
> Author  : alan
> Host    : 24.221.212.80
> Project : linux-ha
> Module  : lib
> 
> Dir     : linux-ha/lib/plugins/HBauth
> 
> 
> Modified Files:
> 	md5.c 
> 
> 
> Log Message:
> BEAM FIX:  Parameters to MD5 hash macros were not properly parenthesized
> 
> IMPORTANT:  If you see this fix please verify that it is correct.
> 
> IMPORTANT:  If you see this fix please verify that it is correct.
> 
> IMPORTANT:  If you see this fix please verify that it is correct.

Hmmm, triple redundancy, I think I got the message.

> 	If we ship this wrong, many people will have problems.
> 
> In fact, if it's right, and the old code generated incorrect code, then
> we still have a problem on our hands.
> 
> This would mean the old md5.o file was cryptographically unsound or
> at least unproven, and the new one is necessarily incompatible with it.
> This will mean we have to test mixed environments of old and new code
> to know for sure.

I think the fix is right. However, after reading the old code, I'm also
confident that it generated correct code, as it was clearly not passed
any potential troublesome parameters which could have screwed up the
macro expansion.

Comparing the old code to the new one suggests that it is exactly
equivalent.

> ===================================================================
> RCS file: /home/cvs/linux-ha/linux-ha/lib/plugins/HBauth/md5.c,v
> retrieving revision 1.10
> retrieving revision 1.11
> diff -u -3 -r1.10 -r1.11
> --- md5.c	17 Feb 2004 22:11:59 -0000	1.10
> +++ md5.c	10 Sep 2004 01:55:42 -0000	1.11
> @@ -1,4 +1,4 @@
> -/* $Id: md5.c,v 1.10 2004/02/17 22:11:59 lars Exp $ */
> +/* $Id: md5.c,v 1.11 2004/09/10 01:55:42 alan Exp $ */
>  /*
>   * This code implements the MD5 message-digest algorithm.
>   * The algorithm is due to Ron Rivest.  This code was
> @@ -242,14 +242,14 @@
>  /* The four core functions - F1 is optimized somewhat */
>  
>  /* #define F1(x, y, z) (x & y | ~x & z) */
> -#define F1(x, y, z) (z ^ (x & (y ^ z)))
> +#define F1(x, y, z) ((z) ^ ((x) & ((y) ^ (z))))
>  #define F2(x, y, z) F1(z, x, y)
> -#define F3(x, y, z) (x ^ y ^ z)
> -#define F4(x, y, z) (y ^ (x | ~z))
> +#define F3(x, y, z) ((x) ^ (y) ^ (z))
> +#define F4(x, y, z) ((y) ^ ((x) | ~(z)))
>  
>  /* This is the central step in the MD5 algorithm. */
>  #define MD5STEP(f,w,x,y,z,in,s) \
> -	 (w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
> +	 (w += f(x,y,z) + (in), (w) = ((w)<<(s) | (w)>>(32-(s))) + (x))

While we are on the topic of nitpicking, it may be appropriate to use
f((x),(y),(z)) if we want to be that paranoid ;-)



Sincerely,
    Lars Marowsky-Brée <lmb at suse.de>

-- 
High Availability & Clustering	   \\\  /// 
SUSE Labs, Research and Development \honk/ 
SUSE LINUX AG - A Novell company     \\// 



More information about the Linux-HA-Dev mailing list