OpenCores
URL https://opencores.org/ocsvn/gost28147-89/gost28147-89/trunk

Subversion Repositories gost28147-89

[/] [gost28147-89/] [trunk/] [rtl/] [gost89_pipelined_ecb.v] - Blame information for rev 5

Details | Compare with Previous | View Log

Line No. Rev Author Line
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

powered by: WebSVN 2.1.0

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