%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Copyright: 2010 Integrated Sytems Laboratory, ETH Zurich
%%            http://www.iis.ee.ethz.ch/~sha3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function hashval = Luffa(data, databitlen, hashbitlen)

blocksize=256;
IV= {'6d251e69','44b051e0','4eaa6fb4','dbf78465','6e292011','90152df4','ee058139','def610bb','c3b44b95','d9d2f256','70eee9a0','de099fa3','5d9b0557','8fc944b3','cf1ccf0e','746cd581','f7efc89d','5dba5781','04016ce5','ad659c05','0306194f','666d1836','24aa230a','8b264ae7','858075d5','36d79cce','e571f7d7','204b1f67','35870c6a','57e9e923','14bcb808','7cde72ce','6c68e9be','5ec41e22','c825b7c7','affb4363','f5df3999','0fc688f1','b07224cc','03e86cea'};

c0={'181cca53','380cde06','5b6f0876','f16f8594','7e106ce9','38979cb0','bb62f364','92e93c29','9a025047','cff2a940'};

if hashbitlen == 256
    statewidth=3;
else
    statewidth=5;
end

msg=zeros(databitlen/blocksize, 8, 'uint32');
for i=1:databitlen/blocksize
    for j=1:8
        msg(i,j) = hex2dec(data(i,(j-1)*8+1:j*8));
    end
end

state=zeros(1,statewidth*8,'uint32');
for i=1:statewidth*8
    state(i)=hex2dec(IV(i));
end

c=zeros(1,statewidth*2,'uint32');
for i=1:statewidth*2
    c(i)=hex2dec(c0(i));
end

for i=1:databitlen/blocksize
    state=rnd(state, statewidth, msg(i,:), c);
end

pad='80';
endmsg=[pad, sprintf('%062X',0)];
msg=zeros(1, 8, 'uint32');
for j=1:8
    msg(j) = hex2dec(endmsg((j-1)*8+1:j*8));
end

c=zeros(1,statewidth*2,'uint32');
for i=1:statewidth*2
    c(i)=hex2dec(c0(i));
end

state=rnd(state, statewidth, msg, c);

hashval=final(state, statewidth, c0, hashbitlen);




end

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