*** empty log message ***
[shishi.git] / gl / des.h
blobc15960701b2780a83d8f5f92790b8b946b588134
1 /* des.h --- DES cipher implementation.
2 * Copyright (C) 2005 Free Software Foundation, Inc.
4 * This file is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published
6 * by the Free Software Foundation; either version 2, or (at your
7 * option) any later version.
9 * This file is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this file; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17 * 02110-1301, USA.
21 /* Adapted for gnulib by Simon Josefsson, based on Libgcrypt. */
23 #ifndef DES_H
24 # define DES_H
26 #include <stddef.h>
27 #include <stdint.h>
28 #include <stdbool.h>
31 * Encryption/Decryption context of DES
33 typedef struct
35 uint32_t encrypt_subkeys[32];
36 uint32_t decrypt_subkeys[32];
37 } des_ctx;
40 * Encryption/Decryption context of Triple-DES
42 typedef struct
44 uint32_t encrypt_subkeys[96];
45 uint32_t decrypt_subkeys[96];
46 } tripledes_ctx;
48 /* Check whether the 8 byte key is weak. Does not check the parity
49 * bits of the key but simple ignore them. */
50 extern bool
51 des_is_weak_key (const char * key);
54 * DES
55 * ---
58 /* Fill a DES context CTX with subkeys calculated from 64bit KEY.
59 * Does not check parity bits, but simply ignore them. Does not check
60 * for weak keys. */
61 extern void
62 des_setkey (des_ctx *ctx, const char * key);
64 /* Fill a DES context CTX with subkeys calculated from 64bit KEY, with
65 * weak key checking. Does not check parity bits, but simply ignore
66 * them. */
67 extern bool
68 des_makekey (des_ctx *ctx, const char * key, size_t keylen);
70 /* Electronic Codebook Mode DES encryption/decryption of data
71 * according to 'mode'. */
72 extern void
73 des_ecb_crypt (des_ctx *ctx, const char * from, char * to, int mode);
75 #define des_ecb_encrypt(ctx, from, to) des_ecb_crypt(ctx, from, to, 0)
76 #define des_ecb_decrypt(ctx, from, to) des_ecb_crypt(ctx, from, to, 1)
78 /* Triple-DES
79 * ----------
82 /* Fill a Triple-DES context CTX with subkeys calculated from two
83 * 64bit keys in KEY1 and KEY2. Does not check the parity bits of the
84 * keys, but simply ignore them. Does not check for weak keys. */
85 extern void
86 tripledes_set2keys (tripledes_ctx *ctx, const char * key1, const char * key2);
89 * Fill a Triple-DES context CTX with subkeys calculated from three
90 * 64bit keys in KEY1, KEY2 and KEY3. Does not check the parity bits
91 * of the keys, but simply ignore them. Does not check for weak
92 * keys. */
93 extern void
94 tripledes_set3keys (tripledes_ctx *ctx, const char * key1,
95 const char * key2, const char * key3);
97 /* Fill a Triple-DES context CTX with subkeys calculated from three
98 * concatenated 64bit keys in KEY, with weak key checking. Does not
99 * check the parity bits of the keys, but simply ignore them. */
100 extern bool
101 tripledes_makekey (tripledes_ctx *ctx, const char * key, size_t keylen);
103 /* Electronic Codebook Mode Triple-DES encryption/decryption of data
104 * according to 'mode'. Sometimes this mode is named 'EDE' mode
105 * (Encryption-Decryption-Encryption). */
106 extern void
107 tripledes_ecb_crypt (tripledes_ctx *ctx,
108 const char * from,
109 char * to, int mode);
111 #define tripledes_ecb_encrypt(ctx, from, to) tripledes_ecb_crypt(ctx,from,to,0)
112 #define tripledes_ecb_decrypt(ctx, from, to) tripledes_ecb_crypt(ctx,from,to,1)
114 #endif /* DES_H */