%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Copyright: 2010 Integrated Sytems Laboratory, ETH Zurich %% http://www.iis.ee.ethz.ch/~sha3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function state = mi(state, statewidth, data) t=zeros(1,8*statewidth); for i=1:8 for j=0:statewidth-1 t(i)=bitxor(t(i), state(i+8*j)); end end t=mult2(t); for j=0:statewidth-1 for i=1:8 state(i+8*j)=bitxor(state(i+8*j), t(i)); end end if statewidth >= 5 for j=0:statewidth-1 for i=1:8 t(i+8*j)=state(i+8*j); end state(8*j+1:8*(j+1))=mult2(state(8*j+1:8*(j+1))); end for j=0:statewidth-1 for i=1:8 state(8*j+i)=bitxor(state(8*j+i), t(8*mod(j+1, statewidth)+i)); end end end if statewidth >= 4 for j=0:statewidth-1 for i=1:8 t(i+8*j)=state(i+8*j); end state(8*j+1:8*(j+1))=mult2(state(8*j+1:8*(j+1))); end for j=0:statewidth-1 for i=1:8 state(8*j+i)=bitxor(state(8*j+i), t(8*mod(j-1+statewidth, statewidth)+i)); end end end for j=0:statewidth-1 for i=1:8 state(i+8*j)=bitxor(state(i+8*j), data(i)); end data=mult2(data); end end