crypto: serpent - get rid of obsolete tnepres variant
authorArd Biesheuvel <ardb@kernel.org>
Mon, 1 Feb 2021 18:02:30 +0000 (19:02 +0100)
committerHerbert Xu <herbert@gondor.apana.org.au>
Wed, 10 Feb 2021 06:55:56 +0000 (17:55 +1100)
It is not trivial to trace back why exactly the tnepres variant of
serpent was added ~17 years ago - Google searches come up mostly empty,
but it seems to be related with the 'kerneli' version, which was based
on an incorrect interpretation of the serpent spec.

In other words, nobody is likely to care anymore today, so let's get rid
of it.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/Kconfig
crypto/serpent_generic.c
crypto/tcrypt.c
crypto/testmgr.c
crypto/testmgr.h

index 9779c7f7531f5a660948089c943bcad55b35a49d..15c9c28d9f5333866cd179accc1bb030741aca2d 100644 (file)
@@ -1460,8 +1460,7 @@ config CRYPTO_SERPENT
          Serpent cipher algorithm, by Anderson, Biham & Knudsen.
 
          Keys are allowed to be from 0 to 256 bits in length, in steps
-         of 8 bits.  Also includes the 'Tnepres' algorithm, a reversed
-         variant of Serpent for compatibility with old kerneli.org code.
+         of 8 bits.
 
          See also:
          <https://www.cl.cam.ac.uk/~rja14/serpent.html>
index 492c1d0bfe068e3226320a5663a75a087af58490..a932e0b2964f925c56742891807c51c7b29e3f95 100644 (file)
@@ -5,11 +5,6 @@
  * Serpent Cipher Algorithm.
  *
  * Copyright (C) 2002 Dag Arne Osvik <osvik@ii.uib.no>
- *               2003 Herbert Valerio Riedel <hvr@gnu.org>
- *
- * Added tnepres support:
- *             Ruben Jesus Garcia Hernandez <ruben@ugr.es>, 18.10.2004
- *              Based on code by hvr
  */
 
 #include <linux/init.h>
@@ -576,59 +571,7 @@ static void serpent_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
        __serpent_decrypt(ctx, dst, src);
 }
 
-static int tnepres_setkey(struct crypto_tfm *tfm, const u8 *key,
-                         unsigned int keylen)
-{
-       u8 rev_key[SERPENT_MAX_KEY_SIZE];
-       int i;
-
-       for (i = 0; i < keylen; ++i)
-               rev_key[keylen - i - 1] = key[i];
-
-       return serpent_setkey(tfm, rev_key, keylen);
-}
-
-static void tnepres_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
-{
-       const u32 * const s = (const u32 * const)src;
-       u32 * const d = (u32 * const)dst;
-
-       u32 rs[4], rd[4];
-
-       rs[0] = swab32(s[3]);
-       rs[1] = swab32(s[2]);
-       rs[2] = swab32(s[1]);
-       rs[3] = swab32(s[0]);
-
-       serpent_encrypt(tfm, (u8 *)rd, (u8 *)rs);
-
-       d[0] = swab32(rd[3]);
-       d[1] = swab32(rd[2]);
-       d[2] = swab32(rd[1]);
-       d[3] = swab32(rd[0]);
-}
-
-static void tnepres_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
-{
-       const u32 * const s = (const u32 * const)src;
-       u32 * const d = (u32 * const)dst;
-
-       u32 rs[4], rd[4];
-
-       rs[0] = swab32(s[3]);
-       rs[1] = swab32(s[2]);
-       rs[2] = swab32(s[1]);
-       rs[3] = swab32(s[0]);
-
-       serpent_decrypt(tfm, (u8 *)rd, (u8 *)rs);
-
-       d[0] = swab32(rd[3]);
-       d[1] = swab32(rd[2]);
-       d[2] = swab32(rd[1]);
-       d[3] = swab32(rd[0]);
-}
-
-static struct crypto_alg srp_algs[2] = { {
+static struct crypto_alg srp_alg = {
        .cra_name               =       "serpent",
        .cra_driver_name        =       "serpent-generic",
        .cra_priority           =       100,
@@ -643,38 +586,23 @@ static struct crypto_alg srp_algs[2] = { {
        .cia_setkey             =       serpent_setkey,
        .cia_encrypt            =       serpent_encrypt,
        .cia_decrypt            =       serpent_decrypt } }
-}, {
-       .cra_name               =       "tnepres",
-       .cra_driver_name        =       "tnepres-generic",
-       .cra_flags              =       CRYPTO_ALG_TYPE_CIPHER,
-       .cra_blocksize          =       SERPENT_BLOCK_SIZE,
-       .cra_ctxsize            =       sizeof(struct serpent_ctx),
-       .cra_alignmask          =       3,
-       .cra_module             =       THIS_MODULE,
-       .cra_u                  =       { .cipher = {
-       .cia_min_keysize        =       SERPENT_MIN_KEY_SIZE,
-       .cia_max_keysize        =       SERPENT_MAX_KEY_SIZE,
-       .cia_setkey             =       tnepres_setkey,
-       .cia_encrypt            =       tnepres_encrypt,
-       .cia_decrypt            =       tnepres_decrypt } }
-} };
+};
 
 static int __init serpent_mod_init(void)
 {
-       return crypto_register_algs(srp_algs, ARRAY_SIZE(srp_algs));
+       return crypto_register_alg(&srp_alg);
 }
 
 static void __exit serpent_mod_fini(void)
 {
-       crypto_unregister_algs(srp_algs, ARRAY_SIZE(srp_algs));
+       crypto_unregister_alg(&srp_alg);
 }
 
 subsys_initcall(serpent_mod_init);
 module_exit(serpent_mod_fini);
 
 MODULE_LICENSE("GPL");
-MODULE_DESCRIPTION("Serpent and tnepres (kerneli compatible serpent reversed) Cipher Algorithm");
+MODULE_DESCRIPTION("Serpent Cipher Algorithm");
 MODULE_AUTHOR("Dag Arne Osvik <osvik@ii.uib.no>");
-MODULE_ALIAS_CRYPTO("tnepres");
 MODULE_ALIAS_CRYPTO("serpent");
 MODULE_ALIAS_CRYPTO("serpent-generic");
index 2877b88cfa453381ae4eaf85f7f63f764b69f972..6b7c158dc5087b6325896a0d5eac838296d99ab1 100644 (file)
@@ -70,7 +70,7 @@ static const char *check[] = {
        "des", "md5", "des3_ede", "rot13", "sha1", "sha224", "sha256", "sm3",
        "blowfish", "twofish", "serpent", "sha384", "sha512", "md4", "aes",
        "cast6", "arc4", "michael_mic", "deflate", "crc32c", "tea", "xtea",
-       "khazad", "wp512", "wp384", "wp256", "tnepres", "xeta",  "fcrypt",
+       "khazad", "wp512", "wp384", "wp256", "xeta",  "fcrypt",
        "camellia", "seed", "rmd160",
        "lzo", "lzo-rle", "cts", "sha3-224", "sha3-256", "sha3-384",
        "sha3-512", "streebog256", "streebog512",
@@ -1806,10 +1806,6 @@ static int do_test(const char *alg, u32 type, u32 mask, int m, u32 num_mb)
                ret += tcrypt_test("wp256");
                break;
 
-       case 25:
-               ret += tcrypt_test("ecb(tnepres)");
-               break;
-
        case 26:
                ret += tcrypt_test("ecb(anubis)");
                ret += tcrypt_test("cbc(anubis)");
index 1a4103b1b202aecc588089cbd50d36f76103c1f2..93359999c94bd48f198b5bc0bb1de1e9ac7d18e6 100644 (file)
@@ -4876,12 +4876,6 @@ static const struct alg_test_desc alg_test_descs[] = {
                .suite = {
                        .cipher = __VECS(tea_tv_template)
                }
-       }, {
-               .alg = "ecb(tnepres)",
-               .test = alg_test_skcipher,
-               .suite = {
-                       .cipher = __VECS(tnepres_tv_template)
-               }
        }, {
                .alg = "ecb(twofish)",
                .test = alg_test_skcipher,
index 99aca08263d2c12eee71478cf532709e7ab63dd9..ced56ea0c9b43b2be118bfdee7759eb10c9b6631 100644 (file)
@@ -11415,85 +11415,6 @@ static const struct cipher_testvec serpent_tv_template[] = {
        },
 };
 
-static const struct cipher_testvec tnepres_tv_template[] = {
-       { /* KeySize=0 */
-               .ptext  = "\x00\x01\x02\x03\x04\x05\x06\x07"
-                         "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
-               .ctext  = "\x41\xcc\x6b\x31\x59\x31\x45\x97"
-                         "\x6d\x6f\xbb\x38\x4b\x37\x21\x28",
-               .len    = 16,
-       },
-       { /* KeySize=128, PT=0, I=1 */
-               .ptext  = "\x00\x00\x00\x00\x00\x00\x00\x00"
-                         "\x00\x00\x00\x00\x00\x00\x00\x00",
-               .key    = "\x80\x00\x00\x00\x00\x00\x00\x00"
-                         "\x00\x00\x00\x00\x00\x00\x00\x00",
-               .klen   = 16,
-               .ctext  = "\x49\xaf\xbf\xad\x9d\x5a\x34\x05"
-                         "\x2c\xd8\xff\xa5\x98\x6b\xd2\xdd",
-               .len    = 16,
-       }, { /* KeySize=128 */
-               .key    = "\x00\x01\x02\x03\x04\x05\x06\x07"
-                         "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
-               .klen   = 16,
-               .ptext  = "\x00\x01\x02\x03\x04\x05\x06\x07"
-                         "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
-               .ctext  = "\xea\xf4\xd7\xfc\xd8\x01\x34\x47"
-                         "\x81\x45\x0b\xfa\x0c\xd6\xad\x6e",
-               .len    = 16,
-       }, { /* KeySize=128, I=121 */
-               .key    = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80",
-               .klen   = 16,
-               .ptext  = zeroed_string,
-               .ctext  = "\x3d\xda\xbf\xc0\x06\xda\xab\x06"
-                         "\x46\x2a\xf4\xef\x81\x54\x4e\x26",
-               .len    = 16,
-       }, { /* KeySize=192, PT=0, I=1 */
-               .key    = "\x80\x00\x00\x00\x00\x00\x00\x00"
-                         "\x00\x00\x00\x00\x00\x00\x00\x00"
-                         "\x00\x00\x00\x00\x00\x00\x00\x00",
-               .klen   = 24,
-               .ptext  = "\x00\x00\x00\x00\x00\x00\x00\x00"
-                         "\x00\x00\x00\x00\x00\x00\x00\x00",
-               .ctext  = "\xe7\x8e\x54\x02\xc7\x19\x55\x68"
-                         "\xac\x36\x78\xf7\xa3\xf6\x0c\x66",
-               .len    = 16,
-       }, { /* KeySize=256, PT=0, I=1 */
-               .key    = "\x80\x00\x00\x00\x00\x00\x00\x00"
-                         "\x00\x00\x00\x00\x00\x00\x00\x00"
-                         "\x00\x00\x00\x00\x00\x00\x00\x00"
-                         "\x00\x00\x00\x00\x00\x00\x00\x00",
-               .klen   = 32,
-               .ptext  = "\x00\x00\x00\x00\x00\x00\x00\x00"
-                         "\x00\x00\x00\x00\x00\x00\x00\x00",
-               .ctext  = "\xab\xed\x96\xe7\x66\xbf\x28\xcb"
-                         "\xc0\xeb\xd2\x1a\x82\xef\x08\x19",
-               .len    = 16,
-       }, { /* KeySize=256, I=257 */
-               .key    = "\x1f\x1e\x1d\x1c\x1b\x1a\x19\x18"
-                         "\x17\x16\x15\x14\x13\x12\x11\x10"
-                         "\x0f\x0e\x0d\x0c\x0b\x0a\x09\x08"
-                         "\x07\x06\x05\x04\x03\x02\x01\x00",
-               .klen   = 32,
-               .ptext  = "\x0f\x0e\x0d\x0c\x0b\x0a\x09\x08"
-                         "\x07\x06\x05\x04\x03\x02\x01\x00",
-               .ctext  = "\x5c\xe7\x1c\x70\xd2\x88\x2e\x5b"
-                         "\xb8\x32\xe4\x33\xf8\x9f\x26\xde",
-               .len    = 16,
-       }, { /* KeySize=256 */
-               .key    = "\x00\x01\x02\x03\x04\x05\x06\x07"
-                         "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
-                         "\x10\x11\x12\x13\x14\x15\x16\x17"
-                         "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
-               .klen   = 32,
-               .ptext  = "\x00\x01\x02\x03\x04\x05\x06\x07"
-                         "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
-               .ctext  = "\x64\xa9\x1a\x37\xed\x9f\xe7\x49"
-                         "\xa8\x4e\x76\xd6\xf5\x0d\x78\xee",
-               .len    = 16,
-       }
-};
-
 static const struct cipher_testvec serpent_cbc_tv_template[] = {
        { /* Generated with Crypto++ */
                .key    = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"