%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Copyright: 2010 Integrated Sytems Laboratory, ETH Zurich
%% http://www.iis.ee.ethz.ch/~sha3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
clc;
N = 1;
n = 73;
it = 23;
finit = 39;
hashsize=256;
disp(['Start generating ' num2str(N) ' test vectors for Hamsi'])
stm = fopen('hamsi256_stimuli.asc', 'w', 'native');
exp = fopen('hamsi256_expresp.asc', 'w', 'native');
% RESET Cycles
fprintf(stm, '%X %X %X %08X \n', [0 0 0 0]);
fprintf(stm, '%X %X %X %08X \n', [0 0 0 0]);
fprintf(stm, '%X %X %X %08X \n', [1 0 0 0]);
fprintf(stm, '%X %X %X %08X \n', [1 0 0 0]);
%%%%% START SIMULATION %%%%%
% ZERO INPUT ------------------------------------------------------------
% data
% Msg = zeros(N,1);
% for j=1:N
%
%
% fprintf(stm, '%X %X %X %08X\n', [1 1 0 Msg(j)]);
%
% for i=1:it,
%
% fprintf(stm, '%X %X %X %08X\n', [1 0 0 0]);
% end
% end
%
% Hs = Hamsi256(dec2hex(Msg,8),N*32);
% fprintf(exp, '%s\n', Hs);
%
% Len = uint64(hashsize*N);
% Lenbytes = bitshift(Len, -32);
% fprintf(stm, '%X %X %X %08X\n', [1 1 0 Lenbytes]);
%
% for i=1:it,
%
% fprintf(stm, '%X %X %X %08X\n', [1 0 0 0]);
% end
%
% % lenbytes + 4 - final round
% Lenbytes = bitand(Len, 2^32-1);
% fprintf(stm, '%X %X %X %08X\n', [1 1 1 Lenbytes]);
%
% for i=1:finit
%
% fprintf(stm, '%X %X %X %08X\n', [1 0 1 0]);
% end
%
% % MSG SEPARATION --------------------------------------------------------
%
% for i=1:it,
%
% fprintf(stm, '%X %X %X %08X\n', [1 0 0 0]);
% end
%
% RANDOM INPUT-------------------------------------------------------------
for k=1:N
Msg = round((2^32-1)*rand(n,1));
% power sim
n = 32;
Msg = round((2^32-1)*ones(n,1));
for j=1:n
% data
fprintf(stm, '%X %X %X %08X\n', [1 1 0 Msg(j)]);
for i=1:it,
fprintf(stm, '%X %X %X %08X\n', [1 0 0 0]);
end
end
Hs = Hamsi256(dec2hex(Msg,8),n*32);
fprintf(exp, '%s\n', Hs);
% lenbytes - 3 rounds
Len = uint64(hashsize*n);
Lenbytes = bitshift(Len, -32);
fprintf(stm, '%X %X %X %08X\n', [1 1 0 Lenbytes]);
for i=1:it,
fprintf(stm, '%X %X %X %08X\n', [1 0 0 0]);
end
% lenbytes + 4 - final round
Lenbytes = bitand(Len, 2^32-1);
fprintf(stm, '%X %X %X %08X\n', [1 1 1 Lenbytes]);
for i=1:finit
fprintf(stm, '%X %X %X %08X\n', [1 0 1 0]);
end
% END ROUND
for i=1:it,
fprintf(stm, '%X %X %X %08X\n', [1 0 0 0]);
end
end
fclose(stm);
fclose(exp);
disp('End generation')