]> git.cryptolib.org Git - avr-crypto-lib.git/blob - cast5/cast5.h
4d04e19403393e15dab060d2183f80cd9a585a27
[avr-crypto-lib.git] / cast5 / cast5.h
1 /* cast5.h */
2 /*
3  This file is part of the AVR-Crypto-Lib.
4  Copyright (C) 2008  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        cast5.h
21  * \author      Daniel Otte
22  * \date        2006-07-26
23  * \license GPLv3 or later
24  * \brief Implementation of the CAST5 (aka CAST-128) cipher algorithm as described in RFC 2144
25  * 
26  */
27
28 #ifndef CAST5_H_
29 #define CAST5_H_ 
30
31 #include <stdint.h> 
32
33 #ifndef BOOL
34 #define BOOL
35 #ifndef __BOOL
36 #define __BOOL
37 #ifndef __BOOL__
38 #define __BOOL__
39 typedef enum {
40     false = 0, true = 1
41 } bool;
42 #endif
43 #endif
44 #endif
45
46 /** \typedef cast5_ctx_t
47  * \brief CAST-5 context
48  * 
49  * A variable of this type may hold a keyschedule for the CAST-5 cipher. 
50  * This context is regulary generated by the 
51  * cast5_init(uint8_t *key, uint8_t keylength_b, cast5_ctx_t *s) function.
52  */
53 typedef struct cast5_ctx_st {
54     uint32_t mask[16];
55     uint8_t rotl[8]; /* 4 bit from every rotation key is stored here */
56     uint8_t roth[2]; /* 1 bit from every rotation key is stored here */
57     bool shortkey;
58 } cast5_ctx_t;
59
60 /** \fn void cast5_init(const void *key, uint16_t keylength_b, cast5_ctx_t *s);
61  * \brief generate keyschedule/contex for CAST-5
62  * 
63  * This function generates the keyschedule from the supplied key for the 
64  * CAST-5 cipher and stores it in a supplied ::cast5_ctx_t context.
65  * \param key pointer to the key
66  * \param keylength_b length of the key in bits (maximum 128 bits)
67  * \param s pointer to the context
68  */
69 void cast5_init(const void *key, uint16_t keylength_b, cast5_ctx_t *s);
70
71 /** \fn void cast5_enc(void *block, const cast5_ctx_t *s);
72  * \brief encrypt a block with the CAST-5 algorithm
73  * 
74  * This function encrypts a block of 64 bits (8 bytes) with the CAST-5 algorithm.
75  * It uses a keyschedule as generated by the 
76  * cast5_init(void *key, uint8_t keylength_b, cast5_ctx_t *s) function.
77  * \param block pointer to the block which gets encrypted
78  * \param s pointer to the keyschedule/context
79  */
80 void cast5_enc(void *block, const cast5_ctx_t *s);
81
82 /** \fn void cast5_dec(void *block, const cast5_ctx_t *s);
83  * \brief decrypt a block with the CAST-5 algorithm
84  * 
85  * This function decrypts a block of 64 bits (8 bytes) with the CAST-5 algorithm.
86  * It uses a keyschedule as generated by the 
87  * cast5_init(void *key, uint8_t keylength_b, cast5_ctx_t *s) function.
88  * \param block pointer to the block which gets decrypted
89  * \param s pointer to the keyschedule/context
90  */
91 void cast5_dec(void *block, const cast5_ctx_t *s);
92
93 #endif
94