On Thu, 30 Jan 2025 at 04:54, Eric Biggers <ebiggers@xxxxxxxxxx> wrote: > > From: Eric Biggers <ebiggers@xxxxxxxxxx> > > Remove crc64-rocksoft from the crypto API. It has no known user now > that the lib is no longer built on top of it. It was also added much > more recently than the longstanding crc32 and crc32c. Unlike crc32 and > crc32c, crc64-rocksoft is also not mentioned in the dm-integrity > documentation and there are no references to it in anywhere in the > cryptsetup git repo, so it is unlikely to have any user there either. > > Also, this CRC variant is named incorrectly; it has nothing to do with > Rocksoft and should be called crc64-nvme. That is yet another reason to > remove it from the crypto API; we would not want anyone to start > depending on the current incorrect algorithm name of crc64-rocksoft. > > Note that this change temporarily makes this CRC variant not be covered > by any tests, as previously it was relying on the crypto self-tests. > This will be fixed by adding this CRC variant to crc_kunit. > > Signed-off-by: Eric Biggers <ebiggers@xxxxxxxxxx> > --- > crypto/Kconfig | 11 ---- > crypto/Makefile | 1 - > crypto/crc64_rocksoft_generic.c | 89 --------------------------------- > crypto/testmgr.c | 7 --- > crypto/testmgr.h | 12 ----- > include/linux/crc64.h | 2 - > 6 files changed, 122 deletions(-) > delete mode 100644 crypto/crc64_rocksoft_generic.c > Reviewed-by: Ard Biesheuvel <ardb@xxxxxxxxxx> > diff --git a/crypto/Kconfig b/crypto/Kconfig > index 74ae5f52b784..9ffb59b1aac3 100644 > --- a/crypto/Kconfig > +++ b/crypto/Kconfig > @@ -1088,21 +1088,10 @@ config CRYPTO_CRCT10DIF > help > CRC16 CRC algorithm used for the T10 (SCSI) Data Integrity Field (DIF) > > CRC algorithm used by the SCSI Block Commands standard. > > -config CRYPTO_CRC64_ROCKSOFT > - tristate "CRC64 based on Rocksoft Model algorithm" > - depends on CRC64 > - select CRYPTO_HASH > - help > - CRC64 CRC algorithm based on the Rocksoft Model CRC Algorithm > - > - Used by the NVMe implementation of T10 DIF (BLK_DEV_INTEGRITY) > - > - See https://zlib.net/crc_v3.txt > - > endmenu > > menu "Compression" > > config CRYPTO_DEFLATE > diff --git a/crypto/Makefile b/crypto/Makefile > index f67e853c4690..d3b79b8c9022 100644 > --- a/crypto/Makefile > +++ b/crypto/Makefile > @@ -155,11 +155,10 @@ obj-$(CONFIG_CRYPTO_CRC32C) += crc32c_generic.o > obj-$(CONFIG_CRYPTO_CRC32) += crc32_generic.o > CFLAGS_crc32c_generic.o += -DARCH=$(ARCH) > CFLAGS_crc32_generic.o += -DARCH=$(ARCH) > obj-$(CONFIG_CRYPTO_CRCT10DIF) += crct10dif_generic.o > CFLAGS_crct10dif_generic.o += -DARCH=$(ARCH) > -obj-$(CONFIG_CRYPTO_CRC64_ROCKSOFT) += crc64_rocksoft_generic.o > obj-$(CONFIG_CRYPTO_AUTHENC) += authenc.o authencesn.o > obj-$(CONFIG_CRYPTO_LZO) += lzo.o lzo-rle.o > obj-$(CONFIG_CRYPTO_LZ4) += lz4.o > obj-$(CONFIG_CRYPTO_LZ4HC) += lz4hc.o > obj-$(CONFIG_CRYPTO_XXHASH) += xxhash_generic.o > diff --git a/crypto/crc64_rocksoft_generic.c b/crypto/crc64_rocksoft_generic.c > deleted file mode 100644 > index ce0f3059b912..000000000000 > --- a/crypto/crc64_rocksoft_generic.c > +++ /dev/null > @@ -1,89 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0-only > - > -#include <linux/crc64.h> > -#include <linux/module.h> > -#include <crypto/internal/hash.h> > -#include <linux/unaligned.h> > - > -static int chksum_init(struct shash_desc *desc) > -{ > - u64 *crc = shash_desc_ctx(desc); > - > - *crc = 0; > - > - return 0; > -} > - > -static int chksum_update(struct shash_desc *desc, const u8 *data, > - unsigned int length) > -{ > - u64 *crc = shash_desc_ctx(desc); > - > - *crc = crc64_rocksoft_generic(*crc, data, length); > - > - return 0; > -} > - > -static int chksum_final(struct shash_desc *desc, u8 *out) > -{ > - u64 *crc = shash_desc_ctx(desc); > - > - put_unaligned_le64(*crc, out); > - return 0; > -} > - > -static int __chksum_finup(u64 crc, const u8 *data, unsigned int len, u8 *out) > -{ > - crc = crc64_rocksoft_generic(crc, data, len); > - put_unaligned_le64(crc, out); > - return 0; > -} > - > -static int chksum_finup(struct shash_desc *desc, const u8 *data, > - unsigned int len, u8 *out) > -{ > - u64 *crc = shash_desc_ctx(desc); > - > - return __chksum_finup(*crc, data, len, out); > -} > - > -static int chksum_digest(struct shash_desc *desc, const u8 *data, > - unsigned int length, u8 *out) > -{ > - return __chksum_finup(0, data, length, out); > -} > - > -static struct shash_alg alg = { > - .digestsize = sizeof(u64), > - .init = chksum_init, > - .update = chksum_update, > - .final = chksum_final, > - .finup = chksum_finup, > - .digest = chksum_digest, > - .descsize = sizeof(u64), > - .base = { > - .cra_name = CRC64_ROCKSOFT_STRING, > - .cra_driver_name = "crc64-rocksoft-generic", > - .cra_priority = 200, > - .cra_blocksize = 1, > - .cra_module = THIS_MODULE, > - } > -}; > - > -static int __init crc64_rocksoft_init(void) > -{ > - return crypto_register_shash(&alg); > -} > - > -static void __exit crc64_rocksoft_exit(void) > -{ > - crypto_unregister_shash(&alg); > -} > - > -module_init(crc64_rocksoft_init); > -module_exit(crc64_rocksoft_exit); > - > -MODULE_LICENSE("GPL"); > -MODULE_DESCRIPTION("Rocksoft model CRC64 calculation."); > -MODULE_ALIAS_CRYPTO("crc64-rocksoft"); > -MODULE_ALIAS_CRYPTO("crc64-rocksoft-generic"); > diff --git a/crypto/testmgr.c b/crypto/testmgr.c > index e61490ba4095..0c1c3a6453b6 100644 > --- a/crypto/testmgr.c > +++ b/crypto/testmgr.c > @@ -4757,17 +4757,10 @@ static const struct alg_test_desc alg_test_descs[] = { > .test = alg_test_crc32c, > .fips_allowed = 1, > .suite = { > .hash = __VECS(crc32c_tv_template) > } > - }, { > - .alg = "crc64-rocksoft", > - .test = alg_test_hash, > - .fips_allowed = 1, > - .suite = { > - .hash = __VECS(crc64_rocksoft_tv_template) > - } > }, { > .alg = "crct10dif", > .test = alg_test_hash, > .fips_allowed = 1, > .suite = { > diff --git a/crypto/testmgr.h b/crypto/testmgr.h > index d754ab997186..4ab05046b734 100644 > --- a/crypto/testmgr.h > +++ b/crypto/testmgr.h > @@ -6018,22 +6018,10 @@ static const struct hash_testvec rmd160_tv_template[] = { > }; > > static const u8 zeroes[4096] = { [0 ... 4095] = 0 }; > static const u8 ones[4096] = { [0 ... 4095] = 0xff }; > > -static const struct hash_testvec crc64_rocksoft_tv_template[] = { > - { > - .plaintext = zeroes, > - .psize = 4096, > - .digest = "\x4e\xb6\x22\xeb\x67\xd3\x82\x64", > - }, { > - .plaintext = ones, > - .psize = 4096, > - .digest = "\xac\xa3\xec\x02\x73\xba\xdd\xc0", > - } > -}; > - > static const struct hash_testvec crct10dif_tv_template[] = { > { > .plaintext = "abc", > .psize = 3, > .digest = (u8 *)(u16 []){ 0x443b }, > diff --git a/include/linux/crc64.h b/include/linux/crc64.h > index 0a595b272166..7880aeab69d6 100644 > --- a/include/linux/crc64.h > +++ b/include/linux/crc64.h > @@ -5,12 +5,10 @@ > #ifndef _LINUX_CRC64_H > #define _LINUX_CRC64_H > > #include <linux/types.h> > > -#define CRC64_ROCKSOFT_STRING "crc64-rocksoft" > - > u64 __pure crc64_be(u64 crc, const void *p, size_t len); > u64 __pure crc64_rocksoft_generic(u64 crc, const void *p, size_t len); > > /** > * crc64_rocksoft_update - Calculate bitwise Rocksoft CRC64 > -- > 2.48.1 >