OpenCores
URL https://opencores.org/ocsvn/3des_vhdl/3des_vhdl/trunk

Subversion Repositories 3des_vhdl

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 3 to Rev 4
    Reverse comparison

Rev 3 → Rev 4

/trunk/Docs/3DESDatasheet_CoreTex_OpenCores.pdf Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
trunk/Docs/3DESDatasheet_CoreTex_OpenCores.pdf Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/VHDL/add_key.vhd =================================================================== --- trunk/VHDL/add_key.vhd (revision 3) +++ trunk/VHDL/add_key.vhd (nonexistent) @@ -1,103 +0,0 @@ ---------------------------------------------------------------------- --- (c) Copyright 2006, CoreTex Systems, LLC -- --- www.coretexsys.com -- --- -- --- This source file may be used and distributed without -- --- restriction provided that this copyright statement is not -- --- removed from the file and that any derivative work contains -- --- the original copyright notice and the associated disclaimer. -- --- -- --- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- --- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- --- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- --- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- --- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- --- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- --- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- --- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- --- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- --- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- --- POSSIBILITY OF SUCH DAMAGE. -- --- -- ---------------------------------------------------------------------- - ----------------------------------------------------------------------- - --- Poject structure: - --- |- tdes_top.vhd --- | --- |- des_cipher_top.vhd --- |- des_top.vhd --- |- block_top.vhd --- |- add_key.vhd --- | --- |- add_left.vhd --- | --- |- e_expansion_function.vhd --- | --- |- p_box.vhd --- | --- |- s_box.vhd --- |- s1_box.vhd --- |- s2_box.vhd --- |- s3_box.vhd --- |- s4_box.vhd --- |- s5_box.vhd --- |- s6_box.vhd --- |- s7_box.vhd --- |- s8_box.vhd --- |- key_schedule.vhd - ----------------------------------------------------------------------- - ---------------------------------------------------------------------------------------------------- --- --- Title : add_key --- Company : CoreTex Systems, LLC --- ---------------------------------------------------------------------------------------------------- - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_ARITH.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -entity add_key is -port( - x0_in: in std_logic_vector(0 to 5); - x1_in: in std_logic_vector(0 to 5); - x2_in: in std_logic_vector(0 to 5); - x3_in: in std_logic_vector(0 to 5); - x4_in: in std_logic_vector(0 to 5); - x5_in: in std_logic_vector(0 to 5); - x6_in: in std_logic_vector(0 to 5); - x7_in: in std_logic_vector(0 to 5); - key: in std_logic_vector(0 to 47); - x0_out: out std_logic_vector(5 downto 0); - x1_out: out std_logic_vector(5 downto 0); - x2_out: out std_logic_vector(5 downto 0); - x3_out: out std_logic_vector(5 downto 0); - x4_out: out std_logic_vector(5 downto 0); - x5_out: out std_logic_vector(5 downto 0); - x6_out: out std_logic_vector(5 downto 0); - x7_out: out std_logic_vector(5 downto 0) - ); -end add_key; - - -architecture Behavioral of add_key is -begin - - x0_out <= x0_in xor key(0 to 5); - x1_out <= x1_in xor key(6 to 11); - x2_out <= x2_in xor key(12 to 17); - x3_out <= x3_in xor key(18 to 23); - x4_out <= x4_in xor key(24 to 29); - x5_out <= x5_in xor key(30 to 35); - x6_out <= x6_in xor key(36 to 41); - x7_out <= x7_in xor key(42 to 47); - -end Behavioral; Index: trunk/VHDL/s6_box.vhd =================================================================== --- trunk/VHDL/s6_box.vhd (revision 3) +++ trunk/VHDL/s6_box.vhd (nonexistent) @@ -1,144 +0,0 @@ ---------------------------------------------------------------------- --- (c) Copyright 2006, CoreTex Systems, LLC -- --- www.coretexsys.com -- --- -- --- This source file may be used and distributed without -- --- restriction provided that this copyright statement is not -- --- removed from the file and that any derivative work contains -- --- the original copyright notice and the associated disclaimer. -- --- -- --- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- --- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- --- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- --- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- --- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- --- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- --- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- --- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- --- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- --- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- --- POSSIBILITY OF SUCH DAMAGE. -- --- -- ---------------------------------------------------------------------- - ----------------------------------------------------------------------- - --- Poject structure: - --- |- tdes_top.vhd --- | --- |- des_cipher_top.vhd --- |- des_top.vhd --- |- block_top.vhd --- |- add_key.vhd --- | --- |- add_left.vhd --- | --- |- e_expansion_function.vhd --- | --- |- p_box.vhd --- | --- |- s_box.vhd --- |- s1_box.vhd --- |- s2_box.vhd --- |- s3_box.vhd --- |- s4_box.vhd --- |- s5_box.vhd --- |- s6_box.vhd --- |- s7_box.vhd --- |- s8_box.vhd --- |- key_schedule.vhd - ----------------------------------------------------------------------- - ---------------------------------------------------------------------------------------------------- --- --- Title : s6_box --- Company : CoreTex Systems, LLC --- ---------------------------------------------------------------------------------------------------- - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_ARITH.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -ENTITY s6_box IS - port ( - A: IN std_logic_VECTOR(5 downto 0); - SPO: OUT std_logic_VECTOR(3 downto 0)); -END s6_box; - -architecture Behavioral of s6_box is - -begin - -SPO <= "1100" when A = x"0" else - "1010" when A = x"1" else - "0001" when A = x"2" else - "1111" when A = x"3" else - "1010" when A = x"4" else - "0100" when A = x"5" else - "1111" when A = x"6" else - "0010" when A = x"7" else - "1001" when A = x"8" else - "0111" when A = x"9" else - "0010" when A = x"A" else - "1100" when A = x"B" else - "0110" when A = x"C" else - "1001" when A = x"D" else - "1000" when A = x"E" else - "0101" when A = x"F" else - "0000" when A = x"10" else - "0110" when A = x"11" else - "1101" when A = x"12" else - "0001" when A = x"13" else - "0011" when A = x"14" else - "1101" when A = x"15" else - "0100" when A = x"16" else - "1110" when A = x"17" else - "1110" when A = x"18" else - "0000" when A = x"19" else - "0111" when A = x"1A" else - "1011" when A = x"1B" else - "0101" when A = x"1C" else - "0011" when A = x"1D" else - "1011" when A = x"1E" else - "1000" when A = x"1F" else - "1001" when A = x"20" else - "0100" when A = x"21" else - "1110" when A = x"22" else - "0011" when A = x"23" else - "1111" when A = x"24" else - "0010" when A = x"25" else - "0101" when A = x"26" else - "1100" when A = x"27" else - "0010" when A = x"28" else - "1001" when A = x"29" else - "1000" when A = x"2A" else - "0101" when A = x"2B" else - "1100" when A = x"2C" else - "1111" when A = x"2D" else - "0011" when A = x"2E" else - "1010" when A = x"2F" else - "0111" when A = x"30" else - "1011" when A = x"31" else - "0000" when A = x"32" else - "1110" when A = x"33" else - "0100" when A = x"34" else - "0001" when A = x"35" else - "1010" when A = x"36" else - "0111" when A = x"37" else - "0001" when A = x"38" else - "0110" when A = x"39" else - "1101" when A = x"3A" else - "0000" when A = x"3B" else - "1011" when A = x"3C" else - "1000" when A = x"3D" else - "0110" when A = x"3E" else - "1101" when A = x"3F" else - "1101"; - -END Behavioral; \ No newline at end of file Index: trunk/VHDL/s7_box.vhd =================================================================== --- trunk/VHDL/s7_box.vhd (revision 3) +++ trunk/VHDL/s7_box.vhd (nonexistent) @@ -1,144 +0,0 @@ ---------------------------------------------------------------------- --- (c) Copyright 2006, CoreTex Systems, LLC -- --- www.coretexsys.com -- --- -- --- This source file may be used and distributed without -- --- restriction provided that this copyright statement is not -- --- removed from the file and that any derivative work contains -- --- the original copyright notice and the associated disclaimer. -- --- -- --- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- --- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- --- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- --- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- --- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- --- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- --- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- --- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- --- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- --- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- --- POSSIBILITY OF SUCH DAMAGE. -- --- -- ---------------------------------------------------------------------- - ----------------------------------------------------------------------- - --- Poject structure: - --- |- tdes_top.vhd --- | --- |- des_cipher_top.vhd --- |- des_top.vhd --- |- block_top.vhd --- |- add_key.vhd --- | --- |- add_left.vhd --- | --- |- e_expansion_function.vhd --- | --- |- p_box.vhd --- | --- |- s_box.vhd --- |- s1_box.vhd --- |- s2_box.vhd --- |- s3_box.vhd --- |- s4_box.vhd --- |- s5_box.vhd --- |- s6_box.vhd --- |- s7_box.vhd --- |- s8_box.vhd --- |- key_schedule.vhd - ----------------------------------------------------------------------- - ---------------------------------------------------------------------------------------------------- --- --- Title : s7_box --- Company : CoreTex Systems, LLC --- ---------------------------------------------------------------------------------------------------- - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_ARITH.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -ENTITY s7_box IS - port ( - A: IN std_logic_VECTOR(5 downto 0); - SPO: OUT std_logic_VECTOR(3 downto 0)); -END s7_box; - -architecture Behavioral of s7_box is - -begin - -SPO <= "0100" when A = x"0" else - "1101" when A = x"1" else - "1011" when A = x"2" else - "0000" when A = x"3" else - "0010" when A = x"4" else - "1011" when A = x"5" else - "1110" when A = x"6" else - "0111" when A = x"7" else - "1111" when A = x"8" else - "0100" when A = x"9" else - "0000" when A = x"A" else - "1001" when A = x"B" else - "1000" when A = x"C" else - "0001" when A = x"D" else - "1101" when A = x"E" else - "1010" when A = x"F" else - "0011" when A = x"10" else - "1110" when A = x"11" else - "1100" when A = x"12" else - "0011" when A = x"13" else - "1001" when A = x"14" else - "0101" when A = x"15" else - "0111" when A = x"16" else - "1100" when A = x"17" else - "0101" when A = x"18" else - "0010" when A = x"19" else - "1010" when A = x"1A" else - "1111" when A = x"1B" else - "0110" when A = x"1C" else - "1000" when A = x"1D" else - "0001" when A = x"1E" else - "0110" when A = x"1F" else - "0001" when A = x"20" else - "0110" when A = x"21" else - "0100" when A = x"22" else - "1011" when A = x"23" else - "1011" when A = x"24" else - "1101" when A = x"25" else - "1101" when A = x"26" else - "1000" when A = x"27" else - "1100" when A = x"28" else - "0001" when A = x"29" else - "0011" when A = x"2A" else - "0100" when A = x"2B" else - "0111" when A = x"2C" else - "1010" when A = x"2D" else - "1110" when A = x"2E" else - "0111" when A = x"2F" else - "1010" when A = x"30" else - "1001" when A = x"31" else - "1111" when A = x"32" else - "0101" when A = x"33" else - "0110" when A = x"34" else - "0000" when A = x"35" else - "1000" when A = x"36" else - "1111" when A = x"37" else - "0000" when A = x"38" else - "1110" when A = x"39" else - "0101" when A = x"3A" else - "0010" when A = x"3B" else - "1001" when A = x"3C" else - "0011" when A = x"3D" else - "0010" when A = x"3E" else - "1100" when A = x"3F" else - "1100"; - -END Behavioral; \ No newline at end of file Index: trunk/VHDL/add_left.vhd =================================================================== --- trunk/VHDL/add_left.vhd (revision 3) +++ trunk/VHDL/add_left.vhd (nonexistent) @@ -1,82 +0,0 @@ ---------------------------------------------------------------------- --- (c) Copyright 2006, CoreTex Systems, LLC -- --- www.coretexsys.com -- --- -- --- This source file may be used and distributed without -- --- restriction provided that this copyright statement is not -- --- removed from the file and that any derivative work contains -- --- the original copyright notice and the associated disclaimer. -- --- -- --- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- --- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- --- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- --- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- --- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- --- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- --- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- --- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- --- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- --- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- --- POSSIBILITY OF SUCH DAMAGE. -- --- -- ---------------------------------------------------------------------- - ----------------------------------------------------------------------- - --- Poject structure: - --- |- tdes_top.vhd --- | --- |- des_cipher_top.vhd --- |- des_top.vhd --- |- block_top.vhd --- |- add_key.vhd --- | --- |- add_left.vhd --- | --- |- e_expansion_function.vhd --- | --- |- p_box.vhd --- | --- |- s_box.vhd --- |- s1_box.vhd --- |- s2_box.vhd --- |- s3_box.vhd --- |- s4_box.vhd --- |- s5_box.vhd --- |- s6_box.vhd --- |- s7_box.vhd --- |- s8_box.vhd --- |- key_schedule.vhd - ----------------------------------------------------------------------- - ---------------------------------------------------------------------------------------------------- --- --- Title : add_left --- Company : CoreTex Systems, LLC --- ---------------------------------------------------------------------------------------------------- - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_ARITH.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -entity add_left is -port( - x_in: in std_logic_vector(0 to 31); - left_in: in std_logic_vector(0 to 31); - x_out: out std_logic_vector(0 to 31) - ); -end add_left; - -architecture Behavioral of add_left is - -begin - - x_out <= x_in xor left_in; - -end Behavioral; Index: trunk/VHDL/s8_box.vhd =================================================================== --- trunk/VHDL/s8_box.vhd (revision 3) +++ trunk/VHDL/s8_box.vhd (nonexistent) @@ -1,144 +0,0 @@ ---------------------------------------------------------------------- --- (c) Copyright 2006, CoreTex Systems, LLC -- --- www.coretexsys.com -- --- -- --- This source file may be used and distributed without -- --- restriction provided that this copyright statement is not -- --- removed from the file and that any derivative work contains -- --- the original copyright notice and the associated disclaimer. -- --- -- --- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- --- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- --- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- --- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- --- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- --- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- --- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- --- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- --- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- --- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- --- POSSIBILITY OF SUCH DAMAGE. -- --- -- ---------------------------------------------------------------------- - ----------------------------------------------------------------------- - --- Poject structure: - --- |- tdes_top.vhd --- | --- |- des_cipher_top.vhd --- |- des_top.vhd --- |- block_top.vhd --- |- add_key.vhd --- | --- |- add_left.vhd --- | --- |- e_expansion_function.vhd --- | --- |- p_box.vhd --- | --- |- s_box.vhd --- |- s1_box.vhd --- |- s2_box.vhd --- |- s3_box.vhd --- |- s4_box.vhd --- |- s5_box.vhd --- |- s6_box.vhd --- |- s7_box.vhd --- |- s8_box.vhd --- |- key_schedule.vhd - ----------------------------------------------------------------------- - ---------------------------------------------------------------------------------------------------- --- --- Title : s8_box --- Company : CoreTex Systems, LLC --- ---------------------------------------------------------------------------------------------------- - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_ARITH.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -ENTITY s8_box IS - port ( - A: IN std_logic_VECTOR(5 downto 0); - SPO: OUT std_logic_VECTOR(3 downto 0)); -END s8_box; - -architecture Behavioral of s8_box is - -begin - -SPO <= "1101" when A = x"0" else - "0001" when A = x"1" else - "0010" when A = x"2" else - "1111" when A = x"3" else - "1000" when A = x"4" else - "1101" when A = x"5" else - "0100" when A = x"6" else - "1000" when A = x"7" else - "0110" when A = x"8" else - "1010" when A = x"9" else - "1111" when A = x"A" else - "0011" when A = x"B" else - "1011" when A = x"C" else - "0111" when A = x"D" else - "0001" when A = x"E" else - "0100" when A = x"F" else - "1010" when A = x"10" else - "1100" when A = x"11" else - "1001" when A = x"12" else - "0101" when A = x"13" else - "0011" when A = x"14" else - "0110" when A = x"15" else - "1110" when A = x"16" else - "1011" when A = x"17" else - "0101" when A = x"18" else - "0000" when A = x"19" else - "0000" when A = x"1A" else - "1110" when A = x"1B" else - "1100" when A = x"1C" else - "1001" when A = x"1D" else - "0111" when A = x"1E" else - "0010" when A = x"1F" else - "0111" when A = x"20" else - "0010" when A = x"21" else - "1011" when A = x"22" else - "0001" when A = x"23" else - "0100" when A = x"24" else - "1110" when A = x"25" else - "0001" when A = x"26" else - "0111" when A = x"27" else - "1001" when A = x"28" else - "0100" when A = x"29" else - "1100" when A = x"2A" else - "1010" when A = x"2B" else - "1110" when A = x"2C" else - "1000" when A = x"2D" else - "0010" when A = x"2E" else - "1101" when A = x"2F" else - "0000" when A = x"30" else - "1111" when A = x"31" else - "0110" when A = x"32" else - "1100" when A = x"33" else - "1010" when A = x"34" else - "1001" when A = x"35" else - "1101" when A = x"36" else - "0000" when A = x"37" else - "1111" when A = x"38" else - "0011" when A = x"39" else - "0011" when A = x"3A" else - "0101" when A = x"3B" else - "0101" when A = x"3C" else - "0110" when A = x"3D" else - "1000" when A = x"3E" else - "1011" when A = x"3F" else - "1011"; - -END Behavioral; \ No newline at end of file Index: trunk/VHDL/key_schedule.vhd =================================================================== --- trunk/VHDL/key_schedule.vhd (revision 3) +++ trunk/VHDL/key_schedule.vhd (nonexistent) @@ -1,256 +0,0 @@ ---------------------------------------------------------------------- --- (c) Copyright 2006, CoreTex Systems, LLC -- --- www.coretexsys.com -- --- -- --- This source file may be used and distributed without -- --- restriction provided that this copyright statement is not -- --- removed from the file and that any derivative work contains -- --- the original copyright notice and the associated disclaimer. -- --- -- --- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- --- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- --- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- --- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- --- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- --- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- --- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- --- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- --- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- --- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- --- POSSIBILITY OF SUCH DAMAGE. -- --- -- ---------------------------------------------------------------------- - ----------------------------------------------------------------------- - --- Poject structure: - --- |- tdes_top.vhd --- | --- |- des_cipher_top.vhd --- |- des_top.vhd --- |- block_top.vhd --- |- add_key.vhd --- | --- |- add_left.vhd --- | --- |- e_expansion_function.vhd --- | --- |- p_box.vhd --- | --- |- s_box.vhd --- |- s1_box.vhd --- |- s2_box.vhd --- |- s3_box.vhd --- |- s4_box.vhd --- |- s5_box.vhd --- |- s6_box.vhd --- |- s7_box.vhd --- |- s8_box.vhd --- |- key_schedule.vhd - ----------------------------------------------------------------------- - ---------------------------------------------------------------------------------------------------- --- --- Title : key_schedule --- Company : CoreTex Systems, LLC --- ---------------------------------------------------------------------------------------------------- - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_ARITH.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -entity key_schedule is -port ( - - key_in: in std_logic_vector(0 to 63); -- key to be expanded - - -- interface signals for communication with DES - KeySelect: in std_logic_vector(3 downto 0); -- selector for key - key_out: out std_logic_vector(0 to 47); -- expaned key output - key_ready: out std_logic; -- signal for DES that key has been expanded - - reset: in std_logic; -- reset - clock: in std_logic -- master clock - ); -end key_schedule; - -architecture Behavioral of key_schedule is - --- --- Storage for expanded key --- -signal K16, K1: std_logic_vector(0 to 47); -signal K2, K3: std_logic_vector(0 to 47); -signal K4, K5: std_logic_vector(0 to 47); -signal K6, K7: std_logic_vector(0 to 47); -signal K8, K9: std_logic_vector(0 to 47); -signal K10, K11: std_logic_vector(0 to 47); -signal K12, K13: std_logic_vector(0 to 47); -signal K14, K15: std_logic_vector(0 to 47); - -begin - - --- --- Selector for expaned key --- -key_out <= K1 when KeySelect = x"0" else - K2 when KeySelect = x"1" else - K3 when KeySelect = x"2" else - K4 when KeySelect = x"3" else - K5 when KeySelect = x"4" else - K6 when KeySelect = x"5" else - K7 when KeySelect = x"6" else - K8 when KeySelect = x"7" else - K9 when KeySelect = x"8" else - K10 when KeySelect = x"9" else - K11 when KeySelect = x"A" else - K12 when KeySelect = x"B" else - K13 when KeySelect = x"C" else - K14 when KeySelect = x"D" else - K15 when KeySelect = x"E" else - K16; - -process (clock) -begin - --- --- input key will expaned and stored after rising edge of the first clock after mater reset. --- the keys are captured at a triple-des level --- -if rising_edge(clock) then - - if reset = '1' then - key_ready <= '0'; - else - - -- - -- key expansion from the input key - -- - K1 <= key_in(9) & key_in(50) & key_in(33) & key_in(59) & key_in(48) & key_in(16) & key_in(32) & key_in(56) & - key_in(1) & key_in(8) & key_in(18) & key_in(41) & key_in(2) & key_in(34) & key_in(25) & key_in(24) & - key_in(43) & key_in(57) & key_in(58) & key_in(0) & key_in(35) & key_in(26) & key_in(17) & key_in(40) & - key_in(21) & key_in(27) & key_in(38) & key_in(53) & key_in(36) & key_in(3) & key_in(46) & key_in(29) & - key_in(4) & key_in(52) & key_in(22) & key_in(28) & key_in(60) & key_in(20) & key_in(37) & key_in(62) & - key_in(14) & key_in(19) & key_in(44) & key_in(13) & key_in(12) & key_in(61) & key_in(54) & key_in(30); - - K2 <= key_in(1) & key_in(42) & key_in(25) & key_in(51) & key_in(40) & key_in(8) & key_in(24) & key_in(48) & - key_in(58) & key_in(0) & key_in(10) & key_in(33) & key_in(59) & key_in(26) & key_in(17) & key_in(16) & - key_in(35) & key_in(49) & key_in(50) & key_in(57) & key_in(56) & key_in(18) & key_in(9) & key_in(32) & - key_in(13) & key_in(19) & key_in(30) & key_in(45) & key_in(28) & key_in(62) & key_in(38) & key_in(21) & - key_in(27) & key_in(44) & key_in(14) & key_in(20) & key_in(52) & key_in(12) & key_in(29) & key_in(54) & - key_in(6) & key_in(11) & key_in(36) & key_in(5) & key_in(4) & key_in(53) & key_in(46) & key_in(22); - - K3 <= key_in(50) & key_in(26) & key_in(9) & key_in(35) & key_in(24) & key_in(57) & key_in(8) & key_in(32) & - key_in(42) & key_in(49) & key_in(59) & key_in(17) & key_in(43) & key_in(10) & key_in(1) & key_in(0) & - key_in(48) & key_in(33) & key_in(34) & key_in(41) & key_in(40) & key_in(2) & key_in(58) & key_in(16) & - key_in(60) & key_in(3) & key_in(14) & key_in(29) & key_in(12) & key_in(46) & key_in(22) & key_in(5) & - key_in(11) & key_in(28) & key_in(61) & key_in(4) & key_in(36) & key_in(27) & key_in(13) & key_in(38) & - key_in(53) & key_in(62) & key_in(20) & key_in(52) & key_in(19) & key_in(37) & key_in(30) & key_in(6); - - K4 <= key_in(34) & key_in(10) & key_in(58) & key_in(48) & key_in(8) & key_in(41) & key_in(57) & key_in(16) & - key_in(26) & key_in(33) & key_in(43) & key_in(1) & key_in(56) & key_in(59) & key_in(50) & key_in(49) & - key_in(32) & key_in(17) & key_in(18) & key_in(25) & key_in(24) & key_in(51) & key_in(42) & key_in(0) & - key_in(44) & key_in(54) & key_in(61) & key_in(13) & key_in(27) & key_in(30) & key_in(6) & key_in(52) & - key_in(62) & key_in(12) & key_in(45) & key_in(19) & key_in(20) & key_in(11) & key_in(60) & key_in(22) & - key_in(37) & key_in(46) & key_in(4) & key_in(36) & key_in(3) & key_in(21) & key_in(14) & key_in(53); - - K5 <= key_in(18) & key_in(59) & key_in(42) & key_in(32) & key_in(57) & key_in(25) & key_in(41) & key_in(0) & - key_in(10) & key_in(17) & key_in(56) & key_in(50) & key_in(40) & key_in(43) & key_in(34) & key_in(33) & - key_in(16) & key_in(1) & key_in(2) & key_in(9) & key_in(8) & key_in(35) & key_in(26) & key_in(49) & - key_in(28) & key_in(38) & key_in(45) & key_in(60) & key_in(11) & key_in(14) & key_in(53) & key_in(36) & - key_in(46) & key_in(27) & key_in(29) & key_in(3) & key_in(4) & key_in(62) & key_in(44) & key_in(6) & - key_in(21) & key_in(30) & key_in(19) & key_in(20) & key_in(54) & key_in(5) & key_in(61) & key_in(37); - - K6 <= key_in(2) & key_in(43) & key_in(26) & key_in(16) & key_in(41) & key_in(9) & key_in(25) & key_in(49) & - key_in(59) & key_in(1) & key_in(40) & key_in(34) & key_in(24) & key_in(56) & key_in(18) & key_in(17) & - key_in(0) & key_in(50) & key_in(51) & key_in(58) & key_in(57) & key_in(48) & key_in(10) & key_in(33) & - key_in(12) & key_in(22) & key_in(29) & key_in(44) & key_in(62) & key_in(61) & key_in(37) & key_in(20) & - key_in(30) & key_in(11) & key_in(13) & key_in(54) & key_in(19) & key_in(46) & key_in(28) & key_in(53) & - key_in(5) & key_in(14) & key_in(3) & key_in(4) & key_in(38) & key_in(52) & key_in(45) & key_in(21); - - K7 <= key_in(51) & key_in(56) & key_in(10) & key_in(0) & key_in(25) & key_in(58) & key_in(9) & key_in(33) & - key_in(43) & key_in(50) & key_in(24) & key_in(18) & key_in(8) & key_in(40) & key_in(2) & key_in(1) & - key_in(49) & key_in(34) & key_in(35) & key_in(42) & key_in(41) & key_in(32) & key_in(59) & key_in(17) & - key_in(27) & key_in(6) & key_in(13) & key_in(28) & key_in(46) & key_in(45) & key_in(21) & key_in(4) & - key_in(14) & key_in(62) & key_in(60) & key_in(38) & key_in(3) & key_in(30) & key_in(12) & key_in(37) & - key_in(52) & key_in(61) & key_in(54) & key_in(19) & key_in(22) & key_in(36) & key_in(29) & key_in(5); - - K8 <= key_in(35) & key_in(40) & key_in(59) & key_in(49) & key_in(9) & key_in(42) & key_in(58) & key_in(17) & - key_in(56) & key_in(34) & key_in(8) & key_in(2) & key_in(57) & key_in(24) & key_in(51) & key_in(50) & - key_in(33) & key_in(18) & key_in(48) & key_in(26) & key_in(25) & key_in(16) & key_in(43) & key_in(1) & - key_in(11) & key_in(53) & key_in(60) & key_in(12) & key_in(30) & key_in(29) & key_in(5) & key_in(19) & - key_in(61) & key_in(46) & key_in(44) & key_in(22) & key_in(54) & key_in(14) & key_in(27) & key_in(21) & - key_in(36) & key_in(45) & key_in(38) & key_in(3) & key_in(6) & key_in(20) & key_in(13) & key_in(52); - - K9 <= key_in(56) & key_in(32) & key_in(51) & key_in(41) & key_in(1) & key_in(34) & key_in(50) & key_in(9) & - key_in(48) & key_in(26) & key_in(0) & key_in(59) & key_in(49) & key_in(16) & key_in(43) & key_in(42) & - key_in(25) & key_in(10) & key_in(40) & key_in(18) & key_in(17) & key_in(8) & key_in(35) & key_in(58) & - key_in(3) & key_in(45) & key_in(52) & key_in(4) & key_in(22) & key_in(21) & key_in(60) & key_in(11) & - key_in(53) & key_in(38) & key_in(36) & key_in(14) & key_in(46) & key_in(6) & key_in(19) & key_in(13) & - key_in(28) & key_in(37) & key_in(30) & key_in(62) & key_in(61) & key_in(12) & key_in(5) & key_in(44); - - K10 <= key_in(40) & key_in(16) & key_in(35) & key_in(25) & key_in(50) & key_in(18) & key_in(34) & key_in(58) & - key_in(32) & key_in(10) & key_in(49) & key_in(43) & key_in(33) & key_in(0) & key_in(56) & key_in(26) & - key_in(9) & key_in(59) & key_in(24) & key_in(2) & key_in(1) & key_in(57) & key_in(48) & key_in(42) & - key_in(54) & key_in(29) & key_in(36) & key_in(19) & key_in(6) & key_in(5) & key_in(44) & key_in(62) & - key_in(37) & key_in(22) & key_in(20) & key_in(61) & key_in(30) & key_in(53) & key_in(3) & key_in(60) & - key_in(12) & key_in(21) & key_in(14) & key_in(46) & key_in(45) & key_in(27) & key_in(52) & key_in(28); - - K11 <= key_in(24) & key_in(0) & key_in(48) & key_in(9) & key_in(34) & key_in(2) & key_in(18) & key_in(42) & - key_in(16) & key_in(59) & key_in(33) & key_in(56) & key_in(17) & key_in(49) & key_in(40) & key_in(10) & - key_in(58) & key_in(43) & key_in(8) & key_in(51) & key_in(50) & key_in(41) & key_in(32) & key_in(26) & - key_in(38) & key_in(13) & key_in(20) & key_in(3) & key_in(53) & key_in(52) & key_in(28) & key_in(46) & - key_in(21) & key_in(6) & key_in(4) & key_in(45) & key_in(14) & key_in(37) & key_in(54) & key_in(44) & - key_in(27) & key_in(5) & key_in(61) & key_in(30) & key_in(29) & key_in(11) & key_in(36) & key_in(12); - - K12 <= key_in(8) & key_in(49) & key_in(32) & key_in(58) & key_in(18) & key_in(51) & key_in(2) & key_in(26) & - key_in(0) & key_in(43) & key_in(17) & key_in(40) & key_in(1) & key_in(33) & key_in(24) & key_in(59) & - key_in(42) & key_in(56) & key_in(57) & key_in(35) & key_in(34) & key_in(25) & key_in(16) & key_in(10) & - key_in(22) & key_in(60) & key_in(4) & key_in(54) & key_in(37) & key_in(36) & key_in(12) & key_in(30) & - key_in(5) & key_in(53) & key_in(19) & key_in(29) & key_in(61) & key_in(21) & key_in(38) & key_in(28) & - key_in(11) & key_in(52) & key_in(45) & key_in(14) & key_in(13) & key_in(62) & key_in(20) & key_in(27); - - K13 <= key_in(57) & key_in(33) & key_in(16) & key_in(42) & key_in(2) & key_in(35) & key_in(51) & key_in(10) & - key_in(49) & key_in(56) & key_in(1) & key_in(24) & key_in(50) & key_in(17) & key_in(8) & key_in(43) & - key_in(26) & key_in(40) & key_in(41) & key_in(48) & key_in(18) & key_in(9) & key_in(0) & key_in(59) & - key_in(6) & key_in(44) & key_in(19) & key_in(38) & key_in(21) & key_in(20) & key_in(27) & key_in(14) & - key_in(52) & key_in(37) & key_in(3) & key_in(13) & key_in(45) & key_in(5) & key_in(22) & key_in(12) & - key_in(62) & key_in(36) & key_in(29) & key_in(61) & key_in(60) & key_in(46) & key_in(4) & key_in(11); - - K14 <= key_in(41) & key_in(17) & key_in(0) & key_in(26) & key_in(51) & key_in(48) & key_in(35) & key_in(59) & - key_in(33) & key_in(40) & key_in(50) & key_in(8) & key_in(34) & key_in(1) & key_in(57) & key_in(56) & - key_in(10) & key_in(24) & key_in(25) & key_in(32) & key_in(2) & key_in(58) & key_in(49) & key_in(43) & - key_in(53) & key_in(28) & key_in(3) & key_in(22) & key_in(5) & key_in(4) & key_in(11) & key_in(61) & - key_in(36) & key_in(21) & key_in(54) & key_in(60) & key_in(29) & key_in(52) & key_in(6) & key_in(27) & - key_in(46) & key_in(20) & key_in(13) & key_in(45) & key_in(44) & key_in(30) & key_in(19) & key_in(62); - - K15 <= key_in(25) & key_in(1) & key_in(49) & key_in(10) & key_in(35) & key_in(32) & key_in(48) & key_in(43) & - key_in(17) & key_in(24) & key_in(34) & key_in(57) & key_in(18) & key_in(50) & key_in(41) & key_in(40) & - key_in(59) & key_in(8) & key_in(9) & key_in(16) & key_in(51) & key_in(42) & key_in(33) & key_in(56) & - key_in(37) & key_in(12) & key_in(54) & key_in(6) & key_in(52) & key_in(19) & key_in(62) & key_in(45) & - key_in(20) & key_in(5) & key_in(38) & key_in(44) & key_in(13) & key_in(36) & key_in(53) & key_in(11) & - key_in(30) & key_in(4) & key_in(60) & key_in(29) & key_in(28) & key_in(14) & key_in(3) & key_in(46); - - K16 <= key_in(17) & key_in(58) & key_in(41) & key_in(2) & key_in(56) & key_in(24) & key_in(40) & key_in(35) & - key_in(9) & key_in(16) & key_in(26) & key_in(49) & key_in(10) & key_in(42) & key_in(33) & key_in(32) & - key_in(51) & key_in(0) & key_in(1) & key_in(8) & key_in(43) & key_in(34) & key_in(25) & key_in(48) & - key_in(29) & key_in(4) & key_in(46) & key_in(61) & key_in(44) & key_in(11) & key_in(54) & key_in(37) & - key_in(12) & key_in(60) & key_in(30) & key_in(36) & key_in(5) & key_in(28) & key_in(45) & key_in(3) & - key_in(22) & key_in(27) & key_in(52) & key_in(21) & key_in(20) & key_in(6) & key_in(62) & key_in(38); - - key_ready <= '1'; - - end if; - -end if; -end process; - - -end Behavioral; Index: trunk/VHDL/p_box.vhd =================================================================== --- trunk/VHDL/p_box.vhd (revision 3) +++ trunk/VHDL/p_box.vhd (nonexistent) @@ -1,96 +0,0 @@ ---------------------------------------------------------------------- --- (c) Copyright 2006, CoreTex Systems, LLC -- --- www.coretexsys.com -- --- -- --- This source file may be used and distributed without -- --- restriction provided that this copyright statement is not -- --- removed from the file and that any derivative work contains -- --- the original copyright notice and the associated disclaimer. -- --- -- --- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- --- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- --- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- --- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- --- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- --- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- --- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- --- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- --- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- --- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- --- POSSIBILITY OF SUCH DAMAGE. -- --- -- ---------------------------------------------------------------------- - ----------------------------------------------------------------------- - --- Poject structure: - --- |- tdes_top.vhd --- | --- |- des_cipher_top.vhd --- |- des_top.vhd --- |- block_top.vhd --- |- add_key.vhd --- | --- |- add_left.vhd --- | --- |- e_expansion_function.vhd --- | --- |- p_box.vhd --- | --- |- s_box.vhd --- |- s1_box.vhd --- |- s2_box.vhd --- |- s3_box.vhd --- |- s4_box.vhd --- |- s5_box.vhd --- |- s6_box.vhd --- |- s7_box.vhd --- |- s8_box.vhd --- |- key_schedule.vhd - ----------------------------------------------------------------------- - ---------------------------------------------------------------------------------------------------- --- --- Title : p_box --- Company : CoreTex Systems, LLC --- ---------------------------------------------------------------------------------------------------- - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_ARITH.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -entity p_box is -port( - x0_in: in std_logic_vector(3 downto 0); - x1_in: in std_logic_vector(3 downto 0); - x2_in: in std_logic_vector(3 downto 0); - x3_in: in std_logic_vector(3 downto 0); - x4_in: in std_logic_vector(3 downto 0); - x5_in: in std_logic_vector(3 downto 0); - x6_in: in std_logic_vector(3 downto 0); - x7_in: in std_logic_vector(3 downto 0); - x_out: out std_logic_vector(0 to 31) - ); -end p_box; - -architecture Behavioral of p_box is - -signal x_in: std_logic_vector(0 to 31); - -begin - - x_in <= x0_in & x1_in & x2_in & x3_in & x4_in & x5_in & x6_in & x7_in; - x_out <= x_in(15) & x_in(6) & x_in(19) & x_in(20) & x_in(28) & x_in(11) & - x_in(27) & x_in(16) & x_in(0) & x_in(14) & x_in(22) & x_in(25) & - x_in(4) & x_in(17) & x_in(30) & x_in(9) & x_in(1) & x_in(7) & - x_in(23) & x_in(13) & x_in(31) & x_in(26) & x_in(2) & x_in(8) & - x_in(18) & x_in(12) & x_in(29) & x_in(5) & x_in(21) & x_in(10) & - x_in(3) & x_in(24); - -end Behavioral; Index: trunk/VHDL/s_box.vhd =================================================================== --- trunk/VHDL/s_box.vhd (revision 3) +++ trunk/VHDL/s_box.vhd (nonexistent) @@ -1,197 +0,0 @@ ---------------------------------------------------------------------- --- (c) Copyright 2006, CoreTex Systems, LLC -- --- www.coretexsys.com -- --- -- --- This source file may be used and distributed without -- --- restriction provided that this copyright statement is not -- --- removed from the file and that any derivative work contains -- --- the original copyright notice and the associated disclaimer. -- --- -- --- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- --- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- --- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- --- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- --- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- --- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- --- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- --- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- --- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- --- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- --- POSSIBILITY OF SUCH DAMAGE. -- --- -- ---------------------------------------------------------------------- - ----------------------------------------------------------------------- - --- Poject structure: - --- |- tdes_top.vhd --- | --- |- des_cipher_top.vhd --- |- des_top.vhd --- |- block_top.vhd --- |- add_key.vhd --- | --- |- add_left.vhd --- | --- |- e_expansion_function.vhd --- | --- |- p_box.vhd --- | --- |- s_box.vhd --- |- s1_box.vhd --- |- s2_box.vhd --- |- s3_box.vhd --- |- s4_box.vhd --- |- s5_box.vhd --- |- s6_box.vhd --- |- s7_box.vhd --- |- s8_box.vhd --- |- key_schedule.vhd - ----------------------------------------------------------------------- - ---------------------------------------------------------------------------------------------------- --- --- Title : s_box --- Company : CoreTex Systems, LLC --- ---------------------------------------------------------------------------------------------------- - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_ARITH.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -entity s_box is -port( - block0_in: in std_logic_vector(5 downto 0); - block1_in: in std_logic_vector(5 downto 0); - block2_in: in std_logic_vector(5 downto 0); - block3_in: in std_logic_vector(5 downto 0); - block4_in: in std_logic_vector(5 downto 0); - block5_in: in std_logic_vector(5 downto 0); - block6_in: in std_logic_vector(5 downto 0); - block7_in: in std_logic_vector(5 downto 0); - x0_out: out std_logic_vector(3 downto 0); - x1_out: out std_logic_vector(3 downto 0); - x2_out: out std_logic_vector(3 downto 0); - x3_out: out std_logic_vector(3 downto 0); - x4_out: out std_logic_vector(3 downto 0); - x5_out: out std_logic_vector(3 downto 0); - x6_out: out std_logic_vector(3 downto 0); - x7_out: out std_logic_vector(3 downto 0) - ); -end s_box; - -architecture Behavioral of s_box is - -component s1_box - port( - a: in std_logic_VECTOR(5 downto 0); - spo: out std_logic_VECTOR(3 downto 0) - ); -end component; - -component s2_box - port( - a: in std_logic_VECTOR(5 downto 0); - spo: out std_logic_VECTOR(3 downto 0) - ); -end component; - -component s3_box - port( - a: in std_logic_VECTOR(5 downto 0); - spo: out std_logic_VECTOR(3 downto 0) - ); -end component; - -component s4_box - port( - a: in std_logic_VECTOR(5 downto 0); - spo: out std_logic_VECTOR(3 downto 0) - ); -end component; - -component s5_box - port( - a: in std_logic_VECTOR(5 downto 0); - spo: out std_logic_VECTOR(3 downto 0) - ); -end component; - -component s6_box - port( - a: in std_logic_VECTOR(5 downto 0); - spo: out std_logic_VECTOR(3 downto 0) - ); -end component; - -component s7_box - port( - a: in std_logic_VECTOR(5 downto 0); - spo: out std_logic_VECTOR(3 downto 0) - ); -end component; - -component s8_box - port( - a: in std_logic_VECTOR(5 downto 0); - spo: out std_logic_VECTOR(3 downto 0) - ); -end component; - -begin - -S1 : s1_box - port map ( - a => block0_in, - spo => x0_out -); - -S2 : s2_box - port map ( - a => block1_in, - spo => x1_out -); - -S3 : s3_box - port map ( - a => block2_in, - spo => x2_out -); - -S4 : s4_box - port map ( - a => block3_in, - spo => x3_out -); - -S5 : s5_box - port map ( - a => block4_in, - spo => x4_out -); - -S6 : s6_box - port map ( - a => block5_in, - spo => x5_out -); - -S7 : s7_box - port map ( - a => block6_in, - spo => x6_out -); - -S8 : s8_box - port map ( - a => block7_in, - spo => x7_out -); - -end Behavioral; Index: trunk/VHDL/block_top.vhd =================================================================== --- trunk/VHDL/block_top.vhd (revision 3) +++ trunk/VHDL/block_top.vhd (nonexistent) @@ -1,295 +0,0 @@ ---------------------------------------------------------------------- --- (c) Copyright 2006, CoreTex Systems, LLC -- --- www.coretexsys.com -- --- -- --- This source file may be used and distributed without -- --- restriction provided that this copyright statement is not -- --- removed from the file and that any derivative work contains -- --- the original copyright notice and the associated disclaimer. -- --- -- --- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- --- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- --- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- --- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- --- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- --- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- --- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- --- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- --- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- --- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- --- POSSIBILITY OF SUCH DAMAGE. -- --- -- ---------------------------------------------------------------------- - ----------------------------------------------------------------------- - --- Poject structure: - --- |- tdes_top.vhd --- | --- |- des_cipher_top.vhd --- |- des_top.vhd --- |- block_top.vhd --- |- add_key.vhd --- | --- |- add_left.vhd --- | --- |- e_expansion_function.vhd --- | --- |- p_box.vhd --- | --- |- s_box.vhd --- |- s1_box.vhd --- |- s2_box.vhd --- |- s3_box.vhd --- |- s4_box.vhd --- |- s5_box.vhd --- |- s6_box.vhd --- |- s7_box.vhd --- |- s8_box.vhd --- |- key_schedule.vhd - ----------------------------------------------------------------------- - ---------------------------------------------------------------------------------------------------- --- --- Title : block_top --- Company : CoreTex Systems, LLC --- ---------------------------------------------------------------------------------------------------- - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_ARITH.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -entity block_top is -port( - -- - -- input into top level block - -- - L_in: in std_logic_vector(0 to 31); - R_in: in std_logic_vector(0 to 31); - - -- - -- output from top level block - -- - L_out: out std_logic_vector(0 to 31); - R_out: out std_logic_vector(0 to 31); - - -- - -- expanded key from key block - -- - round_key_des: in std_logic_vector(0 to 47) -- current round key - - ); -end block_top; - -architecture Behavioral of block_top is --- --- DECLARATION OF MODULES IN THE BLOCK_TOP --- - --- --- E _ E X P A N S I O N _ F U N C T I O N --- -component e_expansion_function - port( - x_in: in std_logic_vector(0 to 31); - block0_out: out std_logic_vector(0 to 5); - block1_out: out std_logic_vector(0 to 5); - block2_out: out std_logic_vector(0 to 5); - block3_out: out std_logic_vector(0 to 5); - block4_out: out std_logic_vector(0 to 5); - block5_out: out std_logic_vector(0 to 5); - block6_out: out std_logic_vector(0 to 5); - block7_out: out std_logic_vector(0 to 5) - ); -end component; - --- --- A D D _ K E Y --- -component add_key - port( - x0_in: in std_logic_vector(0 to 5); - x1_in: in std_logic_vector(0 to 5); - x2_in: in std_logic_vector(0 to 5); - x3_in: in std_logic_vector(0 to 5); - x4_in: in std_logic_vector(0 to 5); - x5_in: in std_logic_vector(0 to 5); - x6_in: in std_logic_vector(0 to 5); - x7_in: in std_logic_vector(0 to 5); - key: in std_logic_vector(0 to 47); - x0_out: out std_logic_vector(5 downto 0); - x1_out: out std_logic_vector(5 downto 0); - x2_out: out std_logic_vector(5 downto 0); - x3_out: out std_logic_vector(5 downto 0); - x4_out: out std_logic_vector(5 downto 0); - x5_out: out std_logic_vector(5 downto 0); - x6_out: out std_logic_vector(5 downto 0); - x7_out: out std_logic_vector(5 downto 0) - ); -end component; - --- --- S _ B O X --- -component s_box - port( - block0_in: in std_logic_vector(5 downto 0); - block1_in: in std_logic_vector(5 downto 0); - block2_in: in std_logic_vector(5 downto 0); - block3_in: in std_logic_vector(5 downto 0); - block4_in: in std_logic_vector(5 downto 0); - block5_in: in std_logic_vector(5 downto 0); - block6_in: in std_logic_vector(5 downto 0); - block7_in: in std_logic_vector(5 downto 0); - x0_out: out std_logic_vector(3 downto 0); - x1_out: out std_logic_vector(3 downto 0); - x2_out: out std_logic_vector(3 downto 0); - x3_out: out std_logic_vector(3 downto 0); - x4_out: out std_logic_vector(3 downto 0); - x5_out: out std_logic_vector(3 downto 0); - x6_out: out std_logic_vector(3 downto 0); - x7_out: out std_logic_vector(3 downto 0) - ); -end component; - --- --- P _ B O X --- -component p_box - port( - x0_in: in std_logic_vector(3 downto 0); - x1_in: in std_logic_vector(3 downto 0); - x2_in: in std_logic_vector(3 downto 0); - x3_in: in std_logic_vector(3 downto 0); - x4_in: in std_logic_vector(3 downto 0); - x5_in: in std_logic_vector(3 downto 0); - x6_in: in std_logic_vector(3 downto 0); - x7_in: in std_logic_vector(3 downto 0); - x_out: out std_logic_vector(0 to 31) - ); -end component; - --- --- A D D _ L E F T --- -component add_left - port( - x_in: in std_logic_vector(0 to 31); - left_in: in std_logic_vector(0 to 31); - x_out: out std_logic_vector(0 to 31) - ); -end component; - - --- --- Signals that connects modules within block_top --- -signal a0, a1, a2, a3, a4, a5, a6, a7: std_logic_vector(0 to 5); -signal b0, b1, b2, b3, b4, b5, b6, b7: std_logic_vector(5 downto 0); -signal c0, c1, c2, c3, c4, c5, c6, c7: std_logic_vector(3 downto 0); -signal d0: std_logic_vector(0 to 31); -signal R_out_internal: std_logic_vector(0 to 31); - -begin - -L_out <= R_in; -R_out <= R_out_internal; - --- --- INSTANTIATION OF E_EXPANSIONFUNCTION --- -E_EXPANSIONFUNCTION : e_expansion_function -port map ( - x_in => R_in, - block0_out => a0, - block1_out => a1, - block2_out => a2, - block3_out => a3, - block4_out => a4, - block5_out => a5, - block6_out => a6, - block7_out => a7 -); - --- --- INSTANTIATION OF ADDKEY --- -ADDKEY : add_key -port map ( - x0_in => a0, - x1_in => a1, - x2_in => a2, - x3_in => a3, - x4_in => a4, - x5_in => a5, - x6_in => a6, - x7_in => a7, - key => round_key_des, - x0_out => b0, - x1_out => b1, - x2_out => b2, - x3_out => b3, - x4_out => b4, - x5_out => b5, - x6_out => b6, - x7_out => b7 -); - --- --- INSTANTIATION OF SBOX --- -SBOX : s_box -port map ( - block0_in => b0, - block1_in => b1, - block2_in => b2, - block3_in => b3, - block4_in => b4, - block5_in => b5, - block6_in => b6, - block7_in => b7, - x0_out => c0, - x1_out => c1, - x2_out => c2, - x3_out => c3, - x4_out => c4, - x5_out => c5, - x6_out => c6, - x7_out => c7 -); - --- --- INSTANTIATION OF PBOX --- -PBOX : p_box -port map ( - x0_in => c0, - x1_in => c1, - x2_in => c2, - x3_in => c3, - x4_in => c4, - x5_in => c5, - x6_in => c6, - x7_in => c7, - x_out => d0 -); - - --- --- INSTANTIATION OF ADDLEFT --- -ADDLEFT : add_left -port map ( - x_in => d0, - left_in => L_in, - x_out => R_out_internal -); - - -end Behavioral; Index: trunk/VHDL/e_expansion_function.vhd =================================================================== --- trunk/VHDL/e_expansion_function.vhd (revision 3) +++ trunk/VHDL/e_expansion_function.vhd (nonexistent) @@ -1,95 +0,0 @@ ---------------------------------------------------------------------- --- (c) Copyright 2006, CoreTex Systems, LLC -- --- www.coretexsys.com -- --- -- --- This source file may be used and distributed without -- --- restriction provided that this copyright statement is not -- --- removed from the file and that any derivative work contains -- --- the original copyright notice and the associated disclaimer. -- --- -- --- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- --- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- --- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- --- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- --- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- --- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- --- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- --- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- --- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- --- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- --- POSSIBILITY OF SUCH DAMAGE. -- --- -- ---------------------------------------------------------------------- - ----------------------------------------------------------------------- - --- Poject structure: - --- |- tdes_top.vhd --- | --- |- des_cipher_top.vhd --- |- des_top.vhd --- |- block_top.vhd --- |- add_key.vhd --- | --- |- add_left.vhd --- | --- |- e_expansion_function.vhd --- | --- |- p_box.vhd --- | --- |- s_box.vhd --- |- s1_box.vhd --- |- s2_box.vhd --- |- s3_box.vhd --- |- s4_box.vhd --- |- s5_box.vhd --- |- s6_box.vhd --- |- s7_box.vhd --- |- s8_box.vhd --- |- key_schedule.vhd - ----------------------------------------------------------------------- - ---------------------------------------------------------------------------------------------------- --- --- Title : e_expansion_function --- Company : CoreTex Systems, LLC --- ---------------------------------------------------------------------------------------------------- - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_ARITH.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -entity e_expansion_function is -port( - x_in: in std_logic_vector(0 to 31); - block0_out: out std_logic_vector(0 to 5); - block1_out: out std_logic_vector(0 to 5); - block2_out: out std_logic_vector(0 to 5); - block3_out: out std_logic_vector(0 to 5); - block4_out: out std_logic_vector(0 to 5); - block5_out: out std_logic_vector(0 to 5); - block6_out: out std_logic_vector(0 to 5); - block7_out: out std_logic_vector(0 to 5) - ); -end e_expansion_function; - -architecture Behavioral of e_expansion_function is - -begin - - block0_out <= x_in(31) & x_in(0) & x_in(1) & x_in(2) & x_in(3) & x_in(4); - block1_out <= x_in(3) & x_in(4) & x_in(5) & x_in(6) & x_in(7) & x_in(8); - block2_out <= x_in(7) & x_in(8) & x_in(9) & x_in(10) & x_in(11) & x_in(12); - block3_out <= x_in(11) & x_in(12) & x_in(13) & x_in(14) & x_in(15) & x_in(16); - block4_out <= x_in(15) & x_in(16) & x_in(17) & x_in(18) & x_in(19) & x_in(20); - block5_out <= x_in(19) & x_in(20) & x_in(21) & x_in(22) & x_in(23) & x_in(24); - block6_out <= x_in(23) & x_in(24) & x_in(25) & x_in(26) & x_in(27) & x_in(28); - block7_out <= x_in(27) & x_in(28) & x_in(29) & x_in(30) & x_in(31) & x_in(0); - -end Behavioral; Index: trunk/VHDL/tdes_top.vhd =================================================================== --- trunk/VHDL/tdes_top.vhd (revision 3) +++ trunk/VHDL/tdes_top.vhd (nonexistent) @@ -1,269 +0,0 @@ ---------------------------------------------------------------------- --- (c) Copyright 2006, CoreTex Systems, LLC -- --- www.coretexsys.com -- --- -- --- This source file may be used and distributed without -- --- restriction provided that this copyright statement is not -- --- removed from the file and that any derivative work contains -- --- the original copyright notice and the associated disclaimer. -- --- -- --- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- --- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- --- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- --- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- --- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- --- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- --- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- --- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- --- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- --- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- --- POSSIBILITY OF SUCH DAMAGE. -- --- -- ---------------------------------------------------------------------- - ----------------------------------------------------------------------- - --- Poject structure: - --- |- tdes_top.vhd --- | --- |- des_cipher_top.vhd --- |- des_top.vhd --- |- block_top.vhd --- |- add_key.vhd --- | --- |- add_left.vhd --- | --- |- e_expansion_function.vhd --- | --- |- p_box.vhd --- | --- |- s_box.vhd --- |- s1_box.vhd --- |- s2_box.vhd --- |- s3_box.vhd --- |- s4_box.vhd --- |- s5_box.vhd --- |- s6_box.vhd --- |- s7_box.vhd --- |- s8_box.vhd --- |- key_schedule.vhd - ----------------------------------------------------------------------- ----------------------------------------------------------------------- --- --- Title : tdes_top --- Company : CoreTex Systems, LLC --- ----------------------------------------------------------------------- - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_ARITH.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -entity tdes_top is -port( - -- - -- inputs for key expander - -- - key1_in: in std_logic_vector(0 to 63); - key2_in: in std_logic_vector(0 to 63); - key3_in: in std_logic_vector(0 to 63); - - -- - -- function select - -- - function_select: in std_logic; -- active when encryption, inactive when decryption - - -- - -- input into des_cipher_top - -- - data_in: in std_logic_vector(0 to 63); - - -- - -- input into des_cipher_top - -- - data_out: out std_logic_vector(0 to 63); - - -- - -- data interface to MCU - -- - lddata: in std_logic; -- active when data for loading is ready - ldkey: in std_logic; -- active when key for loading is ready - out_ready: out std_logic; -- active when encryption of data is done - - -- - -- General clock and reset - -- - reset: in std_logic; - clock: in std_logic - ); -end tdes_top; - -architecture Behavioral of tdes_top is - -component des_cipher_top is -port( - -- - -- inputs for key expander - -- - key_in: in std_logic_vector(0 to 63); -- interface to MCU - --ldkey: in std_logic; -- active signal for loading keys - - -- - -- function select - -- - function_select: in std_logic; -- active when encryption, inactive when decryption - - -- - -- input into des_cipher_top - -- - data_in: in std_logic_vector(0 to 63); - - -- - -- input into des_cipher_top - -- - data_out: out std_logic_vector(0 to 63); - - -- - -- data interface to MCU - -- - lddata: in std_logic; -- active when data for loading is ready - des_out_rdy: out std_logic; -- active when encryption of data is done - - -- - -- General clock and reset - -- - reset: in std_logic; - clock: in std_logic - ); -end component; - -type statetype is (WaitKeyState, WaitDataState); -signal nextstate: statetype; -signal key1_in_internal: std_logic_vector(0 to 63); -signal key2_in_internal: std_logic_vector(0 to 63); -signal key3_in_internal: std_logic_vector(0 to 63); -signal memkey1: std_logic_vector(0 to 63); -signal memkey3: std_logic_vector(0 to 63); -signal fsel_internal: std_logic; -signal fsel_internal_inv: std_logic; -signal des_out_rdy_internal: std_logic; -signal des_out_rdy_internal1: std_logic; -signal des_out_rdy_internal2: std_logic; -signal data_in_internal: std_logic_vector(0 to 63); -signal data_out_internal: std_logic_vector(0 to 63); -signal data_out_internal1: std_logic_vector(0 to 63); -signal data_out_internal2: std_logic_vector(0 to 63); -signal lddata_internal: std_logic; - -begin - -process (clock) -begin -if rising_edge(clock) then - if reset = '1' then - nextstate <= WaitKeyState; - lddata_internal <= '0'; - out_ready <= '0'; - fsel_internal <= function_select; - fsel_internal_inv <= not function_select; - else - data_out <= data_out_internal; - out_ready <= des_out_rdy_internal; - - case nextstate is - -- - -- wait key state - -- - when WaitKeyState => - -- wait until key is ready (as well as the function_select) - if ldkey = '0' then - nextstate <= WaitKeyState; - else - key1_in_internal <= key1_in; - key2_in_internal <= key2_in; - key3_in_internal <= key3_in; - memkey1 <= key1_in; - memkey3 <= key3_in; - nextstate <= WaitDataState; - end if; - -- - -- wait data state - -- - when WaitDataState => - -- wait until data is ready to be loaded - if lddata = '0' then - nextstate <= WaitDataState; - lddata_internal <= '0'; - else - lddata_internal <= '1'; - if fsel_internal = '0' then - key1_in_internal <= memkey3; - key3_in_internal <= memkey1; - end if; - data_in_internal <= data_in; - nextstate <= WaitDataState; - end if; - - end case; - end if; -end if; -end process; - - -DESCIPHERTOP1: des_cipher_top -port map ( - key_in => key1_in_internal, -- interface to MCU - - function_select => fsel_internal, -- active when encryption, inactive when decryption - - data_in => data_in_internal, - - data_out => data_out_internal1, - - lddata => lddata_internal, -- active when data for loading is ready - des_out_rdy => des_out_rdy_internal1, -- active when encryption of data is done - - reset => reset, - clock => clock -); - -DESCIPHERTOP2: des_cipher_top -port map ( - key_in => key2_in_internal, --subkey_in_internal, -- interface to MCU - - function_select => fsel_internal_inv, -- active when encryption, inactive when decryption - - data_in => data_out_internal1, - - data_out => data_out_internal2, - - lddata => des_out_rdy_internal1, -- active when data for loading is ready - des_out_rdy => des_out_rdy_internal2, -- active when encryption of data is done - - reset => reset, - clock => clock -); - -DESCIPHERTOP3: des_cipher_top -port map ( - key_in => key3_in_internal, -- subkey_in_internal, -- interface to MCU - - function_select => fsel_internal, -- active when encryption, inactive when decryption - - data_in => data_out_internal2, - - data_out => data_out_internal, - - lddata => des_out_rdy_internal2, -- active when data for loading is ready - des_out_rdy => des_out_rdy_internal, -- active when encryption of data is done - - reset => reset, - clock => clock -); - -end Behavioral; Index: trunk/VHDL/des_cipher_top.vhd =================================================================== --- trunk/VHDL/des_cipher_top.vhd (revision 3) +++ trunk/VHDL/des_cipher_top.vhd (nonexistent) @@ -1,197 +0,0 @@ ---------------------------------------------------------------------- --- (c) Copyright 2006, CoreTex Systems, LLC -- --- www.coretexsys.com -- --- -- --- This source file may be used and distributed without -- --- restriction provided that this copyright statement is not -- --- removed from the file and that any derivative work contains -- --- the original copyright notice and the associated disclaimer. -- --- -- --- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- --- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- --- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- --- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- --- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- --- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- --- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- --- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- --- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- --- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- --- POSSIBILITY OF SUCH DAMAGE. -- --- -- ---------------------------------------------------------------------- - ----------------------------------------------------------------------- - --- Poject structure: - --- |- tdes_top.vhd --- | --- |- des_cipher_top.vhd --- |- des_top.vhd --- |- block_top.vhd --- |- add_key.vhd --- | --- |- add_left.vhd --- | --- |- e_expansion_function.vhd --- | --- |- p_box.vhd --- | --- |- s_box.vhd --- |- s1_box.vhd --- |- s2_box.vhd --- |- s3_box.vhd --- |- s4_box.vhd --- |- s5_box.vhd --- |- s6_box.vhd --- |- s7_box.vhd --- |- s8_box.vhd --- |- key_schedule.vhd - ----------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- --- --- Title : des_cipher_top --- Company : CoreTex Systems, LLC --- ---------------------------------------------------------------------------------------------------- - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_ARITH.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -entity des_cipher_top is -port( - -- - -- Core Interface - -- - key_in: in std_logic_vector(0 to 63); -- input for key - --ldkey: in std_logic; -- signal for loading key - function_select: in std_logic; -- function select: '1' = encryption, '0' = decryption - - data_in: in std_logic_vector(0 to 63); -- input for data - - data_out: out std_logic_vector(0 to 63); -- output for data - - lddata: in std_logic; -- data strobe (active high) - core_busy: out std_logic; -- active high when encrypting/decryption data - des_out_rdy: out std_logic; -- active high when encryption/decryption of data is done - - reset: in std_logic; -- active high - clock: in std_logic -- master clock - - ); -end des_cipher_top; - -architecture Behavioral of des_cipher_top is - --- --- --- -component key_schedule is -port ( - -- Signals for loading key from external device - key_in: in std_logic_vector(0 to 63); -- input for key - - -- signals for communication with des top - KeySelect: in std_logic_vector(3 downto 0); -- selector for key - key_out: out std_logic_vector(0 to 47); -- expaned key (depends on selector) - key_ready: out std_logic; -- signal for the core that key has been expanded - - reset: in std_logic; -- active high - clock: in std_logic -- master clock - ); -end component; - -component des_top is -port ( - -- Main Data - key_round_in: in std_logic_vector(0 to 47); - data_in: in std_logic_vector(0 to 63); - data_out: out std_logic_vector(0 to 63); - - -- Signals for communication with des - KeySelect: inout std_logic_vector(3 downto 0); -- selector for key - key_ready: in std_logic; -- signal for aes that key has been expanded - data_ready: in std_logic; -- signal for aes that key has been expanded - func_select: in std_logic; - - des_out_rdy: out std_logic; - core_busy: out std_logic; - - reset: in std_logic; - clock: in std_logic -- master clock - ); -end component; - -signal key_select_internal: std_logic_vector(3 downto 0); -signal key_round_internal: std_logic_vector(0 to 47); -signal key_ready_internal: std_logic; -signal data_in_internal: std_logic_vector(0 to 63); -signal data_ready_internal: std_logic; - -begin - -process (clock) -begin - -if rising_edge(clock) then - - if lddata = '1' then - - -- capute data from the bus - data_in_internal <= data_in; -- register data from the bus - data_ready_internal <= '1'; -- data has been loaded: continue with encryptio/decryption - - else - - data_ready_internal <= '0'; -- data is not loaded: wait for data - - end if; - -end if; -end process; - --- --- KEY EXPANDER AND DES CORE instantiation --- -KEYSCHEDULE: key_schedule -port map ( - - KeySelect => key_select_internal, - key_in => key_in, - - key_out => key_round_internal, - key_ready => key_ready_internal, - - reset => reset, - clock => clock -); - -DESTOP: des_top -port map ( - - key_round_in => key_round_internal, - - data_in => data_in_internal, - - key_ready => key_ready_internal, - data_ready => data_ready_internal, - - KeySelect => key_select_internal, - - func_select => function_select, - - data_out => data_out, - core_busy => core_busy, - des_out_rdy => des_out_rdy, - - reset => reset, - clock => clock -); - -end Behavioral; Index: trunk/VHDL/s1_box.vhd =================================================================== --- trunk/VHDL/s1_box.vhd (revision 3) +++ trunk/VHDL/s1_box.vhd (nonexistent) @@ -1,144 +0,0 @@ ---------------------------------------------------------------------- --- (c) Copyright 2006, CoreTex Systems, LLC -- --- www.coretexsys.com -- --- -- --- This source file may be used and distributed without -- --- restriction provided that this copyright statement is not -- --- removed from the file and that any derivative work contains -- --- the original copyright notice and the associated disclaimer. -- --- -- --- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- --- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- --- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- --- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- --- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- --- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- --- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- --- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- --- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- --- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- --- POSSIBILITY OF SUCH DAMAGE. -- --- -- ---------------------------------------------------------------------- - ----------------------------------------------------------------------- - --- Poject structure: - --- |- tdes_top.vhd --- | --- |- des_cipher_top.vhd --- |- des_top.vhd --- |- block_top.vhd --- |- add_key.vhd --- | --- |- add_left.vhd --- | --- |- e_expansion_function.vhd --- | --- |- p_box.vhd --- | --- |- s_box.vhd --- |- s1_box.vhd --- |- s2_box.vhd --- |- s3_box.vhd --- |- s4_box.vhd --- |- s5_box.vhd --- |- s6_box.vhd --- |- s7_box.vhd --- |- s8_box.vhd --- |- key_schedule.vhd - ----------------------------------------------------------------------- - ---------------------------------------------------------------------------------------------------- --- --- Title : s1_box --- Company : CoreTex Systems, LLC --- ---------------------------------------------------------------------------------------------------- - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_ARITH.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -ENTITY s1_box IS - port ( - A: IN std_logic_VECTOR(5 downto 0); - SPO: OUT std_logic_VECTOR(3 downto 0)); -END s1_box; - -architecture Behavioral of s1_box is - -begin - -SPO <= "1110" when A = x"0" else - "0000" when A = x"1" else - "0100" when A = x"2" else - "1111" when A = x"3" else - "1101" when A = x"4" else - "0111" when A = x"5" else - "0001" when A = x"6" else - "0100" when A = x"7" else - "0010" when A = x"8" else - "1110" when A = x"9" else - "1111" when A = x"A" else - "0010" when A = x"B" else - "1011" when A = x"C" else - "1101" when A = x"D" else - "1000" when A = x"E" else - "0001" when A = x"F" else - "0011" when A = x"10" else - "1010" when A = x"11" else - "1010" when A = x"12" else - "0110" when A = x"13" else - "0110" when A = x"14" else - "1100" when A = x"15" else - "1100" when A = x"16" else - "1011" when A = x"17" else - "0101" when A = x"18" else - "1001" when A = x"19" else - "1001" when A = x"1A" else - "0101" when A = x"1B" else - "0000" when A = x"1C" else - "0011" when A = x"1D" else - "0111" when A = x"1E" else - "1000" when A = x"1F" else - "0100" when A = x"20" else - "1111" when A = x"21" else - "0001" when A = x"22" else - "1100" when A = x"23" else - "1110" when A = x"24" else - "1000" when A = x"25" else - "1000" when A = x"26" else - "0010" when A = x"27" else - "1101" when A = x"28" else - "0100" when A = x"29" else - "0110" when A = x"2A" else - "1001" when A = x"2B" else - "0010" when A = x"2C" else - "0001" when A = x"2D" else - "1011" when A = x"2E" else - "0111" when A = x"2F" else - "1111" when A = x"30" else - "0101" when A = x"31" else - "1100" when A = x"32" else - "1011" when A = x"33" else - "1001" when A = x"34" else - "0011" when A = x"35" else - "0111" when A = x"36" else - "1110" when A = x"37" else - "0011" when A = x"38" else - "1010" when A = x"39" else - "1010" when A = x"3A" else - "0000" when A = x"3B" else - "0101" when A = x"3C" else - "0110" when A = x"3D" else - "0000" when A = x"3E" else - "1101" when A = x"3F" else - "1101"; - -END Behavioral; Index: trunk/VHDL/s2_box.vhd =================================================================== --- trunk/VHDL/s2_box.vhd (revision 3) +++ trunk/VHDL/s2_box.vhd (nonexistent) @@ -1,144 +0,0 @@ ---------------------------------------------------------------------- --- (c) Copyright 2006, CoreTex Systems, LLC -- --- www.coretexsys.com -- --- -- --- This source file may be used and distributed without -- --- restriction provided that this copyright statement is not -- --- removed from the file and that any derivative work contains -- --- the original copyright notice and the associated disclaimer. -- --- -- --- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- --- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- --- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- --- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- --- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- --- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- --- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- --- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- --- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- --- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- --- POSSIBILITY OF SUCH DAMAGE. -- --- -- ---------------------------------------------------------------------- - ----------------------------------------------------------------------- - --- Poject structure: - --- |- tdes_top.vhd --- | --- |- des_cipher_top.vhd --- |- des_top.vhd --- |- block_top.vhd --- |- add_key.vhd --- | --- |- add_left.vhd --- | --- |- e_expansion_function.vhd --- | --- |- p_box.vhd --- | --- |- s_box.vhd --- |- s1_box.vhd --- |- s2_box.vhd --- |- s3_box.vhd --- |- s4_box.vhd --- |- s5_box.vhd --- |- s6_box.vhd --- |- s7_box.vhd --- |- s8_box.vhd --- |- key_schedule.vhd - ----------------------------------------------------------------------- - ---------------------------------------------------------------------------------------------------- --- --- Title : s2_box --- Company : CoreTex Systems, LLC --- ---------------------------------------------------------------------------------------------------- - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_ARITH.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -ENTITY s2_box IS - port ( - A: IN std_logic_VECTOR(5 downto 0); - SPO: OUT std_logic_VECTOR(3 downto 0)); -END s2_box; - -architecture Behavioral of s2_box is - -begin - -SPO <= "1111" when A = x"0" else - "0011" when A = x"1" else - "0001" when A = x"2" else - "1101" when A = x"3" else - "1000" when A = x"4" else - "0100" when A = x"5" else - "1110" when A = x"6" else - "0111" when A = x"7" else - "0110" when A = x"8" else - "1111" when A = x"9" else - "1011" when A = x"A" else - "0010" when A = x"B" else - "0011" when A = x"C" else - "1000" when A = x"D" else - "0100" when A = x"E" else - "1110" when A = x"F" else - "1001" when A = x"10" else - "1100" when A = x"11" else - "0111" when A = x"12" else - "0000" when A = x"13" else - "0010" when A = x"14" else - "0001" when A = x"15" else - "1101" when A = x"16" else - "1010" when A = x"17" else - "1100" when A = x"18" else - "0110" when A = x"19" else - "0000" when A = x"1A" else - "1001" when A = x"1B" else - "0101" when A = x"1C" else - "1011" when A = x"1D" else - "1010" when A = x"1E" else - "0101" when A = x"1F" else - "0000" when A = x"20" else - "1101" when A = x"21" else - "1110" when A = x"22" else - "1000" when A = x"23" else - "0111" when A = x"24" else - "1010" when A = x"25" else - "1011" when A = x"26" else - "0001" when A = x"27" else - "1010" when A = x"28" else - "0011" when A = x"29" else - "0100" when A = x"2A" else - "1111" when A = x"2B" else - "1101" when A = x"2C" else - "0100" when A = x"2D" else - "0001" when A = x"2E" else - "0010" when A = x"2F" else - "0101" when A = x"30" else - "1011" when A = x"31" else - "1000" when A = x"32" else - "0110" when A = x"33" else - "1100" when A = x"34" else - "0111" when A = x"35" else - "0110" when A = x"36" else - "1100" when A = x"37" else - "1001" when A = x"38" else - "0000" when A = x"39" else - "0011" when A = x"3A" else - "0101" when A = x"3B" else - "0010" when A = x"3C" else - "1110" when A = x"3D" else - "1111" when A = x"3E" else - "1001" when A = x"3F" else - "1001"; - -END Behavioral; Index: trunk/VHDL/s3_box.vhd =================================================================== --- trunk/VHDL/s3_box.vhd (revision 3) +++ trunk/VHDL/s3_box.vhd (nonexistent) @@ -1,144 +0,0 @@ ---------------------------------------------------------------------- --- (c) Copyright 2006, CoreTex Systems, LLC -- --- www.coretexsys.com -- --- -- --- This source file may be used and distributed without -- --- restriction provided that this copyright statement is not -- --- removed from the file and that any derivative work contains -- --- the original copyright notice and the associated disclaimer. -- --- -- --- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- --- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- --- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- --- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- --- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- --- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- --- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- --- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- --- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- --- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- --- POSSIBILITY OF SUCH DAMAGE. -- --- -- ---------------------------------------------------------------------- - ----------------------------------------------------------------------- - --- Poject structure: - --- |- tdes_top.vhd --- | --- |- des_cipher_top.vhd --- |- des_top.vhd --- |- block_top.vhd --- |- add_key.vhd --- | --- |- add_left.vhd --- | --- |- e_expansion_function.vhd --- | --- |- p_box.vhd --- | --- |- s_box.vhd --- |- s1_box.vhd --- |- s2_box.vhd --- |- s3_box.vhd --- |- s4_box.vhd --- |- s5_box.vhd --- |- s6_box.vhd --- |- s7_box.vhd --- |- s8_box.vhd --- |- key_schedule.vhd - ----------------------------------------------------------------------- - ---------------------------------------------------------------------------------------------------- --- --- Title : s3_box --- Company : CoreTex Systems, LLC --- ---------------------------------------------------------------------------------------------------- - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_ARITH.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -ENTITY s3_box IS - port ( - A: IN std_logic_VECTOR(5 downto 0); - SPO: OUT std_logic_VECTOR(3 downto 0)); -END s3_box; - -architecture Behavioral of s3_box is - -begin - -SPO <= "1010" when A = x"0" else - "1101" when A = x"1" else - "0000" when A = x"2" else - "0111" when A = x"3" else - "1001" when A = x"4" else - "0000" when A = x"5" else - "1110" when A = x"6" else - "1001" when A = x"7" else - "0110" when A = x"8" else - "0011" when A = x"9" else - "0011" when A = x"A" else - "0100" when A = x"B" else - "1111" when A = x"C" else - "0110" when A = x"D" else - "0101" when A = x"E" else - "1010" when A = x"F" else - "0001" when A = x"10" else - "0010" when A = x"11" else - "1101" when A = x"12" else - "1000" when A = x"13" else - "1100" when A = x"14" else - "0101" when A = x"15" else - "0111" when A = x"16" else - "1110" when A = x"17" else - "1011" when A = x"18" else - "1100" when A = x"19" else - "0100" when A = x"1A" else - "1011" when A = x"1B" else - "0010" when A = x"1C" else - "1111" when A = x"1D" else - "1000" when A = x"1E" else - "0001" when A = x"1F" else - "1101" when A = x"20" else - "0001" when A = x"21" else - "0110" when A = x"22" else - "1010" when A = x"23" else - "0100" when A = x"24" else - "1101" when A = x"25" else - "1001" when A = x"26" else - "0000" when A = x"27" else - "1000" when A = x"28" else - "0110" when A = x"29" else - "1111" when A = x"2A" else - "1001" when A = x"2B" else - "0011" when A = x"2C" else - "1000" when A = x"2D" else - "0000" when A = x"2E" else - "0111" when A = x"2F" else - "1011" when A = x"30" else - "0100" when A = x"31" else - "0001" when A = x"32" else - "1111" when A = x"33" else - "0010" when A = x"34" else - "1110" when A = x"35" else - "1100" when A = x"36" else - "0011" when A = x"37" else - "0101" when A = x"38" else - "1011" when A = x"39" else - "1010" when A = x"3A" else - "0101" when A = x"3B" else - "1110" when A = x"3C" else - "0010" when A = x"3D" else - "0111" when A = x"3E" else - "1100" when A = x"3F" else - "1100"; - -END Behavioral; \ No newline at end of file Index: trunk/VHDL/des_top.vhd =================================================================== --- trunk/VHDL/des_top.vhd (revision 3) +++ trunk/VHDL/des_top.vhd (nonexistent) @@ -1,287 +0,0 @@ ---------------------------------------------------------------------- --- (c) Copyright 2006, CoreTex Systems, LLC -- --- www.coretexsys.com -- --- -- --- This source file may be used and distributed without -- --- restriction provided that this copyright statement is not -- --- removed from the file and that any derivative work contains -- --- the original copyright notice and the associated disclaimer. -- --- -- --- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- --- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- --- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- --- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- --- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- --- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- --- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- --- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- --- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- --- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- --- POSSIBILITY OF SUCH DAMAGE. -- --- -- ---------------------------------------------------------------------- - ----------------------------------------------------------------------- - --- Poject structure: - --- |- tdes_top.vhd --- | --- |- des_cipher_top.vhd --- |- des_top.vhd --- |- block_top.vhd --- |- add_key.vhd --- | --- |- add_left.vhd --- | --- |- e_expansion_function.vhd --- | --- |- p_box.vhd --- | --- |- s_box.vhd --- |- s1_box.vhd --- |- s2_box.vhd --- |- s3_box.vhd --- |- s4_box.vhd --- |- s5_box.vhd --- |- s6_box.vhd --- |- s7_box.vhd --- |- s8_box.vhd --- |- key_schedule.vhd - ----------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- --- --- Title : des_top --- Company : CoreTex Systems, LLC --- ---------------------------------------------------------------------------------------------------- - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_ARITH.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -entity des_top is -port ( - - -- input/output core signals - key_round_in: in std_logic_vector(0 to 47); - data_in: in std_logic_vector(0 to 63); - data_out: out std_logic_vector(0 to 63); - - -- signals for communication with key expander module - KeySelect: inout std_logic_vector(3 downto 0); -- selector for key - key_ready: in std_logic; -- active high when key is ready - data_ready: in std_logic; -- active high when data is ready - func_select: in std_logic; -- encryption/decryption flag - - des_out_rdy: out std_logic; -- active high when decrypted/encrypted data are ready - core_busy: out std_logic; -- active high when core is in process of encryption - - reset: in std_logic; -- master reset - clock: in std_logic -- master clock - ); -end des_top; - -architecture Behavioral of des_top is - --- --- BLOCK_TOP entity performs encryption/deccryption operation. It uses expaned key for that process --- -component block_top is -port( - L_in: in std_logic_vector(0 to 31); -- left permuted input - R_in: in std_logic_vector(0 to 31); -- right permuted input - - L_out: out std_logic_vector(0 to 31); -- left permuted output - R_out: out std_logic_vector(0 to 31); -- right permuted output - - round_key_des: in std_logic_vector(0 to 47) -- current round key - - ); -end component; - --- --- Internal DES_TOP signals --- -signal L_in_internal, R_in_internal: std_logic_vector(0 to 31); -signal L_out_internal, R_out_internal: std_logic_vector(0 to 31); -type statetype is (WaitKey, WaitData, InitialRound, RepeatRound, FinalRound); -signal nextstate: statetype; -signal RoundCounter: std_logic_vector(3 downto 0); - -begin - --- --- Finite state machine --- -process (clock) -begin - if rising_edge(clock) then - if reset = '1' then - -- - -- Reset all signal to inital values - -- - nextstate <= WaitKey; - RoundCounter <= "0000"; - core_busy <= '0'; -- core is in reset state: not busy - des_out_rdy <= '0'; -- output data is not ready - - else - - case nextstate is - - -- - -- WaitKey: wait for key to be expanded - -- - when WaitKey => - - -- wait until key has been expanded - if key_ready = '0' then - nextstate <= WaitKey; - else - nextstate <= WaitData; - end if; - - core_busy <= '0'; -- core waits for the key: not busy - des_out_rdy <= '0'; -- output data is not ready - - -- - -- WaitData: waits for data until it is ready - -- - when WaitData => - - -- wait for data to be loaded in input registers - if (data_ready = '0') then - - nextstate <= WaitData; - - else - core_busy <= '1'; -- core is processing = busy - - L_in_internal <= data_in(57) & data_in(49) & data_in(41) & data_in(33) & data_in(25) & data_in(17) & - data_in(9) & data_in(1) & data_in(59) & data_in(51) & data_in(43) & data_in(35) & - data_in(27) & data_in(19) & data_in(11) & data_in(3) & data_in(61) & data_in(53) & - data_in(45) & data_in(37) & data_in(29) & data_in(21) & data_in(13) & data_in(5) & - data_in(63) & data_in(55) & data_in(47) & data_in(39) & data_in(31) & data_in(23) & - data_in(15) & data_in(7); - - R_in_internal <= data_in(56) & data_in(48) & data_in(40) & data_in(32) & data_in(24) & data_in(16) & - data_in(8) & data_in(0) & data_in(58) & data_in(50) & data_in(42) & data_in(34) & - data_in(26) & data_in(18) & data_in(10) & data_in(2) & data_in(60) & data_in(52) & - data_in(44) & data_in(36) & data_in(28) & data_in(20) & data_in(12) & data_in(4) & - data_in(62) & data_in(54) & data_in(46) & data_in(38) & data_in(30) & data_in(22) & - data_in(14) & data_in(6); - - nextstate <= InitialRound; - - -- function select (decrypting/encrypting) will determine key selection - if func_select = '1' then - KeySelect <= "0000"; - else - KeySelect <= "1111"; - end if; - - end if; - - -- - -- Initial State where input is equal to a block that we need to encode - -- - when InitialRound => - - L_in_internal <= L_out_internal; - R_in_internal <= R_out_internal; - - -- fuction select determines direction of key selection - if func_select = '1' then - KeySelect <= KeySelect + '1'; - else - KeySelect <= KeySelect - '1'; - end if; - - nextstate <= RepeatRound; - - -- - -- Repeat Section, where input is output from prevous state - -- - when RepeatRound => - - L_in_internal <= L_out_internal; - R_in_internal <= R_out_internal; - - -- fuction select determines direction of key selection - if func_select = '1' then - KeySelect <= KeySelect + '1'; - else - KeySelect <= KeySelect - '1'; - end if; - - RoundCounter <= RoundCounter + '1'; - - -- if finished with all rounds, go to the final round - if RoundCounter = x"E" then - - -- perform inverse initial permutation - data_out <= L_out_internal(7) & R_out_internal(7) & L_out_internal(15) & R_out_internal(15) & - L_out_internal(23) & R_out_internal(23) & L_out_internal(31) & R_out_internal(31) & - L_out_internal(6) & R_out_internal(6) & L_out_internal(14) & R_out_internal(14) & - L_out_internal(22) & R_out_internal(22) & L_out_internal(30) & R_out_internal(30) & - L_out_internal(5) & R_out_internal(5) & L_out_internal(13) & R_out_internal(13) & - L_out_internal(21) & R_out_internal(21) & L_out_internal(29) & R_out_internal(29) & - L_out_internal(4) & R_out_internal(4) & L_out_internal(12) & R_out_internal(12) & - L_out_internal(20) & R_out_internal(20) & L_out_internal(28) & R_out_internal(28) & - L_out_internal(3) & R_out_internal(3) & L_out_internal(11) & R_out_internal(11) & - L_out_internal(19) & R_out_internal(19) & L_out_internal(27) & R_out_internal(27) & - L_out_internal(2) & R_out_internal(2) & L_out_internal(10) & R_out_internal(10) & - L_out_internal(18) & R_out_internal(18) & L_out_internal(26) & R_out_internal(26) & - L_out_internal(1) & R_out_internal(1) & L_out_internal(9) & R_out_internal(9) & - L_out_internal(17) & R_out_internal(17) & L_out_internal(25) & R_out_internal(25) & - L_out_internal(0) & R_out_internal(0) & L_out_internal(8) & R_out_internal(8) & - L_out_internal(16) & R_out_internal(16) & L_out_internal(24) & R_out_internal(24); - - core_busy <= '0'; -- core is not busy - des_out_rdy <= '1'; -- output data is ready - nextstate <= FinalRound; - - else - - -- Continue with regular rounds - nextstate <= RepeatRound; - - end if; - - -- - -- Last round - -- - when FinalRound => - - RoundCounter <= "0000"; - nextstate <= WaitKey; - des_out_rdy <= '0'; -- deselect out data ready signal - - when others => - -- should never happen - end case; - end if; - end if; -end process; - --- --- Instantations --- -BLOCKTOP: block_top -port map ( - L_in => L_in_internal, - R_in => R_in_internal, - - round_key_des => key_round_in, - - L_out => L_out_internal, - R_out => R_out_internal - -); - -end Behavioral; Index: trunk/VHDL/s4_box.vhd =================================================================== --- trunk/VHDL/s4_box.vhd (revision 3) +++ trunk/VHDL/s4_box.vhd (nonexistent) @@ -1,144 +0,0 @@ ---------------------------------------------------------------------- --- (c) Copyright 2006, CoreTex Systems, LLC -- --- www.coretexsys.com -- --- -- --- This source file may be used and distributed without -- --- restriction provided that this copyright statement is not -- --- removed from the file and that any derivative work contains -- --- the original copyright notice and the associated disclaimer. -- --- -- --- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- --- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- --- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- --- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- --- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- --- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- --- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- --- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- --- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- --- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- --- POSSIBILITY OF SUCH DAMAGE. -- --- -- ---------------------------------------------------------------------- - ----------------------------------------------------------------------- - --- Poject structure: - --- |- tdes_top.vhd --- | --- |- des_cipher_top.vhd --- |- des_top.vhd --- |- block_top.vhd --- |- add_key.vhd --- | --- |- add_left.vhd --- | --- |- e_expansion_function.vhd --- | --- |- p_box.vhd --- | --- |- s_box.vhd --- |- s1_box.vhd --- |- s2_box.vhd --- |- s3_box.vhd --- |- s4_box.vhd --- |- s5_box.vhd --- |- s6_box.vhd --- |- s7_box.vhd --- |- s8_box.vhd --- |- key_schedule.vhd - ----------------------------------------------------------------------- - ---------------------------------------------------------------------------------------------------- --- --- Title : s4_box --- Company : CoreTex Systems, LLC --- ---------------------------------------------------------------------------------------------------- - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_ARITH.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -ENTITY s4_box IS - port ( - A: IN std_logic_VECTOR(5 downto 0); - SPO: OUT std_logic_VECTOR(3 downto 0)); -END s4_box; - -architecture Behavioral of s4_box is - -begin - -SPO <= "0111" when A = x"0" else - "1101" when A = x"1" else - "1101" when A = x"2" else - "1000" when A = x"3" else - "1110" when A = x"4" else - "1011" when A = x"5" else - "0011" when A = x"6" else - "0101" when A = x"7" else - "0000" when A = x"8" else - "0110" when A = x"9" else - "0110" when A = x"A" else - "1111" when A = x"B" else - "1001" when A = x"C" else - "0000" when A = x"D" else - "1010" when A = x"E" else - "0011" when A = x"F" else - "0001" when A = x"10" else - "0100" when A = x"11" else - "0010" when A = x"12" else - "0111" when A = x"13" else - "1000" when A = x"14" else - "0010" when A = x"15" else - "0101" when A = x"16" else - "1100" when A = x"17" else - "1011" when A = x"18" else - "0001" when A = x"19" else - "1100" when A = x"1A" else - "1010" when A = x"1B" else - "0100" when A = x"1C" else - "1110" when A = x"1D" else - "1111" when A = x"1E" else - "1001" when A = x"1F" else - "1010" when A = x"20" else - "0011" when A = x"21" else - "0110" when A = x"22" else - "1111" when A = x"23" else - "1001" when A = x"24" else - "0000" when A = x"25" else - "0000" when A = x"26" else - "0110" when A = x"27" else - "1100" when A = x"28" else - "1010" when A = x"29" else - "1011" when A = x"2A" else - "0001" when A = x"2B" else - "0111" when A = x"2C" else - "1101" when A = x"2D" else - "1101" when A = x"2E" else - "1000" when A = x"2F" else - "1111" when A = x"30" else - "1001" when A = x"31" else - "0001" when A = x"32" else - "0100" when A = x"33" else - "0011" when A = x"34" else - "0101" when A = x"35" else - "1110" when A = x"36" else - "1011" when A = x"37" else - "0101" when A = x"38" else - "1100" when A = x"39" else - "0010" when A = x"3A" else - "0111" when A = x"3B" else - "1000" when A = x"3C" else - "0010" when A = x"3D" else - "0100" when A = x"3E" else - "1110" when A = x"3F" else - "1110"; - -END Behavioral; \ No newline at end of file Index: trunk/VHDL/s5_box.vhd =================================================================== --- trunk/VHDL/s5_box.vhd (revision 3) +++ trunk/VHDL/s5_box.vhd (nonexistent) @@ -1,144 +0,0 @@ ---------------------------------------------------------------------- --- (c) Copyright 2006, CoreTex Systems, LLC -- --- www.coretexsys.com -- --- -- --- This source file may be used and distributed without -- --- restriction provided that this copyright statement is not -- --- removed from the file and that any derivative work contains -- --- the original copyright notice and the associated disclaimer. -- --- -- --- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- --- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- --- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- --- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- --- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- --- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- --- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- --- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- --- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- --- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- --- POSSIBILITY OF SUCH DAMAGE. -- --- -- ---------------------------------------------------------------------- - ----------------------------------------------------------------------- - --- Poject structure: - --- |- tdes_top.vhd --- | --- |- des_cipher_top.vhd --- |- des_top.vhd --- |- block_top.vhd --- |- add_key.vhd --- | --- |- add_left.vhd --- | --- |- e_expansion_function.vhd --- | --- |- p_box.vhd --- | --- |- s_box.vhd --- |- s1_box.vhd --- |- s2_box.vhd --- |- s3_box.vhd --- |- s4_box.vhd --- |- s5_box.vhd --- |- s6_box.vhd --- |- s7_box.vhd --- |- s8_box.vhd --- |- key_schedule.vhd - ----------------------------------------------------------------------- - ---------------------------------------------------------------------------------------------------- --- --- Title : s5_box --- Company : CoreTex Systems, LLC --- ---------------------------------------------------------------------------------------------------- - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_ARITH.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -ENTITY s5_box IS - port ( - A: IN std_logic_VECTOR(5 downto 0); - SPO: OUT std_logic_VECTOR(3 downto 0)); -END s5_box; - -architecture Behavioral of s5_box is - -begin - -SPO <= "0010" when A = x"0" else - "1110" when A = x"1" else - "1100" when A = x"2" else - "1011" when A = x"3" else - "0100" when A = x"4" else - "0010" when A = x"5" else - "0001" when A = x"6" else - "1100" when A = x"7" else - "0111" when A = x"8" else - "0100" when A = x"9" else - "1010" when A = x"A" else - "0111" when A = x"B" else - "1011" when A = x"C" else - "1101" when A = x"D" else - "0110" when A = x"E" else - "0001" when A = x"F" else - "1000" when A = x"10" else - "0101" when A = x"11" else - "0101" when A = x"12" else - "0000" when A = x"13" else - "0011" when A = x"14" else - "1111" when A = x"15" else - "1111" when A = x"16" else - "1010" when A = x"17" else - "1101" when A = x"18" else - "0011" when A = x"19" else - "0000" when A = x"1A" else - "1001" when A = x"1B" else - "1110" when A = x"1C" else - "1000" when A = x"1D" else - "1001" when A = x"1E" else - "0110" when A = x"1F" else - "0100" when A = x"20" else - "1011" when A = x"21" else - "0010" when A = x"22" else - "1000" when A = x"23" else - "0001" when A = x"24" else - "1100" when A = x"25" else - "1011" when A = x"26" else - "0111" when A = x"27" else - "1010" when A = x"28" else - "0001" when A = x"29" else - "1101" when A = x"2A" else - "1110" when A = x"2B" else - "0111" when A = x"2C" else - "0010" when A = x"2D" else - "1000" when A = x"2E" else - "1101" when A = x"2F" else - "1111" when A = x"30" else - "0110" when A = x"31" else - "1001" when A = x"32" else - "1111" when A = x"33" else - "1100" when A = x"34" else - "0000" when A = x"35" else - "0101" when A = x"36" else - "1001" when A = x"37" else - "0110" when A = x"38" else - "1010" when A = x"39" else - "0011" when A = x"3A" else - "0100" when A = x"3B" else - "0000" when A = x"3C" else - "0101" when A = x"3D" else - "1110" when A = x"3E" else - "0011" when A = x"3F" else - "0011"; - -END Behavioral; \ No newline at end of file Index: 3des_vhdl/trunk/Docs/3DESDatasheet_CoreTex_OpenCores.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 3des_vhdl/trunk/Docs/3DESDatasheet_CoreTex_OpenCores.pdf =================================================================== --- 3des_vhdl/trunk/Docs/3DESDatasheet_CoreTex_OpenCores.pdf (nonexistent) +++ 3des_vhdl/trunk/Docs/3DESDatasheet_CoreTex_OpenCores.pdf (revision 4)
3des_vhdl/trunk/Docs/3DESDatasheet_CoreTex_OpenCores.pdf Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 3des_vhdl/trunk/VHDL/s5_box.vhd =================================================================== --- 3des_vhdl/trunk/VHDL/s5_box.vhd (nonexistent) +++ 3des_vhdl/trunk/VHDL/s5_box.vhd (revision 4) @@ -0,0 +1,144 @@ +--------------------------------------------------------------------- +-- (c) Copyright 2006, CoreTex Systems, LLC -- +-- www.coretexsys.com -- +-- -- +-- This source file may be used and distributed without -- +-- restriction provided that this copyright statement is not -- +-- removed from the file and that any derivative work contains -- +-- the original copyright notice and the associated disclaimer. -- +-- -- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- +-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- +-- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- +-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- +-- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- +-- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- +-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- +-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- +-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- +-- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- +-- POSSIBILITY OF SUCH DAMAGE. -- +-- -- +--------------------------------------------------------------------- + +---------------------------------------------------------------------- + +-- Poject structure: + +-- |- tdes_top.vhd +-- | +-- |- des_cipher_top.vhd +-- |- des_top.vhd +-- |- block_top.vhd +-- |- add_key.vhd +-- | +-- |- add_left.vhd +-- | +-- |- e_expansion_function.vhd +-- | +-- |- p_box.vhd +-- | +-- |- s_box.vhd +-- |- s1_box.vhd +-- |- s2_box.vhd +-- |- s3_box.vhd +-- |- s4_box.vhd +-- |- s5_box.vhd +-- |- s6_box.vhd +-- |- s7_box.vhd +-- |- s8_box.vhd +-- |- key_schedule.vhd + +---------------------------------------------------------------------- + +--------------------------------------------------------------------------------------------------- +-- +-- Title : s5_box +-- Company : CoreTex Systems, LLC +-- +--------------------------------------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +ENTITY s5_box IS + port ( + A: IN std_logic_VECTOR(5 downto 0); + SPO: OUT std_logic_VECTOR(3 downto 0)); +END s5_box; + +architecture Behavioral of s5_box is + +begin + +SPO <= "0010" when A = x"0" else + "1110" when A = x"1" else + "1100" when A = x"2" else + "1011" when A = x"3" else + "0100" when A = x"4" else + "0010" when A = x"5" else + "0001" when A = x"6" else + "1100" when A = x"7" else + "0111" when A = x"8" else + "0100" when A = x"9" else + "1010" when A = x"A" else + "0111" when A = x"B" else + "1011" when A = x"C" else + "1101" when A = x"D" else + "0110" when A = x"E" else + "0001" when A = x"F" else + "1000" when A = x"10" else + "0101" when A = x"11" else + "0101" when A = x"12" else + "0000" when A = x"13" else + "0011" when A = x"14" else + "1111" when A = x"15" else + "1111" when A = x"16" else + "1010" when A = x"17" else + "1101" when A = x"18" else + "0011" when A = x"19" else + "0000" when A = x"1A" else + "1001" when A = x"1B" else + "1110" when A = x"1C" else + "1000" when A = x"1D" else + "1001" when A = x"1E" else + "0110" when A = x"1F" else + "0100" when A = x"20" else + "1011" when A = x"21" else + "0010" when A = x"22" else + "1000" when A = x"23" else + "0001" when A = x"24" else + "1100" when A = x"25" else + "1011" when A = x"26" else + "0111" when A = x"27" else + "1010" when A = x"28" else + "0001" when A = x"29" else + "1101" when A = x"2A" else + "1110" when A = x"2B" else + "0111" when A = x"2C" else + "0010" when A = x"2D" else + "1000" when A = x"2E" else + "1101" when A = x"2F" else + "1111" when A = x"30" else + "0110" when A = x"31" else + "1001" when A = x"32" else + "1111" when A = x"33" else + "1100" when A = x"34" else + "0000" when A = x"35" else + "0101" when A = x"36" else + "1001" when A = x"37" else + "0110" when A = x"38" else + "1010" when A = x"39" else + "0011" when A = x"3A" else + "0100" when A = x"3B" else + "0000" when A = x"3C" else + "0101" when A = x"3D" else + "1110" when A = x"3E" else + "0011" when A = x"3F" else + "0011"; + +END Behavioral; \ No newline at end of file Index: 3des_vhdl/trunk/VHDL/add_key.vhd =================================================================== --- 3des_vhdl/trunk/VHDL/add_key.vhd (nonexistent) +++ 3des_vhdl/trunk/VHDL/add_key.vhd (revision 4) @@ -0,0 +1,103 @@ +--------------------------------------------------------------------- +-- (c) Copyright 2006, CoreTex Systems, LLC -- +-- www.coretexsys.com -- +-- -- +-- This source file may be used and distributed without -- +-- restriction provided that this copyright statement is not -- +-- removed from the file and that any derivative work contains -- +-- the original copyright notice and the associated disclaimer. -- +-- -- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- +-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- +-- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- +-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- +-- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- +-- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- +-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- +-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- +-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- +-- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- +-- POSSIBILITY OF SUCH DAMAGE. -- +-- -- +--------------------------------------------------------------------- + +---------------------------------------------------------------------- + +-- Poject structure: + +-- |- tdes_top.vhd +-- | +-- |- des_cipher_top.vhd +-- |- des_top.vhd +-- |- block_top.vhd +-- |- add_key.vhd +-- | +-- |- add_left.vhd +-- | +-- |- e_expansion_function.vhd +-- | +-- |- p_box.vhd +-- | +-- |- s_box.vhd +-- |- s1_box.vhd +-- |- s2_box.vhd +-- |- s3_box.vhd +-- |- s4_box.vhd +-- |- s5_box.vhd +-- |- s6_box.vhd +-- |- s7_box.vhd +-- |- s8_box.vhd +-- |- key_schedule.vhd + +---------------------------------------------------------------------- + +--------------------------------------------------------------------------------------------------- +-- +-- Title : add_key +-- Company : CoreTex Systems, LLC +-- +--------------------------------------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +entity add_key is +port( + x0_in: in std_logic_vector(0 to 5); + x1_in: in std_logic_vector(0 to 5); + x2_in: in std_logic_vector(0 to 5); + x3_in: in std_logic_vector(0 to 5); + x4_in: in std_logic_vector(0 to 5); + x5_in: in std_logic_vector(0 to 5); + x6_in: in std_logic_vector(0 to 5); + x7_in: in std_logic_vector(0 to 5); + key: in std_logic_vector(0 to 47); + x0_out: out std_logic_vector(5 downto 0); + x1_out: out std_logic_vector(5 downto 0); + x2_out: out std_logic_vector(5 downto 0); + x3_out: out std_logic_vector(5 downto 0); + x4_out: out std_logic_vector(5 downto 0); + x5_out: out std_logic_vector(5 downto 0); + x6_out: out std_logic_vector(5 downto 0); + x7_out: out std_logic_vector(5 downto 0) + ); +end add_key; + + +architecture Behavioral of add_key is +begin + + x0_out <= x0_in xor key(0 to 5); + x1_out <= x1_in xor key(6 to 11); + x2_out <= x2_in xor key(12 to 17); + x3_out <= x3_in xor key(18 to 23); + x4_out <= x4_in xor key(24 to 29); + x5_out <= x5_in xor key(30 to 35); + x6_out <= x6_in xor key(36 to 41); + x7_out <= x7_in xor key(42 to 47); + +end Behavioral; Index: 3des_vhdl/trunk/VHDL/s6_box.vhd =================================================================== --- 3des_vhdl/trunk/VHDL/s6_box.vhd (nonexistent) +++ 3des_vhdl/trunk/VHDL/s6_box.vhd (revision 4) @@ -0,0 +1,144 @@ +--------------------------------------------------------------------- +-- (c) Copyright 2006, CoreTex Systems, LLC -- +-- www.coretexsys.com -- +-- -- +-- This source file may be used and distributed without -- +-- restriction provided that this copyright statement is not -- +-- removed from the file and that any derivative work contains -- +-- the original copyright notice and the associated disclaimer. -- +-- -- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- +-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- +-- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- +-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- +-- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- +-- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- +-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- +-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- +-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- +-- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- +-- POSSIBILITY OF SUCH DAMAGE. -- +-- -- +--------------------------------------------------------------------- + +---------------------------------------------------------------------- + +-- Poject structure: + +-- |- tdes_top.vhd +-- | +-- |- des_cipher_top.vhd +-- |- des_top.vhd +-- |- block_top.vhd +-- |- add_key.vhd +-- | +-- |- add_left.vhd +-- | +-- |- e_expansion_function.vhd +-- | +-- |- p_box.vhd +-- | +-- |- s_box.vhd +-- |- s1_box.vhd +-- |- s2_box.vhd +-- |- s3_box.vhd +-- |- s4_box.vhd +-- |- s5_box.vhd +-- |- s6_box.vhd +-- |- s7_box.vhd +-- |- s8_box.vhd +-- |- key_schedule.vhd + +---------------------------------------------------------------------- + +--------------------------------------------------------------------------------------------------- +-- +-- Title : s6_box +-- Company : CoreTex Systems, LLC +-- +--------------------------------------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +ENTITY s6_box IS + port ( + A: IN std_logic_VECTOR(5 downto 0); + SPO: OUT std_logic_VECTOR(3 downto 0)); +END s6_box; + +architecture Behavioral of s6_box is + +begin + +SPO <= "1100" when A = x"0" else + "1010" when A = x"1" else + "0001" when A = x"2" else + "1111" when A = x"3" else + "1010" when A = x"4" else + "0100" when A = x"5" else + "1111" when A = x"6" else + "0010" when A = x"7" else + "1001" when A = x"8" else + "0111" when A = x"9" else + "0010" when A = x"A" else + "1100" when A = x"B" else + "0110" when A = x"C" else + "1001" when A = x"D" else + "1000" when A = x"E" else + "0101" when A = x"F" else + "0000" when A = x"10" else + "0110" when A = x"11" else + "1101" when A = x"12" else + "0001" when A = x"13" else + "0011" when A = x"14" else + "1101" when A = x"15" else + "0100" when A = x"16" else + "1110" when A = x"17" else + "1110" when A = x"18" else + "0000" when A = x"19" else + "0111" when A = x"1A" else + "1011" when A = x"1B" else + "0101" when A = x"1C" else + "0011" when A = x"1D" else + "1011" when A = x"1E" else + "1000" when A = x"1F" else + "1001" when A = x"20" else + "0100" when A = x"21" else + "1110" when A = x"22" else + "0011" when A = x"23" else + "1111" when A = x"24" else + "0010" when A = x"25" else + "0101" when A = x"26" else + "1100" when A = x"27" else + "0010" when A = x"28" else + "1001" when A = x"29" else + "1000" when A = x"2A" else + "0101" when A = x"2B" else + "1100" when A = x"2C" else + "1111" when A = x"2D" else + "0011" when A = x"2E" else + "1010" when A = x"2F" else + "0111" when A = x"30" else + "1011" when A = x"31" else + "0000" when A = x"32" else + "1110" when A = x"33" else + "0100" when A = x"34" else + "0001" when A = x"35" else + "1010" when A = x"36" else + "0111" when A = x"37" else + "0001" when A = x"38" else + "0110" when A = x"39" else + "1101" when A = x"3A" else + "0000" when A = x"3B" else + "1011" when A = x"3C" else + "1000" when A = x"3D" else + "0110" when A = x"3E" else + "1101" when A = x"3F" else + "1101"; + +END Behavioral; \ No newline at end of file Index: 3des_vhdl/trunk/VHDL/s7_box.vhd =================================================================== --- 3des_vhdl/trunk/VHDL/s7_box.vhd (nonexistent) +++ 3des_vhdl/trunk/VHDL/s7_box.vhd (revision 4) @@ -0,0 +1,144 @@ +--------------------------------------------------------------------- +-- (c) Copyright 2006, CoreTex Systems, LLC -- +-- www.coretexsys.com -- +-- -- +-- This source file may be used and distributed without -- +-- restriction provided that this copyright statement is not -- +-- removed from the file and that any derivative work contains -- +-- the original copyright notice and the associated disclaimer. -- +-- -- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- +-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- +-- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- +-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- +-- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- +-- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- +-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- +-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- +-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- +-- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- +-- POSSIBILITY OF SUCH DAMAGE. -- +-- -- +--------------------------------------------------------------------- + +---------------------------------------------------------------------- + +-- Poject structure: + +-- |- tdes_top.vhd +-- | +-- |- des_cipher_top.vhd +-- |- des_top.vhd +-- |- block_top.vhd +-- |- add_key.vhd +-- | +-- |- add_left.vhd +-- | +-- |- e_expansion_function.vhd +-- | +-- |- p_box.vhd +-- | +-- |- s_box.vhd +-- |- s1_box.vhd +-- |- s2_box.vhd +-- |- s3_box.vhd +-- |- s4_box.vhd +-- |- s5_box.vhd +-- |- s6_box.vhd +-- |- s7_box.vhd +-- |- s8_box.vhd +-- |- key_schedule.vhd + +---------------------------------------------------------------------- + +--------------------------------------------------------------------------------------------------- +-- +-- Title : s7_box +-- Company : CoreTex Systems, LLC +-- +--------------------------------------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +ENTITY s7_box IS + port ( + A: IN std_logic_VECTOR(5 downto 0); + SPO: OUT std_logic_VECTOR(3 downto 0)); +END s7_box; + +architecture Behavioral of s7_box is + +begin + +SPO <= "0100" when A = x"0" else + "1101" when A = x"1" else + "1011" when A = x"2" else + "0000" when A = x"3" else + "0010" when A = x"4" else + "1011" when A = x"5" else + "1110" when A = x"6" else + "0111" when A = x"7" else + "1111" when A = x"8" else + "0100" when A = x"9" else + "0000" when A = x"A" else + "1001" when A = x"B" else + "1000" when A = x"C" else + "0001" when A = x"D" else + "1101" when A = x"E" else + "1010" when A = x"F" else + "0011" when A = x"10" else + "1110" when A = x"11" else + "1100" when A = x"12" else + "0011" when A = x"13" else + "1001" when A = x"14" else + "0101" when A = x"15" else + "0111" when A = x"16" else + "1100" when A = x"17" else + "0101" when A = x"18" else + "0010" when A = x"19" else + "1010" when A = x"1A" else + "1111" when A = x"1B" else + "0110" when A = x"1C" else + "1000" when A = x"1D" else + "0001" when A = x"1E" else + "0110" when A = x"1F" else + "0001" when A = x"20" else + "0110" when A = x"21" else + "0100" when A = x"22" else + "1011" when A = x"23" else + "1011" when A = x"24" else + "1101" when A = x"25" else + "1101" when A = x"26" else + "1000" when A = x"27" else + "1100" when A = x"28" else + "0001" when A = x"29" else + "0011" when A = x"2A" else + "0100" when A = x"2B" else + "0111" when A = x"2C" else + "1010" when A = x"2D" else + "1110" when A = x"2E" else + "0111" when A = x"2F" else + "1010" when A = x"30" else + "1001" when A = x"31" else + "1111" when A = x"32" else + "0101" when A = x"33" else + "0110" when A = x"34" else + "0000" when A = x"35" else + "1000" when A = x"36" else + "1111" when A = x"37" else + "0000" when A = x"38" else + "1110" when A = x"39" else + "0101" when A = x"3A" else + "0010" when A = x"3B" else + "1001" when A = x"3C" else + "0011" when A = x"3D" else + "0010" when A = x"3E" else + "1100" when A = x"3F" else + "1100"; + +END Behavioral; \ No newline at end of file Index: 3des_vhdl/trunk/VHDL/add_left.vhd =================================================================== --- 3des_vhdl/trunk/VHDL/add_left.vhd (nonexistent) +++ 3des_vhdl/trunk/VHDL/add_left.vhd (revision 4) @@ -0,0 +1,82 @@ +--------------------------------------------------------------------- +-- (c) Copyright 2006, CoreTex Systems, LLC -- +-- www.coretexsys.com -- +-- -- +-- This source file may be used and distributed without -- +-- restriction provided that this copyright statement is not -- +-- removed from the file and that any derivative work contains -- +-- the original copyright notice and the associated disclaimer. -- +-- -- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- +-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- +-- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- +-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- +-- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- +-- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- +-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- +-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- +-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- +-- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- +-- POSSIBILITY OF SUCH DAMAGE. -- +-- -- +--------------------------------------------------------------------- + +---------------------------------------------------------------------- + +-- Poject structure: + +-- |- tdes_top.vhd +-- | +-- |- des_cipher_top.vhd +-- |- des_top.vhd +-- |- block_top.vhd +-- |- add_key.vhd +-- | +-- |- add_left.vhd +-- | +-- |- e_expansion_function.vhd +-- | +-- |- p_box.vhd +-- | +-- |- s_box.vhd +-- |- s1_box.vhd +-- |- s2_box.vhd +-- |- s3_box.vhd +-- |- s4_box.vhd +-- |- s5_box.vhd +-- |- s6_box.vhd +-- |- s7_box.vhd +-- |- s8_box.vhd +-- |- key_schedule.vhd + +---------------------------------------------------------------------- + +--------------------------------------------------------------------------------------------------- +-- +-- Title : add_left +-- Company : CoreTex Systems, LLC +-- +--------------------------------------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +entity add_left is +port( + x_in: in std_logic_vector(0 to 31); + left_in: in std_logic_vector(0 to 31); + x_out: out std_logic_vector(0 to 31) + ); +end add_left; + +architecture Behavioral of add_left is + +begin + + x_out <= x_in xor left_in; + +end Behavioral; Index: 3des_vhdl/trunk/VHDL/s8_box.vhd =================================================================== --- 3des_vhdl/trunk/VHDL/s8_box.vhd (nonexistent) +++ 3des_vhdl/trunk/VHDL/s8_box.vhd (revision 4) @@ -0,0 +1,144 @@ +--------------------------------------------------------------------- +-- (c) Copyright 2006, CoreTex Systems, LLC -- +-- www.coretexsys.com -- +-- -- +-- This source file may be used and distributed without -- +-- restriction provided that this copyright statement is not -- +-- removed from the file and that any derivative work contains -- +-- the original copyright notice and the associated disclaimer. -- +-- -- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- +-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- +-- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- +-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- +-- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- +-- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- +-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- +-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- +-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- +-- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- +-- POSSIBILITY OF SUCH DAMAGE. -- +-- -- +--------------------------------------------------------------------- + +---------------------------------------------------------------------- + +-- Poject structure: + +-- |- tdes_top.vhd +-- | +-- |- des_cipher_top.vhd +-- |- des_top.vhd +-- |- block_top.vhd +-- |- add_key.vhd +-- | +-- |- add_left.vhd +-- | +-- |- e_expansion_function.vhd +-- | +-- |- p_box.vhd +-- | +-- |- s_box.vhd +-- |- s1_box.vhd +-- |- s2_box.vhd +-- |- s3_box.vhd +-- |- s4_box.vhd +-- |- s5_box.vhd +-- |- s6_box.vhd +-- |- s7_box.vhd +-- |- s8_box.vhd +-- |- key_schedule.vhd + +---------------------------------------------------------------------- + +--------------------------------------------------------------------------------------------------- +-- +-- Title : s8_box +-- Company : CoreTex Systems, LLC +-- +--------------------------------------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +ENTITY s8_box IS + port ( + A: IN std_logic_VECTOR(5 downto 0); + SPO: OUT std_logic_VECTOR(3 downto 0)); +END s8_box; + +architecture Behavioral of s8_box is + +begin + +SPO <= "1101" when A = x"0" else + "0001" when A = x"1" else + "0010" when A = x"2" else + "1111" when A = x"3" else + "1000" when A = x"4" else + "1101" when A = x"5" else + "0100" when A = x"6" else + "1000" when A = x"7" else + "0110" when A = x"8" else + "1010" when A = x"9" else + "1111" when A = x"A" else + "0011" when A = x"B" else + "1011" when A = x"C" else + "0111" when A = x"D" else + "0001" when A = x"E" else + "0100" when A = x"F" else + "1010" when A = x"10" else + "1100" when A = x"11" else + "1001" when A = x"12" else + "0101" when A = x"13" else + "0011" when A = x"14" else + "0110" when A = x"15" else + "1110" when A = x"16" else + "1011" when A = x"17" else + "0101" when A = x"18" else + "0000" when A = x"19" else + "0000" when A = x"1A" else + "1110" when A = x"1B" else + "1100" when A = x"1C" else + "1001" when A = x"1D" else + "0111" when A = x"1E" else + "0010" when A = x"1F" else + "0111" when A = x"20" else + "0010" when A = x"21" else + "1011" when A = x"22" else + "0001" when A = x"23" else + "0100" when A = x"24" else + "1110" when A = x"25" else + "0001" when A = x"26" else + "0111" when A = x"27" else + "1001" when A = x"28" else + "0100" when A = x"29" else + "1100" when A = x"2A" else + "1010" when A = x"2B" else + "1110" when A = x"2C" else + "1000" when A = x"2D" else + "0010" when A = x"2E" else + "1101" when A = x"2F" else + "0000" when A = x"30" else + "1111" when A = x"31" else + "0110" when A = x"32" else + "1100" when A = x"33" else + "1010" when A = x"34" else + "1001" when A = x"35" else + "1101" when A = x"36" else + "0000" when A = x"37" else + "1111" when A = x"38" else + "0011" when A = x"39" else + "0011" when A = x"3A" else + "0101" when A = x"3B" else + "0101" when A = x"3C" else + "0110" when A = x"3D" else + "1000" when A = x"3E" else + "1011" when A = x"3F" else + "1011"; + +END Behavioral; \ No newline at end of file Index: 3des_vhdl/trunk/VHDL/key_schedule.vhd =================================================================== --- 3des_vhdl/trunk/VHDL/key_schedule.vhd (nonexistent) +++ 3des_vhdl/trunk/VHDL/key_schedule.vhd (revision 4) @@ -0,0 +1,256 @@ +--------------------------------------------------------------------- +-- (c) Copyright 2006, CoreTex Systems, LLC -- +-- www.coretexsys.com -- +-- -- +-- This source file may be used and distributed without -- +-- restriction provided that this copyright statement is not -- +-- removed from the file and that any derivative work contains -- +-- the original copyright notice and the associated disclaimer. -- +-- -- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- +-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- +-- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- +-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- +-- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- +-- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- +-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- +-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- +-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- +-- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- +-- POSSIBILITY OF SUCH DAMAGE. -- +-- -- +--------------------------------------------------------------------- + +---------------------------------------------------------------------- + +-- Poject structure: + +-- |- tdes_top.vhd +-- | +-- |- des_cipher_top.vhd +-- |- des_top.vhd +-- |- block_top.vhd +-- |- add_key.vhd +-- | +-- |- add_left.vhd +-- | +-- |- e_expansion_function.vhd +-- | +-- |- p_box.vhd +-- | +-- |- s_box.vhd +-- |- s1_box.vhd +-- |- s2_box.vhd +-- |- s3_box.vhd +-- |- s4_box.vhd +-- |- s5_box.vhd +-- |- s6_box.vhd +-- |- s7_box.vhd +-- |- s8_box.vhd +-- |- key_schedule.vhd + +---------------------------------------------------------------------- + +--------------------------------------------------------------------------------------------------- +-- +-- Title : key_schedule +-- Company : CoreTex Systems, LLC +-- +--------------------------------------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +entity key_schedule is +port ( + + key_in: in std_logic_vector(0 to 63); -- key to be expanded + + -- interface signals for communication with DES + KeySelect: in std_logic_vector(3 downto 0); -- selector for key + key_out: out std_logic_vector(0 to 47); -- expaned key output + key_ready: out std_logic; -- signal for DES that key has been expanded + + reset: in std_logic; -- reset + clock: in std_logic -- master clock + ); +end key_schedule; + +architecture Behavioral of key_schedule is + +-- +-- Storage for expanded key +-- +signal K16, K1: std_logic_vector(0 to 47); +signal K2, K3: std_logic_vector(0 to 47); +signal K4, K5: std_logic_vector(0 to 47); +signal K6, K7: std_logic_vector(0 to 47); +signal K8, K9: std_logic_vector(0 to 47); +signal K10, K11: std_logic_vector(0 to 47); +signal K12, K13: std_logic_vector(0 to 47); +signal K14, K15: std_logic_vector(0 to 47); + +begin + + +-- +-- Selector for expaned key +-- +key_out <= K1 when KeySelect = x"0" else + K2 when KeySelect = x"1" else + K3 when KeySelect = x"2" else + K4 when KeySelect = x"3" else + K5 when KeySelect = x"4" else + K6 when KeySelect = x"5" else + K7 when KeySelect = x"6" else + K8 when KeySelect = x"7" else + K9 when KeySelect = x"8" else + K10 when KeySelect = x"9" else + K11 when KeySelect = x"A" else + K12 when KeySelect = x"B" else + K13 when KeySelect = x"C" else + K14 when KeySelect = x"D" else + K15 when KeySelect = x"E" else + K16; + +process (clock) +begin + +-- +-- input key will expaned and stored after rising edge of the first clock after mater reset. +-- the keys are captured at a triple-des level +-- +if rising_edge(clock) then + + if reset = '1' then + key_ready <= '0'; + else + + -- + -- key expansion from the input key + -- + K1 <= key_in(9) & key_in(50) & key_in(33) & key_in(59) & key_in(48) & key_in(16) & key_in(32) & key_in(56) & + key_in(1) & key_in(8) & key_in(18) & key_in(41) & key_in(2) & key_in(34) & key_in(25) & key_in(24) & + key_in(43) & key_in(57) & key_in(58) & key_in(0) & key_in(35) & key_in(26) & key_in(17) & key_in(40) & + key_in(21) & key_in(27) & key_in(38) & key_in(53) & key_in(36) & key_in(3) & key_in(46) & key_in(29) & + key_in(4) & key_in(52) & key_in(22) & key_in(28) & key_in(60) & key_in(20) & key_in(37) & key_in(62) & + key_in(14) & key_in(19) & key_in(44) & key_in(13) & key_in(12) & key_in(61) & key_in(54) & key_in(30); + + K2 <= key_in(1) & key_in(42) & key_in(25) & key_in(51) & key_in(40) & key_in(8) & key_in(24) & key_in(48) & + key_in(58) & key_in(0) & key_in(10) & key_in(33) & key_in(59) & key_in(26) & key_in(17) & key_in(16) & + key_in(35) & key_in(49) & key_in(50) & key_in(57) & key_in(56) & key_in(18) & key_in(9) & key_in(32) & + key_in(13) & key_in(19) & key_in(30) & key_in(45) & key_in(28) & key_in(62) & key_in(38) & key_in(21) & + key_in(27) & key_in(44) & key_in(14) & key_in(20) & key_in(52) & key_in(12) & key_in(29) & key_in(54) & + key_in(6) & key_in(11) & key_in(36) & key_in(5) & key_in(4) & key_in(53) & key_in(46) & key_in(22); + + K3 <= key_in(50) & key_in(26) & key_in(9) & key_in(35) & key_in(24) & key_in(57) & key_in(8) & key_in(32) & + key_in(42) & key_in(49) & key_in(59) & key_in(17) & key_in(43) & key_in(10) & key_in(1) & key_in(0) & + key_in(48) & key_in(33) & key_in(34) & key_in(41) & key_in(40) & key_in(2) & key_in(58) & key_in(16) & + key_in(60) & key_in(3) & key_in(14) & key_in(29) & key_in(12) & key_in(46) & key_in(22) & key_in(5) & + key_in(11) & key_in(28) & key_in(61) & key_in(4) & key_in(36) & key_in(27) & key_in(13) & key_in(38) & + key_in(53) & key_in(62) & key_in(20) & key_in(52) & key_in(19) & key_in(37) & key_in(30) & key_in(6); + + K4 <= key_in(34) & key_in(10) & key_in(58) & key_in(48) & key_in(8) & key_in(41) & key_in(57) & key_in(16) & + key_in(26) & key_in(33) & key_in(43) & key_in(1) & key_in(56) & key_in(59) & key_in(50) & key_in(49) & + key_in(32) & key_in(17) & key_in(18) & key_in(25) & key_in(24) & key_in(51) & key_in(42) & key_in(0) & + key_in(44) & key_in(54) & key_in(61) & key_in(13) & key_in(27) & key_in(30) & key_in(6) & key_in(52) & + key_in(62) & key_in(12) & key_in(45) & key_in(19) & key_in(20) & key_in(11) & key_in(60) & key_in(22) & + key_in(37) & key_in(46) & key_in(4) & key_in(36) & key_in(3) & key_in(21) & key_in(14) & key_in(53); + + K5 <= key_in(18) & key_in(59) & key_in(42) & key_in(32) & key_in(57) & key_in(25) & key_in(41) & key_in(0) & + key_in(10) & key_in(17) & key_in(56) & key_in(50) & key_in(40) & key_in(43) & key_in(34) & key_in(33) & + key_in(16) & key_in(1) & key_in(2) & key_in(9) & key_in(8) & key_in(35) & key_in(26) & key_in(49) & + key_in(28) & key_in(38) & key_in(45) & key_in(60) & key_in(11) & key_in(14) & key_in(53) & key_in(36) & + key_in(46) & key_in(27) & key_in(29) & key_in(3) & key_in(4) & key_in(62) & key_in(44) & key_in(6) & + key_in(21) & key_in(30) & key_in(19) & key_in(20) & key_in(54) & key_in(5) & key_in(61) & key_in(37); + + K6 <= key_in(2) & key_in(43) & key_in(26) & key_in(16) & key_in(41) & key_in(9) & key_in(25) & key_in(49) & + key_in(59) & key_in(1) & key_in(40) & key_in(34) & key_in(24) & key_in(56) & key_in(18) & key_in(17) & + key_in(0) & key_in(50) & key_in(51) & key_in(58) & key_in(57) & key_in(48) & key_in(10) & key_in(33) & + key_in(12) & key_in(22) & key_in(29) & key_in(44) & key_in(62) & key_in(61) & key_in(37) & key_in(20) & + key_in(30) & key_in(11) & key_in(13) & key_in(54) & key_in(19) & key_in(46) & key_in(28) & key_in(53) & + key_in(5) & key_in(14) & key_in(3) & key_in(4) & key_in(38) & key_in(52) & key_in(45) & key_in(21); + + K7 <= key_in(51) & key_in(56) & key_in(10) & key_in(0) & key_in(25) & key_in(58) & key_in(9) & key_in(33) & + key_in(43) & key_in(50) & key_in(24) & key_in(18) & key_in(8) & key_in(40) & key_in(2) & key_in(1) & + key_in(49) & key_in(34) & key_in(35) & key_in(42) & key_in(41) & key_in(32) & key_in(59) & key_in(17) & + key_in(27) & key_in(6) & key_in(13) & key_in(28) & key_in(46) & key_in(45) & key_in(21) & key_in(4) & + key_in(14) & key_in(62) & key_in(60) & key_in(38) & key_in(3) & key_in(30) & key_in(12) & key_in(37) & + key_in(52) & key_in(61) & key_in(54) & key_in(19) & key_in(22) & key_in(36) & key_in(29) & key_in(5); + + K8 <= key_in(35) & key_in(40) & key_in(59) & key_in(49) & key_in(9) & key_in(42) & key_in(58) & key_in(17) & + key_in(56) & key_in(34) & key_in(8) & key_in(2) & key_in(57) & key_in(24) & key_in(51) & key_in(50) & + key_in(33) & key_in(18) & key_in(48) & key_in(26) & key_in(25) & key_in(16) & key_in(43) & key_in(1) & + key_in(11) & key_in(53) & key_in(60) & key_in(12) & key_in(30) & key_in(29) & key_in(5) & key_in(19) & + key_in(61) & key_in(46) & key_in(44) & key_in(22) & key_in(54) & key_in(14) & key_in(27) & key_in(21) & + key_in(36) & key_in(45) & key_in(38) & key_in(3) & key_in(6) & key_in(20) & key_in(13) & key_in(52); + + K9 <= key_in(56) & key_in(32) & key_in(51) & key_in(41) & key_in(1) & key_in(34) & key_in(50) & key_in(9) & + key_in(48) & key_in(26) & key_in(0) & key_in(59) & key_in(49) & key_in(16) & key_in(43) & key_in(42) & + key_in(25) & key_in(10) & key_in(40) & key_in(18) & key_in(17) & key_in(8) & key_in(35) & key_in(58) & + key_in(3) & key_in(45) & key_in(52) & key_in(4) & key_in(22) & key_in(21) & key_in(60) & key_in(11) & + key_in(53) & key_in(38) & key_in(36) & key_in(14) & key_in(46) & key_in(6) & key_in(19) & key_in(13) & + key_in(28) & key_in(37) & key_in(30) & key_in(62) & key_in(61) & key_in(12) & key_in(5) & key_in(44); + + K10 <= key_in(40) & key_in(16) & key_in(35) & key_in(25) & key_in(50) & key_in(18) & key_in(34) & key_in(58) & + key_in(32) & key_in(10) & key_in(49) & key_in(43) & key_in(33) & key_in(0) & key_in(56) & key_in(26) & + key_in(9) & key_in(59) & key_in(24) & key_in(2) & key_in(1) & key_in(57) & key_in(48) & key_in(42) & + key_in(54) & key_in(29) & key_in(36) & key_in(19) & key_in(6) & key_in(5) & key_in(44) & key_in(62) & + key_in(37) & key_in(22) & key_in(20) & key_in(61) & key_in(30) & key_in(53) & key_in(3) & key_in(60) & + key_in(12) & key_in(21) & key_in(14) & key_in(46) & key_in(45) & key_in(27) & key_in(52) & key_in(28); + + K11 <= key_in(24) & key_in(0) & key_in(48) & key_in(9) & key_in(34) & key_in(2) & key_in(18) & key_in(42) & + key_in(16) & key_in(59) & key_in(33) & key_in(56) & key_in(17) & key_in(49) & key_in(40) & key_in(10) & + key_in(58) & key_in(43) & key_in(8) & key_in(51) & key_in(50) & key_in(41) & key_in(32) & key_in(26) & + key_in(38) & key_in(13) & key_in(20) & key_in(3) & key_in(53) & key_in(52) & key_in(28) & key_in(46) & + key_in(21) & key_in(6) & key_in(4) & key_in(45) & key_in(14) & key_in(37) & key_in(54) & key_in(44) & + key_in(27) & key_in(5) & key_in(61) & key_in(30) & key_in(29) & key_in(11) & key_in(36) & key_in(12); + + K12 <= key_in(8) & key_in(49) & key_in(32) & key_in(58) & key_in(18) & key_in(51) & key_in(2) & key_in(26) & + key_in(0) & key_in(43) & key_in(17) & key_in(40) & key_in(1) & key_in(33) & key_in(24) & key_in(59) & + key_in(42) & key_in(56) & key_in(57) & key_in(35) & key_in(34) & key_in(25) & key_in(16) & key_in(10) & + key_in(22) & key_in(60) & key_in(4) & key_in(54) & key_in(37) & key_in(36) & key_in(12) & key_in(30) & + key_in(5) & key_in(53) & key_in(19) & key_in(29) & key_in(61) & key_in(21) & key_in(38) & key_in(28) & + key_in(11) & key_in(52) & key_in(45) & key_in(14) & key_in(13) & key_in(62) & key_in(20) & key_in(27); + + K13 <= key_in(57) & key_in(33) & key_in(16) & key_in(42) & key_in(2) & key_in(35) & key_in(51) & key_in(10) & + key_in(49) & key_in(56) & key_in(1) & key_in(24) & key_in(50) & key_in(17) & key_in(8) & key_in(43) & + key_in(26) & key_in(40) & key_in(41) & key_in(48) & key_in(18) & key_in(9) & key_in(0) & key_in(59) & + key_in(6) & key_in(44) & key_in(19) & key_in(38) & key_in(21) & key_in(20) & key_in(27) & key_in(14) & + key_in(52) & key_in(37) & key_in(3) & key_in(13) & key_in(45) & key_in(5) & key_in(22) & key_in(12) & + key_in(62) & key_in(36) & key_in(29) & key_in(61) & key_in(60) & key_in(46) & key_in(4) & key_in(11); + + K14 <= key_in(41) & key_in(17) & key_in(0) & key_in(26) & key_in(51) & key_in(48) & key_in(35) & key_in(59) & + key_in(33) & key_in(40) & key_in(50) & key_in(8) & key_in(34) & key_in(1) & key_in(57) & key_in(56) & + key_in(10) & key_in(24) & key_in(25) & key_in(32) & key_in(2) & key_in(58) & key_in(49) & key_in(43) & + key_in(53) & key_in(28) & key_in(3) & key_in(22) & key_in(5) & key_in(4) & key_in(11) & key_in(61) & + key_in(36) & key_in(21) & key_in(54) & key_in(60) & key_in(29) & key_in(52) & key_in(6) & key_in(27) & + key_in(46) & key_in(20) & key_in(13) & key_in(45) & key_in(44) & key_in(30) & key_in(19) & key_in(62); + + K15 <= key_in(25) & key_in(1) & key_in(49) & key_in(10) & key_in(35) & key_in(32) & key_in(48) & key_in(43) & + key_in(17) & key_in(24) & key_in(34) & key_in(57) & key_in(18) & key_in(50) & key_in(41) & key_in(40) & + key_in(59) & key_in(8) & key_in(9) & key_in(16) & key_in(51) & key_in(42) & key_in(33) & key_in(56) & + key_in(37) & key_in(12) & key_in(54) & key_in(6) & key_in(52) & key_in(19) & key_in(62) & key_in(45) & + key_in(20) & key_in(5) & key_in(38) & key_in(44) & key_in(13) & key_in(36) & key_in(53) & key_in(11) & + key_in(30) & key_in(4) & key_in(60) & key_in(29) & key_in(28) & key_in(14) & key_in(3) & key_in(46); + + K16 <= key_in(17) & key_in(58) & key_in(41) & key_in(2) & key_in(56) & key_in(24) & key_in(40) & key_in(35) & + key_in(9) & key_in(16) & key_in(26) & key_in(49) & key_in(10) & key_in(42) & key_in(33) & key_in(32) & + key_in(51) & key_in(0) & key_in(1) & key_in(8) & key_in(43) & key_in(34) & key_in(25) & key_in(48) & + key_in(29) & key_in(4) & key_in(46) & key_in(61) & key_in(44) & key_in(11) & key_in(54) & key_in(37) & + key_in(12) & key_in(60) & key_in(30) & key_in(36) & key_in(5) & key_in(28) & key_in(45) & key_in(3) & + key_in(22) & key_in(27) & key_in(52) & key_in(21) & key_in(20) & key_in(6) & key_in(62) & key_in(38); + + key_ready <= '1'; + + end if; + +end if; +end process; + + +end Behavioral; Index: 3des_vhdl/trunk/VHDL/p_box.vhd =================================================================== --- 3des_vhdl/trunk/VHDL/p_box.vhd (nonexistent) +++ 3des_vhdl/trunk/VHDL/p_box.vhd (revision 4) @@ -0,0 +1,96 @@ +--------------------------------------------------------------------- +-- (c) Copyright 2006, CoreTex Systems, LLC -- +-- www.coretexsys.com -- +-- -- +-- This source file may be used and distributed without -- +-- restriction provided that this copyright statement is not -- +-- removed from the file and that any derivative work contains -- +-- the original copyright notice and the associated disclaimer. -- +-- -- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- +-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- +-- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- +-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- +-- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- +-- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- +-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- +-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- +-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- +-- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- +-- POSSIBILITY OF SUCH DAMAGE. -- +-- -- +--------------------------------------------------------------------- + +---------------------------------------------------------------------- + +-- Poject structure: + +-- |- tdes_top.vhd +-- | +-- |- des_cipher_top.vhd +-- |- des_top.vhd +-- |- block_top.vhd +-- |- add_key.vhd +-- | +-- |- add_left.vhd +-- | +-- |- e_expansion_function.vhd +-- | +-- |- p_box.vhd +-- | +-- |- s_box.vhd +-- |- s1_box.vhd +-- |- s2_box.vhd +-- |- s3_box.vhd +-- |- s4_box.vhd +-- |- s5_box.vhd +-- |- s6_box.vhd +-- |- s7_box.vhd +-- |- s8_box.vhd +-- |- key_schedule.vhd + +---------------------------------------------------------------------- + +--------------------------------------------------------------------------------------------------- +-- +-- Title : p_box +-- Company : CoreTex Systems, LLC +-- +--------------------------------------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +entity p_box is +port( + x0_in: in std_logic_vector(3 downto 0); + x1_in: in std_logic_vector(3 downto 0); + x2_in: in std_logic_vector(3 downto 0); + x3_in: in std_logic_vector(3 downto 0); + x4_in: in std_logic_vector(3 downto 0); + x5_in: in std_logic_vector(3 downto 0); + x6_in: in std_logic_vector(3 downto 0); + x7_in: in std_logic_vector(3 downto 0); + x_out: out std_logic_vector(0 to 31) + ); +end p_box; + +architecture Behavioral of p_box is + +signal x_in: std_logic_vector(0 to 31); + +begin + + x_in <= x0_in & x1_in & x2_in & x3_in & x4_in & x5_in & x6_in & x7_in; + x_out <= x_in(15) & x_in(6) & x_in(19) & x_in(20) & x_in(28) & x_in(11) & + x_in(27) & x_in(16) & x_in(0) & x_in(14) & x_in(22) & x_in(25) & + x_in(4) & x_in(17) & x_in(30) & x_in(9) & x_in(1) & x_in(7) & + x_in(23) & x_in(13) & x_in(31) & x_in(26) & x_in(2) & x_in(8) & + x_in(18) & x_in(12) & x_in(29) & x_in(5) & x_in(21) & x_in(10) & + x_in(3) & x_in(24); + +end Behavioral; Index: 3des_vhdl/trunk/VHDL/s_box.vhd =================================================================== --- 3des_vhdl/trunk/VHDL/s_box.vhd (nonexistent) +++ 3des_vhdl/trunk/VHDL/s_box.vhd (revision 4) @@ -0,0 +1,197 @@ +--------------------------------------------------------------------- +-- (c) Copyright 2006, CoreTex Systems, LLC -- +-- www.coretexsys.com -- +-- -- +-- This source file may be used and distributed without -- +-- restriction provided that this copyright statement is not -- +-- removed from the file and that any derivative work contains -- +-- the original copyright notice and the associated disclaimer. -- +-- -- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- +-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- +-- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- +-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- +-- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- +-- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- +-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- +-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- +-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- +-- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- +-- POSSIBILITY OF SUCH DAMAGE. -- +-- -- +--------------------------------------------------------------------- + +---------------------------------------------------------------------- + +-- Poject structure: + +-- |- tdes_top.vhd +-- | +-- |- des_cipher_top.vhd +-- |- des_top.vhd +-- |- block_top.vhd +-- |- add_key.vhd +-- | +-- |- add_left.vhd +-- | +-- |- e_expansion_function.vhd +-- | +-- |- p_box.vhd +-- | +-- |- s_box.vhd +-- |- s1_box.vhd +-- |- s2_box.vhd +-- |- s3_box.vhd +-- |- s4_box.vhd +-- |- s5_box.vhd +-- |- s6_box.vhd +-- |- s7_box.vhd +-- |- s8_box.vhd +-- |- key_schedule.vhd + +---------------------------------------------------------------------- + +--------------------------------------------------------------------------------------------------- +-- +-- Title : s_box +-- Company : CoreTex Systems, LLC +-- +--------------------------------------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +entity s_box is +port( + block0_in: in std_logic_vector(5 downto 0); + block1_in: in std_logic_vector(5 downto 0); + block2_in: in std_logic_vector(5 downto 0); + block3_in: in std_logic_vector(5 downto 0); + block4_in: in std_logic_vector(5 downto 0); + block5_in: in std_logic_vector(5 downto 0); + block6_in: in std_logic_vector(5 downto 0); + block7_in: in std_logic_vector(5 downto 0); + x0_out: out std_logic_vector(3 downto 0); + x1_out: out std_logic_vector(3 downto 0); + x2_out: out std_logic_vector(3 downto 0); + x3_out: out std_logic_vector(3 downto 0); + x4_out: out std_logic_vector(3 downto 0); + x5_out: out std_logic_vector(3 downto 0); + x6_out: out std_logic_vector(3 downto 0); + x7_out: out std_logic_vector(3 downto 0) + ); +end s_box; + +architecture Behavioral of s_box is + +component s1_box + port( + a: in std_logic_VECTOR(5 downto 0); + spo: out std_logic_VECTOR(3 downto 0) + ); +end component; + +component s2_box + port( + a: in std_logic_VECTOR(5 downto 0); + spo: out std_logic_VECTOR(3 downto 0) + ); +end component; + +component s3_box + port( + a: in std_logic_VECTOR(5 downto 0); + spo: out std_logic_VECTOR(3 downto 0) + ); +end component; + +component s4_box + port( + a: in std_logic_VECTOR(5 downto 0); + spo: out std_logic_VECTOR(3 downto 0) + ); +end component; + +component s5_box + port( + a: in std_logic_VECTOR(5 downto 0); + spo: out std_logic_VECTOR(3 downto 0) + ); +end component; + +component s6_box + port( + a: in std_logic_VECTOR(5 downto 0); + spo: out std_logic_VECTOR(3 downto 0) + ); +end component; + +component s7_box + port( + a: in std_logic_VECTOR(5 downto 0); + spo: out std_logic_VECTOR(3 downto 0) + ); +end component; + +component s8_box + port( + a: in std_logic_VECTOR(5 downto 0); + spo: out std_logic_VECTOR(3 downto 0) + ); +end component; + +begin + +S1 : s1_box + port map ( + a => block0_in, + spo => x0_out +); + +S2 : s2_box + port map ( + a => block1_in, + spo => x1_out +); + +S3 : s3_box + port map ( + a => block2_in, + spo => x2_out +); + +S4 : s4_box + port map ( + a => block3_in, + spo => x3_out +); + +S5 : s5_box + port map ( + a => block4_in, + spo => x4_out +); + +S6 : s6_box + port map ( + a => block5_in, + spo => x5_out +); + +S7 : s7_box + port map ( + a => block6_in, + spo => x6_out +); + +S8 : s8_box + port map ( + a => block7_in, + spo => x7_out +); + +end Behavioral; Index: 3des_vhdl/trunk/VHDL/block_top.vhd =================================================================== --- 3des_vhdl/trunk/VHDL/block_top.vhd (nonexistent) +++ 3des_vhdl/trunk/VHDL/block_top.vhd (revision 4) @@ -0,0 +1,295 @@ +--------------------------------------------------------------------- +-- (c) Copyright 2006, CoreTex Systems, LLC -- +-- www.coretexsys.com -- +-- -- +-- This source file may be used and distributed without -- +-- restriction provided that this copyright statement is not -- +-- removed from the file and that any derivative work contains -- +-- the original copyright notice and the associated disclaimer. -- +-- -- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- +-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- +-- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- +-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- +-- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- +-- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- +-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- +-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- +-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- +-- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- +-- POSSIBILITY OF SUCH DAMAGE. -- +-- -- +--------------------------------------------------------------------- + +---------------------------------------------------------------------- + +-- Poject structure: + +-- |- tdes_top.vhd +-- | +-- |- des_cipher_top.vhd +-- |- des_top.vhd +-- |- block_top.vhd +-- |- add_key.vhd +-- | +-- |- add_left.vhd +-- | +-- |- e_expansion_function.vhd +-- | +-- |- p_box.vhd +-- | +-- |- s_box.vhd +-- |- s1_box.vhd +-- |- s2_box.vhd +-- |- s3_box.vhd +-- |- s4_box.vhd +-- |- s5_box.vhd +-- |- s6_box.vhd +-- |- s7_box.vhd +-- |- s8_box.vhd +-- |- key_schedule.vhd + +---------------------------------------------------------------------- + +--------------------------------------------------------------------------------------------------- +-- +-- Title : block_top +-- Company : CoreTex Systems, LLC +-- +--------------------------------------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +entity block_top is +port( + -- + -- input into top level block + -- + L_in: in std_logic_vector(0 to 31); + R_in: in std_logic_vector(0 to 31); + + -- + -- output from top level block + -- + L_out: out std_logic_vector(0 to 31); + R_out: out std_logic_vector(0 to 31); + + -- + -- expanded key from key block + -- + round_key_des: in std_logic_vector(0 to 47) -- current round key + + ); +end block_top; + +architecture Behavioral of block_top is +-- +-- DECLARATION OF MODULES IN THE BLOCK_TOP +-- + +-- +-- E _ E X P A N S I O N _ F U N C T I O N +-- +component e_expansion_function + port( + x_in: in std_logic_vector(0 to 31); + block0_out: out std_logic_vector(0 to 5); + block1_out: out std_logic_vector(0 to 5); + block2_out: out std_logic_vector(0 to 5); + block3_out: out std_logic_vector(0 to 5); + block4_out: out std_logic_vector(0 to 5); + block5_out: out std_logic_vector(0 to 5); + block6_out: out std_logic_vector(0 to 5); + block7_out: out std_logic_vector(0 to 5) + ); +end component; + +-- +-- A D D _ K E Y +-- +component add_key + port( + x0_in: in std_logic_vector(0 to 5); + x1_in: in std_logic_vector(0 to 5); + x2_in: in std_logic_vector(0 to 5); + x3_in: in std_logic_vector(0 to 5); + x4_in: in std_logic_vector(0 to 5); + x5_in: in std_logic_vector(0 to 5); + x6_in: in std_logic_vector(0 to 5); + x7_in: in std_logic_vector(0 to 5); + key: in std_logic_vector(0 to 47); + x0_out: out std_logic_vector(5 downto 0); + x1_out: out std_logic_vector(5 downto 0); + x2_out: out std_logic_vector(5 downto 0); + x3_out: out std_logic_vector(5 downto 0); + x4_out: out std_logic_vector(5 downto 0); + x5_out: out std_logic_vector(5 downto 0); + x6_out: out std_logic_vector(5 downto 0); + x7_out: out std_logic_vector(5 downto 0) + ); +end component; + +-- +-- S _ B O X +-- +component s_box + port( + block0_in: in std_logic_vector(5 downto 0); + block1_in: in std_logic_vector(5 downto 0); + block2_in: in std_logic_vector(5 downto 0); + block3_in: in std_logic_vector(5 downto 0); + block4_in: in std_logic_vector(5 downto 0); + block5_in: in std_logic_vector(5 downto 0); + block6_in: in std_logic_vector(5 downto 0); + block7_in: in std_logic_vector(5 downto 0); + x0_out: out std_logic_vector(3 downto 0); + x1_out: out std_logic_vector(3 downto 0); + x2_out: out std_logic_vector(3 downto 0); + x3_out: out std_logic_vector(3 downto 0); + x4_out: out std_logic_vector(3 downto 0); + x5_out: out std_logic_vector(3 downto 0); + x6_out: out std_logic_vector(3 downto 0); + x7_out: out std_logic_vector(3 downto 0) + ); +end component; + +-- +-- P _ B O X +-- +component p_box + port( + x0_in: in std_logic_vector(3 downto 0); + x1_in: in std_logic_vector(3 downto 0); + x2_in: in std_logic_vector(3 downto 0); + x3_in: in std_logic_vector(3 downto 0); + x4_in: in std_logic_vector(3 downto 0); + x5_in: in std_logic_vector(3 downto 0); + x6_in: in std_logic_vector(3 downto 0); + x7_in: in std_logic_vector(3 downto 0); + x_out: out std_logic_vector(0 to 31) + ); +end component; + +-- +-- A D D _ L E F T +-- +component add_left + port( + x_in: in std_logic_vector(0 to 31); + left_in: in std_logic_vector(0 to 31); + x_out: out std_logic_vector(0 to 31) + ); +end component; + + +-- +-- Signals that connects modules within block_top +-- +signal a0, a1, a2, a3, a4, a5, a6, a7: std_logic_vector(0 to 5); +signal b0, b1, b2, b3, b4, b5, b6, b7: std_logic_vector(5 downto 0); +signal c0, c1, c2, c3, c4, c5, c6, c7: std_logic_vector(3 downto 0); +signal d0: std_logic_vector(0 to 31); +signal R_out_internal: std_logic_vector(0 to 31); + +begin + +L_out <= R_in; +R_out <= R_out_internal; + +-- +-- INSTANTIATION OF E_EXPANSIONFUNCTION +-- +E_EXPANSIONFUNCTION : e_expansion_function +port map ( + x_in => R_in, + block0_out => a0, + block1_out => a1, + block2_out => a2, + block3_out => a3, + block4_out => a4, + block5_out => a5, + block6_out => a6, + block7_out => a7 +); + +-- +-- INSTANTIATION OF ADDKEY +-- +ADDKEY : add_key +port map ( + x0_in => a0, + x1_in => a1, + x2_in => a2, + x3_in => a3, + x4_in => a4, + x5_in => a5, + x6_in => a6, + x7_in => a7, + key => round_key_des, + x0_out => b0, + x1_out => b1, + x2_out => b2, + x3_out => b3, + x4_out => b4, + x5_out => b5, + x6_out => b6, + x7_out => b7 +); + +-- +-- INSTANTIATION OF SBOX +-- +SBOX : s_box +port map ( + block0_in => b0, + block1_in => b1, + block2_in => b2, + block3_in => b3, + block4_in => b4, + block5_in => b5, + block6_in => b6, + block7_in => b7, + x0_out => c0, + x1_out => c1, + x2_out => c2, + x3_out => c3, + x4_out => c4, + x5_out => c5, + x6_out => c6, + x7_out => c7 +); + +-- +-- INSTANTIATION OF PBOX +-- +PBOX : p_box +port map ( + x0_in => c0, + x1_in => c1, + x2_in => c2, + x3_in => c3, + x4_in => c4, + x5_in => c5, + x6_in => c6, + x7_in => c7, + x_out => d0 +); + + +-- +-- INSTANTIATION OF ADDLEFT +-- +ADDLEFT : add_left +port map ( + x_in => d0, + left_in => L_in, + x_out => R_out_internal +); + + +end Behavioral; Index: 3des_vhdl/trunk/VHDL/e_expansion_function.vhd =================================================================== --- 3des_vhdl/trunk/VHDL/e_expansion_function.vhd (nonexistent) +++ 3des_vhdl/trunk/VHDL/e_expansion_function.vhd (revision 4) @@ -0,0 +1,95 @@ +--------------------------------------------------------------------- +-- (c) Copyright 2006, CoreTex Systems, LLC -- +-- www.coretexsys.com -- +-- -- +-- This source file may be used and distributed without -- +-- restriction provided that this copyright statement is not -- +-- removed from the file and that any derivative work contains -- +-- the original copyright notice and the associated disclaimer. -- +-- -- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- +-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- +-- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- +-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- +-- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- +-- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- +-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- +-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- +-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- +-- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- +-- POSSIBILITY OF SUCH DAMAGE. -- +-- -- +--------------------------------------------------------------------- + +---------------------------------------------------------------------- + +-- Poject structure: + +-- |- tdes_top.vhd +-- | +-- |- des_cipher_top.vhd +-- |- des_top.vhd +-- |- block_top.vhd +-- |- add_key.vhd +-- | +-- |- add_left.vhd +-- | +-- |- e_expansion_function.vhd +-- | +-- |- p_box.vhd +-- | +-- |- s_box.vhd +-- |- s1_box.vhd +-- |- s2_box.vhd +-- |- s3_box.vhd +-- |- s4_box.vhd +-- |- s5_box.vhd +-- |- s6_box.vhd +-- |- s7_box.vhd +-- |- s8_box.vhd +-- |- key_schedule.vhd + +---------------------------------------------------------------------- + +--------------------------------------------------------------------------------------------------- +-- +-- Title : e_expansion_function +-- Company : CoreTex Systems, LLC +-- +--------------------------------------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +entity e_expansion_function is +port( + x_in: in std_logic_vector(0 to 31); + block0_out: out std_logic_vector(0 to 5); + block1_out: out std_logic_vector(0 to 5); + block2_out: out std_logic_vector(0 to 5); + block3_out: out std_logic_vector(0 to 5); + block4_out: out std_logic_vector(0 to 5); + block5_out: out std_logic_vector(0 to 5); + block6_out: out std_logic_vector(0 to 5); + block7_out: out std_logic_vector(0 to 5) + ); +end e_expansion_function; + +architecture Behavioral of e_expansion_function is + +begin + + block0_out <= x_in(31) & x_in(0) & x_in(1) & x_in(2) & x_in(3) & x_in(4); + block1_out <= x_in(3) & x_in(4) & x_in(5) & x_in(6) & x_in(7) & x_in(8); + block2_out <= x_in(7) & x_in(8) & x_in(9) & x_in(10) & x_in(11) & x_in(12); + block3_out <= x_in(11) & x_in(12) & x_in(13) & x_in(14) & x_in(15) & x_in(16); + block4_out <= x_in(15) & x_in(16) & x_in(17) & x_in(18) & x_in(19) & x_in(20); + block5_out <= x_in(19) & x_in(20) & x_in(21) & x_in(22) & x_in(23) & x_in(24); + block6_out <= x_in(23) & x_in(24) & x_in(25) & x_in(26) & x_in(27) & x_in(28); + block7_out <= x_in(27) & x_in(28) & x_in(29) & x_in(30) & x_in(31) & x_in(0); + +end Behavioral; Index: 3des_vhdl/trunk/VHDL/tdes_top.vhd =================================================================== --- 3des_vhdl/trunk/VHDL/tdes_top.vhd (nonexistent) +++ 3des_vhdl/trunk/VHDL/tdes_top.vhd (revision 4) @@ -0,0 +1,269 @@ +--------------------------------------------------------------------- +-- (c) Copyright 2006, CoreTex Systems, LLC -- +-- www.coretexsys.com -- +-- -- +-- This source file may be used and distributed without -- +-- restriction provided that this copyright statement is not -- +-- removed from the file and that any derivative work contains -- +-- the original copyright notice and the associated disclaimer. -- +-- -- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- +-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- +-- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- +-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- +-- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- +-- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- +-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- +-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- +-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- +-- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- +-- POSSIBILITY OF SUCH DAMAGE. -- +-- -- +--------------------------------------------------------------------- + +---------------------------------------------------------------------- + +-- Poject structure: + +-- |- tdes_top.vhd +-- | +-- |- des_cipher_top.vhd +-- |- des_top.vhd +-- |- block_top.vhd +-- |- add_key.vhd +-- | +-- |- add_left.vhd +-- | +-- |- e_expansion_function.vhd +-- | +-- |- p_box.vhd +-- | +-- |- s_box.vhd +-- |- s1_box.vhd +-- |- s2_box.vhd +-- |- s3_box.vhd +-- |- s4_box.vhd +-- |- s5_box.vhd +-- |- s6_box.vhd +-- |- s7_box.vhd +-- |- s8_box.vhd +-- |- key_schedule.vhd + +---------------------------------------------------------------------- +---------------------------------------------------------------------- +-- +-- Title : tdes_top +-- Company : CoreTex Systems, LLC +-- +---------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +entity tdes_top is +port( + -- + -- inputs for key expander + -- + key1_in: in std_logic_vector(0 to 63); + key2_in: in std_logic_vector(0 to 63); + key3_in: in std_logic_vector(0 to 63); + + -- + -- function select + -- + function_select: in std_logic; -- active when encryption, inactive when decryption + + -- + -- input into des_cipher_top + -- + data_in: in std_logic_vector(0 to 63); + + -- + -- input into des_cipher_top + -- + data_out: out std_logic_vector(0 to 63); + + -- + -- data interface to MCU + -- + lddata: in std_logic; -- active when data for loading is ready + ldkey: in std_logic; -- active when key for loading is ready + out_ready: out std_logic; -- active when encryption of data is done + + -- + -- General clock and reset + -- + reset: in std_logic; + clock: in std_logic + ); +end tdes_top; + +architecture Behavioral of tdes_top is + +component des_cipher_top is +port( + -- + -- inputs for key expander + -- + key_in: in std_logic_vector(0 to 63); -- interface to MCU + --ldkey: in std_logic; -- active signal for loading keys + + -- + -- function select + -- + function_select: in std_logic; -- active when encryption, inactive when decryption + + -- + -- input into des_cipher_top + -- + data_in: in std_logic_vector(0 to 63); + + -- + -- input into des_cipher_top + -- + data_out: out std_logic_vector(0 to 63); + + -- + -- data interface to MCU + -- + lddata: in std_logic; -- active when data for loading is ready + des_out_rdy: out std_logic; -- active when encryption of data is done + + -- + -- General clock and reset + -- + reset: in std_logic; + clock: in std_logic + ); +end component; + +type statetype is (WaitKeyState, WaitDataState); +signal nextstate: statetype; +signal key1_in_internal: std_logic_vector(0 to 63); +signal key2_in_internal: std_logic_vector(0 to 63); +signal key3_in_internal: std_logic_vector(0 to 63); +signal memkey1: std_logic_vector(0 to 63); +signal memkey3: std_logic_vector(0 to 63); +signal fsel_internal: std_logic; +signal fsel_internal_inv: std_logic; +signal des_out_rdy_internal: std_logic; +signal des_out_rdy_internal1: std_logic; +signal des_out_rdy_internal2: std_logic; +signal data_in_internal: std_logic_vector(0 to 63); +signal data_out_internal: std_logic_vector(0 to 63); +signal data_out_internal1: std_logic_vector(0 to 63); +signal data_out_internal2: std_logic_vector(0 to 63); +signal lddata_internal: std_logic; + +begin + +process (clock) +begin +if rising_edge(clock) then + if reset = '1' then + nextstate <= WaitKeyState; + lddata_internal <= '0'; + out_ready <= '0'; + fsel_internal <= function_select; + fsel_internal_inv <= not function_select; + else + data_out <= data_out_internal; + out_ready <= des_out_rdy_internal; + + case nextstate is + -- + -- wait key state + -- + when WaitKeyState => + -- wait until key is ready (as well as the function_select) + if ldkey = '0' then + nextstate <= WaitKeyState; + else + key1_in_internal <= key1_in; + key2_in_internal <= key2_in; + key3_in_internal <= key3_in; + memkey1 <= key1_in; + memkey3 <= key3_in; + nextstate <= WaitDataState; + end if; + -- + -- wait data state + -- + when WaitDataState => + -- wait until data is ready to be loaded + if lddata = '0' then + nextstate <= WaitDataState; + lddata_internal <= '0'; + else + lddata_internal <= '1'; + if fsel_internal = '0' then + key1_in_internal <= memkey3; + key3_in_internal <= memkey1; + end if; + data_in_internal <= data_in; + nextstate <= WaitDataState; + end if; + + end case; + end if; +end if; +end process; + + +DESCIPHERTOP1: des_cipher_top +port map ( + key_in => key1_in_internal, -- interface to MCU + + function_select => fsel_internal, -- active when encryption, inactive when decryption + + data_in => data_in_internal, + + data_out => data_out_internal1, + + lddata => lddata_internal, -- active when data for loading is ready + des_out_rdy => des_out_rdy_internal1, -- active when encryption of data is done + + reset => reset, + clock => clock +); + +DESCIPHERTOP2: des_cipher_top +port map ( + key_in => key2_in_internal, --subkey_in_internal, -- interface to MCU + + function_select => fsel_internal_inv, -- active when encryption, inactive when decryption + + data_in => data_out_internal1, + + data_out => data_out_internal2, + + lddata => des_out_rdy_internal1, -- active when data for loading is ready + des_out_rdy => des_out_rdy_internal2, -- active when encryption of data is done + + reset => reset, + clock => clock +); + +DESCIPHERTOP3: des_cipher_top +port map ( + key_in => key3_in_internal, -- subkey_in_internal, -- interface to MCU + + function_select => fsel_internal, -- active when encryption, inactive when decryption + + data_in => data_out_internal2, + + data_out => data_out_internal, + + lddata => des_out_rdy_internal2, -- active when data for loading is ready + des_out_rdy => des_out_rdy_internal, -- active when encryption of data is done + + reset => reset, + clock => clock +); + +end Behavioral; Index: 3des_vhdl/trunk/VHDL/des_cipher_top.vhd =================================================================== --- 3des_vhdl/trunk/VHDL/des_cipher_top.vhd (nonexistent) +++ 3des_vhdl/trunk/VHDL/des_cipher_top.vhd (revision 4) @@ -0,0 +1,197 @@ +--------------------------------------------------------------------- +-- (c) Copyright 2006, CoreTex Systems, LLC -- +-- www.coretexsys.com -- +-- -- +-- This source file may be used and distributed without -- +-- restriction provided that this copyright statement is not -- +-- removed from the file and that any derivative work contains -- +-- the original copyright notice and the associated disclaimer. -- +-- -- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- +-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- +-- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- +-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- +-- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- +-- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- +-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- +-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- +-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- +-- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- +-- POSSIBILITY OF SUCH DAMAGE. -- +-- -- +--------------------------------------------------------------------- + +---------------------------------------------------------------------- + +-- Poject structure: + +-- |- tdes_top.vhd +-- | +-- |- des_cipher_top.vhd +-- |- des_top.vhd +-- |- block_top.vhd +-- |- add_key.vhd +-- | +-- |- add_left.vhd +-- | +-- |- e_expansion_function.vhd +-- | +-- |- p_box.vhd +-- | +-- |- s_box.vhd +-- |- s1_box.vhd +-- |- s2_box.vhd +-- |- s3_box.vhd +-- |- s4_box.vhd +-- |- s5_box.vhd +-- |- s6_box.vhd +-- |- s7_box.vhd +-- |- s8_box.vhd +-- |- key_schedule.vhd + +---------------------------------------------------------------------- +--------------------------------------------------------------------------------------------------- +-- +-- Title : des_cipher_top +-- Company : CoreTex Systems, LLC +-- +--------------------------------------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +entity des_cipher_top is +port( + -- + -- Core Interface + -- + key_in: in std_logic_vector(0 to 63); -- input for key + --ldkey: in std_logic; -- signal for loading key + function_select: in std_logic; -- function select: '1' = encryption, '0' = decryption + + data_in: in std_logic_vector(0 to 63); -- input for data + + data_out: out std_logic_vector(0 to 63); -- output for data + + lddata: in std_logic; -- data strobe (active high) + core_busy: out std_logic; -- active high when encrypting/decryption data + des_out_rdy: out std_logic; -- active high when encryption/decryption of data is done + + reset: in std_logic; -- active high + clock: in std_logic -- master clock + + ); +end des_cipher_top; + +architecture Behavioral of des_cipher_top is + +-- +-- +-- +component key_schedule is +port ( + -- Signals for loading key from external device + key_in: in std_logic_vector(0 to 63); -- input for key + + -- signals for communication with des top + KeySelect: in std_logic_vector(3 downto 0); -- selector for key + key_out: out std_logic_vector(0 to 47); -- expaned key (depends on selector) + key_ready: out std_logic; -- signal for the core that key has been expanded + + reset: in std_logic; -- active high + clock: in std_logic -- master clock + ); +end component; + +component des_top is +port ( + -- Main Data + key_round_in: in std_logic_vector(0 to 47); + data_in: in std_logic_vector(0 to 63); + data_out: out std_logic_vector(0 to 63); + + -- Signals for communication with des + KeySelect: inout std_logic_vector(3 downto 0); -- selector for key + key_ready: in std_logic; -- signal for aes that key has been expanded + data_ready: in std_logic; -- signal for aes that key has been expanded + func_select: in std_logic; + + des_out_rdy: out std_logic; + core_busy: out std_logic; + + reset: in std_logic; + clock: in std_logic -- master clock + ); +end component; + +signal key_select_internal: std_logic_vector(3 downto 0); +signal key_round_internal: std_logic_vector(0 to 47); +signal key_ready_internal: std_logic; +signal data_in_internal: std_logic_vector(0 to 63); +signal data_ready_internal: std_logic; + +begin + +process (clock) +begin + +if rising_edge(clock) then + + if lddata = '1' then + + -- capute data from the bus + data_in_internal <= data_in; -- register data from the bus + data_ready_internal <= '1'; -- data has been loaded: continue with encryptio/decryption + + else + + data_ready_internal <= '0'; -- data is not loaded: wait for data + + end if; + +end if; +end process; + +-- +-- KEY EXPANDER AND DES CORE instantiation +-- +KEYSCHEDULE: key_schedule +port map ( + + KeySelect => key_select_internal, + key_in => key_in, + + key_out => key_round_internal, + key_ready => key_ready_internal, + + reset => reset, + clock => clock +); + +DESTOP: des_top +port map ( + + key_round_in => key_round_internal, + + data_in => data_in_internal, + + key_ready => key_ready_internal, + data_ready => data_ready_internal, + + KeySelect => key_select_internal, + + func_select => function_select, + + data_out => data_out, + core_busy => core_busy, + des_out_rdy => des_out_rdy, + + reset => reset, + clock => clock +); + +end Behavioral; Index: 3des_vhdl/trunk/VHDL/s1_box.vhd =================================================================== --- 3des_vhdl/trunk/VHDL/s1_box.vhd (nonexistent) +++ 3des_vhdl/trunk/VHDL/s1_box.vhd (revision 4) @@ -0,0 +1,144 @@ +--------------------------------------------------------------------- +-- (c) Copyright 2006, CoreTex Systems, LLC -- +-- www.coretexsys.com -- +-- -- +-- This source file may be used and distributed without -- +-- restriction provided that this copyright statement is not -- +-- removed from the file and that any derivative work contains -- +-- the original copyright notice and the associated disclaimer. -- +-- -- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- +-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- +-- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- +-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- +-- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- +-- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- +-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- +-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- +-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- +-- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- +-- POSSIBILITY OF SUCH DAMAGE. -- +-- -- +--------------------------------------------------------------------- + +---------------------------------------------------------------------- + +-- Poject structure: + +-- |- tdes_top.vhd +-- | +-- |- des_cipher_top.vhd +-- |- des_top.vhd +-- |- block_top.vhd +-- |- add_key.vhd +-- | +-- |- add_left.vhd +-- | +-- |- e_expansion_function.vhd +-- | +-- |- p_box.vhd +-- | +-- |- s_box.vhd +-- |- s1_box.vhd +-- |- s2_box.vhd +-- |- s3_box.vhd +-- |- s4_box.vhd +-- |- s5_box.vhd +-- |- s6_box.vhd +-- |- s7_box.vhd +-- |- s8_box.vhd +-- |- key_schedule.vhd + +---------------------------------------------------------------------- + +--------------------------------------------------------------------------------------------------- +-- +-- Title : s1_box +-- Company : CoreTex Systems, LLC +-- +--------------------------------------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +ENTITY s1_box IS + port ( + A: IN std_logic_VECTOR(5 downto 0); + SPO: OUT std_logic_VECTOR(3 downto 0)); +END s1_box; + +architecture Behavioral of s1_box is + +begin + +SPO <= "1110" when A = x"0" else + "0000" when A = x"1" else + "0100" when A = x"2" else + "1111" when A = x"3" else + "1101" when A = x"4" else + "0111" when A = x"5" else + "0001" when A = x"6" else + "0100" when A = x"7" else + "0010" when A = x"8" else + "1110" when A = x"9" else + "1111" when A = x"A" else + "0010" when A = x"B" else + "1011" when A = x"C" else + "1101" when A = x"D" else + "1000" when A = x"E" else + "0001" when A = x"F" else + "0011" when A = x"10" else + "1010" when A = x"11" else + "1010" when A = x"12" else + "0110" when A = x"13" else + "0110" when A = x"14" else + "1100" when A = x"15" else + "1100" when A = x"16" else + "1011" when A = x"17" else + "0101" when A = x"18" else + "1001" when A = x"19" else + "1001" when A = x"1A" else + "0101" when A = x"1B" else + "0000" when A = x"1C" else + "0011" when A = x"1D" else + "0111" when A = x"1E" else + "1000" when A = x"1F" else + "0100" when A = x"20" else + "1111" when A = x"21" else + "0001" when A = x"22" else + "1100" when A = x"23" else + "1110" when A = x"24" else + "1000" when A = x"25" else + "1000" when A = x"26" else + "0010" when A = x"27" else + "1101" when A = x"28" else + "0100" when A = x"29" else + "0110" when A = x"2A" else + "1001" when A = x"2B" else + "0010" when A = x"2C" else + "0001" when A = x"2D" else + "1011" when A = x"2E" else + "0111" when A = x"2F" else + "1111" when A = x"30" else + "0101" when A = x"31" else + "1100" when A = x"32" else + "1011" when A = x"33" else + "1001" when A = x"34" else + "0011" when A = x"35" else + "0111" when A = x"36" else + "1110" when A = x"37" else + "0011" when A = x"38" else + "1010" when A = x"39" else + "1010" when A = x"3A" else + "0000" when A = x"3B" else + "0101" when A = x"3C" else + "0110" when A = x"3D" else + "0000" when A = x"3E" else + "1101" when A = x"3F" else + "1101"; + +END Behavioral; Index: 3des_vhdl/trunk/VHDL/s2_box.vhd =================================================================== --- 3des_vhdl/trunk/VHDL/s2_box.vhd (nonexistent) +++ 3des_vhdl/trunk/VHDL/s2_box.vhd (revision 4) @@ -0,0 +1,144 @@ +--------------------------------------------------------------------- +-- (c) Copyright 2006, CoreTex Systems, LLC -- +-- www.coretexsys.com -- +-- -- +-- This source file may be used and distributed without -- +-- restriction provided that this copyright statement is not -- +-- removed from the file and that any derivative work contains -- +-- the original copyright notice and the associated disclaimer. -- +-- -- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- +-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- +-- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- +-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- +-- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- +-- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- +-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- +-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- +-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- +-- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- +-- POSSIBILITY OF SUCH DAMAGE. -- +-- -- +--------------------------------------------------------------------- + +---------------------------------------------------------------------- + +-- Poject structure: + +-- |- tdes_top.vhd +-- | +-- |- des_cipher_top.vhd +-- |- des_top.vhd +-- |- block_top.vhd +-- |- add_key.vhd +-- | +-- |- add_left.vhd +-- | +-- |- e_expansion_function.vhd +-- | +-- |- p_box.vhd +-- | +-- |- s_box.vhd +-- |- s1_box.vhd +-- |- s2_box.vhd +-- |- s3_box.vhd +-- |- s4_box.vhd +-- |- s5_box.vhd +-- |- s6_box.vhd +-- |- s7_box.vhd +-- |- s8_box.vhd +-- |- key_schedule.vhd + +---------------------------------------------------------------------- + +--------------------------------------------------------------------------------------------------- +-- +-- Title : s2_box +-- Company : CoreTex Systems, LLC +-- +--------------------------------------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +ENTITY s2_box IS + port ( + A: IN std_logic_VECTOR(5 downto 0); + SPO: OUT std_logic_VECTOR(3 downto 0)); +END s2_box; + +architecture Behavioral of s2_box is + +begin + +SPO <= "1111" when A = x"0" else + "0011" when A = x"1" else + "0001" when A = x"2" else + "1101" when A = x"3" else + "1000" when A = x"4" else + "0100" when A = x"5" else + "1110" when A = x"6" else + "0111" when A = x"7" else + "0110" when A = x"8" else + "1111" when A = x"9" else + "1011" when A = x"A" else + "0010" when A = x"B" else + "0011" when A = x"C" else + "1000" when A = x"D" else + "0100" when A = x"E" else + "1110" when A = x"F" else + "1001" when A = x"10" else + "1100" when A = x"11" else + "0111" when A = x"12" else + "0000" when A = x"13" else + "0010" when A = x"14" else + "0001" when A = x"15" else + "1101" when A = x"16" else + "1010" when A = x"17" else + "1100" when A = x"18" else + "0110" when A = x"19" else + "0000" when A = x"1A" else + "1001" when A = x"1B" else + "0101" when A = x"1C" else + "1011" when A = x"1D" else + "1010" when A = x"1E" else + "0101" when A = x"1F" else + "0000" when A = x"20" else + "1101" when A = x"21" else + "1110" when A = x"22" else + "1000" when A = x"23" else + "0111" when A = x"24" else + "1010" when A = x"25" else + "1011" when A = x"26" else + "0001" when A = x"27" else + "1010" when A = x"28" else + "0011" when A = x"29" else + "0100" when A = x"2A" else + "1111" when A = x"2B" else + "1101" when A = x"2C" else + "0100" when A = x"2D" else + "0001" when A = x"2E" else + "0010" when A = x"2F" else + "0101" when A = x"30" else + "1011" when A = x"31" else + "1000" when A = x"32" else + "0110" when A = x"33" else + "1100" when A = x"34" else + "0111" when A = x"35" else + "0110" when A = x"36" else + "1100" when A = x"37" else + "1001" when A = x"38" else + "0000" when A = x"39" else + "0011" when A = x"3A" else + "0101" when A = x"3B" else + "0010" when A = x"3C" else + "1110" when A = x"3D" else + "1111" when A = x"3E" else + "1001" when A = x"3F" else + "1001"; + +END Behavioral; Index: 3des_vhdl/trunk/VHDL/s3_box.vhd =================================================================== --- 3des_vhdl/trunk/VHDL/s3_box.vhd (nonexistent) +++ 3des_vhdl/trunk/VHDL/s3_box.vhd (revision 4) @@ -0,0 +1,144 @@ +--------------------------------------------------------------------- +-- (c) Copyright 2006, CoreTex Systems, LLC -- +-- www.coretexsys.com -- +-- -- +-- This source file may be used and distributed without -- +-- restriction provided that this copyright statement is not -- +-- removed from the file and that any derivative work contains -- +-- the original copyright notice and the associated disclaimer. -- +-- -- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- +-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- +-- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- +-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- +-- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- +-- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- +-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- +-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- +-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- +-- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- +-- POSSIBILITY OF SUCH DAMAGE. -- +-- -- +--------------------------------------------------------------------- + +---------------------------------------------------------------------- + +-- Poject structure: + +-- |- tdes_top.vhd +-- | +-- |- des_cipher_top.vhd +-- |- des_top.vhd +-- |- block_top.vhd +-- |- add_key.vhd +-- | +-- |- add_left.vhd +-- | +-- |- e_expansion_function.vhd +-- | +-- |- p_box.vhd +-- | +-- |- s_box.vhd +-- |- s1_box.vhd +-- |- s2_box.vhd +-- |- s3_box.vhd +-- |- s4_box.vhd +-- |- s5_box.vhd +-- |- s6_box.vhd +-- |- s7_box.vhd +-- |- s8_box.vhd +-- |- key_schedule.vhd + +---------------------------------------------------------------------- + +--------------------------------------------------------------------------------------------------- +-- +-- Title : s3_box +-- Company : CoreTex Systems, LLC +-- +--------------------------------------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +ENTITY s3_box IS + port ( + A: IN std_logic_VECTOR(5 downto 0); + SPO: OUT std_logic_VECTOR(3 downto 0)); +END s3_box; + +architecture Behavioral of s3_box is + +begin + +SPO <= "1010" when A = x"0" else + "1101" when A = x"1" else + "0000" when A = x"2" else + "0111" when A = x"3" else + "1001" when A = x"4" else + "0000" when A = x"5" else + "1110" when A = x"6" else + "1001" when A = x"7" else + "0110" when A = x"8" else + "0011" when A = x"9" else + "0011" when A = x"A" else + "0100" when A = x"B" else + "1111" when A = x"C" else + "0110" when A = x"D" else + "0101" when A = x"E" else + "1010" when A = x"F" else + "0001" when A = x"10" else + "0010" when A = x"11" else + "1101" when A = x"12" else + "1000" when A = x"13" else + "1100" when A = x"14" else + "0101" when A = x"15" else + "0111" when A = x"16" else + "1110" when A = x"17" else + "1011" when A = x"18" else + "1100" when A = x"19" else + "0100" when A = x"1A" else + "1011" when A = x"1B" else + "0010" when A = x"1C" else + "1111" when A = x"1D" else + "1000" when A = x"1E" else + "0001" when A = x"1F" else + "1101" when A = x"20" else + "0001" when A = x"21" else + "0110" when A = x"22" else + "1010" when A = x"23" else + "0100" when A = x"24" else + "1101" when A = x"25" else + "1001" when A = x"26" else + "0000" when A = x"27" else + "1000" when A = x"28" else + "0110" when A = x"29" else + "1111" when A = x"2A" else + "1001" when A = x"2B" else + "0011" when A = x"2C" else + "1000" when A = x"2D" else + "0000" when A = x"2E" else + "0111" when A = x"2F" else + "1011" when A = x"30" else + "0100" when A = x"31" else + "0001" when A = x"32" else + "1111" when A = x"33" else + "0010" when A = x"34" else + "1110" when A = x"35" else + "1100" when A = x"36" else + "0011" when A = x"37" else + "0101" when A = x"38" else + "1011" when A = x"39" else + "1010" when A = x"3A" else + "0101" when A = x"3B" else + "1110" when A = x"3C" else + "0010" when A = x"3D" else + "0111" when A = x"3E" else + "1100" when A = x"3F" else + "1100"; + +END Behavioral; \ No newline at end of file Index: 3des_vhdl/trunk/VHDL/des_top.vhd =================================================================== --- 3des_vhdl/trunk/VHDL/des_top.vhd (nonexistent) +++ 3des_vhdl/trunk/VHDL/des_top.vhd (revision 4) @@ -0,0 +1,287 @@ +--------------------------------------------------------------------- +-- (c) Copyright 2006, CoreTex Systems, LLC -- +-- www.coretexsys.com -- +-- -- +-- This source file may be used and distributed without -- +-- restriction provided that this copyright statement is not -- +-- removed from the file and that any derivative work contains -- +-- the original copyright notice and the associated disclaimer. -- +-- -- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- +-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- +-- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- +-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- +-- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- +-- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- +-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- +-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- +-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- +-- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- +-- POSSIBILITY OF SUCH DAMAGE. -- +-- -- +--------------------------------------------------------------------- + +---------------------------------------------------------------------- + +-- Poject structure: + +-- |- tdes_top.vhd +-- | +-- |- des_cipher_top.vhd +-- |- des_top.vhd +-- |- block_top.vhd +-- |- add_key.vhd +-- | +-- |- add_left.vhd +-- | +-- |- e_expansion_function.vhd +-- | +-- |- p_box.vhd +-- | +-- |- s_box.vhd +-- |- s1_box.vhd +-- |- s2_box.vhd +-- |- s3_box.vhd +-- |- s4_box.vhd +-- |- s5_box.vhd +-- |- s6_box.vhd +-- |- s7_box.vhd +-- |- s8_box.vhd +-- |- key_schedule.vhd + +---------------------------------------------------------------------- +--------------------------------------------------------------------------------------------------- +-- +-- Title : des_top +-- Company : CoreTex Systems, LLC +-- +--------------------------------------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +entity des_top is +port ( + + -- input/output core signals + key_round_in: in std_logic_vector(0 to 47); + data_in: in std_logic_vector(0 to 63); + data_out: out std_logic_vector(0 to 63); + + -- signals for communication with key expander module + KeySelect: inout std_logic_vector(3 downto 0); -- selector for key + key_ready: in std_logic; -- active high when key is ready + data_ready: in std_logic; -- active high when data is ready + func_select: in std_logic; -- encryption/decryption flag + + des_out_rdy: out std_logic; -- active high when decrypted/encrypted data are ready + core_busy: out std_logic; -- active high when core is in process of encryption + + reset: in std_logic; -- master reset + clock: in std_logic -- master clock + ); +end des_top; + +architecture Behavioral of des_top is + +-- +-- BLOCK_TOP entity performs encryption/deccryption operation. It uses expaned key for that process +-- +component block_top is +port( + L_in: in std_logic_vector(0 to 31); -- left permuted input + R_in: in std_logic_vector(0 to 31); -- right permuted input + + L_out: out std_logic_vector(0 to 31); -- left permuted output + R_out: out std_logic_vector(0 to 31); -- right permuted output + + round_key_des: in std_logic_vector(0 to 47) -- current round key + + ); +end component; + +-- +-- Internal DES_TOP signals +-- +signal L_in_internal, R_in_internal: std_logic_vector(0 to 31); +signal L_out_internal, R_out_internal: std_logic_vector(0 to 31); +type statetype is (WaitKey, WaitData, InitialRound, RepeatRound, FinalRound); +signal nextstate: statetype; +signal RoundCounter: std_logic_vector(3 downto 0); + +begin + +-- +-- Finite state machine +-- +process (clock) +begin + if rising_edge(clock) then + if reset = '1' then + -- + -- Reset all signal to inital values + -- + nextstate <= WaitKey; + RoundCounter <= "0000"; + core_busy <= '0'; -- core is in reset state: not busy + des_out_rdy <= '0'; -- output data is not ready + + else + + case nextstate is + + -- + -- WaitKey: wait for key to be expanded + -- + when WaitKey => + + -- wait until key has been expanded + if key_ready = '0' then + nextstate <= WaitKey; + else + nextstate <= WaitData; + end if; + + core_busy <= '0'; -- core waits for the key: not busy + des_out_rdy <= '0'; -- output data is not ready + + -- + -- WaitData: waits for data until it is ready + -- + when WaitData => + + -- wait for data to be loaded in input registers + if (data_ready = '0') then + + nextstate <= WaitData; + + else + core_busy <= '1'; -- core is processing = busy + + L_in_internal <= data_in(57) & data_in(49) & data_in(41) & data_in(33) & data_in(25) & data_in(17) & + data_in(9) & data_in(1) & data_in(59) & data_in(51) & data_in(43) & data_in(35) & + data_in(27) & data_in(19) & data_in(11) & data_in(3) & data_in(61) & data_in(53) & + data_in(45) & data_in(37) & data_in(29) & data_in(21) & data_in(13) & data_in(5) & + data_in(63) & data_in(55) & data_in(47) & data_in(39) & data_in(31) & data_in(23) & + data_in(15) & data_in(7); + + R_in_internal <= data_in(56) & data_in(48) & data_in(40) & data_in(32) & data_in(24) & data_in(16) & + data_in(8) & data_in(0) & data_in(58) & data_in(50) & data_in(42) & data_in(34) & + data_in(26) & data_in(18) & data_in(10) & data_in(2) & data_in(60) & data_in(52) & + data_in(44) & data_in(36) & data_in(28) & data_in(20) & data_in(12) & data_in(4) & + data_in(62) & data_in(54) & data_in(46) & data_in(38) & data_in(30) & data_in(22) & + data_in(14) & data_in(6); + + nextstate <= InitialRound; + + -- function select (decrypting/encrypting) will determine key selection + if func_select = '1' then + KeySelect <= "0000"; + else + KeySelect <= "1111"; + end if; + + end if; + + -- + -- Initial State where input is equal to a block that we need to encode + -- + when InitialRound => + + L_in_internal <= L_out_internal; + R_in_internal <= R_out_internal; + + -- fuction select determines direction of key selection + if func_select = '1' then + KeySelect <= KeySelect + '1'; + else + KeySelect <= KeySelect - '1'; + end if; + + nextstate <= RepeatRound; + + -- + -- Repeat Section, where input is output from prevous state + -- + when RepeatRound => + + L_in_internal <= L_out_internal; + R_in_internal <= R_out_internal; + + -- fuction select determines direction of key selection + if func_select = '1' then + KeySelect <= KeySelect + '1'; + else + KeySelect <= KeySelect - '1'; + end if; + + RoundCounter <= RoundCounter + '1'; + + -- if finished with all rounds, go to the final round + if RoundCounter = x"E" then + + -- perform inverse initial permutation + data_out <= L_out_internal(7) & R_out_internal(7) & L_out_internal(15) & R_out_internal(15) & + L_out_internal(23) & R_out_internal(23) & L_out_internal(31) & R_out_internal(31) & + L_out_internal(6) & R_out_internal(6) & L_out_internal(14) & R_out_internal(14) & + L_out_internal(22) & R_out_internal(22) & L_out_internal(30) & R_out_internal(30) & + L_out_internal(5) & R_out_internal(5) & L_out_internal(13) & R_out_internal(13) & + L_out_internal(21) & R_out_internal(21) & L_out_internal(29) & R_out_internal(29) & + L_out_internal(4) & R_out_internal(4) & L_out_internal(12) & R_out_internal(12) & + L_out_internal(20) & R_out_internal(20) & L_out_internal(28) & R_out_internal(28) & + L_out_internal(3) & R_out_internal(3) & L_out_internal(11) & R_out_internal(11) & + L_out_internal(19) & R_out_internal(19) & L_out_internal(27) & R_out_internal(27) & + L_out_internal(2) & R_out_internal(2) & L_out_internal(10) & R_out_internal(10) & + L_out_internal(18) & R_out_internal(18) & L_out_internal(26) & R_out_internal(26) & + L_out_internal(1) & R_out_internal(1) & L_out_internal(9) & R_out_internal(9) & + L_out_internal(17) & R_out_internal(17) & L_out_internal(25) & R_out_internal(25) & + L_out_internal(0) & R_out_internal(0) & L_out_internal(8) & R_out_internal(8) & + L_out_internal(16) & R_out_internal(16) & L_out_internal(24) & R_out_internal(24); + + core_busy <= '0'; -- core is not busy + des_out_rdy <= '1'; -- output data is ready + nextstate <= FinalRound; + + else + + -- Continue with regular rounds + nextstate <= RepeatRound; + + end if; + + -- + -- Last round + -- + when FinalRound => + + RoundCounter <= "0000"; + nextstate <= WaitKey; + des_out_rdy <= '0'; -- deselect out data ready signal + + when others => + -- should never happen + end case; + end if; + end if; +end process; + +-- +-- Instantations +-- +BLOCKTOP: block_top +port map ( + L_in => L_in_internal, + R_in => R_in_internal, + + round_key_des => key_round_in, + + L_out => L_out_internal, + R_out => R_out_internal + +); + +end Behavioral; Index: 3des_vhdl/trunk/VHDL/s4_box.vhd =================================================================== --- 3des_vhdl/trunk/VHDL/s4_box.vhd (nonexistent) +++ 3des_vhdl/trunk/VHDL/s4_box.vhd (revision 4) @@ -0,0 +1,144 @@ +--------------------------------------------------------------------- +-- (c) Copyright 2006, CoreTex Systems, LLC -- +-- www.coretexsys.com -- +-- -- +-- This source file may be used and distributed without -- +-- restriction provided that this copyright statement is not -- +-- removed from the file and that any derivative work contains -- +-- the original copyright notice and the associated disclaimer. -- +-- -- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- +-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- +-- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- +-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- +-- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- +-- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- +-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- +-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- +-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- +-- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- +-- POSSIBILITY OF SUCH DAMAGE. -- +-- -- +--------------------------------------------------------------------- + +---------------------------------------------------------------------- + +-- Poject structure: + +-- |- tdes_top.vhd +-- | +-- |- des_cipher_top.vhd +-- |- des_top.vhd +-- |- block_top.vhd +-- |- add_key.vhd +-- | +-- |- add_left.vhd +-- | +-- |- e_expansion_function.vhd +-- | +-- |- p_box.vhd +-- | +-- |- s_box.vhd +-- |- s1_box.vhd +-- |- s2_box.vhd +-- |- s3_box.vhd +-- |- s4_box.vhd +-- |- s5_box.vhd +-- |- s6_box.vhd +-- |- s7_box.vhd +-- |- s8_box.vhd +-- |- key_schedule.vhd + +---------------------------------------------------------------------- + +--------------------------------------------------------------------------------------------------- +-- +-- Title : s4_box +-- Company : CoreTex Systems, LLC +-- +--------------------------------------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +ENTITY s4_box IS + port ( + A: IN std_logic_VECTOR(5 downto 0); + SPO: OUT std_logic_VECTOR(3 downto 0)); +END s4_box; + +architecture Behavioral of s4_box is + +begin + +SPO <= "0111" when A = x"0" else + "1101" when A = x"1" else + "1101" when A = x"2" else + "1000" when A = x"3" else + "1110" when A = x"4" else + "1011" when A = x"5" else + "0011" when A = x"6" else + "0101" when A = x"7" else + "0000" when A = x"8" else + "0110" when A = x"9" else + "0110" when A = x"A" else + "1111" when A = x"B" else + "1001" when A = x"C" else + "0000" when A = x"D" else + "1010" when A = x"E" else + "0011" when A = x"F" else + "0001" when A = x"10" else + "0100" when A = x"11" else + "0010" when A = x"12" else + "0111" when A = x"13" else + "1000" when A = x"14" else + "0010" when A = x"15" else + "0101" when A = x"16" else + "1100" when A = x"17" else + "1011" when A = x"18" else + "0001" when A = x"19" else + "1100" when A = x"1A" else + "1010" when A = x"1B" else + "0100" when A = x"1C" else + "1110" when A = x"1D" else + "1111" when A = x"1E" else + "1001" when A = x"1F" else + "1010" when A = x"20" else + "0011" when A = x"21" else + "0110" when A = x"22" else + "1111" when A = x"23" else + "1001" when A = x"24" else + "0000" when A = x"25" else + "0000" when A = x"26" else + "0110" when A = x"27" else + "1100" when A = x"28" else + "1010" when A = x"29" else + "1011" when A = x"2A" else + "0001" when A = x"2B" else + "0111" when A = x"2C" else + "1101" when A = x"2D" else + "1101" when A = x"2E" else + "1000" when A = x"2F" else + "1111" when A = x"30" else + "1001" when A = x"31" else + "0001" when A = x"32" else + "0100" when A = x"33" else + "0011" when A = x"34" else + "0101" when A = x"35" else + "1110" when A = x"36" else + "1011" when A = x"37" else + "0101" when A = x"38" else + "1100" when A = x"39" else + "0010" when A = x"3A" else + "0111" when A = x"3B" else + "1000" when A = x"3C" else + "0010" when A = x"3D" else + "0100" when A = x"3E" else + "1110" when A = x"3F" else + "1110"; + +END Behavioral; \ No newline at end of file Index: 3des_vhdl/trunk =================================================================== --- 3des_vhdl/trunk (nonexistent) +++ 3des_vhdl/trunk (revision 4)
3des_vhdl/trunk Property changes : Added: svn:mergeinfo ## -0,0 +0,0 ## Index: 3des_vhdl/web_uploads =================================================================== --- 3des_vhdl/web_uploads (nonexistent) +++ 3des_vhdl/web_uploads (revision 4)
3des_vhdl/web_uploads Property changes : Added: svn:mergeinfo ## -0,0 +0,0 ## Index: 3des_vhdl/branches =================================================================== --- 3des_vhdl/branches (nonexistent) +++ 3des_vhdl/branches (revision 4)
3des_vhdl/branches Property changes : Added: svn:mergeinfo ## -0,0 +0,0 ## Index: 3des_vhdl/tags =================================================================== --- 3des_vhdl/tags (nonexistent) +++ 3des_vhdl/tags (revision 4)
3des_vhdl/tags Property changes : Added: svn:mergeinfo ## -0,0 +0,0 ##

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.