%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Copyright: 2010 Integrated Sytems Laboratory, ETH Zurich %% http://www.iis.ee.ethz.ch/~sha3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function s = GExp256(block) %clear; clc; g =[[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 3, 0, 0, 3, 3, 3, 3, 0, 0, 2, 0, 0, 3, 0, 2, 3, 2, 2, 1, 0, 2, 2, 3, 0, 3, 0, 0, 1, 0, 2, 1, 2, 3, 3, 3, 1, 2, 3, 3, 0, 1, 1, 1, 3, 1, 1, 1, 1, 0, 0, 3, 0, 0, 0, 3, 1, 3, 3, 2, 2, 2, 3, 0, 0, 2, 2, 3, 0, 1, 1, 2, 0, 1, 2, 1, 3, 0, 1, 2, 3, 1, 0, 1, 2, 1, 3, 3, 3, 3, 3, 2, 1, 1, 0, 2, 3, 2, 1, 0, 2, 3, 1, 1, 0, 2, 3, 3, 2, 0, 2, 0]; [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 3, 0, 2, 1, 1, 1, 3, 0, 1, 2, 0, 2, 3, 1, 0, 2, 3, 1, 1, 1, 3, 0, 3, 2, 3, 0, 3, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 3, 3, 2, 2, 3, 0, 2, 2, 2, 1, 0, 2, 3, 0, 0, 2, 0, 3, 1, 2, 3, 3, 0, 3, 0, 1, 3, 0, 3, 3, 2, 0, 2, 3, 0, 1, 3, 3, 3, 0, 0, 0, 1, 3, 0, 1, 3, 1, 1, 1, 1, 2, 1, 2, 1, 1, 0, 2, 1, 1, 1, 0, 0, 2, 1, 1, 0, 1, 1, 2, 1, 2]; [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 3, 3, 2, 0, 3, 3, 1, 3, 1, 1, 2, 2, 2, 2, 3, 1, 3, 0, 1, 0, 0, 1, 0, 1, 2, 3, 3, 3, 0, 2, 0, 2, 2, 3, 2, 1, 2, 2, 1, 0, 0, 1, 0, 2, 3, 1, 1, 2, 1, 2, 2, 3, 0, 2, 1, 2, 1, 0, 3, 2, 1, 0, 3, 1, 0, 1, 0, 0, 0, 3, 0, 1, 2, 3, 3, 3, 0, 2, 2, 3, 0, 2, 2, 3, 3, 1, 3, 3, 3, 0, 1, 2, 2, 0, 3, 1, 1, 1, 0, 3, 3, 3, 2, 0, 3, 2, 0, 1, 2, 3]; [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 3, 3, 2, 0, 3, 3, 1, 3, 1, 1, 2, 2, 2, 2, 3, 1, 3, 0, 1, 0, 0, 1, 0, 1, 2, 3, 3, 3, 0, 2, 0, 2, 2, 3, 2, 1, 2, 2, 1, 0, 0, 1, 2, 2, 3, 1, 1, 2, 1, 2, 2, 3, 0, 2, 1, 2, 1, 0, 3, 2, 1, 0, 3, 1, 0, 1, 0, 0, 0, 3, 0, 1, 2, 3, 3, 3, 0, 2, 2, 3, 0, 2, 2, 3, 3, 1, 3, 3, 3, 0, 1, 2, 2, 0, 3, 1, 1, 1, 0, 3, 3, 3, 2, 0, 3, 1, 0, 0, 1]; [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 2, 0, 0, 0, 1, 3, 3, 3, 3, 3, 1, 2, 2, 0, 1, 0, 1, 0, 3, 2, 3, 3, 0, 2, 0, 1, 3, 3, 1, 2, 2, 1, 3, 1, 3, 1, 1, 2, 2, 3, 0, 1, 3, 2, 3, 3, 2, 1, 1, 1, 1, 2, 2, 0, 1, 1, 2, 0, 3, 2, 0, 2, 1, 2, 1, 2, 0, 0, 1, 2, 0, 2, 2, 0, 1, 3, 2, 1, 3, 3, 2, 2, 2, 3, 1, 0, 0, 2, 0, 1, 2, 1, 1, 0, 1, 2, 2, 1, 3, 2, 1, 2, 3, 1, 1, 3, 3, 1, 3, 1]; [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 1, 2, 2, 2, 2, 3, 3, 3, 2, 3, 3, 3, 2, 3, 2, 0, 1, 2, 0, 2, 3, 1, 3, 2, 2, 0, 2, 3, 2, 2, 3, 0, 3, 1, 2, 2, 3, 3, 2, 1, 0, 3, 3, 0, 1, 0, 0, 2, 1, 3, 1, 1, 2, 0, 3, 3, 3, 3, 1, 2, 0, 0, 2, 0, 3, 3, 2, 3, 3, 0, 2, 3, 3, 1, 2, 1, 0, 3, 3, 0, 3, 1, 3, 1, 1, 3, 2, 2, 0, 1, 2, 1, 1, 0, 2, 0, 1, 2, 0, 1, 1, 2, 2, 2, 3, 3, 2, 3, 3, 2]; [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 2, 1, 0, 0, 0, 0, 3, 3, 2, 2, 3, 1, 3, 3, 1, 3, 1, 2, 2, 1, 3, 1, 1, 1, 2, 2, 3, 2, 2, 1, 3, 1, 2, 1, 2, 3, 0, 1, 3, 1, 2, 3, 1, 0, 3, 2, 3, 0, 2, 3, 3, 1, 1, 0, 3, 1, 1, 2, 2, 0, 0, 0, 0, 3, 1, 1, 3, 1, 0, 2, 0, 1, 2, 0, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 3, 3, 1, 0, 0, 1, 2, 1, 1, 0, 2, 3, 3, 1, 3, 2, 2, 2, 2, 3, 0, 1, 2, 2, 1, 1]; [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 1, 0, 2, 2, 3, 3, 3, 0, 3, 1, 2, 2, 0, 1, 1, 0, 3, 1, 0, 2, 0, 3, 0, 1, 2, 1, 2, 3, 3, 0, 3, 3, 0, 2, 1, 0, 0, 0, 3, 1, 2, 0, 3, 0, 0, 1, 2, 3, 3, 0, 1, 3, 3, 1, 2, 1, 0, 2, 3, 0, 0, 3, 0, 0, 2, 1, 2, 1, 2, 0, 2, 2, 1, 3, 3, 3, 3, 3, 0, 2, 0, 0, 1, 2, 1, 3, 0, 0, 2, 3, 2, 0, 3, 1, 3, 3, 0, 2, 3, 3, 0, 3, 3, 2, 0, 0, 3, 0, 2, 2, 0]; [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 1, 0, 2, 2, 3, 3, 3, 0, 3, 1, 2, 2, 0, 1, 1, 0, 3, 1, 0, 2, 0, 3, 0, 1, 2, 1, 2, 3, 3, 0, 3, 3, 0, 2, 1, 0, 0, 0, 3, 1, 2, 0, 3, 3, 0, 1, 2, 3, 3, 0, 1, 3, 3, 1, 2, 1, 0, 2, 3, 0, 0, 3, 0, 0, 2, 1, 2, 1, 2, 0, 2, 2, 1, 3, 3, 3, 3, 3, 0, 2, 0, 0, 1, 2, 1, 3, 0, 0, 2, 3, 2, 0, 3, 1, 3, 3, 0, 2, 3, 3, 0, 3, 3, 2, 0, 0, 3, 0, 1, 2]; [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 3, 1, 2, 3, 1, 2, 0, 0, 1, 3, 3, 1, 3, 1, 0, 2, 1, 3, 0, 1, 0, 1, 1, 3, 2, 3, 2, 1, 2, 2, 2, 2, 0, 1, 1, 1, 2, 1, 0, 2, 2, 0, 0, 2, 1, 2, 3, 0, 3, 2, 2, 3, 1, 0, 1, 3, 1, 2, 0, 3, 1, 3, 2, 2, 0, 3, 1, 1, 0, 1, 1, 2, 3, 0, 1, 3, 2, 1, 3, 0, 2, 1, 3, 2, 3, 1, 2, 0, 3, 1, 2, 2, 3, 0, 1, 0, 2, 3, 2, 0, 0, 3, 1, 0, 3, 3, 2, 0, 2, 3, 3, 3, 3]; [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3, 3, 1, 0, 2, 3, 0, 3, 1, 1, 1, 3, 0, 1, 3, 0, 0, 1, 0, 0, 3, 3, 0, 2, 2, 2, 2, 2, 2, 1, 0, 2, 1, 0, 3, 0, 0, 0, 0, 2, 1, 3, 2, 2, 2, 0, 0, 0, 1, 2, 1, 2, 2, 2, 1, 0, 1, 2, 3, 3, 1, 0, 2, 0, 3, 2, 0, 0, 2, 0, 0, 3, 3, 1, 3, 2, 2, 1, 3, 1, 1, 3, 3, 3, 3, 0, 0, 3, 3, 1, 2, 0, 3, 1, 1, 2, 1, 3, 3, 0, 0, 0, 3, 2, 3, 2, 3, 0, 3, 1, 1, 3, 2, 0]; [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3, 3, 1, 0, 2, 3, 0, 3, 1, 1, 1, 3, 0, 1, 3, 0, 0, 1, 0, 0, 3, 3, 0, 2, 2, 2, 2, 2, 2, 1, 0, 2, 1, 0, 3, 0, 0, 0, 0, 2, 1, 3, 2, 2, 2, 0, 1, 0, 1, 2, 1, 2, 2, 2, 1, 0, 1, 2, 3, 3, 1, 0, 2, 0, 3, 2, 0, 0, 2, 0, 0, 3, 3, 1, 3, 2, 2, 1, 3, 1, 1, 3, 3, 3, 3, 0, 0, 3, 3, 1, 2, 0, 3, 1, 1, 2, 1, 3, 3, 0, 0, 0, 3, 2, 3, 2, 3, 0, 3, 1, 1, 2, 2]; [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3, 3, 1, 0, 2, 3, 0, 3, 1, 1, 1, 3, 0, 1, 3, 0, 0, 1, 0, 0, 3, 3, 0, 2, 2, 2, 2, 2, 2, 1, 0, 2, 1, 0, 3, 0, 0, 0, 0, 2, 1, 3, 2, 2, 2, 3, 1, 0, 1, 2, 1, 2, 2, 2, 1, 0, 1, 2, 3, 3, 1, 0, 2, 0, 3, 2, 0, 0, 2, 0, 0, 3, 3, 1, 3, 2, 2, 1, 3, 1, 1, 3, 3, 3, 3, 0, 0, 3, 3, 1, 2, 0, 3, 1, 1, 2, 1, 3, 3, 0, 0, 0, 3, 2, 3, 2, 3, 0, 0, 1, 1, 0]; [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 2, 2, 2, 3, 1, 1, 3, 2, 1, 3, 1, 2, 1, 3, 1, 1, 0, 1, 3, 2, 2, 0, 0, 0, 1, 2, 3, 2, 2, 0, 2, 2, 2, 1, 0, 1, 2, 2, 3, 1, 1, 2, 3, 1, 0, 3, 2, 1, 3, 2, 1, 2, 0, 2, 2, 2, 0, 2, 0, 3, 0, 0, 2, 1, 2, 0, 0, 1, 1, 0, 0, 2, 3, 3, 1, 2, 1, 3, 2, 3, 0, 0, 3, 3, 1, 0, 1, 1, 1, 2, 2, 0, 1, 2, 1, 1, 2, 3, 2, 1, 3, 3, 1, 2, 1, 2, 0, 3, 2, 1, 0, 0, 1]; [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 2, 3, 3, 3, 1, 0, 1, 3, 0, 2, 1, 1, 1, 0, 2, 0, 2, 1, 2, 1, 1, 2, 1, 0, 3, 2, 1, 0, 3, 1, 3, 3, 2, 3, 1, 3, 1, 3, 1, 1, 0, 2, 2, 1, 1, 2, 0, 2, 1, 0, 0, 2, 2, 0, 3, 0, 2, 2, 1, 1, 0, 1, 2, 1, 1, 3, 1, 3, 3, 3, 3, 0, 0, 1, 3, 3, 1, 2, 2, 3, 3, 0, 0, 3, 3, 3, 3, 0, 0, 1, 2, 1, 1, 0, 0, 2, 1, 1, 2, 1, 2, 1, 1, 3, 2, 1, 0, 1, 0, 1]; [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 2, 0, 0, 2, 2, 2, 2, 0, 0, 1, 0, 0, 2, 0, 1, 2, 1, 1, 3, 0, 1, 1, 2, 0, 2, 0, 0, 3, 0, 1, 3, 1, 2, 2, 2, 3, 1, 2, 2, 0, 3, 3, 3, 2, 3, 3, 3, 3, 0, 0, 2, 0, 0, 0, 2, 3, 2, 2, 1, 1, 1, 2, 0, 0, 1, 1, 2, 0, 3, 3, 1, 0, 3, 1, 3, 2, 0, 3, 1, 2, 3, 0, 3, 1, 3, 2, 2, 2, 2, 2, 1, 3, 3, 0, 1, 2, 1, 3, 0, 1, 2, 3, 3, 0, 1, 2, 2, 3, 0, 0, 1, 1]]; msg=zeros(1,16); temp=dec2bin(block,8); for i=1:4 for j=1:4 msg((i-1)*4+j)=bin2dec(temp(i,2*j-1:2*j)); end end e=zeros(1,128); for k=1:128 for i=1:16 if g(i,k)==0 s=0; elseif g(i,k)==1 s=msg(i); elseif g(i,k)==2 if msg(i)==0 || msg(i)==1 s=bitshift(msg(i),1); elseif msg(i)==2 s=3; else s=1; end else if msg(i)==0 || msg(i)==1 s=bitxor(bitshift(msg(i),1), msg(i)); elseif msg(i)==2 s=1; else s=2; end end e(k)=bitxor(e(k),s) ; end end %T0 = zeros(8,16); T1 = zeros(8,16); %M1 = zeros(8,32); for i=1:8 %T0(i,:) = d(16*(i-1)+1:(16*i)); T1(i,:) = e(16*(i-1)+1:(16*i)); % for j=1:16 % %M0(i,2*j-1:2*j)=dec2bin(T0(i,j),2); % M1(i,2*j-1:2*j)=dec2bin(T1(i,j),2); % end end %M0=uint8(M0-48); %M1=uint8(M1-48); s=zeros(1,8,'uint32'); for i=1:8 tmp=dec2bin(T1(i,:))'; tmp=tmp(:)'; s(i)=bin2dec(tmp); end % q=4; % m0=zeros(8,32,'uint8'); % m1=zeros(8,32,'uint8'); % for i=1:q % for j=1:16 % m0(i,j) = M0(i,2*j-1); % m0(i,16+j) = M0(q+i,2*j-1); % m0(q+i,j) = M0(i,2*j); % m0(q+i,16+j) = M0(q+i, 2*j); % m1(i,j) = M1(i,2*j-1); % m1(i,16+j) = M1(q+i,2*j-1); % m1(q+i,j) = M1(i,2*j); % m1(q+i,16+j) = M1(q+i, 2*j); % % end % end % isequal(m0, m1) % % % m0=num2str(m0); % % m1=num2str(m1); %disp('Expansion Matrix :'); %disp(m0); %expansion lut % tmp=zeros(1,32); % for i=1:16 % tmp(1, 2*i-1:2*i) = dec2bin(msg(i),2); % end % tmp = uint8(tmp-48); % % b=zeros(1,4); % for i=1:4 % b(i)=bin2dec(num2str(tmp(8*(i-1)+1:8*i))); % % end % % b=b+1; % % s = zeros(8,1); % for i=1:8 % s(i) = Exp256(i, b); % end % s=dec2bin(s, 32); % %disp('Expansion Matrix using LUT:'); % %disp(s '\n'); % % %compare results % isequal(s,m1); % % %reverse calc % MRev = zeros(8,32); % for i=1:q % for j=1:16 % MRev(i,2*j-1) = s(i,j); % MRev(q+i,2*j-1) = s(i,16+j); % MRev(i,2*j) = s(q+i,j); % MRev(q+i, 2*j) = s(q+i,16+j); % % end % end % MRev = MRev-48; % sum(sum(MRev)) % sum(sum(M0)) % MRev=num2str(MRev) % M0=num2str(M0) % %m0=zeros(8,32); % for i=1:q % for j=1:16 % m0(i,j) = MRev(i,2*j-1); % m0(i,16+j) = MRev(q+i,2*j-1); % m0(q+i,j) = MRev(i,2*j); % m0(q+i,16+j) = MRev(q+i, 2*j); % % end % end end