%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Copyright: 2010 Integrated Sytems Laboratory, ETH Zurich %% http://www.iis.ee.ethz.ch/~sha3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [o] = mixbytes(in) %Mixbytes multplies input matrix in with constant circular matrix B %over the finite F256 Rijndael Gallois Field %Define fimath object % F=fimath; % F.OverflowMode='wrap'; % F.ProductWordLength=8; % F.ProductMode='KeepLSB'; % F.SumWordLength=8; % F.SumMode='KeepLSB'; % F.RoundMode='fix'; % %Define numerictype object % T=numerictype(0,8,0); B=[2,2,3,4,5,3,5,7]; B=[B;circshift(B,[0,1]);circshift(B,[0,2]);circshift(B,[0,3]);circshift(B,[0,4]);circshift(B,[0,5]);circshift(B,[0,6]);circshift(B,[0,7])]; % B=fi(B,T,F); % o=fi(zeros(8,8),T,F); o=zeros(8,8); for i=1:8 for j=1:8 for k=1:8 a=B(i,k); b=in(k,j); % p=fi(0,T,F); p=0; for l=1:8 if(bitget(b,1)==1) p=bitxor(p,a); end hibit=bitget(a,8); a=bitshift(a,1); if(hibit==1) % a=bitxor(a,fi(27,T,F)); a=bitxor(a,27); end b=bitshift(b,-1); end o(i,j)=bitxor(o(i,j),p); end end end end