%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Copyright: 2010 Integrated Sytems Laboratory, ETH Zurich
%% http://www.iis.ee.ethz.ch/~sha3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
clc;
N = 1;
nmax = 2;
pl = 1;
h = 256;
b = 32;
r = 16;
disp(['Start generating ' num2str(N+1) ' test vectors for CubeHash'...
num2str(r) '/' num2str(b) '-' num2str(h)])
stm = fopen(['cubehash' num2str(h) '_stimuli.asc'], 'w', 'native');
exp = fopen(['cubehash' num2str(h) '_expresp.asc'], 'w', 'native');
% RESET Cycles
fprintf(stm, '%X %X %X %064X\n', [0 0 0 0]);
fprintf(stm, '%X %X %X %064X\n', [0 0 0 0]);
fprintf(stm, '%X %X %X %064X\n', [1 0 0 0]);
fprintf(stm, '%X %X %X %064X\n', [1 0 0 0]);
%%%%% START SIMULATION %%%%%
% ZERO INPUT --------------------------------------------------------------
% n = ceil(nmax*rand(1,1));
% M = zeros(n,b*8/32);
% H = cubehash(M, h, r, b);
%
% for i=1:n
% if i==1,
% fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X\n', [1 1 1 M(i, :)]);
% else
% fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X\n', [1 0 1 M(i, :)]);
% end
%
% for j=1:r*pl-1
% fprintf(stm, '%X %X %X %064X\n', [1 0 0 0]);
% end
% end
%
% for i=1:h/8,
% fprintf(exp, '%02X', H(i));
% end
% fprintf(exp, '\n');
%
% for i=1:r*10*pl+1
% fprintf(stm, '%X %X %X %064X\n', [1 0 0 0]);
% end
% RANDOM INPUT ------------------------------------------------------------
for j=1:N,
n = ceil(nmax*rand(1,1));
M = round((2^8-1)*rand(n,b*8/32));
n = 4;
M = round((2^8-1)*ones(n,b*8/32));
H = cubehash(M, h, r, b);
for i=1:n
if i==1,
fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X\n', [1 1 1 M(i, :)]);
else
fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X\n', [1 0 1 M(i, :)]);
end
for j=1:r*pl-1
fprintf(stm, '%X %X %X %064X\n', [1 0 0 0]);
end
end
for i=1:h/8,
fprintf(exp, '%02X', H(i));
end
fprintf(exp, '\n');
for i=1:r*10*pl+1
fprintf(stm, '%X %X %X %064X\n', [1 0 0 0]);
end
end
% -------------------------------------------------------------------------
for i=1:10*pl,
fprintf(stm, '%X %X %X %064X\n', [1 0 0 0]);
end
% END ROUND ---------------------------------------------------------------
fclose(stm);
fclose(exp);
disp('End generation')