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

Generated on Fri Sep 24 10:39:12 CEST 2010
Home