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

lat = 4*166+1+10;   % latency for single block
it = 100;   % number of end rounds
N  = 1;     % number of random input messages

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


stm = fopen('../simvectors/shabal256_stimuli.asc', 'w', 'native');
exp = fopen('../simvectors/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%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_block1')]);
% 
% for i=1:164,
%   %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 ------------------------------------------------------------------
msg1 = fi(zeros(1, 16)+2^32-1,0,32,0);
msg2 = fi(zeros(1, 16)+2^32-1,0,32,0);
msg = [msg1,msg2];
[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(msg1)]);

for i=1:164,
    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(msg2)]);
    
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(msg2)]);
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