]> git.cryptolib.org Git - arm-crypto-lib.git/blob - skein/threefish.h
Grøstl adapted for round 3
[arm-crypto-lib.git] / skein / threefish.h
1 /* threefish.c */
2 /*
3     This file is part of the AVR-Crypto-Lib.
4     Copyright (C) 2009  Daniel Otte (daniel.otte@rub.de)
5
6     This program is free software: you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation, either version 3 of the License, or
9     (at your option) any later version.
10
11     This program is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19 /*
20  * \file    threefish.h
21  * \author  Daniel Otte
22  * \email   daniel.otte@rub.de
23  * \date    2009-03-12
24  * \license GPLv3 or later
25  * \brief   Implementation of the Threefish block cipher
26  * \ingroup Threefish
27  */
28
29 #ifndef THREEFISH_H_
30 #define THREEFISH_H_
31
32 #include <stdint.h>
33
34 #define THREEFISH256_BLOCKSIZE 256
35 #define THREEFISH256_BLOCKSIZE_B ((THREEFISH256_BLOCKSIZE+7)/8)
36 #define THREEFISH512_BLOCKSIZE 512
37 #define THREEFISH512_BLOCKSIZE_B ((THREEFISH512_BLOCKSIZE+7)/8)
38 #define THREEFISH1024_BLOCKSIZE 1024
39 #define THREEFISH1024_BLOCKSIZE_B ((THREEFISH1024_BLOCKSIZE+7)/8)
40
41 /** \typedef threefish256_ctx_t
42  * \brief holds key data for Threefish-256
43  *  
44  * A variable of this type may hold the key data for Threefish-256 encryption
45  * or decryption..
46  */
47 typedef struct{
48         uint64_t k[5];
49         uint64_t t[3];
50 } threefish256_ctx_t;
51
52 /** \typedef threefish512_ctx_t
53  * \brief holds key data for Threefish-512
54  *  
55  * A variable of this type may hold the key data for Threefish-512 encryption
56  * or decryption..
57  */
58 typedef struct{
59         uint64_t k[9];
60         uint64_t t[3];
61 } threefish512_ctx_t;
62
63 /** \typedef threefish1024_ctx_t
64  * \brief holds key data for Threefish-1024
65  *  
66  * A variable of this type may hold the key data for Threefish-1024 encryption
67  * or decryption..
68  */
69 typedef struct{
70         uint64_t k[17];
71         uint64_t t[3];
72 } threefish1024_ctx_t;
73
74
75 void threefish_mix(void* data, uint8_t rot);
76 void threefish_invmix(void* data, uint8_t rot);
77
78 void threefish256_init(const void* key, const void* tweak, threefish256_ctx_t* ctx);
79 void threefish512_init(const void* key, const void* tweak, threefish512_ctx_t* ctx);
80 void threefish1024_init(const void* key, const void* tweak, threefish1024_ctx_t* ctx);
81
82 void threefish256_enc(void* data, const threefish256_ctx_t* ctx);
83 void threefish512_enc(void* data, const threefish512_ctx_t* ctx);
84 void threefish1024_enc(void* data, const threefish1024_ctx_t* ctx);
85
86 void threefish256_dec(void* data, const threefish256_ctx_t* ctx);
87 void threefish512_dec(void* data, const threefish512_ctx_t* ctx);
88 void threefish1024_dec(void* data, const threefish1024_ctx_t* ctx);
89
90 #endif /* THREEFISH_H_ */