%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Copyright: 2010 Integrated Sytems Laboratory, ETH Zurich %% http://www.iis.ee.ethz.ch/~sha3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function hv = cubehash(m,h,r,b) % -- INITIALIZATION ------------------------------------------------------- x = zeros(1,32); x(1) = h/8; x(2) = b; x(3) = r; for i=1:10*r, x = roundr(x); end % -- PROCESS -------------------------------------------------------------- for i=1:size(m,1), for k=1:b*8/32 x(k) = bitxor(x(k), m(i,k)); end for j=1:r, x = roundr(x); end end % -- FINALIZATION --------------------------------------------------------- x(32) = bitxor(x(32), hex2dec('00000001')); for i=1:10*r, x = roundr(x); end % -- OUTPUT --------------------------------------------------------------- hv = zeros(1,h/8); for i=1:h/32, hv(4*i-3) = bitshift(bitand(x(i),hex2dec('000000FF')), -0); hv(4*i-2) = bitshift(bitand(x(i),hex2dec('0000FF00')), -8); hv(4*i-1) = bitshift(bitand(x(i),hex2dec('00FF0000')), -16); hv(4*i) = bitshift(bitand(x(i),hex2dec('FF000000')), -24); end