%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% 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')