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

Subversion Repositories 3des_vhdl

[/] [3des_vhdl/] [trunk/] [VHDL/] [key_schedule.vhd] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dsocek
---------------------------------------------------------------------
2
--                              (c) Copyright 2006, CoreTex Systems, LLC                                         --
3
--                                 www.coretexsys.com                        --    
4
--                                                                       --
5
--              This source file may be used and distributed without         --
6
--              restriction provided that this copyright statement is not    --
7
--              removed from the file and that any derivative work contains  --
8
--              the original copyright notice and the associated disclaimer. --
9
--                                                                       --
10
--                  THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY      --
11
--              EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED    --
12
--              TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS    --
13
--              FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR       --
14
--              OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,          --
15
--              INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES     --
16
--              (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE    --
17
--              GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR         --
18
--              BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF   --
19
--              LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT   --
20
--              (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT   --
21
--              OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE          --
22
--              POSSIBILITY OF SUCH DAMAGE.                                  --
23
--                                                                                                                                                                               --
24
---------------------------------------------------------------------
25
 
26
----------------------------------------------------------------------
27
 
28
-- Poject structure: 
29
 
30
--  |- tdes_top.vhd
31
--  |
32
--    |- des_cipher_top.vhd
33
--    |- des_top.vhd
34
--      |- block_top.vhd
35
--        |- add_key.vhd
36
--        |
37
--        |- add_left.vhd
38
--        |
39
--                              |- e_expansion_function.vhd
40
--                              |
41
--                              |- p_box.vhd
42
--                              |
43
--                              |- s_box.vhd
44
--            |- s1_box.vhd
45
--            |- s2_box.vhd
46
--            |- s3_box.vhd
47
--            |- s4_box.vhd
48
--            |- s5_box.vhd
49
--            |- s6_box.vhd
50
--            |- s7_box.vhd
51
--            |- s8_box.vhd
52
--    |- key_schedule.vhd
53
 
54
----------------------------------------------------------------------
55
 
56
---------------------------------------------------------------------------------------------------
57
--
58
-- Title       : key_schedule
59
-- Company     : CoreTex Systems, LLC
60
--
61
---------------------------------------------------------------------------------------------------
62
 
63
library IEEE;
64
use IEEE.STD_LOGIC_1164.ALL;
65
use IEEE.STD_LOGIC_ARITH.ALL;
66
use IEEE.STD_LOGIC_UNSIGNED.ALL;
67
 
68
entity key_schedule is
69
port (
70
 
71
                key_in:                 in std_logic_vector(0 to 63);            -- key to be expanded
72
 
73
                -- interface signals for communication with DES 
74
                KeySelect:              in std_logic_vector(3 downto 0); -- selector for key
75
        key_out:                out std_logic_vector(0 to 47);   -- expaned key output
76
                key_ready:              out std_logic;                                                  -- signal for DES that key has been expanded
77
 
78
                reset:                  in std_logic;                                                   -- reset
79
                clock:                  in std_logic                                                    -- master clock
80
                );
81
end key_schedule;
82
 
83
architecture Behavioral of key_schedule is
84
 
85
--
86
-- Storage for expanded key 
87
--
88
signal K16, K1:  std_logic_vector(0 to 47);
89
signal K2,  K3:  std_logic_vector(0 to 47);
90
signal K4,  K5:  std_logic_vector(0 to 47);
91
signal K6,  K7:  std_logic_vector(0 to 47);
92
signal K8,  K9:  std_logic_vector(0 to 47);
93
signal K10, K11: std_logic_vector(0 to 47);
94
signal K12, K13: std_logic_vector(0 to 47);
95
signal K14, K15: std_logic_vector(0 to 47);
96
 
97
begin
98
 
99
 
100
--
101
-- Selector for expaned key
102
--
103
key_out <=      K1      when    KeySelect = x"0" else
104
                                K2      when    KeySelect = x"1" else
105
                                K3      when    KeySelect = x"2" else
106
                                K4      when    KeySelect = x"3" else
107
                                K5      when    KeySelect = x"4" else
108
                                K6      when    KeySelect = x"5" else
109
                                K7      when    KeySelect = x"6" else
110
                                K8      when    KeySelect = x"7" else
111
                                K9      when    KeySelect = x"8" else
112
                                K10     when    KeySelect = x"9" else
113
                                K11     when    KeySelect = x"A" else
114
                                K12     when    KeySelect = x"B" else
115
                                K13     when    KeySelect = x"C" else
116
                                K14     when    KeySelect = x"D" else
117
                                K15     when    KeySelect = x"E" else
118
                                K16;
119
 
120
process (clock)
121
begin
122
 
123
--
124
-- input key will expaned and stored after rising edge of the first clock after mater reset.  
125
-- the keys are captured at a triple-des level
126
--
127
if rising_edge(clock) then
128
 
129
        if reset = '1' then
130
                key_ready <= '0';
131
        else
132
 
133
                --
134
                -- key expansion from the input key
135
                --
136
                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) &
137
                                key_in(1) & key_in(8) & key_in(18) & key_in(41) & key_in(2) & key_in(34) & key_in(25) & key_in(24) &
138
                                key_in(43) & key_in(57) & key_in(58) & key_in(0) & key_in(35) & key_in(26) & key_in(17) & key_in(40) &
139
                                key_in(21) & key_in(27) & key_in(38) & key_in(53) & key_in(36) & key_in(3) & key_in(46) & key_in(29) &
140
                                key_in(4) & key_in(52) & key_in(22) & key_in(28) & key_in(60) & key_in(20) & key_in(37) & key_in(62) &
141
                                key_in(14) & key_in(19) & key_in(44) & key_in(13) & key_in(12) & key_in(61) & key_in(54) & key_in(30);
142
 
143
                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) &
144
                                key_in(58) & key_in(0) & key_in(10) & key_in(33) & key_in(59) & key_in(26) & key_in(17) & key_in(16) &
145
                                key_in(35) & key_in(49) & key_in(50) & key_in(57) & key_in(56) & key_in(18) & key_in(9) & key_in(32) &
146
                                key_in(13) & key_in(19) & key_in(30) & key_in(45) & key_in(28) & key_in(62) & key_in(38) & key_in(21) &
147
                                key_in(27) & key_in(44) & key_in(14) & key_in(20) & key_in(52) & key_in(12) & key_in(29) & key_in(54) &
148
                                key_in(6) & key_in(11) & key_in(36) & key_in(5) & key_in(4) & key_in(53) & key_in(46) & key_in(22);
149
 
150
                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) &
151
                                key_in(42) & key_in(49) & key_in(59) & key_in(17) & key_in(43) & key_in(10) & key_in(1) & key_in(0) &
152
                                key_in(48) & key_in(33) & key_in(34) & key_in(41) & key_in(40) & key_in(2) & key_in(58) & key_in(16) &
153
                                key_in(60) & key_in(3) & key_in(14) & key_in(29) & key_in(12) & key_in(46) & key_in(22) & key_in(5) &
154
                                key_in(11) & key_in(28) & key_in(61) & key_in(4) & key_in(36) & key_in(27) & key_in(13) & key_in(38) &
155
                                key_in(53) & key_in(62) & key_in(20) & key_in(52) & key_in(19) & key_in(37) & key_in(30) & key_in(6);
156
 
157
                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) &
158
                                key_in(26) & key_in(33) & key_in(43) & key_in(1) & key_in(56) & key_in(59) & key_in(50) & key_in(49) &
159
                                key_in(32) & key_in(17) & key_in(18) & key_in(25) & key_in(24) & key_in(51) & key_in(42) & key_in(0) &
160
                                key_in(44) & key_in(54) & key_in(61) & key_in(13) & key_in(27) & key_in(30) & key_in(6) & key_in(52) &
161
                                key_in(62) & key_in(12) & key_in(45) & key_in(19) & key_in(20) & key_in(11) & key_in(60) & key_in(22) &
162
                                key_in(37) & key_in(46) & key_in(4) & key_in(36) & key_in(3) & key_in(21) & key_in(14) & key_in(53);
163
 
164
                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) &
165
                                key_in(10) & key_in(17) & key_in(56) & key_in(50) & key_in(40) & key_in(43) & key_in(34) & key_in(33) &
166
                                key_in(16) & key_in(1) & key_in(2) & key_in(9) & key_in(8) & key_in(35) & key_in(26) & key_in(49) &
167
                                key_in(28) & key_in(38) & key_in(45) & key_in(60) & key_in(11) & key_in(14) & key_in(53) & key_in(36) &
168
                                key_in(46) & key_in(27) & key_in(29) & key_in(3) & key_in(4) & key_in(62) & key_in(44) & key_in(6) &
169
                                key_in(21) & key_in(30) & key_in(19) & key_in(20) & key_in(54) & key_in(5) & key_in(61) & key_in(37);
170
 
171
                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) &
172
                                key_in(59) & key_in(1) & key_in(40) & key_in(34) & key_in(24) & key_in(56) & key_in(18) & key_in(17) &
173
                                key_in(0) & key_in(50) & key_in(51) & key_in(58) & key_in(57) & key_in(48) & key_in(10) & key_in(33) &
174
                                key_in(12) & key_in(22) & key_in(29) & key_in(44) & key_in(62) & key_in(61) & key_in(37) & key_in(20) &
175
                                key_in(30) & key_in(11) & key_in(13) & key_in(54) & key_in(19) & key_in(46) & key_in(28) & key_in(53) &
176
                                key_in(5) & key_in(14) & key_in(3) & key_in(4) & key_in(38) & key_in(52) & key_in(45) & key_in(21);
177
 
178
                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) &
179
                                key_in(43) & key_in(50) & key_in(24) & key_in(18) & key_in(8) & key_in(40) & key_in(2) & key_in(1) &
180
                                key_in(49) & key_in(34) & key_in(35) & key_in(42) & key_in(41) & key_in(32) & key_in(59) & key_in(17) &
181
                                key_in(27) & key_in(6) & key_in(13) & key_in(28) & key_in(46) & key_in(45) & key_in(21) & key_in(4) &
182
                                key_in(14) & key_in(62) & key_in(60) & key_in(38) & key_in(3) & key_in(30) & key_in(12) & key_in(37) &
183
                                key_in(52) & key_in(61) & key_in(54) & key_in(19) & key_in(22) & key_in(36) & key_in(29) & key_in(5);
184
 
185
                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) &
186
                                key_in(56) & key_in(34) & key_in(8) & key_in(2) & key_in(57) & key_in(24) & key_in(51) & key_in(50) &
187
                                key_in(33) & key_in(18) & key_in(48) & key_in(26) & key_in(25) & key_in(16) & key_in(43) & key_in(1) &
188
                                key_in(11) & key_in(53) & key_in(60) & key_in(12) & key_in(30) & key_in(29) & key_in(5) & key_in(19) &
189
                                key_in(61) & key_in(46) & key_in(44) & key_in(22) & key_in(54) & key_in(14) & key_in(27) & key_in(21) &
190
                                key_in(36) & key_in(45) & key_in(38) & key_in(3) & key_in(6) & key_in(20) & key_in(13) & key_in(52);
191
 
192
                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) &
193
                                key_in(48) & key_in(26) & key_in(0) & key_in(59) & key_in(49) & key_in(16) & key_in(43) & key_in(42) &
194
                                key_in(25) & key_in(10) & key_in(40) & key_in(18) & key_in(17) & key_in(8) & key_in(35) & key_in(58) &
195
                                key_in(3) & key_in(45) & key_in(52) & key_in(4) & key_in(22) & key_in(21) & key_in(60) & key_in(11) &
196
                                key_in(53) & key_in(38) & key_in(36) & key_in(14) & key_in(46) & key_in(6) & key_in(19) & key_in(13) &
197
                                key_in(28) & key_in(37) & key_in(30) & key_in(62) & key_in(61) & key_in(12) & key_in(5) & key_in(44);
198
 
199
                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) &
200
                                key_in(32) & key_in(10) & key_in(49) & key_in(43) & key_in(33) & key_in(0) & key_in(56) & key_in(26) &
201
                                key_in(9) & key_in(59) & key_in(24) & key_in(2) & key_in(1) & key_in(57) & key_in(48) & key_in(42) &
202
                                key_in(54) & key_in(29) & key_in(36) & key_in(19) & key_in(6) & key_in(5) & key_in(44) & key_in(62) &
203
                                key_in(37) & key_in(22) & key_in(20) & key_in(61) & key_in(30) & key_in(53) & key_in(3) & key_in(60) &
204
                                key_in(12) & key_in(21) & key_in(14) & key_in(46) & key_in(45) & key_in(27) & key_in(52) & key_in(28);
205
 
206
                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) &
207
                                key_in(16) & key_in(59) & key_in(33) & key_in(56) & key_in(17) & key_in(49) & key_in(40) & key_in(10) &
208
                                key_in(58) & key_in(43) & key_in(8) & key_in(51) & key_in(50) & key_in(41) & key_in(32) & key_in(26) &
209
                                key_in(38) & key_in(13) & key_in(20) & key_in(3) & key_in(53) & key_in(52) & key_in(28) & key_in(46) &
210
                                key_in(21) & key_in(6) & key_in(4) & key_in(45) & key_in(14) & key_in(37) & key_in(54) & key_in(44) &
211
                                key_in(27) & key_in(5) & key_in(61) & key_in(30) & key_in(29) & key_in(11) & key_in(36) & key_in(12);
212
 
213
                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) &
214
                                key_in(0) & key_in(43) & key_in(17) & key_in(40) & key_in(1) & key_in(33) & key_in(24) & key_in(59) &
215
                                key_in(42) & key_in(56) & key_in(57) & key_in(35) & key_in(34) & key_in(25) & key_in(16) & key_in(10) &
216
                                key_in(22) & key_in(60) & key_in(4) & key_in(54) & key_in(37) & key_in(36) & key_in(12) & key_in(30) &
217
                                key_in(5) & key_in(53) & key_in(19) & key_in(29) & key_in(61) & key_in(21) & key_in(38) & key_in(28) &
218
                                key_in(11) & key_in(52) & key_in(45) & key_in(14) & key_in(13) & key_in(62) & key_in(20) & key_in(27);
219
 
220
                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) &
221
                                key_in(49) & key_in(56) & key_in(1) & key_in(24) & key_in(50) & key_in(17) & key_in(8) & key_in(43) &
222
                                key_in(26) & key_in(40) & key_in(41) & key_in(48) & key_in(18) & key_in(9) & key_in(0) & key_in(59) &
223
                                key_in(6) & key_in(44) & key_in(19) & key_in(38) & key_in(21) & key_in(20) & key_in(27) & key_in(14) &
224
                                key_in(52) & key_in(37) & key_in(3) & key_in(13) & key_in(45) & key_in(5) & key_in(22) & key_in(12) &
225
                                key_in(62) & key_in(36) & key_in(29) & key_in(61) & key_in(60) & key_in(46) & key_in(4) & key_in(11);
226
 
227
                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) &
228
                                key_in(33) & key_in(40) & key_in(50) & key_in(8) & key_in(34) & key_in(1) & key_in(57) & key_in(56) &
229
                                key_in(10) & key_in(24) & key_in(25) & key_in(32) & key_in(2) & key_in(58) & key_in(49) & key_in(43) &
230
                                key_in(53) & key_in(28) & key_in(3) & key_in(22) & key_in(5) & key_in(4) & key_in(11) & key_in(61) &
231
                                key_in(36) & key_in(21) & key_in(54) & key_in(60) & key_in(29) & key_in(52) & key_in(6) & key_in(27) &
232
                                key_in(46) & key_in(20) & key_in(13) & key_in(45) & key_in(44) & key_in(30) & key_in(19) & key_in(62);
233
 
234
                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) &
235
                                key_in(17) & key_in(24) & key_in(34) & key_in(57) & key_in(18) & key_in(50) & key_in(41) & key_in(40) &
236
                                key_in(59) & key_in(8) & key_in(9) & key_in(16) & key_in(51) & key_in(42) & key_in(33) & key_in(56) &
237
                                key_in(37) & key_in(12) & key_in(54) & key_in(6) & key_in(52) & key_in(19) & key_in(62) & key_in(45) &
238
                                key_in(20) & key_in(5) & key_in(38) & key_in(44) & key_in(13) & key_in(36) & key_in(53) & key_in(11) &
239
                                key_in(30) & key_in(4) & key_in(60) & key_in(29) & key_in(28) & key_in(14) & key_in(3) & key_in(46);
240
 
241
                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) &
242
                                key_in(9) & key_in(16) & key_in(26) & key_in(49) & key_in(10) & key_in(42) & key_in(33) & key_in(32) &
243
                                key_in(51) & key_in(0) & key_in(1) & key_in(8) & key_in(43) & key_in(34) & key_in(25) & key_in(48) &
244
                                key_in(29) & key_in(4) & key_in(46) & key_in(61) & key_in(44) & key_in(11) & key_in(54) & key_in(37) &
245
                                key_in(12) & key_in(60) & key_in(30) & key_in(36) & key_in(5) & key_in(28) & key_in(45) & key_in(3) &
246
                                key_in(22) & key_in(27) & key_in(52) & key_in(21) & key_in(20) & key_in(6) & key_in(62) & key_in(38);
247
 
248
                key_ready <= '1';
249
 
250
        end if;
251
 
252
end if;
253
end process;
254
 
255
 
256
end Behavioral;

powered by: WebSVN 2.1.0

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