twofish.vhd
来自「VHDL implementation of the twofish ciphe」· VHDL 代码 · 共 2,663 行 · 第 1/5 页
VHD
2,663 行
library ieee;use ieee.std_logic_1164.all;entity mulc6 isport ( in_mulc6 : in std_logic_vector(7 downto 0); out_mulc6 : out std_logic_vector(7 downto 0) );end mulc6;architecture mulc6_arch of mulc6 isbegin out_mulc6(0) <= in_mulc6(6) xor in_mulc6(5) xor in_mulc6(4) xor in_mulc6(3) xor in_mulc6(2) xor in_mulc6(1); out_mulc6(1) <= in_mulc6(7) xor in_mulc6(6) xor in_mulc6(5) xor in_mulc6(4) xor in_mulc6(3) xor in_mulc6(2) xor in_mulc6(0); out_mulc6(2) <= in_mulc6(7) xor in_mulc6(2) xor in_mulc6(0); out_mulc6(3) <= in_mulc6(6) xor in_mulc6(5) xor in_mulc6(4) xor in_mulc6(2); out_mulc6(4) <= in_mulc6(7) xor in_mulc6(6) xor in_mulc6(5) xor in_mulc6(3); out_mulc6(5) <= in_mulc6(7) xor in_mulc6(6) xor in_mulc6(4); out_mulc6(6) <= in_mulc6(7) xor in_mulc6(6) xor in_mulc6(4) xor in_mulc6(3) xor in_mulc6(2) xor in_mulc6(1) xor in_mulc6(0); out_mulc6(7) <= in_mulc6(7) xor in_mulc6(5) xor in_mulc6(4) xor in_mulc6(3) xor in_mulc6(2) xor in_mulc6(1) xor in_mulc6(0);end mulc6_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- ---- new component ---- ---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- -- multiplier by 68 -- library ieee;use ieee.std_logic_1164.all;entity mul68 isport ( in_mul68 : in std_logic_vector(7 downto 0); out_mul68 : out std_logic_vector(7 downto 0) );end mul68;architecture mul68_arch of mul68 isbegin out_mul68(0) <= in_mul68(7) xor in_mul68(6) xor in_mul68(4) xor in_mul68(3) xor in_mul68(2); out_mul68(1) <= in_mul68(7) xor in_mul68(5) xor in_mul68(4) xor in_mul68(3); out_mul68(2) <= in_mul68(7) xor in_mul68(5) xor in_mul68(3) xor in_mul68(2); out_mul68(3) <= in_mul68(7) xor in_mul68(2) xor in_mul68(0); out_mul68(4) <= in_mul68(3) xor in_mul68(1); out_mul68(5) <= in_mul68(4) xor in_mul68(2) xor in_mul68(0); out_mul68(6) <= in_mul68(7) xor in_mul68(6) xor in_mul68(5) xor in_mul68(4) xor in_mul68(2) xor in_mul68(1) xor in_mul68(0); out_mul68(7) <= in_mul68(7) xor in_mul68(6) xor in_mul68(5) xor in_mul68(3) xor in_mul68(2) xor in_mul68(1);end mul68_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- ---- new component ---- ---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- -- multiplier by e5 -- library ieee;use ieee.std_logic_1164.all;entity mule5 isport ( in_mule5 : in std_logic_vector(7 downto 0); out_mule5 : out std_logic_vector(7 downto 0) );end mule5;architecture mule5_arch of mule5 isbegin out_mule5(0) <= in_mule5(6) xor in_mule5(4) xor in_mule5(2) xor in_mule5(1) xor in_mule5(0); out_mule5(1) <= in_mule5(7) xor in_mule5(5) xor in_mule5(3) xor in_mule5(2) xor in_mule5(1); out_mule5(2) <= in_mule5(3) xor in_mule5(1) xor in_mule5(0); out_mule5(3) <= in_mule5(6); out_mule5(4) <= in_mule5(7); out_mule5(5) <= in_mule5(0); out_mule5(6) <= in_mule5(6) xor in_mule5(4) xor in_mule5(2) xor in_mule5(0); out_mule5(7) <= in_mule5(7) xor in_mule5(5) xor in_mule5(3) xor in_mule5(1) xor in_mule5(0);end mule5_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- ---- new component ---- ---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- -- multiplier by 02 -- library ieee;use ieee.std_logic_1164.all;entity mul02 isport ( in_mul02 : in std_logic_vector(7 downto 0); out_mul02 : out std_logic_vector(7 downto 0) );end mul02;architecture mul02_arch of mul02 isbegin out_mul02(0) <= in_mul02(7); out_mul02(1) <= in_mul02(0); out_mul02(2) <= in_mul02(7) xor in_mul02(1); out_mul02(3) <= in_mul02(7) xor in_mul02(2); out_mul02(4) <= in_mul02(3); out_mul02(5) <= in_mul02(4); out_mul02(6) <= in_mul02(7) xor in_mul02(5); out_mul02(7) <= in_mul02(6);end mul02_arch; -- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- ---- new component ---- ---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- -- multiplier by a1 -- library ieee;use ieee.std_logic_1164.all;entity mula1 isport ( in_mula1 : in std_logic_vector(7 downto 0); out_mula1 : out std_logic_vector(7 downto 0) );end mula1;architecture mula1_arch of mula1 isbegin out_mula1(0) <= in_mula1(7) xor in_mula1(6) xor in_mula1(1) xor in_mula1(0); out_mula1(1) <= in_mula1(7) xor in_mula1(2) xor in_mula1(1); out_mula1(2) <= in_mula1(7) xor in_mula1(6) xor in_mula1(3) xor in_mula1(2) xor in_mula1(1); out_mula1(3) <= in_mula1(6) xor in_mula1(4) xor in_mula1(3) xor in_mula1(2) xor in_mula1(1); out_mula1(4) <= in_mula1(7) xor in_mula1(5) xor in_mula1(4) xor in_mula1(3) xor in_mula1(2); out_mula1(5) <= in_mula1(6) xor in_mula1(5) xor in_mula1(4) xor in_mula1(3) xor in_mula1(0); out_mula1(6) <= in_mula1(5) xor in_mula1(4); out_mula1(7) <= in_mula1(6) xor in_mula1(5) xor in_mula1(0);end mula1_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- ---- new component ---- ---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- -- multiplier by fc -- library ieee;use ieee.std_logic_1164.all;entity mulfc isport ( in_mulfc : in std_logic_vector(7 downto 0); out_mulfc : out std_logic_vector(7 downto 0) );end mulfc;architecture mulfc_arch of mulfc isbegin out_mulfc(0) <= in_mulfc(7) xor in_mulfc(5) xor in_mulfc(2) xor in_mulfc(1); out_mulfc(1) <= in_mulfc(6) xor in_mulfc(3) xor in_mulfc(2); out_mulfc(2) <= in_mulfc(5) xor in_mulfc(4) xor in_mulfc(3) xor in_mulfc(2) xor in_mulfc(1) xor in_mulfc(0); out_mulfc(3) <= in_mulfc(7) xor in_mulfc(6) xor in_mulfc(4) xor in_mulfc(3) xor in_mulfc(0); out_mulfc(4) <= in_mulfc(7) xor in_mulfc(5) xor in_mulfc(4) xor in_mulfc(1) xor in_mulfc(0); out_mulfc(5) <= in_mulfc(6) xor in_mulfc(5) xor in_mulfc(2) xor in_mulfc(1) xor in_mulfc(0); out_mulfc(6) <= in_mulfc(6) xor in_mulfc(5) xor in_mulfc(3) xor in_mulfc(0); out_mulfc(7) <= in_mulfc(7) xor in_mulfc(6) xor in_mulfc(4) xor in_mulfc(1) xor in_mulfc(0);end mulfc_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- ---- new component ---- ---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- -- multiplier by c1 -- library ieee;use ieee.std_logic_1164.all;entity mulc1 isport ( in_mulc1 : in std_logic_vector(7 downto 0); out_mulc1 : out std_logic_vector(7 downto 0) );end mulc1;architecture mulc1_arch of mulc1 isbegin out_mulc1(0) <= in_mulc1(7) xor in_mulc1(5) xor in_mulc1(4) xor in_mulc1(3) xor in_mulc1(2) xor in_mulc1(1) xor in_mulc1(0); out_mulc1(1) <= in_mulc1(6) xor in_mulc1(5) xor in_mulc1(4) xor in_mulc1(3) xor in_mulc1(2) xor in_mulc1(1); out_mulc1(2) <= in_mulc1(6) xor in_mulc1(1); out_mulc1(3) <= in_mulc1(5) xor in_mulc1(4) xor in_mulc1(3) xor in_mulc1(1); out_mulc1(4) <= in_mulc1(6) xor in_mulc1(5) xor in_mulc1(4) xor in_mulc1(2); out_mulc1(5) <= in_mulc1(7) xor in_mulc1(6) xor in_mulc1(5) xor in_mulc1(3); out_mulc1(6) <= in_mulc1(6) xor in_mulc1(5) xor in_mulc1(3) xor in_mulc1(2) xor in_mulc1(1) xor in_mulc1(0); out_mulc1(7) <= in_mulc1(7) xor in_mulc1(6) xor in_mulc1(4) xor in_mulc1(3) xor in_mulc1(2) xor in_mulc1(1) xor in_mulc1(0);end mulc1_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- ---- new component ---- ---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- -- multiplier by 47 -- library ieee;use ieee.std_logic_1164.all;entity mul47 isport ( in_mul47 : in std_logic_vector(7 downto 0); out_mul47 : out std_logic_vector(7 downto 0) );end mul47;architecture mul47_arch of mul47 isbegin out_mul47(0) <= in_mul47(4) xor in_mul47(2) xor in_mul47(0); out_mul47(1) <= in_mul47(5) xor in_mul47(3) xor in_mul47(1) xor in_mul47(0); out_mul47(2) <= in_mul47(6) xor in_mul47(1) xor in_mul47(0); out_mul47(3) <= in_mul47(7) xor in_mul47(4) xor in_mul47(1); out_mul47(4) <= in_mul47(5) xor in_mul47(2); out_mul47(5) <= in_mul47(6) xor in_mul47(3); out_mul47(6) <= in_mul47(7) xor in_mul47(2) xor in_mul47(0); out_mul47(7) <= in_mul47(3) xor in_mul47(1);end mul47_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- ---- new component ---- ---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- -- multiplier by ae -- library ieee;use ieee.std_logic_1164.all;entity mulae isport ( in_mulae : in std_logic_vector(7 downto 0); out_mulae : out std_logic_vector(7 downto 0) );end mulae;architecture mulae_arch of mulae isbegin out_mulae(0) <= in_mulae(7) xor in_mulae(5) xor in_mulae(1); out_mulae(1) <= in_mulae(6) xor in_mulae(2) xor in_mulae(0); out_mulae(2) <= in_mulae(5) xor in_mulae(3) xor in_mulae(0); out_mulae(3) <= in_mulae(7) xor in_mulae(6) xor in_mulae(5) xor in_mulae(4) xor in_mulae(0); out_mulae(4) <= in_mulae(7) xor in_mulae(6) xor in_mulae(5) xor in_mulae(1); out_mulae(5) <= in_mulae(7) xor in_mulae(6) xor in_mulae(2) xor in_mulae(0); out_mulae(6) <= in_mulae(5) xor in_mulae(3); out_mulae(7) <= in_mulae(6) xor in_mulae(4) xor in_mulae(0);end mulae_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- ---- new component ---- ---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- -- multiplier by 3d -- library ieee;use ieee.std_logic_1164.all;entity mul3d isport ( in_mul3d : in std_logic_vector(7 downto 0); out_mul3d : out std_logic_vector(7 downto 0) );end mul3d;architecture mul3d_arch of mul3d isbegin out_mul3d(0) <= in_mul3d(4) xor in_mul3d(3) xor in_mul3d(0); out_mul3d(1) <= in_mul3d(5) xor in_mul3d(4) xor in_mul3d(1); out_mul3d(2) <= in_mul3d(6) xor in_mul3d(5) xor in_mul3d(4) xor in_mul3d(3) xor in_mul3d(2) xor in_mul3d(0); out_mul3d(3) <= in_mul3d(7) xor in_mul3d(6) xor in_mul3d(5) xor in_mul3d(1) xor in_mul3d(0); out_mul3d(4) <= in_mul3d(7) xor in_mul3d(6) xor in_mul3d(2) xor in_mul3d(1) xor in_mul3d(0); out_mul3d(5) <= in_mul3d(7) xor in_mul3d(3) xor in_mul3d(2) xor in_mul3d(1) xor in_mul3d(0); out_mul3d(6) <= in_mul3d(2) xor in_mul3d(1); out_mul3d(7) <= in_mul3d(3) xor in_mul3d(2);end mul3d_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- ---- new component ---- ---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- -- multiplier by 19 -- library ieee;use ieee.std_logic_1164.all;entity mul19 isport ( in_mul19 : in std_logic_vector(7 downto 0); out_mul19 : out std_logic_vector(7 downto 0) );end mul19;architecture mul19_arch of mul19 isbegin out_mul19(0) <= in_mul19(7) xor in_mul19(6) xor in_mul19(5) xor in_mul19(4) xor in_mul19(0); out_mul19(1) <= in_mul19(7) xor in_mul19(6) xor in_mul19(5) xor in_mul19(1); out_mul19(2) <= in_mul19(5) xor in_mul19(4) xor in_mul19(2); out_mul19(3) <= in_mul19(7) xor in_mul19(4) xor in_mul19(3) xor in_mul19(0); out_mul19(4) <= in_mul19(5) xor in_mul19(4) xor in_mul19(1) xor in_mul19(0); out_mul19(5) <= in_mul19(6) xor in_mul19(5) xor in_mul19(2) xor in_mul19(1); out_mul19(6) <= in_mul19(5) xor in_mul19(4) xor in_mul19(3) xor in_mul19(2); out_mul19(7) <= in_mul19(6) xor in_mul19(5) xor in_mul19(4) xor in_mul19(3);end mul19_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- ---- new component ---- ---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- -- multiplier by 03 -- library ieee;use ieee.std_logic_1164.all;entity mul03 isport ( in_mul03 : in std_logic_vector(7 downto 0); out_mul03 : out std_logic_vector(7 downto 0) );end mul03;architecture mul03_arch of mul03 isbegin out_mul03(0) <= in_mul03(7) xor in_mul03(0); out_mul03(1) <= in_mul03(1) xor in_mul03(0); out_mul03(2) <= in_mul03(7) xor in_mul03(2) xor in_mul03(1); out_mul03(3) <= in_mul03(7) xor in_mul03(3) xor in_mul03(2); out_mul03(4) <= in_mul03(4) xor in_mul03(3); out_mul03(5) <= in_mul03(5) xor in_mul03(4); out_mul03(6) <= in_mul03(7) xor in_mul03(6) xor in_mul03(5); out_mul03(7) <= in_mul03(7) xor in_mul03(6);end mul03_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- ---- new component ---- ---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ------ twofish data input is the component-- that transforms the data input to the-- first round to the wanted form as is -- described in the twofish prototype--library ieee;use ieee.std_logic_1164.all;entity twofish_data_input isport ( in_tdi : in std_logic_vector(127 downto 0); out_tdi : out std_logic_vector(127 downto 0) );end twofish_data_input;architecture twofish_data_input_arch of twofish_data_input is -- we declare internal signals signal byte0, byte1, byte2, byte3, byte4, byte5, byte6, byte7, byte8, byte9, byte10, byte11, byte12, byte13, byte14, byte15 : std_logic_vector(7 downto 0); signal P0, P1, P2, P3 : std_logic_vector(31 downto 0);begin -- we assign the input signal to the respective -- bytes as is described in the prototype byte15 <= in_tdi(7 downto 0); byte14 <= in_tdi(15 downto 8); byte13 <= in_tdi(23 downto 16); byte12 <= in_tdi(31 downto 24); byte11 <= in_tdi(39 downto 32); byte10 <= in_tdi(47 downto 40); byte9 <= in_tdi(55 downto 48); byte8 <= in_tdi(63 downto 56); byte7 <= in_tdi(71 downto 64); byte6 <= in_tdi(79 downto 72); byte5 <= in_tdi(87 downto 80); byte4 <= in_tdi(95 downto 88); byte3 <= in_tdi(103 downto 96); byte2 <= in_tdi(111 downto 104); byte1 <= in_tdi(119 downto 112); byte0 <= in_tdi(127 downto 120); -- we rearrange the bytes and send them to exit P0 <= byte3 & byte2 & byte1 & byte0; P1 <= byte7 & byte6 & byte5 & byte4; P2 <= byte11 & byte10 & byte9 & byte8; P3 <= byte15 & byte14 & byte13 & byte12; out_tdi <= P0 & P1 & P2 & P3;end twofish_data_input_arch;-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ---- ---- new component ---- ---- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ------ twofish data output is the component-- that transforms the data output from the -- 16th round to the wanted form as is -- described in the twofish prototype--library ieee;use ieee.std_logic_1164.all;entity twofish_data_output isport ( in_tdo : in std_logic_vector(127 downto 0); out_tdo : out std_logic_vector(127 downto 0) );end twofish_data_output;architecture twofish_data_output_arch of twofish_data_output is -- we declare internal signals signal byte0, byte1, byte2, byte3, byte4, byte5, byte6, byte7, byte8, byte9, byte10, byte11, byte12, byte13, byte14, byte15 : std_logic_vector(7 downto 0); signal C0, C1, C2, C3 : std_logic_vector(31 downto 0);begin -- we assign the input signal to the respective -- bytes as is described in the prototype byte15 <= in_tdo(7 downto 0); byte14 <= in_tdo(15 downto 8); byte13 <= in_tdo(23 downto 16); byte12 <= in_tdo(31 downto 24); byte11 <= in_tdo(39 downto 32); byte10 <= in_tdo(47 downto 40); byte9 <= in_tdo(55 downto 48); byte8 <= in_tdo(63 downto 56); byte7 <= in_tdo(71 downto 64); byte6 <= in_tdo(79 downto 72); byte5 <= in_tdo(87 downto 80); byte4 <= in_tdo(95 downto 88); byte3 <= in_tdo(103 downto 96); byte2 <= in_tdo(111 downto 104); byte1 <= in_tdo(119 downto 112); byte0 <= in_tdo(127 downto 120); -- we rearrange the bytes and send them to exit C0 <= byte3 & byte2 & byte1 & byte0; C1 <= byte7 & byte6 & byte5 & byte4; C2 <= byte11 & byte10 & byte9 & byte8; C3 <= byte15 & byte14 & byte13 & byte12; out_tdo <= C0 & C1 & C2 & C3;end twofish_data_output_arch;-- =======-======================================= ---- =============================================== ---- ---- second part: 128 key input dependent components ---- ---- =============================================== ---- =============================================== ---- -- reed solomon for 128bits key--
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?