LCOV - code coverage report
Current view: top level - lib - libcrc32c.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 3 13 23.1 %
Date: 2015-04-12 14:34:49 Functions: 1 3 33.3 %

          Line data    Source code
       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           0 : u32 crc32c(u32 crc, const void *address, unsigned int length)
      43             : {
      44           0 :         SHASH_DESC_ON_STACK(shash, tfm);
      45             :         u32 *ctx = (u32 *)shash_desc_ctx(shash);
      46             :         int err;
      47             : 
      48           0 :         shash->tfm = tfm;
      49           0 :         shash->flags = 0;
      50           0 :         *ctx = crc;
      51             : 
      52           0 :         err = crypto_shash_update(shash, address, length);
      53             :         BUG_ON(err);
      54             : 
      55           0 :         return *ctx;
      56             : }
      57             : 
      58             : EXPORT_SYMBOL(crc32c);
      59             : 
      60           1 : static int __init libcrc32c_mod_init(void)
      61             : {
      62           1 :         tfm = crypto_alloc_shash("crc32c", 0, 0);
      63           1 :         return PTR_ERR_OR_ZERO(tfm);
      64             : }
      65             : 
      66           0 : static void __exit libcrc32c_mod_fini(void)
      67             : {
      68           0 :         crypto_free_shash(tfm);
      69           0 : }
      70             : 
      71             : module_init(libcrc32c_mod_init);
      72             : module_exit(libcrc32c_mod_fini);
      73             : 
      74             : MODULE_AUTHOR("Clay Haapala <chaapala@cisco.com>");
      75             : MODULE_DESCRIPTION("CRC32c (Castagnoli) calculations");
      76             : MODULE_LICENSE("GPL");

Generated by: LCOV version 1.11