%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Copyright: 2010 Integrated Sytems Laboratory, ETH Zurich %% http://www.iis.ee.ethz.ch/~sha3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear; clc; lat = 4*166+1+10; % latency for single block it = 100; % number of end rounds N = 1; % number of random input messages disp(['Start generating ' num2str(N+3) ' test vectors for Shabal-256 low-area']) stm = fopen('../simvectors/shabal256_stimuli.asc', 'w', 'native'); exp = fopen('../simvectors/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%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_block1')]); % % for i=1:164, % %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 ------------------------------------------------------------------ msg1 = fi(zeros(1, 16)+2^32-1,0,32,0); msg2 = fi(zeros(1, 16)+2^32-1,0,32,0); msg = [msg1,msg2]; [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(msg1)]); for i=1:164, 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(msg2)]); 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(msg2)]); 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')