%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% 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