%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Copyright: 2010 Integrated Sytems Laboratory, ETH Zurich
%% http://www.iis.ee.ethz.ch/~sha3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
clc;
N = 1; % # Messages
nmax = 1; % Maximal message size
rnd = 0; % Rnd Message Size (On:1 - Off:0)
arc = 80; % 20 - 160 - 80
if arc == 20,
disp(['Start generating ' num2str(N) ' messages for [4G]-BLAKE-32'])
elseif arc == 160,
disp(['Start generating ' num2str(N) ' messages for [1/2G]-BLAKE-32'])
elseif arc == 80,
disp(['Start generating ' num2str(N) ' messages for [1G]-BLAKE-32'])
else
disp('Invalid architecture')
end
stm = fopen(['blake32_stimuli.asc'], 'w', 'native');
exp = fopen(['blake32_expresp.asc'], 'w', 'native');
% RESET Cycles
fprintf(stm, '%X %X %0128X %016X\n', [0 0 0 0]);
fprintf(stm, '%X %X %0128X %016X\n', [0 0 0 0]);
fprintf(stm, '%X %X %0128X %016X\n', [1 0 0 0]);
fprintf(stm, '%X %X %0128X %016X\n', [1 0 0 0]);
%%%%% START SIMULATION %%%%%
% RANDOM INPUT -------------------------------------------------------------
for j=1:N,
if rnd == 0,
n = nmax;
else
n = ceil(nmax*rand(1));
end
M = round((2^32-1)*rand(n,16));
S = round(zeros(1,4)); %S = round((2^32-1)*rand(1,4));
T = round((2^32-1)*rand(n,2));
% for power
n = 2;
M = round((2^32-1)*ones(n,16));
T = [0 512; 0 512];
H = blakehash(M, S, T);
for i=1:n
fprintf(stm, '%X %X %08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X ', [1 1 M(i,:)]);
fprintf(stm, '%08X%08X\n', T(i,:));
for ii=1:arc,
fprintf(stm, '%X %X %0128X %016X\n', [1 0 0 0]);
end
end
fprintf(exp, '%08X%08X%08X%08X%08X%08X%08X%08X\n', H);
fprintf(stm, '%X %X %0128X %016X\n', [1 0 0 0]);
end
% END RANDOM INPUT -------------------------------------------------------------
fprintf(stm, '%X %X %0128X %016X\n', [1 0 0 0]);
fprintf(stm, '%X %X %0128X %016X\n', [1 0 0 0]);
fprintf(stm, '%X %X %0128X %016X\n', [1 0 0 0]);
fprintf(stm, '%X %X %0128X %016X\n', [1 0 0 0]);
fclose(stm);
fclose(exp);
disp('End generation')