1 /* des.h --- DES cipher implementation.
2 * Copyright (C) 2005, 2007, 2009-2024 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 Lesser General Public License as
6 * published by the Free Software Foundation; either version 2.1 of the
7 * License, or (at your option) any later version.
9 * This file is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public License
15 * along with this program. If not, see <https://www.gnu.org/licenses/>.
19 /* Adapted for gnulib by Simon Josefsson, based on Libgcrypt. */
28 * Encryption/Decryption context of DES
32 uint32_t encrypt_subkeys
[32];
33 uint32_t decrypt_subkeys
[32];
37 * Encryption/Decryption context of Triple-DES
41 uint32_t encrypt_subkeys
[96];
42 uint32_t decrypt_subkeys
[96];
45 /* Check whether the 8 byte key is weak. Does not check the parity
46 * bits of the key but simple ignore them. */
48 gl_des_is_weak_key (const char * key
);
55 /* Fill a DES context CTX with subkeys calculated from 64bit KEY.
56 * Does not check parity bits, but simply ignore them. Does not check
59 gl_des_setkey (gl_des_ctx
*ctx
, const char * key
);
61 /* Fill a DES context CTX with subkeys calculated from 64bit KEY, with
62 * weak key checking. Does not check parity bits, but simply ignore
65 gl_des_makekey (gl_des_ctx
*ctx
, const char * key
, size_t keylen
);
67 /* Electronic Codebook Mode DES encryption/decryption of data
68 * according to 'mode'. */
70 gl_des_ecb_crypt (gl_des_ctx
*ctx
, const char * from
, char * to
, int mode
);
72 #define gl_des_ecb_encrypt(ctx, from, to) gl_des_ecb_crypt(ctx, from, to, 0)
73 #define gl_des_ecb_decrypt(ctx, from, to) gl_des_ecb_crypt(ctx, from, to, 1)
79 /* Fill a Triple-DES context CTX with subkeys calculated from two
80 * 64bit keys in KEY1 and KEY2. Does not check the parity bits of the
81 * keys, but simply ignore them. Does not check for weak keys. */
83 gl_3des_set2keys (gl_3des_ctx
*ctx
,
88 * Fill a Triple-DES context CTX with subkeys calculated from three
89 * 64bit keys in KEY1, KEY2 and KEY3. Does not check the parity bits
90 * of the keys, but simply ignore them. Does not check for weak
93 gl_3des_set3keys (gl_3des_ctx
*ctx
,
98 /* Fill a Triple-DES context CTX with subkeys calculated from three
99 * concatenated 64bit keys in KEY, with weak key checking. Does not
100 * check the parity bits of the keys, but simply ignore them. */
102 gl_3des_makekey (gl_3des_ctx
*ctx
,
106 /* Electronic Codebook Mode Triple-DES encryption/decryption of data
107 * according to 'mode'. Sometimes this mode is named 'EDE' mode
108 * (Encryption-Decryption-Encryption). */
110 gl_3des_ecb_crypt (gl_3des_ctx
*ctx
,
115 #define gl_3des_ecb_encrypt(ctx, from, to) gl_3des_ecb_crypt(ctx,from,to,0)
116 #define gl_3des_ecb_decrypt(ctx, from, to) gl_3des_ecb_crypt(ctx,from,to,1)