vulcan-cryptanalysis
vulcan-cryptanalysis
vulcan-cryptanalysis
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