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

Subversion Repositories gost28147-89

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 fanatid
module gost89_mac(
2
  input              clk,
3
  input              reset,
4
  input              load_data,
5
  input      [511:0] sbox,
6
  input      [255:0] key,
7
  input      [63:0]  in,
8
  output reg [31:0]  out,
9
  output reg         busy
10
);
11
  reg  [4:0]  counter;
12
  reg  [31:0] round_key;
13
  reg         need_xor;
14
  reg  [31:0] n1, n2;
15
  wire [31:0] out1, out2;
16
 
17
  gost89_round
18
    rnd(clk, sbox, round_key, n1, n2, out1, out2);
19
 
20
  always @(posedge clk) begin
21
    if (reset && !load_data) begin
22
      counter  <= 17;
23
      need_xor <= 0;
24
      busy <= 0;
25
    end
26
 
27
    if (!reset && load_data) begin
28
      if (need_xor) begin
29
        n1 <= in[63:32] ^ n2;
30
        n2 <= in[31:0]  ^ n1;
31
      end else begin
32
        n1 <= in[63:32];
33
        n2 <= in[31:0];
34
        need_xor <= 1;
35
      end
36
      counter <= 0;
37
      busy <= 1;
38
    end
39
 
40
    if (reset && load_data) begin
41
      n1 <= in[63:32];
42
      n2 <= in[31:0];
43
      counter  <= 0;
44
      need_xor <= 1;
45
      busy <= 1;
46
    end
47
 
48
    if (!reset && !load_data) begin
49
      if (counter < 17)
50
        counter <= counter + 1;
51
      if (counter > 0 && counter < 17) begin
52
        n1 <= out1;
53
        n2 <= out2;
54
      end
55
      if (counter == 16) begin
56
        busy <= 0;
57
        out  <= out2;
58
      end
59
    end
60
  end
61
 
62
  always @(posedge clk)
63
    case (counter)
64
      0:  round_key <= key[255:224];
65
      1:  round_key <= key[223:192];
66
      2:  round_key <= key[191:160];
67
      3:  round_key <= key[159:128];
68
      4:  round_key <= key[127:96];
69
      5:  round_key <= key[95:64];
70
      6:  round_key <= key[63:32];
71
      7:  round_key <= key[31:0];
72
      8:  round_key <= key[255:224];
73
      9:  round_key <= key[223:192];
74
      10: round_key <= key[191:160];
75
      11: round_key <= key[159:128];
76
      12: round_key <= key[127:96];
77
      13: round_key <= key[95:64];
78
      14: round_key <= key[63:32];
79
      15: round_key <= key[31:0];
80
    endcase
81
endmodule

powered by: WebSVN 2.1.0

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