• Eric Biggers's avatar
    crypto: cipher - remove crt_u.cipher (struct cipher_tfm) · e8cfed5e
    Eric Biggers authored
    Of the three fields in crt_u.cipher (struct cipher_tfm), ->cit_setkey()
    is pointless because it always points to setkey() in crypto/cipher.c.
    
    ->cit_decrypt_one() and ->cit_encrypt_one() are slightly less pointless,
    since if the algorithm doesn't have an alignmask, they are set directly
    to ->cia_encrypt() and ->cia_decrypt().  However, this "optimization"
    isn't worthwhile because:
    
    - The "cipher" algorithm type is the only algorithm still using crt_u,
      so it's bloating every struct crypto_tfm for every algorithm type.
    
    - If the algorithm has an alignmask, this "optimization" actually makes
      things slower, as it causes 2 indirect calls per block rather than 1.
    
    - It adds extra code complexity.
    
    - Some templates already call ->cia_encrypt()/->cia_decrypt() directly
      instead of going through ->cit_encrypt_one()/->cit_decrypt_one().
    
    - The "cipher" algorithm type never gives optimal performance anyway.
      For that, a higher-level type such as skcipher needs to be used.
    
    Therefore, just remove the extra indirection, and make
    crypto_cipher_setkey(), crypto_cipher_encrypt_one(), and
    crypto_cipher_decrypt_one() be direct calls into crypto/cipher.c.
    
    Also remove the unused function crypto_cipher_cast().
    Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    e8cfed5e
api.c 13.5 KB