Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
lib
libcrc32c.c
Go to the documentation of this file.
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 <
[email protected]
>"
);
80
MODULE_DESCRIPTION
(
"CRC32c (Castagnoli) calculations"
);
81
MODULE_LICENSE
(
"GPL"
);
Generated on Thu Jan 10 2013 14:55:41 for Linux Kernel by
1.8.2