In [30]:
2 ^ 32, 1 << 32, 2 << 31
Out[30]:
In [10]:
@time 1 << 31
@time 2 ^ 31
Out[10]:
In [37]:
function roll(x, n)
return (x << n) % (1 << 32) + (x >> (32 - n))
end
Out[37]:
We can test our operation:
In [39]:
a = 0x11111111
b = 0x01020304
c = 0x77777777
d = 0x01234567
println(c + d)
println(0x789abcde)
c = c + d
println(xor(b, c))
println(0x7998bfda)
b = xor(b, c)
println(roll(b, 7))
println(0xcc5fed3c)
Now the "quarter round" is implemented like this:
In [48]:
function quarter_round(a, b, c, d)
a = (a + b) % (1 << 32)
d = roll(xor(d, a), 16)
c = (c + d) % (1 << 32)
b = roll(xor(b, c), 12)
a = (a + b) % (1 << 32)
d = roll(xor(d, a), 8)
c = (c + d) % (1 << 32)
b = roll(xor(b, c), 7)
return a, b, c, d
end
Out[48]:
In [49]:
a = 0x11111111
b = 0x01020304
c = 0x9b8d6f43
d = 0x01234567
quarter_round(a, b, c, d)
Out[49]:
In [50]:
typeof(a)
Out[50]:
In [51]:
0xea2a92f4, 0xcb1cf8ce, 0x4581472e, 0x5881c4bb
Out[51]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]: