source: lib/des.h @ 83f1bd1d

Last change on this file since 83f1bd1d was a366cca, checked in by Wilmer van der Gaast <wilmer@…>, at 2010-08-20T23:04:12Z

Now including a nice and compact 3DES implementation done by Christophe
Devine. OpenSSL exports nice cipher functions, but GnuTLS only just started
doing this in 2.10 or so (not even in Debian Sid yet).

So instead of adding a whole library for encrypting 72 bytes of data, let's
have a built-in 3DES implementation for a while..

  • Property mode set to 100644
File size: 1.8 KB
Line 
1/*
2 *  FIPS-46-3 compliant 3DES implementation
3 *
4 *  Copyright (C) 2001-2003  Christophe Devine
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 2 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, write to the Free Software
18 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 */
20
21#ifndef _DES_H
22#define _DES_H
23
24#include <stdint.h>
25
26typedef struct
27{
28    uint32_t esk[32];     /* DES encryption subkeys */
29    uint32_t dsk[32];     /* DES decryption subkeys */
30}
31des_context;
32
33typedef struct
34{
35    uint32_t esk[96];     /* Triple-DES encryption subkeys */
36    uint32_t dsk[96];     /* Triple-DES decryption subkeys */
37}
38des3_context;
39
40int  des_set_key( des_context *ctx, uint8_t key[8] );
41void des_encrypt( des_context *ctx, uint8_t input[8], uint8_t output[8] );
42void des_decrypt( des_context *ctx, uint8_t input[8], uint8_t output[8] );
43
44int  des3_set_2keys( des3_context *ctx, const uint8_t key1[8], const uint8_t key2[8] );
45int  des3_set_3keys( des3_context *ctx, const uint8_t key1[8], const uint8_t key2[8],
46                                        const uint8_t key3[8] );
47
48void des3_encrypt( des3_context *ctx, uint8_t input[8], uint8_t output[8] );
49void des3_decrypt( des3_context *ctx, uint8_t input[8], uint8_t output[8] );
50
51#endif /* des.h */
Note: See TracBrowser for help on using the repository browser.