The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/lib/libcrc32c.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /* 
    2  * CRC32C
    3  *@Article{castagnoli-crc,
    4  * author =       { Guy Castagnoli and Stefan Braeuer and Martin Herrman},
    5  * title =        {{Optimization of Cyclic Redundancy-Check Codes with 24
    6  *                 and 32 Parity Bits}},
    7  * journal =      IEEE Transactions on Communication,
    8  * year =         {1993},
    9  * volume =       {41},
   10  * number =       {6},
   11  * pages =        {},
   12  * month =        {June},
   13  *}
   14  * Used by the iSCSI driver, possibly others, and derived from the
   15  * the iscsi-crc.c module of the linux-iscsi driver at
   16  * http://linux-iscsi.sourceforge.net.
   17  *
   18  * Following the example of lib/crc32, this function is intended to be
   19  * flexible and useful for all users.  Modules that currently have their
   20  * own crc32c, but hopefully may be able to use this one are:
   21  *  net/sctp (please add all your doco to here if you change to
   22  *            use this one!)
   23  *  <endoflist>
   24  *
   25  * Copyright (c) 2004 Cisco Systems, Inc.
   26  * 
   27  * This program is free software; you can redistribute it and/or modify it
   28  * under the terms of the GNU General Public License as published by the Free
   29  * Software Foundation; either version 2 of the License, or (at your option) 
   30  * any later version.
   31  *
   32  */
   33 
   34 #include <crypto/hash.h>
   35 #include <linux/err.h>
   36 #include <linux/init.h>
   37 #include <linux/kernel.h>
   38 #include <linux/module.h>
   39 
   40 static struct crypto_shash *tfm;
   41 
   42 u32 crc32c(u32 crc, const void *address, unsigned int length)
   43 {
   44         struct {
   45                 struct shash_desc shash;
   46                 char ctx[crypto_shash_descsize(tfm)];
   47         } desc;
   48         int err;
   49 
   50         desc.shash.tfm = tfm;
   51         desc.shash.flags = 0;
   52         *(u32 *)desc.ctx = crc;
   53 
   54         err = crypto_shash_update(&desc.shash, address, length);
   55         BUG_ON(err);
   56 
   57         return *(u32 *)desc.ctx;
   58 }
   59 
   60 EXPORT_SYMBOL(crc32c);
   61 
   62 static int __init libcrc32c_mod_init(void)
   63 {
   64         tfm = crypto_alloc_shash("crc32c", 0, 0);
   65         if (IS_ERR(tfm))
   66                 return PTR_ERR(tfm);
   67 
   68         return 0;
   69 }
   70 
   71 static void __exit libcrc32c_mod_fini(void)
   72 {
   73         crypto_free_shash(tfm);
   74 }
   75 
   76 module_init(libcrc32c_mod_init);
   77 module_exit(libcrc32c_mod_fini);
   78 
   79 MODULE_AUTHOR("Clay Haapala <chaapala@cisco.com>");
   80 MODULE_DESCRIPTION("CRC32c (Castagnoli) calculations");
   81 MODULE_LICENSE("GPL");

Cache object: 3ecfabe67d64208ee3c2b71a4cd97800


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.