13.09.2014 Views

vulcan-cryptanalysis

vulcan-cryptanalysis

vulcan-cryptanalysis

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

B<br />

Vulcan Encrypt Simulation<br />

%-----------------------------------------------------------<br />

% Vulcan encryption simulation<br />

% 2014-06-12 --- CJR<br />

% inputs: 128-bit SRAM array contents "sram"<br />

% 8-bit CV shift register contents "cv8"<br />

% n-bit plaintext "pti"<br />

% (31-bit ciphertext shift register contents "ctsr")<br />

% outputs: n-bit ciphertext "cto"<br />

% encrypts plaintext into ciphertext using Vulcan cipher<br />

% requires "key schedule" to have been run prior to use<br />

%-----------------------------------------------------------<br />

% check user-supplied inputs for simple errors<br />

if((exist(’sram’) == 0)||(length(sram) != 128))<br />

error("128-bit SRAM array not found -- run key schedule")<br />

end<br />

if((exist(’cv8’) == 0)||(length(cv8) != 8))<br />

error("8-bit CV shift register not found -- run key schedule")<br />

end<br />

if(exist(’pti’) == 0)<br />

error("plaintext input not found -- create some plaintext")<br />

end<br />

if((exist(’ctsr’) == 0)||(length(ctsr) != 31))<br />

ctsr = 1*(rand(1,31)>0.5); % create random initialization vector<br />

end<br />

% set up required variables<br />

last = 0; % last plaintext output bit for differential encoder<br />

cto = zeros(1,length(pti)); % pre-allocate ciphertext output<br />

% process all bits of plaintext input<br />

for ii = 1:length(pti)<br />

% compute the XOR tree results<br />

ct0 = pti(ii);<br />

ct0 = bitxor(ct0,bitand(cv8(1),ctsr(22)));<br />

ct0 = bitxor(ct0,bitand(cv8(2),ctsr(23)));<br />

ct0 = bitxor(ct0,bitand(cv8(3),ctsr(24)));<br />

ct0 = bitxor(ct0,bitand(cv8(4),ctsr(25)));<br />

ct0 = bitxor(ct0,bitand(cv8(5),ctsr(26)));<br />

ct0 = bitxor(ct0,bitand(cv8(6),ctsr(27)));<br />

ct0 = bitxor(ct0,bitand(cv8(7),ctsr(28)));<br />

ct0 = bitxor(ct0,bitand(cv8(8),ctsr(29)));<br />

ct0 = bitxor(ct0,ctsr(30));<br />

% differentially encode and save the output ciphertext bit<br />

cto(ii) = last;<br />

last = bitxor(ct0,last);<br />

% compute the current SRAM address<br />

addr = ctsr(1:7);<br />

addr = addr*[1 2 4 8 16 32 64]’;<br />

addr = addr+1;<br />

% combine SRAM bit with CT21<br />

keyb = sram(addr);<br />

m0 = bitxor(ctsr(21),keyb);<br />

% clock the ciphertext shift-register<br />

ctsr = [ct0 ctsr(1:20) m0 ctsr(22:30)];<br />

end<br />

33

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!