1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 216d004a2SEvgeniy Polyakov /* 316d004a2SEvgeniy Polyakov * DES & Triple DES EDE Cipher Algorithms. 416d004a2SEvgeniy Polyakov */ 516d004a2SEvgeniy Polyakov 616d004a2SEvgeniy Polyakov #ifndef __CRYPTO_DES_H 716d004a2SEvgeniy Polyakov #define __CRYPTO_DES_H 816d004a2SEvgeniy Polyakov 904007b0eSArd Biesheuvel #include <linux/types.h> 10d7198ce4SHerbert Xu 1116d004a2SEvgeniy Polyakov #define DES_KEY_SIZE 8 1216d004a2SEvgeniy Polyakov #define DES_EXPKEY_WORDS 32 1316d004a2SEvgeniy Polyakov #define DES_BLOCK_SIZE 8 1416d004a2SEvgeniy Polyakov 1516d004a2SEvgeniy Polyakov #define DES3_EDE_KEY_SIZE (3 * DES_KEY_SIZE) 1616d004a2SEvgeniy Polyakov #define DES3_EDE_EXPKEY_WORDS (3 * DES_EXPKEY_WORDS) 1716d004a2SEvgeniy Polyakov #define DES3_EDE_BLOCK_SIZE DES_BLOCK_SIZE 1816d004a2SEvgeniy Polyakov 1904007b0eSArd Biesheuvel struct des_ctx { 2004007b0eSArd Biesheuvel u32 expkey[DES_EXPKEY_WORDS]; 2104007b0eSArd Biesheuvel }; 2204007b0eSArd Biesheuvel 2304007b0eSArd Biesheuvel struct des3_ede_ctx { 2404007b0eSArd Biesheuvel u32 expkey[DES3_EDE_EXPKEY_WORDS]; 2504007b0eSArd Biesheuvel }; 2604007b0eSArd Biesheuvel 2704007b0eSArd Biesheuvel void des_encrypt(const struct des_ctx *ctx, u8 *dst, const u8 *src); 2804007b0eSArd Biesheuvel void des_decrypt(const struct des_ctx *ctx, u8 *dst, const u8 *src); 2904007b0eSArd Biesheuvel 3004007b0eSArd Biesheuvel void des3_ede_encrypt(const struct des3_ede_ctx *dctx, u8 *dst, const u8 *src); 3104007b0eSArd Biesheuvel void des3_ede_decrypt(const struct des3_ede_ctx *dctx, u8 *dst, const u8 *src); 3204007b0eSArd Biesheuvel 3304007b0eSArd Biesheuvel /** 3404007b0eSArd Biesheuvel * des_expand_key - Expand a DES input key into a key schedule 3504007b0eSArd Biesheuvel * @ctx: the key schedule 3604007b0eSArd Biesheuvel * @key: buffer containing the input key 3704007b0eSArd Biesheuvel * @len: size of the buffer contents 3804007b0eSArd Biesheuvel * 3904007b0eSArd Biesheuvel * Returns 0 on success, -EINVAL if the input key is rejected and -ENOKEY if 4004007b0eSArd Biesheuvel * the key is accepted but has been found to be weak. 4104007b0eSArd Biesheuvel */ 4204007b0eSArd Biesheuvel int des_expand_key(struct des_ctx *ctx, const u8 *key, unsigned int keylen); 4304007b0eSArd Biesheuvel 4404007b0eSArd Biesheuvel /** 4504007b0eSArd Biesheuvel * des3_ede_expand_key - Expand a triple DES input key into a key schedule 4604007b0eSArd Biesheuvel * @ctx: the key schedule 4704007b0eSArd Biesheuvel * @key: buffer containing the input key 4804007b0eSArd Biesheuvel * @len: size of the buffer contents 4904007b0eSArd Biesheuvel * 5004007b0eSArd Biesheuvel * Returns 0 on success, -EINVAL if the input key is rejected and -ENOKEY if 5104007b0eSArd Biesheuvel * the key is accepted but has been found to be weak. Note that weak keys will 5204007b0eSArd Biesheuvel * be rejected (and -EINVAL will be returned) when running in FIPS mode. 5304007b0eSArd Biesheuvel */ 5404007b0eSArd Biesheuvel int des3_ede_expand_key(struct des3_ede_ctx *ctx, const u8 *key, 5504007b0eSArd Biesheuvel unsigned int keylen); 5604007b0eSArd Biesheuvel 5716d004a2SEvgeniy Polyakov #endif /* __CRYPTO_DES_H */ 58