1 |
5 |
fanatid |
module gost89_pipelined_ecb_encrypt(
|
2 |
|
|
input clk,
|
3 |
|
|
input [511:0] sbox,
|
4 |
|
|
input [255:0] key,
|
5 |
|
|
input [63:0] in,
|
6 |
|
|
output [63:0] out
|
7 |
|
|
);
|
8 |
|
|
reg [31:0] n1[31:0], n2[31:0];
|
9 |
|
|
wire [31:0] out1[31:0], out2[31:0];
|
10 |
|
|
|
11 |
|
|
always @(posedge clk) begin
|
12 |
|
|
n1[0] <= in[63:32]; n2[0] <= in[31:0];
|
13 |
|
|
n1[1] <= out1[0]; n2[1] <= out2[0];
|
14 |
|
|
n1[2] <= out1[1]; n2[2] <= out2[1];
|
15 |
|
|
n1[3] <= out1[2]; n2[3] <= out2[2];
|
16 |
|
|
n1[4] <= out1[3]; n2[4] <= out2[3];
|
17 |
|
|
n1[5] <= out1[4]; n2[5] <= out2[4];
|
18 |
|
|
n1[6] <= out1[5]; n2[6] <= out2[5];
|
19 |
|
|
n1[7] <= out1[6]; n2[7] <= out2[6];
|
20 |
|
|
n1[8] <= out1[7]; n2[8] <= out2[7];
|
21 |
|
|
n1[9] <= out1[8]; n2[9] <= out2[8];
|
22 |
|
|
n1[10] <= out1[9]; n2[10] <= out2[9];
|
23 |
|
|
n1[11] <= out1[10]; n2[11] <= out2[10];
|
24 |
|
|
n1[12] <= out1[11]; n2[12] <= out2[11];
|
25 |
|
|
n1[13] <= out1[12]; n2[13] <= out2[12];
|
26 |
|
|
n1[14] <= out1[13]; n2[14] <= out2[13];
|
27 |
|
|
n1[15] <= out1[14]; n2[15] <= out2[14];
|
28 |
|
|
n1[16] <= out1[15]; n2[16] <= out2[15];
|
29 |
|
|
n1[17] <= out1[16]; n2[17] <= out2[16];
|
30 |
|
|
n1[18] <= out1[17]; n2[18] <= out2[17];
|
31 |
|
|
n1[19] <= out1[18]; n2[19] <= out2[18];
|
32 |
|
|
n1[20] <= out1[19]; n2[20] <= out2[19];
|
33 |
|
|
n1[21] <= out1[20]; n2[21] <= out2[20];
|
34 |
|
|
n1[22] <= out1[21]; n2[22] <= out2[21];
|
35 |
|
|
n1[23] <= out1[22]; n2[23] <= out2[22];
|
36 |
|
|
n1[24] <= out1[23]; n2[24] <= out2[23];
|
37 |
|
|
n1[25] <= out1[24]; n2[25] <= out2[24];
|
38 |
|
|
n1[26] <= out1[25]; n2[26] <= out2[25];
|
39 |
|
|
n1[27] <= out1[26]; n2[27] <= out2[26];
|
40 |
|
|
n1[28] <= out1[27]; n2[28] <= out2[27];
|
41 |
|
|
n1[29] <= out1[28]; n2[29] <= out2[28];
|
42 |
|
|
n1[30] <= out1[29]; n2[30] <= out2[29];
|
43 |
|
|
n1[31] <= out1[30]; n2[31] <= out2[30];
|
44 |
|
|
end
|
45 |
|
|
|
46 |
|
|
gost89_round
|
47 |
|
|
r1 (clk, sbox, key[255:224], n1[0], n2[0], out1[0], out2[0]),
|
48 |
|
|
r2 (clk, sbox, key[223:192], n1[1], n2[1], out1[1], out2[1]),
|
49 |
|
|
r3 (clk, sbox, key[191:160], n1[2], n2[2], out1[2], out2[2]),
|
50 |
|
|
r4 (clk, sbox, key[159:128], n1[3], n2[3], out1[3], out2[3]),
|
51 |
|
|
r5 (clk, sbox, key[127:96], n1[4], n2[4], out1[4], out2[4]),
|
52 |
|
|
r6 (clk, sbox, key[95:64], n1[5], n2[5], out1[5], out2[5]),
|
53 |
|
|
r7 (clk, sbox, key[63:32], n1[6], n2[6], out1[6], out2[6]),
|
54 |
|
|
r8 (clk, sbox, key[31:0], n1[7], n2[7], out1[7], out2[7]),
|
55 |
|
|
r9 (clk, sbox, key[255:224], n1[8], n2[8], out1[8], out2[8]),
|
56 |
|
|
r10(clk, sbox, key[223:192], n1[9], n2[9], out1[9], out2[9]),
|
57 |
|
|
r11(clk, sbox, key[191:160], n1[10], n2[10], out1[10], out2[10]),
|
58 |
|
|
r12(clk, sbox, key[159:128], n1[11], n2[11], out1[11], out2[11]),
|
59 |
|
|
r13(clk, sbox, key[127:96], n1[12], n2[12], out1[12], out2[12]),
|
60 |
|
|
r14(clk, sbox, key[95:64], n1[13], n2[13], out1[13], out2[13]),
|
61 |
|
|
r15(clk, sbox, key[63:32], n1[14], n2[14], out1[14], out2[14]),
|
62 |
|
|
r16(clk, sbox, key[31:0], n1[15], n2[15], out1[15], out2[15]),
|
63 |
|
|
r17(clk, sbox, key[255:224], n1[16], n2[16], out1[16], out2[16]),
|
64 |
|
|
r18(clk, sbox, key[223:192], n1[17], n2[17], out1[17], out2[17]),
|
65 |
|
|
r19(clk, sbox, key[191:160], n1[18], n2[18], out1[18], out2[18]),
|
66 |
|
|
r20(clk, sbox, key[159:128], n1[19], n2[19], out1[19], out2[19]),
|
67 |
|
|
r21(clk, sbox, key[127:96], n1[20], n2[20], out1[20], out2[20]),
|
68 |
|
|
r22(clk, sbox, key[95:64], n1[21], n2[21], out1[21], out2[21]),
|
69 |
|
|
r23(clk, sbox, key[63:32], n1[22], n2[22], out1[22], out2[22]),
|
70 |
|
|
r24(clk, sbox, key[31:0], n1[23], n2[23], out1[23], out2[23]),
|
71 |
|
|
r25(clk, sbox, key[31:0], n1[24], n2[24], out1[24], out2[24]),
|
72 |
|
|
r26(clk, sbox, key[63:32], n1[25], n2[25], out1[25], out2[25]),
|
73 |
|
|
r27(clk, sbox, key[95:64], n1[26], n2[26], out1[26], out2[26]),
|
74 |
|
|
r28(clk, sbox, key[127:96], n1[27], n2[27], out1[27], out2[27]),
|
75 |
|
|
r29(clk, sbox, key[159:128], n1[28], n2[28], out1[28], out2[28]),
|
76 |
|
|
r30(clk, sbox, key[191:160], n1[29], n2[29], out1[29], out2[29]),
|
77 |
|
|
r31(clk, sbox, key[223:192], n1[30], n2[30], out1[30], out2[30]),
|
78 |
|
|
r32(clk, sbox, key[255:224], n1[31], n2[31], out1[31], out2[31]);
|
79 |
|
|
|
80 |
|
|
assign out[31:0] = out1[31];
|
81 |
|
|
assign out[63:32] = out2[31];
|
82 |
|
|
endmodule
|
83 |
|
|
|
84 |
|
|
module gost89_pipelined_ecb_decrypt(
|
85 |
|
|
input clk,
|
86 |
|
|
input [511:0] sbox,
|
87 |
|
|
input [255:0] key,
|
88 |
|
|
input [63:0] in,
|
89 |
|
|
output [63:0] out
|
90 |
|
|
);
|
91 |
|
|
reg [31:0] n1[31:0], n2[31:0];
|
92 |
|
|
wire [31:0] out1[31:0], out2[31:0];
|
93 |
|
|
|
94 |
|
|
always @(posedge clk) begin
|
95 |
|
|
n1[0] <= in[63:32]; n2[0] <= in[31:0];
|
96 |
|
|
n1[1] <= out1[0]; n2[1] <= out2[0];
|
97 |
|
|
n1[2] <= out1[1]; n2[2] <= out2[1];
|
98 |
|
|
n1[3] <= out1[2]; n2[3] <= out2[2];
|
99 |
|
|
n1[4] <= out1[3]; n2[4] <= out2[3];
|
100 |
|
|
n1[5] <= out1[4]; n2[5] <= out2[4];
|
101 |
|
|
n1[6] <= out1[5]; n2[6] <= out2[5];
|
102 |
|
|
n1[7] <= out1[6]; n2[7] <= out2[6];
|
103 |
|
|
n1[8] <= out1[7]; n2[8] <= out2[7];
|
104 |
|
|
n1[9] <= out1[8]; n2[9] <= out2[8];
|
105 |
|
|
n1[10] <= out1[9]; n2[10] <= out2[9];
|
106 |
|
|
n1[11] <= out1[10]; n2[11] <= out2[10];
|
107 |
|
|
n1[12] <= out1[11]; n2[12] <= out2[11];
|
108 |
|
|
n1[13] <= out1[12]; n2[13] <= out2[12];
|
109 |
|
|
n1[14] <= out1[13]; n2[14] <= out2[13];
|
110 |
|
|
n1[15] <= out1[14]; n2[15] <= out2[14];
|
111 |
|
|
n1[16] <= out1[15]; n2[16] <= out2[15];
|
112 |
|
|
n1[17] <= out1[16]; n2[17] <= out2[16];
|
113 |
|
|
n1[18] <= out1[17]; n2[18] <= out2[17];
|
114 |
|
|
n1[19] <= out1[18]; n2[19] <= out2[18];
|
115 |
|
|
n1[20] <= out1[19]; n2[20] <= out2[19];
|
116 |
|
|
n1[21] <= out1[20]; n2[21] <= out2[20];
|
117 |
|
|
n1[22] <= out1[21]; n2[22] <= out2[21];
|
118 |
|
|
n1[23] <= out1[22]; n2[23] <= out2[22];
|
119 |
|
|
n1[24] <= out1[23]; n2[24] <= out2[23];
|
120 |
|
|
n1[25] <= out1[24]; n2[25] <= out2[24];
|
121 |
|
|
n1[26] <= out1[25]; n2[26] <= out2[25];
|
122 |
|
|
n1[27] <= out1[26]; n2[27] <= out2[26];
|
123 |
|
|
n1[28] <= out1[27]; n2[28] <= out2[27];
|
124 |
|
|
n1[29] <= out1[28]; n2[29] <= out2[28];
|
125 |
|
|
n1[30] <= out1[29]; n2[30] <= out2[29];
|
126 |
|
|
n1[31] <= out1[30]; n2[31] <= out2[30];
|
127 |
|
|
end
|
128 |
|
|
|
129 |
|
|
gost89_round
|
130 |
|
|
r1 (clk, sbox, key[255:224], n1[0], n2[0], out1[0], out2[0]),
|
131 |
|
|
r2 (clk, sbox, key[223:192], n1[1], n2[1], out1[1], out2[1]),
|
132 |
|
|
r3 (clk, sbox, key[191:160], n1[2], n2[2], out1[2], out2[2]),
|
133 |
|
|
r4 (clk, sbox, key[159:128], n1[3], n2[3], out1[3], out2[3]),
|
134 |
|
|
r5 (clk, sbox, key[127:96], n1[4], n2[4], out1[4], out2[4]),
|
135 |
|
|
r6 (clk, sbox, key[95:64], n1[5], n2[5], out1[5], out2[5]),
|
136 |
|
|
r7 (clk, sbox, key[63:32], n1[6], n2[6], out1[6], out2[6]),
|
137 |
|
|
r8 (clk, sbox, key[31:0], n1[7], n2[7], out1[7], out2[7]),
|
138 |
|
|
r9 (clk, sbox, key[31:0], n1[8], n2[8], out1[8], out2[8]),
|
139 |
|
|
r10(clk, sbox, key[63:32], n1[9], n2[9], out1[9], out2[9]),
|
140 |
|
|
r11(clk, sbox, key[95:64], n1[10], n2[10], out1[10], out2[10]),
|
141 |
|
|
r12(clk, sbox, key[127:96], n1[11], n2[11], out1[11], out2[11]),
|
142 |
|
|
r13(clk, sbox, key[159:128], n1[12], n2[12], out1[12], out2[12]),
|
143 |
|
|
r14(clk, sbox, key[191:160], n1[13], n2[13], out1[13], out2[13]),
|
144 |
|
|
r15(clk, sbox, key[223:192], n1[14], n2[14], out1[14], out2[14]),
|
145 |
|
|
r16(clk, sbox, key[255:224], n1[15], n2[15], out1[15], out2[15]),
|
146 |
|
|
r17(clk, sbox, key[31:0], n1[16], n2[16], out1[16], out2[16]),
|
147 |
|
|
r18(clk, sbox, key[63:32], n1[17], n2[17], out1[17], out2[17]),
|
148 |
|
|
r19(clk, sbox, key[95:64], n1[18], n2[18], out1[18], out2[18]),
|
149 |
|
|
r20(clk, sbox, key[127:96], n1[19], n2[19], out1[19], out2[19]),
|
150 |
|
|
r21(clk, sbox, key[159:128], n1[20], n2[20], out1[20], out2[20]),
|
151 |
|
|
r22(clk, sbox, key[191:160], n1[21], n2[21], out1[21], out2[21]),
|
152 |
|
|
r23(clk, sbox, key[223:192], n1[22], n2[22], out1[22], out2[22]),
|
153 |
|
|
r24(clk, sbox, key[255:224], n1[23], n2[23], out1[23], out2[23]),
|
154 |
|
|
r25(clk, sbox, key[31:0], n1[24], n2[24], out1[24], out2[24]),
|
155 |
|
|
r26(clk, sbox, key[63:32], n1[25], n2[25], out1[25], out2[25]),
|
156 |
|
|
r27(clk, sbox, key[95:64], n1[26], n2[26], out1[26], out2[26]),
|
157 |
|
|
r28(clk, sbox, key[127:96], n1[27], n2[27], out1[27], out2[27]),
|
158 |
|
|
r29(clk, sbox, key[159:128], n1[28], n2[28], out1[28], out2[28]),
|
159 |
|
|
r30(clk, sbox, key[191:160], n1[29], n2[29], out1[29], out2[29]),
|
160 |
|
|
r31(clk, sbox, key[223:192], n1[30], n2[30], out1[30], out2[30]),
|
161 |
|
|
r32(clk, sbox, key[255:224], n1[31], n2[31], out1[31], out2[31]);
|
162 |
|
|
|
163 |
|
|
assign out[31:0] = out1[31];
|
164 |
|
|
assign out[63:32] = out2[31];
|
165 |
|
|
endmodule
|