%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Copyright: 2010 Integrated Sytems Laboratory, ETH Zurich
%% http://www.iis.ee.ethz.ch/~sha3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function hashval = final(state, statewidth, c0, hashbitlen)
c=zeros(1,statewidth*2,'uint32');
for i=1:statewidth*2
c(i)=hex2dec(c0(i));
end
%if databitlen >= 256
msg=zeros(1, statewidth*8, 'uint32');
state=rnd(state, statewidth, msg, c);
%end
hashvaltmp=zeros(1, hashbitlen/32, 'uint32');
for i=1:8
for j=0:statewidth-1
hashvaltmp(i)=bitxor(hashvaltmp(i), state(i+8*j));
end
if i==1
hashval=dec2hex(hashvaltmp(i),8);
else
hashval=cat(2,hashval,dec2hex(hashvaltmp(i),8));
end
end
if hashbitlen == 512
state=rnd(state, statewidth, msg, c);
for i=1:8
for j=0:statewidth-1
hashvaltmp(i+8)=bitxor(hashvaltmp(i+8), state(i+8*j));
end
% if i==1
% hashval=dec2hex(hashvaltmp(i+8),8);
% else
hashval=cat(2,hashval,dec2hex(hashvaltmp(i+8),8));
% end
end
end
end