%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Copyright: 2010 Integrated Sytems Laboratory, ETH Zurich
%% http://www.iis.ee.ethz.ch/~sha3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
clc;
rnd = 0;
nmax = 2;
N = 1;
R = 79.5; % 10/79.5 Latency
disp(['Start generating ' num2str(N) ' messages for Groestl-256'])
stm = fopen('groestl256_stimuli.asc', 'w', 'native');
exp = fopen('groestl256_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
% m1=[hex2dec('61') hex2dec('63') hex2dec('65') hex2dec('67') hex2dec('69') hex2dec('6b') hex2dec('6d') hex2dec('80');
% hex2dec('62') hex2dec('64') hex2dec('66') hex2dec('68') hex2dec('6a') hex2dec('6c') hex2dec('6e') hex2dec('00');
% hex2dec('63') hex2dec('65') hex2dec('67') hex2dec('69') hex2dec('6b') hex2dec('6d') hex2dec('6f') hex2dec('00');
% hex2dec('64') hex2dec('66') hex2dec('68') hex2dec('6a') hex2dec('6c') hex2dec('6e') hex2dec('70') hex2dec('00');
% hex2dec('62') hex2dec('64') hex2dec('66') hex2dec('68') hex2dec('6a') hex2dec('6c') hex2dec('6e') hex2dec('00');
% hex2dec('63') hex2dec('65') hex2dec('67') hex2dec('69') hex2dec('6b') hex2dec('6d') hex2dec('6f') hex2dec('00');
% hex2dec('64') hex2dec('66') hex2dec('68') hex2dec('6a') hex2dec('6c') hex2dec('6e') hex2dec('70') hex2dec('00');
% hex2dec('65') hex2dec('67') hex2dec('69') hex2dec('6b') hex2dec('6d') hex2dec('6f') hex2dec('71') hex2dec('00')];
%
% M=zeros(8,16);
% M(:,1:8)=m1;
% M(8,16)=2;
% n=2;
%
% H = groestl256_hash(M,n);
%
% for k=0:n-1
% fprintf(stm, '%X %X ',[1 1]);
% for i=1:8
% fprintf(stm, '%02X%02X%02X%02X%02X%02X%02X%02X', M(:,k*8+i));
% end
% fprintf(stm,'\n');
% for ii=1:2*R,
% fprintf(stm, '%X %X %0128X\n', [1 0 0]);
% end
% end
% for ii=1:2*R+1,
% fprintf(stm, '%X %X %0128X\n', [1 0 0]);
% end
% 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\n', H);
% RANDOM INPUT ------------------------------------------------------------
for j=1:N;
if rnd == 0,
n = nmax;
else
n = ceil(nmax*rand(1));
end
M = round((2^8-1)*rand(8,8*n)); %Create random message
M = round((2^8-1)*ones(8,8*n)); %Create all-ones message
H = groestl256_hash(M,n);
for k=0:n-1
fprintf(stm, '%X %X ',[1 1]);
for i=1:8
fprintf(stm, '%02X%02X%02X%02X%02X%02X%02X%02X', M(:,k*8+i));
end
fprintf(stm,'\n');
for ii=1:2*R,
fprintf(stm, '%X %X %0128X\n', [1 0 0]);
end
end
for ii=1:2*R+1,
fprintf(stm, '%X %X %0128X\n', [1 0 0]);
end
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\n', H);
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')