brintos

brintos / linux-shallow public Read only

0
0
Text · 1.9 KiB · ce0f305 Raw
90 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2 3#include <linux/crc64.h>4#include <linux/module.h>5#include <crypto/internal/hash.h>6#include <linux/unaligned.h>7 8static int chksum_init(struct shash_desc *desc)9{10	u64 *crc = shash_desc_ctx(desc);11 12	*crc = 0;13 14	return 0;15}16 17static int chksum_update(struct shash_desc *desc, const u8 *data,18			 unsigned int length)19{20	u64 *crc = shash_desc_ctx(desc);21 22	*crc = crc64_rocksoft_generic(*crc, data, length);23 24	return 0;25}26 27static int chksum_final(struct shash_desc *desc, u8 *out)28{29	u64 *crc = shash_desc_ctx(desc);30 31	put_unaligned_le64(*crc, out);32	return 0;33}34 35static int __chksum_finup(u64 crc, const u8 *data, unsigned int len, u8 *out)36{37	crc = crc64_rocksoft_generic(crc, data, len);38	put_unaligned_le64(crc, out);39	return 0;40}41 42static int chksum_finup(struct shash_desc *desc, const u8 *data,43			unsigned int len, u8 *out)44{45	u64 *crc = shash_desc_ctx(desc);46 47	return __chksum_finup(*crc, data, len, out);48}49 50static int chksum_digest(struct shash_desc *desc, const u8 *data,51			 unsigned int length, u8 *out)52{53	return __chksum_finup(0, data, length, out);54}55 56static struct shash_alg alg = {57	.digestsize	= 	sizeof(u64),58	.init		=	chksum_init,59	.update		=	chksum_update,60	.final		=	chksum_final,61	.finup		=	chksum_finup,62	.digest		=	chksum_digest,63	.descsize	=	sizeof(u64),64	.base		=	{65		.cra_name		=	CRC64_ROCKSOFT_STRING,66		.cra_driver_name	=	"crc64-rocksoft-generic",67		.cra_priority		=	200,68		.cra_blocksize		=	1,69		.cra_module		=	THIS_MODULE,70	}71};72 73static int __init crc64_rocksoft_init(void)74{75	return crypto_register_shash(&alg);76}77 78static void __exit crc64_rocksoft_exit(void)79{80	crypto_unregister_shash(&alg);81}82 83module_init(crc64_rocksoft_init);84module_exit(crc64_rocksoft_exit);85 86MODULE_LICENSE("GPL");87MODULE_DESCRIPTION("Rocksoft model CRC64 calculation.");88MODULE_ALIAS_CRYPTO("crc64-rocksoft");89MODULE_ALIAS_CRYPTO("crc64-rocksoft-generic");90