Hi,

I've been writing a cryptographic library for GWT (available at
https://bitbucket.org/kennethjor/tovikov) and I ran into a few strange
problems when dealing with integers. I will not be able to post code
to reproduce the errors, simply because I wasn't able to do it with
stand-alone code, yet the errors still happened.

The first error I was getting had to do with integer rotation. I
managed to fix it by implementing my own rotation functions, which can
be found at 
https://bitbucket.org/kennethjor/tovikov/src/f49670bd090a/src/main/com/tovikov/util/IntegerUtil.java.
As mentioned, I wasn't able to reproduce the errors outside of the
library code, but if you want to verify the error, you can check out
the library above, and in the com.tovikov.security.hash, replace all
calls to IntegerUtil.rotateLeft and IntegerUtil.rotateRight with calls
to Integer.rotateLeft and Integer.rotateRight respectively. Then run
"ant webtest" and open up the compiled code in a browser, you will see
that it fails on everything except MD2.

The second error I wasn't able to reproduce neither, but I was able to
implement a work-around. The error happened when implementing SHA-224
and SHA-256. On SHA-256 I took the test vectors from FIPS 180-2, and
after applying the fix above, I was able to succeed on a single-block
message, but still failed on the multi-block message given in that
document. I tracked down the error to a failure in iteration 52 when
processing the second block. When calculating t1 (https://
bitbucket.org/kennethjor/tovikov/src/f49670bd090a/src/main/com/tovikov/
security/hash/Sha256Hash.java#cl-175) the result is supposed to be
0xe167f8cb, but came out as 0xe167f8cc. When I took the numbers used
to calculate t1 and tried to calculate it on its own (0x68f25260 +
0xd6ae79cb + 0x27a50536 + 0x391c0cb3 + 0x41061ab7) I got the right
result, but in the loop for the hash the result wasn't correct. On a
whim I implemented IntegerUtil.forceInt(), which converts the integer
to bytes and then back again, and it all worked.

I apologise if this is all a bit cryptic, but I have been comparing
hexadecimals for the last 5 hours, and I brain hurts :)

Hope this is still somewhat useful to the GWT developers.

Oh, and my GWT version is 2.2.0, not trunk.

Sincerely,
Kenneth Jørgensen

-- 
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to