~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/crypto/des_generic.c

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0-or-later
  2 /*
  3  * Cryptographic API.
  4  *
  5  * DES & Triple DES EDE Cipher Algorithms.
  6  *
  7  * Copyright (c) 2005 Dag Arne Osvik <da@osvik.no>
  8  */
  9 
 10 #include <asm/byteorder.h>
 11 #include <crypto/algapi.h>
 12 #include <linux/bitops.h>
 13 #include <linux/init.h>
 14 #include <linux/module.h>
 15 #include <linux/errno.h>
 16 
 17 #include <crypto/internal/des.h>
 18 
 19 static int des_setkey(struct crypto_tfm *tfm, const u8 *key,
 20                       unsigned int keylen)
 21 {
 22         struct des_ctx *dctx = crypto_tfm_ctx(tfm);
 23         int err;
 24 
 25         err = des_expand_key(dctx, key, keylen);
 26         if (err == -ENOKEY) {
 27                 if (crypto_tfm_get_flags(tfm) & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)
 28                         err = -EINVAL;
 29                 else
 30                         err = 0;
 31         }
 32         if (err)
 33                 memset(dctx, 0, sizeof(*dctx));
 34         return err;
 35 }
 36 
 37 static void crypto_des_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
 38 {
 39         const struct des_ctx *dctx = crypto_tfm_ctx(tfm);
 40 
 41         des_encrypt(dctx, dst, src);
 42 }
 43 
 44 static void crypto_des_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
 45 {
 46         const struct des_ctx *dctx = crypto_tfm_ctx(tfm);
 47 
 48         des_decrypt(dctx, dst, src);
 49 }
 50 
 51 static int des3_ede_setkey(struct crypto_tfm *tfm, const u8 *key,
 52                            unsigned int keylen)
 53 {
 54         struct des3_ede_ctx *dctx = crypto_tfm_ctx(tfm);
 55         int err;
 56 
 57         err = des3_ede_expand_key(dctx, key, keylen);
 58         if (err == -ENOKEY) {
 59                 if (crypto_tfm_get_flags(tfm) & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)
 60                         err = -EINVAL;
 61                 else
 62                         err = 0;
 63         }
 64         if (err)
 65                 memset(dctx, 0, sizeof(*dctx));
 66         return err;
 67 }
 68 
 69 static void crypto_des3_ede_encrypt(struct crypto_tfm *tfm, u8 *dst,
 70                                     const u8 *src)
 71 {
 72         const struct des3_ede_ctx *dctx = crypto_tfm_ctx(tfm);
 73 
 74         des3_ede_encrypt(dctx, dst, src);
 75 }
 76 
 77 static void crypto_des3_ede_decrypt(struct crypto_tfm *tfm, u8 *dst,
 78                                     const u8 *src)
 79 {
 80         const struct des3_ede_ctx *dctx = crypto_tfm_ctx(tfm);
 81 
 82         des3_ede_decrypt(dctx, dst, src);
 83 }
 84 
 85 static struct crypto_alg des_algs[2] = { {
 86         .cra_name               =       "des",
 87         .cra_driver_name        =       "des-generic",
 88         .cra_priority           =       100,
 89         .cra_flags              =       CRYPTO_ALG_TYPE_CIPHER,
 90         .cra_blocksize          =       DES_BLOCK_SIZE,
 91         .cra_ctxsize            =       sizeof(struct des_ctx),
 92         .cra_module             =       THIS_MODULE,
 93         .cra_u                  =       { .cipher = {
 94         .cia_min_keysize        =       DES_KEY_SIZE,
 95         .cia_max_keysize        =       DES_KEY_SIZE,
 96         .cia_setkey             =       des_setkey,
 97         .cia_encrypt            =       crypto_des_encrypt,
 98         .cia_decrypt            =       crypto_des_decrypt } }
 99 }, {
100         .cra_name               =       "des3_ede",
101         .cra_driver_name        =       "des3_ede-generic",
102         .cra_priority           =       100,
103         .cra_flags              =       CRYPTO_ALG_TYPE_CIPHER,
104         .cra_blocksize          =       DES3_EDE_BLOCK_SIZE,
105         .cra_ctxsize            =       sizeof(struct des3_ede_ctx),
106         .cra_module             =       THIS_MODULE,
107         .cra_u                  =       { .cipher = {
108         .cia_min_keysize        =       DES3_EDE_KEY_SIZE,
109         .cia_max_keysize        =       DES3_EDE_KEY_SIZE,
110         .cia_setkey             =       des3_ede_setkey,
111         .cia_encrypt            =       crypto_des3_ede_encrypt,
112         .cia_decrypt            =       crypto_des3_ede_decrypt } }
113 } };
114 
115 static int __init des_generic_mod_init(void)
116 {
117         return crypto_register_algs(des_algs, ARRAY_SIZE(des_algs));
118 }
119 
120 static void __exit des_generic_mod_fini(void)
121 {
122         crypto_unregister_algs(des_algs, ARRAY_SIZE(des_algs));
123 }
124 
125 subsys_initcall(des_generic_mod_init);
126 module_exit(des_generic_mod_fini);
127 
128 MODULE_LICENSE("GPL");
129 MODULE_DESCRIPTION("DES & Triple DES EDE Cipher Algorithms");
130 MODULE_AUTHOR("Dag Arne Osvik <da@osvik.no>");
131 MODULE_ALIAS_CRYPTO("des");
132 MODULE_ALIAS_CRYPTO("des-generic");
133 MODULE_ALIAS_CRYPTO("des3_ede");
134 MODULE_ALIAS_CRYPTO("des3_ede-generic");
135 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php