inputbuffer(intbyteindex + 3) * 16777216#
outputbuffer(intdblindex) = unsignedtolong(dblsum)
intdblindex = intdblindex + 1
next intbyteindex
end sub
'
' ff, gg, hh, and ii transformations for rounds 1, 2, 3, and 4.
' rotation is separate from addition to prevent recomputation.
'
private function ff(a as long, _
b as long, _
c as long, _
d as long, _
x as long, _
s as long, _
ac as long) as long
a = longoverflowadd4(a, (b and c) or (not (b) and d), x, ac)
a = longleftrotate(a, s)
a = longoverflowadd(a, b)
end function
private function gg(a as long, _
b as long, _
c as long, _
d as long, _
x as long, _
s as long, _
ac as long) as long
a = longoverflowadd4(a, (b and d) or (c and not (d)), x, ac)
a = longleftrotate(a, s)
a = longoverflowadd(a, b)
end function
private function hh(a as long, _
b as long, _
c as long, _
d as long, _
x as long, _
s as long, _
ac as long) as long
a = longoverflowadd4(a, b xor c xor d, x, ac)
a = longleftrotate(a, s)
a = longoverflowadd(a, b)
end function
private function ii(a as long, _
b as long, _
c as long, _
d as long, _
x as long, _
s as long, _
ac as long) as long
a = longoverflowadd4(a, c xor (b or not (d)), x, ac)
a = longleftrotate(a, s)
a = longoverflowadd(a, b)
end function
'
' rotate a long to the right
'
function longleftrotate(value as long, bits as long) as long
dim lngsign as long
dim lngi as long
bits = bits mod 32