whirlpool.py: fix WhirlpoolAdd for bug #406407
authorZac Medico <zmedico@gentoo.org>
Mon, 5 Mar 2012 09:55:39 +0000 (01:55 -0800)
committerZac Medico <zmedico@gentoo.org>
Mon, 5 Mar 2012 09:55:39 +0000 (01:55 -0800)
This file is a python port of Whirlpool.c the reference implementation:

  http://www.larc.usp.br/~pbarreto/whirlpool.zip

Comparison of both implementations reveals a difference in loop logic
at the very beginning of the WhirlpoolAdd function, which is fixed now.

pym/portage/util/whirlpool.py

index 8415e87549952b66428af3876aeb4aeabcb57810..c696f6fc009fbf50a5efa74f4d6627587a388fad 100644 (file)
@@ -645,7 +645,7 @@ def WhirlpoolAdd(source, sourceBits, ctx):
     carry = 0
     value = sourceBits
     i = 31
-    while i >= 0 and value != 0:
+    while i >= 0 and (carry != 0 or value != 0):
         carry += ctx.bitLength[i] + ((value % 0x100000000) & 0xff)
         ctx.bitLength[i] = carry % 0x100
         carry >>= 8