%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Copyright: 2010 Integrated Sytems Laboratory, ETH Zurich
%%            http://www.iis.ee.ethz.ch/~sha3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
clc;
N  = 10;     % number of random input messages

rp = 0; % 0 or 64

lat = 209+rp*5;   % latency for single block
it = 100;   % number of end rounds

disp(['Start generating ' num2str(N+3) ' test vectors for Shabal-256 high-speed'])


stm = fopen('shabal256_stimuli.asc', 'w', 'native');
exp = fopen('shabal256_expresp.asc', 'w', 'native');

% columns: [Rst NewBlock Start Msg] 

% RESET Cycles

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

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

%TWO-BLOCK INPUT (message B)
% messageB_padded =...
% fi(hex2dec(['64636261'; '68676665'; '6C6B6A69'; '706F6E6D'; '74737271'; '78777675'; '302D7A79'; '34333231';...
% '38373635'; '42412D39'; '46454443'; '4A494847'; '4E4D4C4B'; '5251504F'; '56555453'; '5A595857';...
% '3231302D'; '36353433'; '2D393837'; '64636261'; '68676665'; '6C6B6A69'; '706F6E6D'; '74737271';...
% '78777675'; '00807A79'; '00000000'; '00000000'; '00000000'; '00000000'; '00000000'; '00000000';]),0,32,0);
% [state, h] = Hash(256, messageB_padded, 1024);
% 
% msg_block1 =...
% fi(hex2dec(['64636261'; '68676665'; '6C6B6A69'; '706F6E6D'; '74737271'; '78777675'; '302D7A79'; '34333231';...
% '38373635'; '42412D39'; '46454443'; '4A494847'; '4E4D4C4B'; '5251504F'; '56555453'; '5A595857';]),0,32,0);
% 
% msg_block2 =...
% fi(hex2dec(['3231302D'; '36353433'; '2D393837'; '64636261'; '68676665'; '6C6B6A69'; '706F6E6D'; '74737271';...
% '78777675'; '00807A79'; '00000000'; '00000000'; '00000000'; '00000000'; '00000000'; '00000000';]),0,32,0);
% 
% fprintf(exp, '%08X%08X%08X%08X%08X%08X%08X%08XX\n', uint32(h));
% 
% fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X\n', [1 1 1 uint32(msg_block1')]);
% 
% for i=1:51+rp,
%   %fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X\n', [1 0 0 uint32(msg_block1')]);
%   fprintf(stm, '%X %X %X %0128X\n', [1 0 0 0]);
% end
% 
% fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X\n', [1 1 0 uint32(msg_block2')]);
% 
% for i=1:(lat - 1),
%   %fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X\n', [1 0 0 uint32(msg_block2')]);
%   fprintf(stm, '%X %X %X %0128X\n', [1 0 0 0]);
% end

% ZERO INPUT ---------------------------------------------------------------
% msg = fi(zeros(1, 16),0,32,0);
% [state, h] = Hash(256, msg, 512);
% 
% fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X\n', [1 1 1 uint32(msg)]);
% 
% fprintf(exp, '%08X%08X%08X%08X%08X%08X%08X%08X\n', uint32(h));
%     
% for i=1:(lat - 1),
%   fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X\n', [1 0 0 uint32(msg)]);
% end
    
% 1 INPUT ------------------------------------------------------------------
msg = fi(zeros(1, 32)+2^32-1,0,32,0);
[state, h] = Hash(256, msg, 1024);

fprintf(exp, '%08X%08X%08X%08X%08X%08X%08X%08X\n', uint32(h));

fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X\n', [1 1 1 uint32(msg(1:16))]);

for i=1:51+rp,
   fprintf(stm, '%X %X %X %0128X\n', [1 0 0 0]);
end

fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X\n', [1 1 0 uint32(msg(17:32))]);

for i=1:(lat - 1),    
  fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X\n', [1 0 0 uint32(msg(17:32))]);
end


% % RANDOM INPUT -------------------------------------------------------------
% for j=1:N,
%     
%   msg = fi(round((2^32-1)*rand(1,16)),0,32,0);  
%   [state, h] = Hash(256, msg, 512);
% 
%   fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X\n', [1 1 1 uint32(msg)]);
%   
%   fprintf(exp, '%08X%08X%08X%08X%08X%08X%08X%08X\n', uint32(h));
%     
%   for i=1:(lat - 1),    
%     %fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X\n', [1 0 0 uint32(msg)]);
%     fprintf(stm, '%X %X %X %0128X\n', [1 0 0 0]);
%   end
% end
% 
% % --------------------------------------------------------------------------

% END ROUND
for i=1:it,
 
  fprintf(stm, '%X %X %X %0128X\n', [1 0 0 0]);
end

fclose(stm);
fclose(exp);

disp('End generation')

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