%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Copyright: 2010 Integrated Sytems Laboratory, ETH Zurich %% http://www.iis.ee.ethz.ch/~sha3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear; clc; N = 10; % number of random input messages rp = 0; % 0 or 64 lat = 209+rp*5; % latency for single block it = 100; % number of end rounds disp(['Start generating ' num2str(N+3) ' test vectors for Shabal-256 high-speed']) stm = fopen('shabal256_stimuli.asc', 'w', 'native'); exp = fopen('shabal256_expresp.asc', 'w', 'native'); % columns: [Rst NewBlock Start Msg] % RESET Cycles fprintf(stm, '%X %X %X %0128X\n', [0 0 0 0]); fprintf(stm, '%X %X %X %0128X\n', [0 0 0 0]); fprintf(stm, '%X %X %X %0128X\n', [1 0 0 0]); fprintf(stm, '%X %X %X %0128X\n', [1 0 0 0]); %%%%% START SIMULATION %%%%% %TWO-BLOCK INPUT (message B) % messageB_padded =... % fi(hex2dec(['64636261'; '68676665'; '6C6B6A69'; '706F6E6D'; '74737271'; '78777675'; '302D7A79'; '34333231';... % '38373635'; '42412D39'; '46454443'; '4A494847'; '4E4D4C4B'; '5251504F'; '56555453'; '5A595857';... % '3231302D'; '36353433'; '2D393837'; '64636261'; '68676665'; '6C6B6A69'; '706F6E6D'; '74737271';... % '78777675'; '00807A79'; '00000000'; '00000000'; '00000000'; '00000000'; '00000000'; '00000000';]),0,32,0); % [state, h] = Hash(256, messageB_padded, 1024); % % msg_block1 =... % fi(hex2dec(['64636261'; '68676665'; '6C6B6A69'; '706F6E6D'; '74737271'; '78777675'; '302D7A79'; '34333231';... % '38373635'; '42412D39'; '46454443'; '4A494847'; '4E4D4C4B'; '5251504F'; '56555453'; '5A595857';]),0,32,0); % % msg_block2 =... % fi(hex2dec(['3231302D'; '36353433'; '2D393837'; '64636261'; '68676665'; '6C6B6A69'; '706F6E6D'; '74737271';... % '78777675'; '00807A79'; '00000000'; '00000000'; '00000000'; '00000000'; '00000000'; '00000000';]),0,32,0); % % fprintf(exp, '%08X%08X%08X%08X%08X%08X%08X%08XX\n', uint32(h)); % % fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X\n', [1 1 1 uint32(msg_block1')]); % % for i=1:51+rp, % %fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X\n', [1 0 0 uint32(msg_block1')]); % fprintf(stm, '%X %X %X %0128X\n', [1 0 0 0]); % end % % fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X\n', [1 1 0 uint32(msg_block2')]); % % for i=1:(lat - 1), % %fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X\n', [1 0 0 uint32(msg_block2')]); % fprintf(stm, '%X %X %X %0128X\n', [1 0 0 0]); % end % ZERO INPUT --------------------------------------------------------------- % msg = fi(zeros(1, 16),0,32,0); % [state, h] = Hash(256, msg, 512); % % fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X\n', [1 1 1 uint32(msg)]); % % fprintf(exp, '%08X%08X%08X%08X%08X%08X%08X%08X\n', uint32(h)); % % for i=1:(lat - 1), % fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X\n', [1 0 0 uint32(msg)]); % end % 1 INPUT ------------------------------------------------------------------ msg = fi(zeros(1, 32)+2^32-1,0,32,0); [state, h] = Hash(256, msg, 1024); fprintf(exp, '%08X%08X%08X%08X%08X%08X%08X%08X\n', uint32(h)); fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X\n', [1 1 1 uint32(msg(1:16))]); for i=1:51+rp, fprintf(stm, '%X %X %X %0128X\n', [1 0 0 0]); end fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X\n', [1 1 0 uint32(msg(17:32))]); for i=1:(lat - 1), fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X\n', [1 0 0 uint32(msg(17:32))]); end % % RANDOM INPUT ------------------------------------------------------------- % for j=1:N, % % msg = fi(round((2^32-1)*rand(1,16)),0,32,0); % [state, h] = Hash(256, msg, 512); % % fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X\n', [1 1 1 uint32(msg)]); % % fprintf(exp, '%08X%08X%08X%08X%08X%08X%08X%08X\n', uint32(h)); % % for i=1:(lat - 1), % %fprintf(stm, '%X %X %X %08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X\n', [1 0 0 uint32(msg)]); % fprintf(stm, '%X %X %X %0128X\n', [1 0 0 0]); % end % end % % % -------------------------------------------------------------------------- % END ROUND for i=1:it, fprintf(stm, '%X %X %X %0128X\n', [1 0 0 0]); end fclose(stm); fclose(exp); disp('End generation')