-
Notifications
You must be signed in to change notification settings - Fork 1
/
AES.v.bak
141 lines (102 loc) · 3.14 KB
/
AES.v.bak
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
module AES(A,B,reset,clk,L1,L2,L3,H,T,O);
input A; //Selector 1 S0
input B; //Selector 2 S1
input reset;
input clk;
output reg L1; //Led 1 idication for 128
output reg L2; //Led 2 idication for 192
output reg L3; //Led 3 idication for 256
output [6:0] H; //Hundredths
output [6:0] T; //Tenths
output [6:0] O; //Ones
wire [127:0] indata = 128'h_00112233445566778899aabbccddeeff; //Input from document
wire [127:0] k1 = 128'h_000102030405060708090a0b0c0d0e0f; //128 from document
wire [191:0] k2 = 192'h_000102030405060708090a0b0c0d0e0f1011121314151617; //192 from document
wire [255:0] k3 = 256'h_000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f; //256 from document
wire [127:0] outfinal11; //Output of 128 Encryption
wire [127:0] outfinal12; //Output of 128 Decryption
wire [127:0] outfinal21; //Output of 192 Encryption
wire [127:0] outfinal22; //Output of 192 Decryption
wire [127:0] outfinal31; //Output of 256 Encryption
wire [127:0] outfinal32; //Output of 256 Decryption
reg [127:0] outfinal1; //Final Output for AES 128
reg [127:0] outfinal2; //Final Output for AES 192
reg [127:0] outfinal3; //Final Output for AES 256
reg [127:0] final; //Final Output ================> Put last 8 bits [7:0] in BCD #(BCD wihtout clk)
wire [11:0] bcd;
wire start11, start12, start21, start22, start31, start32;
//[HEX0,HEX1,HEX2,HEX3,HEX4,HEX5,HEX6]
bin2bcd mazen(final [7:0],bcd);
segment7 s1(bcd[11:8],H);
segment7 s2(bcd[7:4],T);
segment7 s3(bcd[3:0],O);
AES_Encrypt #(128,10,4)asv1(indata,k1,outfinal11,reset,clk,start11);
AES_Encrypt #(192,12,6)asv2(indata,k2,outfinal21,reset,clk,start21);
AES_Encrypt #(256,14,8)asv3(indata,k3,outfinal31,reset,clk,start31);
AES_Decrypt #(128,10,4)dasv1(outfinal11,k1,outfinal12,reset,clk,start12);
AES_Decrypt #(192,12,6)dasv2(outfinal21,k2,outfinal22,reset,clk,start22);
AES_Decrypt #(256,14,8)dasv3(outfinal31,k3,outfinal32,reset,clk,start32);
always @* begin //Sets Output for AES 128
if(outfinal12) begin
outfinal1<= outfinal12;
end
else if(outfinal11) begin
outfinal1<= outfinal11;
end
else begin
outfinal1<=indata;
end
//Sets Output for AES 192
if(outfinal22) begin
outfinal2<= outfinal22;
end
else if(outfinal21) begin
outfinal2<= outfinal21;
end
else begin
outfinal2<=indata;
end
//Sets Output for AES 256
if(outfinal32) begin
outfinal3<= outfinal32;
end
else if(outfinal31) begin
outfinal3<= outfinal31;
end
else begin
outfinal3<=indata;
end
//B A //0 0 -> AES 128 //0 1 -> AES 192 //1 0 -> AES 256 //(1 1 -> Indata) optional
if(!A && !B) begin
final<= outfinal1;
end
else if(A && !B) begin
final<= outfinal2;
end
else if(!A && B)begin
final<=outfinal3;
end
else if(A && B)begin
final<=indata;
end
//Checks if operation is done
if(outfinal1 == indata) begin
L1<=1;
end
else begin
L1<=0;
end
if(outfinal2 == indata) begin
L2<=1;
end
else begin
L2<=0;
end
if(outfinal3 == indata) begin
L3<=1;
end
else begin
L3<=0;
end
end
endmodule