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