brintos

brintos / linux-shallow public Read only

0
0
Text · 1.9 KiB · 649e687 Raw
75 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/* 3 * CRC32C4 *@Article{castagnoli-crc,5 * author =       { Guy Castagnoli and Stefan Braeuer and Martin Herrman},6 * title =        {{Optimization of Cyclic Redundancy-Check Codes with 247 *                 and 32 Parity Bits}},8 * journal =      IEEE Transactions on Communication,9 * year =         {1993},10 * volume =       {41},11 * number =       {6},12 * pages =        {},13 * month =        {June},14 *}15 * Used by the iSCSI driver, possibly others, and derived from16 * the iscsi-crc.c module of the linux-iscsi driver at17 * http://linux-iscsi.sourceforge.net.18 *19 * Following the example of lib/crc32, this function is intended to be20 * flexible and useful for all users.  Modules that currently have their21 * own crc32c, but hopefully may be able to use this one are:22 *  net/sctp (please add all your doco to here if you change to23 *            use this one!)24 *  <endoflist>25 *26 * Copyright (c) 2004 Cisco Systems, Inc.27 */28 29#include <crypto/hash.h>30#include <linux/err.h>31#include <linux/init.h>32#include <linux/kernel.h>33#include <linux/module.h>34#include <linux/crc32c.h>35 36static struct crypto_shash *tfm;37 38u32 crc32c(u32 crc, const void *address, unsigned int length)39{40	SHASH_DESC_ON_STACK(shash, tfm);41	u32 ret, *ctx = (u32 *)shash_desc_ctx(shash);42	int err;43 44	shash->tfm = tfm;45	*ctx = crc;46 47	err = crypto_shash_update(shash, address, length);48	BUG_ON(err);49 50	ret = *ctx;51	barrier_data(ctx);52	return ret;53}54 55EXPORT_SYMBOL(crc32c);56 57static int __init libcrc32c_mod_init(void)58{59	tfm = crypto_alloc_shash("crc32c", 0, 0);60	return PTR_ERR_OR_ZERO(tfm);61}62 63static void __exit libcrc32c_mod_fini(void)64{65	crypto_free_shash(tfm);66}67 68module_init(libcrc32c_mod_init);69module_exit(libcrc32c_mod_fini);70 71MODULE_AUTHOR("Clay Haapala <chaapala@cisco.com>");72MODULE_DESCRIPTION("CRC32c (Castagnoli) calculations");73MODULE_LICENSE("GPL");74MODULE_SOFTDEP("pre: crc32c");75