OpenCores
URL https://opencores.org/ocsvn/tiny_aes/tiny_aes/trunk

Subversion Repositories tiny_aes

[/] [tiny_aes/] [trunk/] [rtl/] [aes_192.v] - Blame information for rev 6

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 6 homer.hsin
/*
2
 * Copyright 2012, Homer Hsing <homer.hsing@gmail.com>
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 * http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
 
17
module aes_192 (clk, state, key, out);
18
    input          clk;
19
    input  [127:0] state;
20
    input  [191:0] key;
21
    output [127:0] out;
22
    reg    [127:0] s0;
23
    reg    [191:0] k0;
24
    wire   [127:0] s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11;
25
    wire   [191:0] k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11;
26
    wire   [127:0] k0b, k1b, k2b, k3b, k4b, k5b, k6b, k7b, k8b, k9b, k10b, k11b;
27
 
28
    always @ (posedge clk)
29
      begin
30
        s0 <= state ^ key[191:64];
31
        k0 <= key;
32
      end
33
 
34
    expand_key_type_D_192  a0 (clk, k0, 8'h1,   k1,  k0b);
35
    expand_key_type_B_192  a1 (clk, k1,         k2,  k1b);
36
    expand_key_type_A_192  a2 (clk, k2, 8'h2,   k3,  k2b);
37
    expand_key_type_C_192  a3 (clk, k3, 8'h4,   k4,  k3b);
38
    expand_key_type_B_192  a4 (clk, k4,         k5,  k4b);
39
    expand_key_type_A_192  a5 (clk, k5, 8'h8,   k6,  k5b);
40
    expand_key_type_C_192  a6 (clk, k6, 8'h10,  k7,  k6b);
41
    expand_key_type_B_192  a7 (clk, k7,         k8,  k7b);
42
    expand_key_type_A_192  a8 (clk, k8, 8'h20,  k9,  k8b);
43
    expand_key_type_C_192  a9 (clk, k9, 8'h40, k10,  k9b);
44
    expand_key_type_B_192 a10 (clk,k10,        k11, k10b);
45
    expand_key_type_A_192 a11 (clk,k11, 8'h80,    , k11b);
46
 
47
    one_round
48
         r1 (clk, s0, k0b, s1),
49
         r2 (clk, s1, k1b, s2),
50
         r3 (clk, s2, k2b, s3),
51
         r4 (clk, s3, k3b, s4),
52
         r5 (clk, s4, k4b, s5),
53
         r6 (clk, s5, k5b, s6),
54
         r7 (clk, s6, k6b, s7),
55
         r8 (clk, s7, k7b, s8),
56
         r9 (clk, s8, k8b, s9),
57
        r10 (clk, s9, k9b, s10),
58
        r11 (clk, s10, k10b, s11);
59
 
60
    final_round
61
        rf (clk, s11, k11b, out);
62
endmodule
63
 
64
/* expand k0,k1,k2,k3 for every two clock cycles */
65
module expand_key_type_A_192 (clk, in, rcon, out_1, out_2);
66
    input              clk;
67
    input      [191:0] in;
68
    input      [7:0]   rcon;
69
    output reg [191:0] out_1;
70
    output     [127:0] out_2;
71
    wire       [31:0]  k0, k1, k2, k3, k4, k5,
72
                       v0, v1, v2, v3;
73
    reg        [31:0]  k0a, k1a, k2a, k3a, k4a, k5a;
74
    wire       [31:0]  k0b, k1b, k2b, k3b, k4b, k5b, k6a;
75
 
76
    assign {k0, k1, k2, k3, k4, k5} = in;
77
 
78
    assign v0 = {k0[31:24] ^ rcon, k0[23:0]};
79
    assign v1 = v0 ^ k1;
80
    assign v2 = v1 ^ k2;
81
    assign v3 = v2 ^ k3;
82
 
83
    always @ (posedge clk)
84
        {k0a, k1a, k2a, k3a, k4a, k5a} <= {v0, v1, v2, v3, k4, k5};
85
 
86
    S4
87
        S4_0 (clk, {k5[23:0], k5[31:24]}, k6a);
88
 
89
    assign k0b = k0a ^ k6a;
90
    assign k1b = k1a ^ k6a;
91
    assign k2b = k2a ^ k6a;
92
    assign k3b = k3a ^ k6a;
93
    assign {k4b, k5b} = {k4a, k5a};
94
 
95
    always @ (posedge clk)
96
        out_1 <= {k0b, k1b, k2b, k3b, k4b, k5b};
97
 
98
    assign out_2 = {k0b, k1b, k2b, k3b};
99
endmodule
100
 
101
/* expand k2,k3,k4,k5 for every two clock cycles */
102
module expand_key_type_B_192 (clk, in, out_1, out_2);
103
    input              clk;
104
    input      [191:0] in;
105
    output reg [191:0] out_1;
106
    output     [127:0] out_2;
107
    wire       [31:0]  k0, k1, k2, k3, k4, k5,
108
                       v2, v3, v4, v5;
109
    reg        [31:0]  k0a, k1a, k2a, k3a, k4a, k5a;
110
 
111
    assign {k0, k1, k2, k3, k4, k5} = in;
112
 
113
    assign v2 = k1 ^ k2;
114
    assign v3 = v2 ^ k3;
115
    assign v4 = v3 ^ k4;
116
    assign v5 = v4 ^ k5;
117
 
118
    always @ (posedge clk)
119
        {k0a, k1a, k2a, k3a, k4a, k5a} <= {k0, k1, v2, v3, v4, v5};
120
 
121
    always @ (posedge clk)
122
        out_1 <= {k0a, k1a, k2a, k3a, k4a, k5a};
123
 
124
    assign out_2 = {k2a, k3a, k4a, k5a};
125
endmodule
126
 
127
/* expand k0,k1,k4,k5 for every two clock cycles */
128
module expand_key_type_C_192 (clk, in, rcon, out_1, out_2);
129
    input              clk;
130
    input      [191:0] in;
131
    input      [7:0]   rcon;
132
    output reg [191:0] out_1;
133
    output     [127:0] out_2;
134
    wire       [31:0]  k0, k1, k2, k3, k4, k5,
135
                       v4, v5, v0, v1;
136
    reg        [31:0]  k0a, k1a, k2a, k3a, k4a, k5a;
137
    wire       [31:0]  k0b, k1b, k2b, k3b, k4b, k5b, k6a;
138
 
139
    assign {k0, k1, k2, k3, k4, k5} = in;
140
 
141
    assign v4 = k3 ^ k4;
142
    assign v5 = v4 ^ k5;
143
    assign v0 = {k0[31:24] ^ rcon, k0[23:0]};
144
    assign v1 = v0 ^ k1;
145
 
146
    always @ (posedge clk)
147
        {k0a, k1a, k2a, k3a, k4a, k5a} <= {v0, v1, k2, k3, v4, v5};
148
 
149
    S4
150
        S4_0 (clk, {v5[23:0], v5[31:24]}, k6a);
151
 
152
    assign k0b = k0a ^ k6a;
153
    assign k1b = k1a ^ k6a;
154
    assign {k2b, k3b, k4b, k5b} = {k2a, k3a, k4a, k5a};
155
 
156
    always @ (posedge clk)
157
        out_1 <= {k0b, k1b, k2b, k3b, k4b, k5b};
158
 
159
    assign out_2 = {k4b, k5b, k0b, k1b};
160
endmodule
161
 
162
/* expand k0,k1 for every two clock cycles */
163
module expand_key_type_D_192 (clk, in, rcon, out_1, out_2);
164
    input              clk;
165
    input      [191:0] in;
166
    input      [7:0]   rcon;
167
    output reg [191:0] out_1;
168
    output     [127:0] out_2;
169
    wire       [31:0]  k0, k1, k2, k3, k4, k5,
170
                       v0, v1;
171
    reg        [31:0]  k0a, k1a, k2a, k3a, k4a, k5a;
172
    wire       [31:0]  k0b, k1b, k2b, k3b, k4b, k5b, k6a;
173
 
174
    assign {k0, k1, k2, k3, k4, k5} = in;
175
 
176
    assign v0 = {k0[31:24] ^ rcon, k0[23:0]};
177
    assign v1 = v0 ^ k1;
178
 
179
    always @ (posedge clk)
180
        {k0a, k1a, k2a, k3a, k4a, k5a} <= {v0, v1, k2, k3, k4, k5};
181
 
182
    S4
183
        S4_0 (clk, {k5[23:0], k5[31:24]}, k6a);
184
 
185
    assign k0b = k0a ^ k6a;
186
    assign k1b = k1a ^ k6a;
187
    assign {k2b, k3b, k4b, k5b} = {k2a, k3a, k4a, k5a};
188
 
189
    always @ (posedge clk)
190
        out_1 <= {k0b, k1b, k2b, k3b, k4b, k5b};
191
 
192
    assign out_2 = {k4b, k5b, k0b, k1b};
193
endmodule

powered by: WebSVN 2.1.0

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