]> git.cryptolib.org Git - avr-crypto-lib.git/blob - cast5.h
bug fixed in md5-asm.S ( wrong values for length_b%512=505..511 )
[avr-crypto-lib.git] / 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{false=0,true=1} bool;
40   #endif
41  #endif
42 #endif
43
44 /** \typedef cast5_ctx_t
45  * \brief CAST-5 context
46  * 
47  * A variable of this type may hold a keyschedule for the CAST-5 cipher. 
48  * This context is regulary generated by the 
49  * cast5_init(uint8_t* key, uint8_t keylength_b, cast5_ctx_t* s) function.
50  */
51 typedef struct cast5_ctx_st{
52         uint32_t        mask[16];
53         uint8_t         rotl[8];        /* 4 bit from every rotation key is stored here */
54         uint8_t         roth[2];        /* 1 bit from every rotation key is stored here */
55         bool            shortkey;
56 } cast5_ctx_t;
57
58
59 /** \fn void cast5_init(const void* key, uint16_t keylength_b, cast5_ctx_t* s);
60  * \brief generate keyschedule/contex for CAST-5
61  * 
62  * This function generates the keyschedule from the supplied key for the 
63  * CAST-5 cipher and stores it in a supplied ::cast5_ctx_t context.
64  * \param key pointer to the key
65  * \param keylength_b length of the key in bits (maximum 128 bits)
66  * \param s pointer to the context
67  */
68 void cast5_init(const void* key, uint16_t keylength_b, cast5_ctx_t* s);
69
70 /** \fn void cast5_enc(void* block, const cast5_ctx_t* s);
71  * \brief encrypt a block with the CAST-5 algorithm
72  * 
73  * This function encrypts a block of 64 bits (8 bytes) with the CAST-5 algorithm.
74  * It uses a keyschedule as generated by the 
75  * cast5_init(void* key, uint8_t keylength_b, cast5_ctx_t* s) function.
76  * \param block pointer to the block which gets encrypted
77  * \param s pointer to the keyschedule/context
78  */
79 void cast5_enc(void* block, const cast5_ctx_t* s);
80
81 /** \fn void cast5_dec(void* block, const cast5_ctx_t* s);
82  * \brief decrypt a block with the CAST-5 algorithm
83  * 
84  * This function decrypts a block of 64 bits (8 bytes) with the CAST-5 algorithm.
85  * It uses a keyschedule as generated by the 
86  * cast5_init(void* key, uint8_t keylength_b, cast5_ctx_t* s) function.
87  * \param block pointer to the block which gets decrypted
88  * \param s pointer to the keyschedule/context
89  */
90 void cast5_dec(void* block, const cast5_ctx_t* s);
91
92
93
94 #endif
95