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

Subversion Repositories gost28147-89

[/] [gost28147-89/] [trunk/] [testbench/] [gost89_cfb_tb.v] - Blame information for rev 5

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 fanatid
`timescale 1ns / 1ps
2
 
3
module gost89_cfb_tb;
4
  reg clk;
5
  always
6
    #1 clk = ~clk;
7
 
8
  reg  [511:0] sbox = 512'h 4a92d80e6b1c7f53eb4c6dfa23810759581da342efc7609b7da1089fe46cb2536c715fd84a9e03b24ba0721d36859cfedb413f590ae7682c1fd057a4923e6b8c;
9
  reg  [255:0] key  = 256'h 0475f6e05038fbfad2c7c390edb3ca3d1547124291ae1e8a2f79cd9ed2bcefbd;
10
  wire mode_e = 0, mode_d = 1;
11
  reg  reset;
12
  reg  load_data;
13
  reg  [63:0] in_e1, in_e2, in_d1, in_d2;
14
  wire [63:0] out_e1, out_e2, out_d1, out_d2;
15
  wire busy_e1, busy_e2, busy_d1, busy_d2;
16
 
17
  gost89_cfb
18
    cfb1(clk, reset, mode_e, load_data, sbox, key, in_e1, out_e1, busy_e1),
19
    cfb2(clk, reset, mode_d, load_data, sbox, key, in_d1, out_d1, busy_d1);
20
  gost89_cfb_encrypt
21
    cfb_encrypt1(clk, reset, load_data, sbox, key, in_e2, out_e2, busy_e2);
22
  gost89_cfb_decrypt
23
    cfb_decrypt1(clk, reset, load_data, sbox, key, in_d2, out_d2, busy_d2);
24
 
25
/*
26
CFB mode (gamma: 6aa0379517bb57af):
27
8d437364581af0da 12911df3eddcc0fb b73369c4b5cf3e7d
28
54826055ab718bc7 585ddacf1a45e472 a3ec5a4eb4359095
29
 
30
CFB mode (gamma: fa5679a45f118aed):
31
419677a6eff07f2f 4f40b75be8e64341 cd02e6ef903d27da
32
27d3e781cc4fcf43 9c7480fb9ea9df69 458ff5081b0fd688
33
*/
34
 
35
  initial begin
36
    $dumpfile("gost89_cfb_tb.vcd");
37
    $dumpvars(0, gost89_cfb_tb);
38
 
39
    clk = 0;
40
    reset = 0;
41
    load_data = 0;
42
 
43
// Normal usage
44
    #1;
45
    in_e1 = 64'h 6aa0379517bb57af; in_d1 = 64'h 6aa0379517bb57af;
46
    in_e2 = 64'h 6aa0379517bb57af; in_d2 = 64'h 6aa0379517bb57af;
47
    reset = 1;
48
    #2;
49
    reset = 0;
50
    in_e1 = 64'h 8d437364581af0da; in_d1 = 64'h 54826055ab718bc7;
51
    in_e2 = 64'h 8d437364581af0da; in_d2 = 64'h 54826055ab718bc7;
52
    load_data = 1;
53
    #2;
54
    load_data = 0;
55
    #68;
56
    if (out_e1 != out_e2 || out_e2 != 64'h 54826055ab718bc7 || out_d1 != out_d2 || out_d2 != 64'h 8d437364581af0da)
57
      begin $display("E"); $finish; end
58
    $display("OK");
59
    in_e1 = 64'h 12911df3eddcc0fb; in_d1 = 64'h 585ddacf1a45e472;
60
    in_e2 = 64'h 12911df3eddcc0fb; in_d2 = 64'h 585ddacf1a45e472;
61
    load_data = 1;
62
    #2;
63
    load_data = 0;
64
    #68;
65
    if (out_e1 != out_e2 || out_e2 != 64'h 585ddacf1a45e472 || out_d1 != out_d2 || out_d2 != 64'h 12911df3eddcc0fb)
66
      begin $display("E"); $finish; end
67
    $display("OK");
68
 
69
// Change gamma
70
    #2;
71
    in_e1 = 64'h fa5679a45f118aed; in_d1 = 64'h fa5679a45f118aed;
72
    in_e2 = 64'h fa5679a45f118aed; in_d2 = 64'h fa5679a45f118aed;
73
    reset = 1;
74
    #2;
75
    reset = 0;
76
    in_e1 = 64'h 419677a6eff07f2f; in_d1 = 64'h 27d3e781cc4fcf43;
77
    in_e2 = 64'h 419677a6eff07f2f; in_d2 = 64'h 27d3e781cc4fcf43;
78
    load_data = 1;
79
    #2;
80
    load_data = 0;
81
    #68;
82
    if (out_e1 != out_e2 || out_e2 != 64'h 27d3e781cc4fcf43 || out_d1 != out_d2 || out_d2 != 64'h 419677a6eff07f2f)
83
      begin $display("E"); $finish; end
84
    $display("OK");
85
 
86
// Reset in processing
87
    #2;
88
    in_e1 = 64'h 6aa0379517bb57af; in_d1 = 64'h 6aa0379517bb57af;
89
    in_e2 = 64'h 6aa0379517bb57af; in_d2 = 64'h 6aa0379517bb57af;
90
    reset = 1;
91
    #2;
92
    reset = 0;
93
    in_e1 = 64'h 8d437364581af0da; in_d1 = 64'h 54826055ab718bc7;
94
    in_e2 = 64'h 8d437364581af0da; in_d2 = 64'h 54826055ab718bc7;
95
    load_data = 1;
96
    #2;
97
    load_data = 0;
98
    #10;
99
    in_e1 = 64'h fa5679a45f118aed; in_d1 = 64'h fa5679a45f118aed;
100
    in_e2 = 64'h fa5679a45f118aed; in_d2 = 64'h fa5679a45f118aed;
101
    reset = 1;
102
    #2;
103
    reset = 0;
104
    in_e1 = 64'h 419677a6eff07f2f; in_d1 = 64'h 27d3e781cc4fcf43;
105
    in_e2 = 64'h 419677a6eff07f2f; in_d2 = 64'h 27d3e781cc4fcf43;
106
    load_data = 1;
107
    #2;
108
    load_data = 0;
109
    #68;
110
    if (out_e1 != out_e2 || out_e2 != 64'h 27d3e781cc4fcf43 || out_d1 != out_d2 || out_d2 != 64'h 419677a6eff07f2f)
111
      begin $display("E"); $finish; end
112
    $display("OK");
113
 
114
    #10;
115
    $display("All passed");
116
    $finish;
117
  end
118
endmodule

powered by: WebSVN 2.1.0

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