%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Copyright: 2010 Integrated Sytems Laboratory, ETH Zurich
%%            http://www.iis.ee.ethz.ch/~sha3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
clc;

N=1;

it=23;
hashsize=256;
rate=1088;
capacity=512;
d=32;
databitlen=N*rate;
block_len=64;
block_num=(rate+capacity)/block_len;

disp(['Start generating ' num2str(3) ' test vectors for Keccak'])


stm = fopen('keccak256_stimuli.asc', 'w', 'native');
exp = fopen('keccak256_expresp.asc', 'w', 'native');

% RESET Cycles

fprintf(stm, '%X %X %X %0272X \n', [0 0 0 0]);
fprintf(stm, '%X %X %X %0272X \n', [0 0 0 0]);
fprintf(stm, '%X %X %X %0272X \n', [1 0 0 0]);
fprintf(stm, '%X %X %X %0272X \n', [1 0 0 0]);

%%%%% START SIMULATION %%%%%

% ZERO INPUT ------------------------------------------------------------

% %data
% Msg = dec2hex(zeros(N,1),8);
% for i=1:5
%    Msg=cat(2,Msg,Msg);
% end
% Msg=cat(2,Msg,dec2hex(zeros(N,1),8));
% Msg=cat(2,Msg,dec2hex(zeros(N,1),8));
% for j=1:N
%     
%     
%     fprintf(stm, '%X %X %X %s\n', [1 1 0 Msg(j,:)]);
%     
%     for i=1:it,
%     
%         fprintf(stm, '%X %X %X %0272X\n', [1 0 0 0]);
%     end
% end
% 
% 
% Hs = Keccak256(Msg, databitlen);
% fprintf(exp, '%s\n', Hs);
%     
% 
% % final round
% pad='01';
% enc_d=enc(d,8);
% enc_r=enc(rate/8,8);
% finalstate=[pad, enc_d, enc_r, pad, sprintf('%0264X',0)]; 
% 
% 
% fprintf(stm, '%X %X %X %s\n', [1 1 0 finalstate]);
% 
% for i=1:it
% 
%     fprintf(stm, '%X %X %X %0272X\n', [1 0 1 0]);
% end
% 
% % MSG SEPARATION --------------------------------------------------------
% 
% for i=1:2,
%   
%   fprintf(stm, '%X %X %X %0272X\n', [1 0 1 0]);
% end
    
% ONE INPUT ---------------------------------------------------------------

% data
Msg = dec2hex(ones(N,1)*(2^32-1),8);
for i=1:5
   Msg=cat(2,Msg,Msg);
end
Msg=cat(2,Msg,dec2hex(ones(N,1)*(2^32-1),8));
Msg=cat(2,Msg,dec2hex(ones(N,1)*(2^32-1),8));
for j=1:N
    fprintf(stm, '%X %X %X %s\n', [1 1 0 Msg(j,:)]);
    
    for i=1:it,
    
        fprintf(stm, '%X %X %X %0272X\n', [1 0 0 0]);
    end
end

Hs = Keccak256(Msg, databitlen);
fprintf(exp, '%s\n', Hs);

% final round
pad='01';
enc_d=enc(d,8);
enc_r=enc(rate/8,8);
finalstate=[pad, enc_d, enc_r, pad, sprintf('%0264X',0)]; 

fprintf(stm, '%X %X %X %s\n', [1 1 0 finalstate]);

for i=1:it

    fprintf(stm, '%X %X %X %0272X\n', [1 0 1 0]);
end

% MSG SEPARATION --------------------------------------------------------

for i=1:2,
  
  fprintf(stm, '%X %X %X %0272X\n', [1 0 1 0]);
end

% RANDOM INPUT-------------------------------------------------------------

% for i=1:32
%     rndm=dec2hex(round((2^32-1)*rand(N,1)),8); 
%     if i==1
%         Msg=rndm;
%     else
%         Msg=cat(2,Msg,rndm);
%     end
% end
% 
% Msg=cat(2,Msg,rndm);
% Msg=cat(2,Msg,rndm);
%     
% for j=1:N
%     fprintf(stm, '%X %X %X %s\n', [1 1 0 Msg(j,:)]);
%     
%     for i=1:it,
%     
%         fprintf(stm, '%X %X %X %0272X\n', [1 0 0 0]);
%     end
% end
% 
% Hs = Keccak256(Msg,databitlen);
% fprintf(exp, '%s\n', Hs);
% 
% % final round
% fprintf(stm, '%X %X %X %s\n', [1 1 0 finalstate]);
% 
% for i=1:it
% 
%     fprintf(stm, '%X %X %X %0272X\n', [1 0 1 0]);
% end
% 
% % END ROUND
% for i=1:2,
%   
%   fprintf(stm, '%X %X %X %0272X\n', [1 0 1 0]);
% end

fclose(stm);
fclose(exp);

disp('End generation')

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