📄 freedes.vhd.txt
字号:
din(56-23) & din(56-19) & din(56-12) & din(56- 4) & din(56-26) & din(56- 8) &
din(56-16) & din(56- 7) & din(56-27) & din(56-20) & din(56-13) & din(56- 2) &
din(56-41) & din(56-52) & din(56-31) & din(56-37) & din(56-47) & din(56-55) &
din(56-30) & din(56-40) & din(56-51) & din(56-45) & din(56-33) & din(56-48) &
din(56-44) & din(56-49) & din(56-39) & din(56-56) & din(56-34) & din(56-53) &
din(56-46) & din(56-42) & din(56-50) & din(56-36) & din(56-29) & din(56-32);
return val;
end des_cp;
--------------------------------------------------------
-- Expansion permutation
function des_ep(din :std_logic_vector (31 downto 0))
return std_logic_vector is
variable val :std_logic_vector (47 downto 0);
begin
val := din(32-32) & din(32- 1) & din(32- 2) & din(32- 3) & din(32- 4) & din(32- 5) &
din(32- 4) & din(32- 5) & din(32- 6) & din(32- 7) & din(32- 8) & din(32- 9) &
din(32- 8) & din(32- 9) & din(32-10) & din(32-11) & din(32-12) & din(32-13) &
din(32-12) & din(32-13) & din(32-14) & din(32-15) & din(32-16) & din(32-17) &
din(32-16) & din(32-17) & din(32-18) & din(32-19) & din(32-20) & din(32-21) &
din(32-20) & din(32-21) & din(32-22) & din(32-23) & din(32-24) & din(32-25) &
din(32-24) & din(32-25) & din(32-26) & din(32-27) & din(32-28) & din(32-29) &
din(32-28) & din(32-29) & din(32-30) & din(32-31) & din(32-32) & din(32- 1);
return val;
end des_ep;
--------------------------------------------------------
-- S-Box Substitution, 48 bits in, 32 bits out.
function des_sbox(din :std_logic_vector (47 downto 0))
return std_logic_vector is
variable val :std_logic_vector (31 downto 0);
begin
-- SBOX 8
case din( 5 downto 0) is
when "000000" => val(3 downto 0) := "1101"; when "000001" => val(3 downto 0) := "0001";
when "000010" => val(3 downto 0) := "0010"; when "000011" => val(3 downto 0) := "1111";
when "000100" => val(3 downto 0) := "1000"; when "000101" => val(3 downto 0) := "1101";
when "000110" => val(3 downto 0) := "0100"; when "000111" => val(3 downto 0) := "1000";
when "001000" => val(3 downto 0) := "0110"; when "001001" => val(3 downto 0) := "1010";
when "001010" => val(3 downto 0) := "1111"; when "001011" => val(3 downto 0) := "0011";
when "001100" => val(3 downto 0) := "1011"; when "001101" => val(3 downto 0) := "0111";
when "001110" => val(3 downto 0) := "0001"; when "001111" => val(3 downto 0) := "0100";
when "010000" => val(3 downto 0) := "1010"; when "010001" => val(3 downto 0) := "1100";
when "010010" => val(3 downto 0) := "1001"; when "010011" => val(3 downto 0) := "0101";
when "010100" => val(3 downto 0) := "0011"; when "010101" => val(3 downto 0) := "0110";
when "010110" => val(3 downto 0) := "1110"; when "010111" => val(3 downto 0) := "1011";
when "011000" => val(3 downto 0) := "0101"; when "011001" => val(3 downto 0) := "0000";
when "011010" => val(3 downto 0) := "0000"; when "011011" => val(3 downto 0) := "1110";
when "011100" => val(3 downto 0) := "1100"; when "011101" => val(3 downto 0) := "1001";
when "011110" => val(3 downto 0) := "0111"; when "011111" => val(3 downto 0) := "0010";
when "100000" => val(3 downto 0) := "0111"; when "100001" => val(3 downto 0) := "0010";
when "100010" => val(3 downto 0) := "1011"; when "100011" => val(3 downto 0) := "0001";
when "100100" => val(3 downto 0) := "0100"; when "100101" => val(3 downto 0) := "1110";
when "100110" => val(3 downto 0) := "0001"; when "100111" => val(3 downto 0) := "0111";
when "101000" => val(3 downto 0) := "1001"; when "101001" => val(3 downto 0) := "0100";
when "101010" => val(3 downto 0) := "1100"; when "101011" => val(3 downto 0) := "1010";
when "101100" => val(3 downto 0) := "1110"; when "101101" => val(3 downto 0) := "1000";
when "101110" => val(3 downto 0) := "0010"; when "101111" => val(3 downto 0) := "1101";
when "110000" => val(3 downto 0) := "0000"; when "110001" => val(3 downto 0) := "1111";
when "110010" => val(3 downto 0) := "0110"; when "110011" => val(3 downto 0) := "1100";
when "110100" => val(3 downto 0) := "1010"; when "110101" => val(3 downto 0) := "1001";
when "110110" => val(3 downto 0) := "1101"; when "110111" => val(3 downto 0) := "0000";
when "111000" => val(3 downto 0) := "1111"; when "111001" => val(3 downto 0) := "0011";
when "111010" => val(3 downto 0) := "0011"; when "111011" => val(3 downto 0) := "0101";
when "111100" => val(3 downto 0) := "0101"; when "111101" => val(3 downto 0) := "0110";
when "111110" => val(3 downto 0) := "1000"; when "111111" => val(3 downto 0) := "1011";
when others => val(3 downto 0) := "1011";
end case;
-- SBOX 7
case din(11 downto 6) is
when "000000" => val(7 downto 4) := "0100"; when "000001" => val(7 downto 4) := "1101";
when "000010" => val(7 downto 4) := "1011"; when "000011" => val(7 downto 4) := "0000";
when "000100" => val(7 downto 4) := "0010"; when "000101" => val(7 downto 4) := "1011";
when "000110" => val(7 downto 4) := "1110"; when "000111" => val(7 downto 4) := "0111";
when "001000" => val(7 downto 4) := "1111"; when "001001" => val(7 downto 4) := "0100";
when "001010" => val(7 downto 4) := "0000"; when "001011" => val(7 downto 4) := "1001";
when "001100" => val(7 downto 4) := "1000"; when "001101" => val(7 downto 4) := "0001";
when "001110" => val(7 downto 4) := "1101"; when "001111" => val(7 downto 4) := "1010";
when "010000" => val(7 downto 4) := "0011"; when "010001" => val(7 downto 4) := "1110";
when "010010" => val(7 downto 4) := "1100"; when "010011" => val(7 downto 4) := "0011";
when "010100" => val(7 downto 4) := "1001"; when "010101" => val(7 downto 4) := "0101";
when "010110" => val(7 downto 4) := "0111"; when "010111" => val(7 downto 4) := "1100";
when "011000" => val(7 downto 4) := "0101"; when "011001" => val(7 downto 4) := "0010";
when "011010" => val(7 downto 4) := "1010"; when "011011" => val(7 downto 4) := "1111";
when "011100" => val(7 downto 4) := "0110"; when "011101" => val(7 downto 4) := "1000";
when "011110" => val(7 downto 4) := "0001"; when "011111" => val(7 downto 4) := "0110";
when "100000" => val(7 downto 4) := "0001"; when "100001" => val(7 downto 4) := "0110";
when "100010" => val(7 downto 4) := "0100"; when "100011" => val(7 downto 4) := "1011";
when "100100" => val(7 downto 4) := "1011"; when "100101" => val(7 downto 4) := "1101";
when "100110" => val(7 downto 4) := "1101"; when "100111" => val(7 downto 4) := "1000";
when "101000" => val(7 downto 4) := "1100"; when "101001" => val(7 downto 4) := "0001";
when "101010" => val(7 downto 4) := "0011"; when "101011" => val(7 downto 4) := "0100";
when "101100" => val(7 downto 4) := "0111"; when "101101" => val(7 downto 4) := "1010";
when "101110" => val(7 downto 4) := "1110"; when "101111" => val(7 downto 4) := "0111";
when "110000" => val(7 downto 4) := "1010"; when "110001" => val(7 downto 4) := "1001";
when "110010" => val(7 downto 4) := "1111"; when "110011" => val(7 downto 4) := "0101";
when "110100" => val(7 downto 4) := "0110"; when "110101" => val(7 downto 4) := "0000";
when "110110" => val(7 downto 4) := "1000"; when "110111" => val(7 downto 4) := "1111";
when "111000" => val(7 downto 4) := "0000"; when "111001" => val(7 downto 4) := "1110";
when "111010" => val(7 downto 4) := "0101"; when "111011" => val(7 downto 4) := "0010";
when "111100" => val(7 downto 4) := "1001"; when "111101" => val(7 downto 4) := "0011";
when "111110" => val(7 downto 4) := "0010"; when "111111" => val(7 downto 4) := "1100";
when others => val(7 downto 4) := "1100";
end case;
-- SBOX 6
case din(17 downto 12) is
when "000000" => val(11 downto 8) := "1100"; when "000001" => val(11 downto 8) := "1010";
when "000010" => val(11 downto 8) := "0001"; when "000011" => val(11 downto 8) := "1111";
when "000100" => val(11 downto 8) := "1010"; when "000101" => val(11 downto 8) := "0100";
when "000110" => val(11 downto 8) := "1111"; when "000111" => val(11 downto 8) := "0010";
when "001000" => val(11 downto 8) := "1001"; when "001001" => val(11 downto 8) := "0111";
when "001010" => val(11 downto 8) := "0010"; when "001011" => val(11 downto 8) := "1100";
when "001100" => val(11 downto 8) := "0110"; when "001101" => val(11 downto 8) := "1001";
when "001110" => val(11 downto 8) := "1000"; when "001111" => val(11 downto 8) := "0101";
when "010000" => val(11 downto 8) := "0000"; when "010001" => val(11 downto 8) := "0110";
when "010010" => val(11 downto 8) := "1101"; when "010011" => val(11 downto 8) := "0001";
when "010100" => val(11 downto 8) := "0011"; when "010101" => val(11 downto 8) := "1101";
when "010110" => val(11 downto 8) := "0100"; when "010111" => val(11 downto 8) := "1110";
when "011000" => val(11 downto 8) := "1110"; when "011001" => val(11 downto 8) := "0000";
when "011010" => val(11 downto 8) := "0111"; when "011011" => val(11 downto 8) := "1011";
when "011100" => val(11 downto 8) := "0101"; when "011101" => val(11 downto 8) := "0011";
when "011110" => val(11 downto 8) := "1011"; when "011111" => val(11 downto 8) := "1000";
when "100000" => val(11 downto 8) := "1001"; when "100001" => val(11 downto 8) := "0100";
when "100010" => val(11 downto 8) := "1110"; when "100011" => val(11 downto 8) := "0011";
when "100100" => val(11 downto 8) := "1111"; when "100101" => val(11 downto 8) := "0010";
when "100110" => val(11 downto 8) := "0101"; when "100111" => val(11 downto 8) := "1100";
when "101000" => val(11 downto 8) := "0010"; when "101001" => val(11 downto 8) := "1001";
when "101010" => val(11 downto 8) := "1000"; when "101011" => val(11 downto 8) := "0101";
when "101100" => val(11 downto 8) := "1100"; when "101101" => val(11 downto 8) := "1111";
when "101110" => val(11 downto 8) := "0011"; when "101111" => val(11 downto 8) := "1010";
when "110000" => val(11 downto 8) := "0111"; when "110001" => val(11 downto 8) := "1011";
when "110010" => val(11 downto 8) := "0000"; when "110011" => val(11 downto 8) := "1110";
when "110100" => val(11 downto 8) := "0100"; when "110101" => val(11 downto 8) := "0001";
when "110110" => val(11 downto 8) := "1010"; when "110111" => val(11 downto 8) := "0111";
when "111000" => val(11 downto 8) := "0001"; when "111001" => val(11 downto 8) := "0110";
when "111010" => val(11 downto 8) := "1101"; when "111011" => val(11 downto 8) := "0000";
when "111100" => val(11 downto 8) := "1011"; when "111101" => val(11 downto 8) := "1000";
when "111110" => val(11 downto 8) := "0110"; when "111111" => val(11 downto 8) := "1101";
when others => val(11 downto 8) := "1101";
end case;
-- SBOX 5
case din(23 downto 18) is
when "000000" => val(15 downto 12) := "0010"; when "000001" => val(15 downto 12) := "1110";
when "000010" => val(15 downto 12) := "1100"; when "000011" => val(15 downto 12) := "1011";
when "000100" => val(15 downto 12) := "0100"; when "000101" => val(15 downto 12) := "0010";
when "000110" => val(15 downto 12) := "0001"; when "000111" => val(15 downto 12) := "1100";
when "001000" => val(15 downto 12) := "0111"; when "001001" => val(15 downto 12) := "0100";
when "001010" => val(15 downto 12) := "1010"; when "001011" => val(15 downto 12) := "0111";
when "001100" => val(15 downto 12) := "1011"; when "001101" => val(15 downto 12) := "1101";
when "001110" => val(15 downto 12) := "0110"; when "001111" => val(15 downto 12) := "0001";
when "010000" => val(15 downto 12) := "1000"; when "010001" => val(15 downto 12) := "0101";
when "010010" => val(15 downto 12) := "0101"; when "010011" => val(15 downto 12) := "0000";
when "010100" => val(15 downto 12) := "0011"; when "010101" => val(15 downto 12) := "1111";
when "010110" => val(15 downto 12) := "1111"; when "010111" => val(15 downto 12) := "1010";
when "011000" => val(15 downto 12) := "1101"; when "011001" => val(15 downto 12) := "0011";
when "011010" => val(15 downto 12) := "0000"; when "011011" => val(15 downto 12) := "1001";
when "011100" => val(15 downto 12) := "1110"; when "011101" => val(15 downto 12) := "1000";
when "011110" => val(15 downto 12) := "1001"; when "011111" => val(15 downto 12) := "0110";
when "100000" => val(15 downto 12) := "0100"; when "100001" => val(15 downto 12) := "1011";
when "100010" => val(15 downto 12) := "0010"; when "100011" => val(15 downto 12) := "1000";
when "100100" => val(15 downto 12) := "0001"; when "100101" => val(15 downto 12) := "1100";
when "100110" => val(15 downto 12) := "1011"; when "100111" => val(15 downto 12) := "0111";
when "101000" => val(15 downto 12) := "1010"; when "101001" => val(15 downto 12) := "0001";
when "101010" => val(15 downto 12) := "1101"; when "101011" => val(15 downto 12) := "1110";
when "101100" => val(15 downto 12) := "0111"; when "101101" => val(15 downto 12) := "0010";
when "101110" => val(15 downto 12) := "1000"; when "101111" => val(15 downto 12) := "1101";
when "110000" => val(15 downto 12) := "1111"; when "110001" => val(15 downto 12) := "0110";
when "110010" => val(15 downto 12) := "1001"; when "110011" => val(15 downto 12) := "1111";
when "110100" => val(15 downto 12) := "1100"; when "110101" => val(15 downto 12) := "0000";
when "110110" => val(15 downto 12) := "0101"; when "110111" => val(15 downto 12) := "1001";
when "111000" => val(15 downto 12) := "0110"; when "111001" => val(15 downto 12) := "1010";
when "111010" => val(15 downto 12) := "0011"; when "111011" => val(15 downto 12) := "0100";
when "111100" => val(15 downto 12) := "0000"; when "111101" => val(15 downto 12) := "0101";
when "111110" => val(15 downto 12) := "1110"; when "111111" => val(15 downto 12) := "0011";
when others => val(15 downto 12) := "0011";
end case;
-- SBOX 4
case din(29 downto 24) is
when "000000" => val(19 downto 16) := "0111"; when "000001" => val(19 downto 16) := "1101";
when "000010" => val(19 downto 16) := "1101"; when "000011" => val(19 downto 16) := "1000";
when "000100" => val(19 downto 16) := "1110"; when "000101" => val(19 downto 16) := "1011";
when "000110" => val(19 downto 16) := "0011"; when "000111" => val(19 downto 16) := "0101";
when "001000" => val(19 downto 16) := "0000"; when "001001" => val(19 downto 16) := "0110";
when "001010" => val(19 downto 16) := "0110"; when "001011" => val(19 downto 16) := "1111";
when "001100" => val(19 downto 16) := "1001"; when "001101" => val(19 downto 16) := "0000";
when "001110" => val(19 downto 16) := "1010"; when "001111" => val(19 downto 16) := "0011";
when "010000" => val(19 downto 16) := "0001"; when "010001" => val(19 downto 16) := "0100";
when "010010" => val(19 downto 16) := "0010"; when "010011" => val(19 downto 16) := "0111";
when "010100" => val(19 downto 16) := "1000"; when "010101" => val(19 downto 16) := "0010";
when "010110" => val(19 downto 16) := "0101"; when "010111" => val(19 downto 16) := "1100";
when "011000" => val(19 downto 16) := "1011"; when "011001" => val(19 downto 16) := "0001";
when "011010" => val(19 downto 16) := "1100"; when "011011" => val(19 downto 16) := "1010";
when "011100" => val(19 downto 16) := "0100"; when "011101" => val(19 downto 16) := "1110";
when "011110" => val(19 downto 16) := "1111"; when "011111" => val(19 downto 16) := "1001";
when "100000" => val(19 downto 16) := "1010"; when "100001" => val(19 downto 16) := "0011";
when "100010" => val(19 downto 16) := "0110"; when "100011" => val(19 downto 16) := "1111";
when "100100" => val(19 downto 16) := "1001"; when "100101" => val(19 downto 16) := "0000";
when "100110" => val(19 downto 16) := "0000"; when "100111" => val(19 downto 16) := "0110";
when "101000" => val(19 downto 16) := "1100"; when "101001" => val(19 downto 16) := "1010";
when "101010" => val(19 downto 16) := "1011"; when "101011" => val(19 downto 16) := "0001";
when "101100" => val(19 downto 16) := "0111"; when "101101" => val(19 downto 16) := "1101";
when "101110" => val(19 downto 16) := "1101"; when "101111" => val(19 downto 16) := "1000";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -