OpenCores
URL https://opencores.org/ocsvn/camellia-vhdl/camellia-vhdl/trunk

Subversion Repositories camellia-vhdl

[/] [camellia-vhdl/] [trunk/] [pipelining/] [f.vhd] - Blame information for rev 10

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 pfulgoni
 
2
--------------------------------------------------------------------------------
3
-- Designer:      Paolo Fulgoni <pfulgoni@opencores.org>
4
--
5
-- Create Date:   09/14/2007
6 7 pfulgoni
-- Last Update:   04/09/2008
7 2 pfulgoni
-- Project Name:  camellia-vhdl
8
-- Description:   F function
9
--
10
-- Copyright (C) 2007  Paolo Fulgoni
11
-- This file is part of camellia-vhdl.
12
-- camellia-vhdl is free software; you can redistribute it and/or modify
13
-- it under the terms of the GNU General Public License as published by
14
-- the Free Software Foundation; either version 3 of the License, or
15
-- (at your option) any later version.
16
-- camellia-vhdl is distributed in the hope that it will be useful,
17
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
18
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19
-- GNU General Public License for more details.
20
-- You should have received a copy of the GNU General Public License
21
-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
22
--
23
-- The Camellia cipher algorithm is 128 bit cipher developed by NTT and
24
-- Mitsubishi Electric researchers.
25
-- http://info.isl.ntt.co.jp/crypt/eng/camellia/
26
--------------------------------------------------------------------------------
27
library IEEE;
28
use IEEE.std_logic_1164.all;
29
 
30
entity F is
31
    port    (
32
            reset : in STD_LOGIC;
33
            clk   : in STD_LOGIC;
34
            x     : in STD_LOGIC_VECTOR (0 to 63);
35
            k     : in STD_LOGIC_VECTOR (0 to 63);
36
            z     : out STD_LOGIC_VECTOR (0 to 63)
37
            );
38
end F;
39
 
40
architecture RTL of F is
41
 
42
    -- S-BOX
43
    component SBOX1 is
44
        port  (
45 7 pfulgoni
                clk   : IN  STD_LOGIC;
46
                addra : IN  STD_LOGIC_VECTOR(0 to 7);
47
                addrb : IN  STD_LOGIC_VECTOR(0 to 7);
48 2 pfulgoni
                douta : OUT STD_LOGIC_VECTOR(0 to 7);
49 7 pfulgoni
                doutb : OUT STD_LOGIC_VECTOR(0 to 7)
50 2 pfulgoni
                );
51
    end component;
52
    component SBOX2 is
53
        port  (
54 7 pfulgoni
                clk   : IN  STD_LOGIC;
55
                addra : IN  STD_LOGIC_VECTOR(0 to 7);
56
                addrb : IN  STD_LOGIC_VECTOR(0 to 7);
57 2 pfulgoni
                douta : OUT STD_LOGIC_VECTOR(0 to 7);
58 7 pfulgoni
                doutb : OUT STD_LOGIC_VECTOR(0 to 7)
59
 
60 2 pfulgoni
                );
61
    end component;
62
    component SBOX3 is
63
        port  (
64 7 pfulgoni
                clk   : IN  STD_LOGIC;
65
                addra : IN  STD_LOGIC_VECTOR(0 to 7);
66
                addrb : IN  STD_LOGIC_VECTOR(0 to 7);
67 2 pfulgoni
                douta : OUT STD_LOGIC_VECTOR(0 to 7);
68 7 pfulgoni
                doutb : OUT STD_LOGIC_VECTOR(0 to 7)
69
 
70 2 pfulgoni
                );
71
    end component;
72
    component SBOX4 is
73
        port  (
74 7 pfulgoni
                clk   : IN  STD_LOGIC;
75
                addra : IN  STD_LOGIC_VECTOR(0 to 7);
76
                addrb : IN  STD_LOGIC_VECTOR(0 to 7);
77 2 pfulgoni
                douta : OUT STD_LOGIC_VECTOR(0 to 7);
78 7 pfulgoni
                doutb : OUT STD_LOGIC_VECTOR(0 to 7)
79
 
80 2 pfulgoni
                );
81
    end component;
82
 
83
 
84
    signal y : STD_LOGIC_VECTOR (0 to 63);
85
    signal y1, y2, y3, y4, y5, y6, y7, y8 : STD_LOGIC_VECTOR (0 to 7);
86
 
87
    signal so1, so2, so3, so4, so5, so6, so7, so8 : STD_LOGIC_VECTOR (0 to 7);
88
 
89
    signal pa1, pa2, pa3, pa4, pa5, pa6, pa7, pa8 : STD_LOGIC_VECTOR (0 to 7);
90
 
91
    signal pb1, pb2, pb3, pb4, pb5, pb6, pb7, pb8 : STD_LOGIC_VECTOR (0 to 7);
92
 
93
 
94
    begin
95
 
96
        y <= x xor k;
97
 
98
        y8 <= y(56 to 63);
99
        y7 <= y(48 to 55);
100
        y6 <= y(40 to 47);
101
        y5 <= y(32 to 39);
102
        y4 <= y(24 to 31);
103
        y3 <= y(16 to 23);
104
        y2 <= y(8 to 15);
105
        y1 <= y(0 to 7);
106
 
107
 
108
        -- S-FUNCTION
109
 
110
        S1 : SBOX1
111 7 pfulgoni
            port map(clk, y8, y1, so8, so1);
112 2 pfulgoni
        S2 : SBOX2
113 7 pfulgoni
            port map(clk, y5, y2, so5, so2);
114 2 pfulgoni
        S3 : SBOX3
115 7 pfulgoni
            port map(clk, y6, y3, so6, so3);
116 2 pfulgoni
        S4 : SBOX4
117 7 pfulgoni
            port map(clk, y7, y4, so7, so4);
118 2 pfulgoni
 
119
        -- P-FUNCTION
120
        pa8 <= so8 xor pa2;
121
        pa7 <= so7 xor pa1;
122
        pa6 <= so6 xor pa4;
123
        pa5 <= so5 xor pa3;
124
        pa4 <= so4 xor so5;
125
        pa3 <= so3 xor so8;
126
        pa2 <= so2 xor so7;
127
        pa1 <= so1 xor so6;
128
 
129
        pb8 <= pa8 xor pb3;
130
        pb7 <= pa7 xor pb2;
131
        pb6 <= pa6 xor pb1;
132
        pb5 <= pa5 xor pb4;
133
        pb4 <= pa4 xor pa7;
134
        pb3 <= pa3 xor pa6;
135
        pb2 <= pa2 xor pa5;
136
        pb1 <= pa1 xor pa8;
137
 
138
 
139
        z <= pb5 & pb6 & pb7 & pb8 & pb1 & pb2 & pb3 & pb4;
140
 
141
 
142
    end RTL;

powered by: WebSVN 2.1.0

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