⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 freedes.vhd.txt

📁 DES 加密算法的VHDL和VERILOG 源程序及其TESTBENCH。
💻 TXT
📖 第 1 页 / 共 5 页
字号:
           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 + -