[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Difference between a+b and bit32.band(a+b)
- From: waspoza <waspoza@...>
- Date: Fri, 9 Sep 2011 16:35:07 +0200
On Fri, Sep 9, 2011 at 4:29 PM, Lee Hickey <lahickey@gmail.com> wrote:
>> >> > In digestblock function there is a line: H[1] = band(H[1] + a).
>> >
>> >> I'm not sure about this, but I've heard of people doing similar things
>> >> in JavaScript to force the native Number type to a 32-bit integer,
>> >> taking overflow into account correctly, etc.
>> >
>> > That's what the comment says:
>> > -- Add (mod 2^32) this chunk's hash to result so far:
>>
>> Yes, but on http://en.wikipedia.org/wiki/SHA-2 pseudocode says:
>>
>> Add this chunk's hash to result so far:
>> h0 := h0 + a
>>
>> So in pseudocode this line is no different from other additions. And
>> in lua code there is a difference. Why?
>
> From that same wikipedia page and in reference to the pseudocode:
> Note 1: All variables are unsigned 32 bits and wrap modulo 232 when
> calculating
> So, band(H[1] + a) is achieving that.
So why there is no 'and' here:
local t2 = s0 + maj
And not here:
local t1 = h + s1 + ch + k[i] + w[i]
?