crypto: hash - annotate algorithms taking optional key
We need to consistently enforce that keyed hashes cannot be used without setting the key. To do this we need a reliable way to determine whether a given hash algorithm is keyed or not. AF_ALG currently does this by checking for the presence of a ->setkey() method. However, this is actually slightly broken because the CRC-32 algorithms implement ->setkey() but can also be used without a key. (The CRC-32 "key" is not actually a cryptographic key but rather represents the initial state. If not overridden, then a default initial state is used.) Prepare to fix this by introducing a flag CRYPTO_ALG_OPTIONAL_KEY which indicates that the algorithm has a ->setkey() method, but it is not required to be called. Then set it on all the CRC-32 algorithms. The same also applies to the Adler-32 implementation in Lustre. Also, the cryptd and mcryptd templates have to pass through the flag from their underlying algorithm. Cc: stable@vger.kernel.org Signed-off-by:Eric Biggers <ebiggers@google.com> Signed-off-by:
Herbert Xu <herbert@gondor.apana.org.au>
Showing
- arch/arm/crypto/crc32-ce-glue.c 2 additions, 0 deletionsarch/arm/crypto/crc32-ce-glue.c
- arch/arm64/crypto/crc32-ce-glue.c 2 additions, 0 deletionsarch/arm64/crypto/crc32-ce-glue.c
- arch/powerpc/crypto/crc32c-vpmsum_glue.c 1 addition, 0 deletionsarch/powerpc/crypto/crc32c-vpmsum_glue.c
- arch/s390/crypto/crc32-vx.c 3 additions, 0 deletionsarch/s390/crypto/crc32-vx.c
- arch/sparc/crypto/crc32c_glue.c 1 addition, 0 deletionsarch/sparc/crypto/crc32c_glue.c
- arch/x86/crypto/crc32-pclmul_glue.c 1 addition, 0 deletionsarch/x86/crypto/crc32-pclmul_glue.c
- arch/x86/crypto/crc32c-intel_glue.c 1 addition, 0 deletionsarch/x86/crypto/crc32c-intel_glue.c
- crypto/crc32_generic.c 1 addition, 0 deletionscrypto/crc32_generic.c
- crypto/crc32c_generic.c 1 addition, 0 deletionscrypto/crc32c_generic.c
- crypto/cryptd.c 3 additions, 4 deletionscrypto/cryptd.c
- crypto/mcryptd.c 3 additions, 4 deletionscrypto/mcryptd.c
- drivers/crypto/bfin_crc.c 2 additions, 1 deletiondrivers/crypto/bfin_crc.c
- drivers/crypto/stm32/stm32_crc32.c 2 additions, 0 deletionsdrivers/crypto/stm32/stm32_crc32.c
- drivers/staging/lustre/lnet/libcfs/linux/linux-crypto-adler.c 1 addition, 0 deletions...ers/staging/lustre/lnet/libcfs/linux/linux-crypto-adler.c
- include/linux/crypto.h 6 additions, 0 deletionsinclude/linux/crypto.h
Loading
Please register or sign in to comment