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

Subversion Repositories camellia-vhdl

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

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

Line No. Rev Author Line
1 3 pfulgoni
 
2
--------------------------------------------------------------------------------
3
-- Designer:      Paolo Fulgoni <pfulgoni@opencores.org>
4
--
5
-- Create Date:   01/22/2008
6
-- Last Update:   01/22/2008
7
-- Project Name:  camellia-vhdl
8
-- Description:   Asynchronous F function
9
--
10
-- Copyright (C) 2008  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
            x     : in STD_LOGIC_VECTOR (0 to 63);
33
            k     : in STD_LOGIC_VECTOR (0 to 63);
34
            z     : out STD_LOGIC_VECTOR (0 to 63)
35
            );
36
end F;
37
 
38
architecture RTL of F is
39
 
40
    -- S-BOX
41
    component SBOX1 is
42
        port  (
43
               data_in  : IN STD_LOGIC_VECTOR(0 to 7);
44
               data_out : OUT STD_LOGIC_VECTOR(0 to 7)
45
                );
46
    end component;
47
    component SBOX2 is
48
        port  (
49
               data_in  : IN STD_LOGIC_VECTOR(0 to 7);
50
               data_out : OUT STD_LOGIC_VECTOR(0 to 7)
51
                );
52
    end component;
53
    component SBOX3 is
54
        port  (
55
               data_in  : IN STD_LOGIC_VECTOR(0 to 7);
56
               data_out : OUT STD_LOGIC_VECTOR(0 to 7)
57
                );
58
    end component;
59
    component SBOX4 is
60
        port  (
61
               data_in  : IN STD_LOGIC_VECTOR(0 to 7);
62
               data_out : OUT STD_LOGIC_VECTOR(0 to 7)
63
                );
64
    end component;
65
 
66
 
67
    signal y : STD_LOGIC_VECTOR (0 to 63);
68
    signal y1, y2, y3, y4, y5, y6, y7, y8 : STD_LOGIC_VECTOR (0 to 7);
69
 
70
    signal so1, so2, so3, so4, so5, so6, so7, so8 : STD_LOGIC_VECTOR (0 to 7);
71
 
72
    signal pa1, pa2, pa3, pa4, pa5, pa6, pa7, pa8 : STD_LOGIC_VECTOR (0 to 7);
73
 
74
    signal pb1, pb2, pb3, pb4, pb5, pb6, pb7, pb8 : STD_LOGIC_VECTOR (0 to 7);
75
 
76
    begin
77
 
78
        y <= x xor k;
79
 
80
        y8 <= y(56 to 63);
81
        y7 <= y(48 to 55);
82
        y6 <= y(40 to 47);
83
        y5 <= y(32 to 39);
84
        y4 <= y(24 to 31);
85
        y3 <= y(16 to 23);
86
        y2 <= y(8 to 15);
87
        y1 <= y(0 to 7);
88
 
89
 
90
        -- S-FUNCTION
91
        S1a : SBOX1
92
            port map(y8, so8);
93
        S1b : SBOX1
94
            port map(y1, so1);
95
        S2a : SBOX2
96
            port map(y5, so5);
97
        S2b : SBOX2
98
            port map(y2, so2);
99
        S3a : SBOX3
100
            port map(y6, so6);
101
        S3b : SBOX3
102
            port map(y3, so3);
103
        S4a : SBOX4
104
            port map(y7, so7);
105
        S4b : SBOX4
106
            port map(y4, so4);
107
 
108
        -- P-FUNCTION
109
        pa8 <= so8 xor pa2;
110
        pa7 <= so7 xor pa1;
111
        pa6 <= so6 xor pa4;
112
        pa5 <= so5 xor pa3;
113
        pa4 <= so4 xor so5;
114
        pa3 <= so3 xor so8;
115
        pa2 <= so2 xor so7;
116
        pa1 <= so1 xor so6;
117
 
118
        pb8 <= pa8 xor pb3;
119
        pb7 <= pa7 xor pb2;
120
        pb6 <= pa6 xor pb1;
121
        pb5 <= pa5 xor pb4;
122
        pb4 <= pa4 xor pa7;
123
        pb3 <= pa3 xor pa6;
124
        pb2 <= pa2 xor pa5;
125
        pb1 <= pa1 xor pa8;
126
 
127
 
128
        z <= pb5 & pb6 & pb7 & pb8 & pb1 & pb2 & pb3 & pb4;
129
 
130
 
131
    end RTL;

powered by: WebSVN 2.1.0

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