Annotation of elwix/tools/oldlzma/SRC/7zip/Archive/7z_C/7zCrc.c, revision 1.1.1.1
1.1 misho 1: /* 7zCrc.c */
2:
3: #include "7zCrc.h"
4:
5: #define kCrcPoly 0xEDB88320
6:
7: UInt32 g_CrcTable[256];
8:
9: void InitCrcTable()
10: {
11: UInt32 i;
12: for (i = 0; i < 256; i++)
13: {
14: UInt32 r = i;
15: int j;
16: for (j = 0; j < 8; j++)
17: if (r & 1)
18: r = (r >> 1) ^ kCrcPoly;
19: else
20: r >>= 1;
21: g_CrcTable[i] = r;
22: }
23: }
24:
25: void CrcInit(UInt32 *crc) { *crc = 0xFFFFFFFF; }
26: UInt32 CrcGetDigest(UInt32 *crc) { return *crc ^ 0xFFFFFFFF; }
27:
28: void CrcUpdateByte(UInt32 *crc, Byte b)
29: {
30: *crc = g_CrcTable[((Byte)(*crc)) ^ b] ^ (*crc >> 8);
31: }
32:
33: void CrcUpdateUInt16(UInt32 *crc, UInt16 v)
34: {
35: CrcUpdateByte(crc, (Byte)v);
36: CrcUpdateByte(crc, (Byte)(v >> 8));
37: }
38:
39: void CrcUpdateUInt32(UInt32 *crc, UInt32 v)
40: {
41: int i;
42: for (i = 0; i < 4; i++)
43: CrcUpdateByte(crc, (Byte)(v >> (8 * i)));
44: }
45:
46: void CrcUpdateUInt64(UInt32 *crc, UInt64 v)
47: {
48: int i;
49: for (i = 0; i < 8; i++)
50: {
51: CrcUpdateByte(crc, (Byte)(v));
52: v >>= 8;
53: }
54: }
55:
56: void CrcUpdate(UInt32 *crc, const void *data, size_t size)
57: {
58: UInt32 v = *crc;
59: const Byte *p = (const Byte *)data;
60: for (; size > 0 ; size--, p++)
61: v = g_CrcTable[((Byte)(v)) ^ *p] ^ (v >> 8);
62: *crc = v;
63: }
64:
65: UInt32 CrcCalculateDigest(const void *data, size_t size)
66: {
67: UInt32 crc;
68: CrcInit(&crc);
69: CrcUpdate(&crc, data, size);
70: return CrcGetDigest(&crc);
71: }
72:
73: int CrcVerifyDigest(UInt32 digest, const void *data, size_t size)
74: {
75: return (CrcCalculateDigest(data, size) == digest);
76: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>