On Thu, Feb 15, 2018 at 02:22:14PM -0800, Eric Biggers wrote: > On Fri, Feb 09, 2018 at 10:11:06PM +0000, James Hogan wrote: > > +static struct shash_alg crc32_alg = { > > + .digestsize = CHKSUM_DIGEST_SIZE, > > + .setkey = chksum_setkey, > > + .init = chksum_init, > > + .update = chksum_update, > > + .final = chksum_final, > > + .finup = chksum_finup, > > + .digest = chksum_digest, > > + .descsize = sizeof(struct chksum_desc_ctx), > > + .base = { > > + .cra_name = "crc32", > > + .cra_driver_name = "crc32-mips-hw", > > + .cra_priority = 300, > > + .cra_blocksize = CHKSUM_BLOCK_SIZE, > > + .cra_alignmask = 0, > > + .cra_ctxsize = sizeof(struct chksum_ctx), > > + .cra_module = THIS_MODULE, > > + .cra_init = chksum_cra_init, > > + } > > +}; > > + > > + > > +static struct shash_alg crc32c_alg = { > > + .digestsize = CHKSUM_DIGEST_SIZE, > > + .setkey = chksum_setkey, > > + .init = chksum_init, > > + .update = chksumc_update, > > + .final = chksumc_final, > > + .finup = chksumc_finup, > > + .digest = chksumc_digest, > > + .descsize = sizeof(struct chksum_desc_ctx), > > + .base = { > > + .cra_name = "crc32c", > > + .cra_driver_name = "crc32c-mips-hw", > > + .cra_priority = 300, > > + .cra_blocksize = CHKSUM_BLOCK_SIZE, > > + .cra_alignmask = 0, > > + .cra_ctxsize = sizeof(struct chksum_ctx), > > + .cra_module = THIS_MODULE, > > + .cra_init = chksum_cra_init, > > + } > > +}; > > Does this actually work on the latest kernel? Now hash algorithms must have > CRYPTO_ALG_OPTIONAL_KEY in .cra_flags if they have a .setkey method but don't > require it to be called, otherwise the crypto API will think it's a keyed hash > and not allow it to be used without a key. I had to add this flag to the other > CRC32 and CRC32C algorithms (commit a208fa8f33031). One of the CRC32C test > vectors even doesn't set a key so it should be causing the self-tests to fail > for "crc32c-mips-hw". (We should add such a test vector for CRC32 too, though.) Thanks Eric. It does indeed fail now with: alg: hash: digest failed on test 1 for crc32c-mips-hw: ret=161 I'll squash in the following change: diff --git a/arch/mips/crypto/crc32-mips.c b/arch/mips/crypto/crc32-mips.c index 8d4122f37fa5..7d1d2425746f 100644 --- a/arch/mips/crypto/crc32-mips.c +++ b/arch/mips/crypto/crc32-mips.c @@ -284,6 +284,7 @@ static struct shash_alg crc32_alg = { .cra_name = "crc32", .cra_driver_name = "crc32-mips-hw", .cra_priority = 300, + .cra_flags = CRYPTO_ALG_OPTIONAL_KEY, .cra_blocksize = CHKSUM_BLOCK_SIZE, .cra_alignmask = 0, .cra_ctxsize = sizeof(struct chksum_ctx), @@ -305,6 +306,7 @@ static struct shash_alg crc32c_alg = { .cra_name = "crc32c", .cra_driver_name = "crc32c-mips-hw", .cra_priority = 300, + .cra_flags = CRYPTO_ALG_OPTIONAL_KEY, .cra_blocksize = CHKSUM_BLOCK_SIZE, .cra_alignmask = 0, .cra_ctxsize = sizeof(struct chksum_ctx), Cheers James
Attachment:
signature.asc
Description: Digital signature