add changelog and NEWS entry
[gnuk/gnuk.git] / polarssl-0.14.0 / include / polarssl / des.h
1 /**
2  * \file des.h
3  *
4  *  Copyright (C) 2006-2010, Brainspark B.V.
5  *
6  *  This file is part of PolarSSL (http://www.polarssl.org)
7  *  Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
8  *
9  *  All rights reserved.
10  *
11  *  This program is free software; you can redistribute it and/or modify
12  *  it under the terms of the GNU General Public License as published by
13  *  the Free Software Foundation; either version 2 of the License, or
14  *  (at your option) any later version.
15  *
16  *  This program 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  *
21  *  You should have received a copy of the GNU General Public License along
22  *  with this program; if not, write to the Free Software Foundation, Inc.,
23  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24  */
25 #ifndef POLARSSL_DES_H
26 #define POLARSSL_DES_H
27
28 #define DES_ENCRYPT     1
29 #define DES_DECRYPT     0
30
31 #define POLARSSL_ERR_DES_INVALID_INPUT_LENGTH               -0x0C00
32
33 /**
34  * \brief          DES context structure
35  */
36 typedef struct
37 {
38     int mode;                   /*!<  encrypt/decrypt   */
39     unsigned long sk[32];       /*!<  DES subkeys       */
40 }
41 des_context;
42
43 /**
44  * \brief          Triple-DES context structure
45  */
46 typedef struct
47 {
48     int mode;                   /*!<  encrypt/decrypt   */
49     unsigned long sk[96];       /*!<  3DES subkeys      */
50 }
51 des3_context;
52
53 #ifdef __cplusplus
54 extern "C" {
55 #endif
56
57 /**
58  * \brief          DES key schedule (56-bit, encryption)
59  *
60  * \param ctx      DES context to be initialized
61  * \param key      8-byte secret key
62  */
63 void des_setkey_enc( des_context *ctx, const unsigned char key[8] );
64
65 /**
66  * \brief          DES key schedule (56-bit, decryption)
67  *
68  * \param ctx      DES context to be initialized
69  * \param key      8-byte secret key
70  */
71 void des_setkey_dec( des_context *ctx, const unsigned char key[8] );
72
73 /**
74  * \brief          Triple-DES key schedule (112-bit, encryption)
75  *
76  * \param ctx      3DES context to be initialized
77  * \param key      16-byte secret key
78  */
79 void des3_set2key_enc( des3_context *ctx, const unsigned char key[16] );
80
81 /**
82  * \brief          Triple-DES key schedule (112-bit, decryption)
83  *
84  * \param ctx      3DES context to be initialized
85  * \param key      16-byte secret key
86  */
87 void des3_set2key_dec( des3_context *ctx, const unsigned char key[16] );
88
89 /**
90  * \brief          Triple-DES key schedule (168-bit, encryption)
91  *
92  * \param ctx      3DES context to be initialized
93  * \param key      24-byte secret key
94  */
95 void des3_set3key_enc( des3_context *ctx, const unsigned char key[24] );
96
97 /**
98  * \brief          Triple-DES key schedule (168-bit, decryption)
99  *
100  * \param ctx      3DES context to be initialized
101  * \param key      24-byte secret key
102  */
103 void des3_set3key_dec( des3_context *ctx, const unsigned char key[24] );
104
105 /**
106  * \brief          DES-ECB block encryption/decryption
107  *
108  * \param ctx      DES context
109  * \param input    64-bit input block
110  * \param output   64-bit output block
111  *
112  * \return         0 if successful
113  */
114 int des_crypt_ecb( des_context *ctx,
115                     const unsigned char input[8],
116                     unsigned char output[8] );
117
118 /**
119  * \brief          DES-CBC buffer encryption/decryption
120  *
121  * \param ctx      DES context
122  * \param mode     DES_ENCRYPT or DES_DECRYPT
123  * \param length   length of the input data
124  * \param iv       initialization vector (updated after use)
125  * \param input    buffer holding the input data
126  * \param output   buffer holding the output data
127  */
128 int des_crypt_cbc( des_context *ctx,
129                     int mode,
130                     int length,
131                     unsigned char iv[8],
132                     const unsigned char *input,
133                     unsigned char *output );
134
135 /**
136  * \brief          3DES-ECB block encryption/decryption
137  *
138  * \param ctx      3DES context
139  * \param input    64-bit input block
140  * \param output   64-bit output block
141  *
142  * \return         0 if successful
143  */
144 int des3_crypt_ecb( des3_context *ctx,
145                      const unsigned char input[8],
146                      unsigned char output[8] );
147
148 /**
149  * \brief          3DES-CBC buffer encryption/decryption
150  *
151  * \param ctx      3DES context
152  * \param mode     DES_ENCRYPT or DES_DECRYPT
153  * \param length   length of the input data
154  * \param iv       initialization vector (updated after use)
155  * \param input    buffer holding the input data
156  * \param output   buffer holding the output data
157  *
158  * \return         0 if successful, or POLARSSL_ERR_DES_INVALID_INPUT_LENGTH
159  */
160 int des3_crypt_cbc( des3_context *ctx,
161                      int mode,
162                      int length,
163                      unsigned char iv[8],
164                      const unsigned char *input,
165                      unsigned char *output );
166
167 /*
168  * \brief          Checkup routine
169  *
170  * \return         0 if successful, or 1 if the test failed
171  */
172 int des_self_test( int verbose );
173
174 #ifdef __cplusplus
175 }
176 #endif
177
178 #endif /* des.h */