%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Copyright: 2010 Integrated Sytems Laboratory, ETH Zurich
%% http://www.iis.ee.ethz.ch/~sha3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
clc;
rnd = 0;
nmax = 2;
N = 1;
R = 36; % 35 Rounds
disp(['Start generating ' num2str(N) ' messages for JH-256'])
stm = fopen(['jh_stimuli.asc'], 'w', 'native');
exp = fopen(['jh_expresp.asc'], 'w', 'native');
% RESET Cycles
fprintf(stm, '%X %X %0128X\n', [0 0 0]);
fprintf(stm, '%X %X %0128X\n', [0 0 0]);
fprintf(stm, '%X %X %0128X\n', [1 0 0]);
fprintf(stm, '%X %X %0128X\n', [1 0 0]);
%Test environment
%
% M=zeros(1,64);
% M(1,1)=128;
% n=1;
%
% hash = jh256_hash(M,n);
%
% for k=0:n-1
% if k==0,
% fprintf(stm, '%X %X ',[1 1]);
% else
% fprintf(stm, '%X %X ',[1 1]);
% end
%
% fprintf(stm, '%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X \n', M(1,1+k*64:(64+k*64)));
% fprintf(stm, '\n');
% for ii=1:R-1,
% fprintf(stm, '%X %X %0128X\n', [1 0 0]);
% end
% end
% fprintf(stm, '%X %X %0128X\n',[1 0 0]);
% fprintf(stm, '%X %X %0128X\n',[1 0 0]);
% fprintf(exp, '%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X\n', hash);
% fprintf(exp, '\n');
%%%%% START SIMULATION %%%%%
% RANDOM INPUT
% -------------------------------------------------------------
for j=1:N;
if rnd == 0,
n = nmax;
else
n = ceil(nmax*rand(1));
end
M = round((2^8-1)*rand(1,64*n)); %Create random message
n = 2;
M = round((2^8-1)*ones(1,64*n));
hash = jh256_hash(M,n);
for k=0:n-1
fprintf(stm, '%X %X ',[1 1]);
fprintf(stm, '%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X\n', M(1,1+k*64:64+k*64));
fprintf(stm, '\n');
for ii=1:R-1,
fprintf(stm, '%X %X %0128X\n', [1 0 0]);
end
end
fprintf(stm, '%X %X %0128X\n',[1 0 0]);
fprintf(stm, '%X %X %0128X\n',[1 0 0]);
fprintf(exp, '%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X', hash);
fprintf(exp, '\n');
end
% END RANDOM INPUT -------------------------------------------------------------
fprintf(stm, '%X %X %0128X\n', [1 0 0]);
fprintf(stm, '%X %X %0128X\n', [1 0 0]);
fprintf(stm, '%X %X %0128X\n', [1 0 0]);
fprintf(stm, '%X %X %0128X\n', [1 0 0]);
fclose(stm);
fclose(exp);
disp('End generation')