xref: /haiku/src/add-ons/kernel/file_systems/btrfs/CRCTable.cpp (revision 8f40380d6a1461226df8846d387380f6409b04b4)
16f4c36e2SJérôme Duval /*
26f4c36e2SJérôme Duval  * Copyright 2011, Haiku Inc. All rights reserved.
36f4c36e2SJérôme Duval  * This file may be used under the terms of the MIT License.
46f4c36e2SJérôme Duval  *
56f4c36e2SJérôme Duval  * Authors:
66f4c36e2SJérôme Duval  *		Jérôme Duval
76f4c36e2SJérôme Duval  */
86f4c36e2SJérôme Duval 
96f4c36e2SJérôme Duval 
10bf5d0ce3Shyche #include "system_dependencies.h"
116f4c36e2SJérôme Duval 
126f4c36e2SJérôme Duval 
136f4c36e2SJérôme Duval //! CRC 03667067501 table, as generated by crc_table.cpp
146f4c36e2SJérôme Duval static uint32 kCrcTable[256] = {
15f10ebdb1Sbrjhaiku 	0x00000000, 0xf26b8303, 0xe13b70f7, 0x1350f3f4, 0xc79a971f, 0x35f1141c,
16f10ebdb1Sbrjhaiku 	0x26a1e7e8, 0xd4ca64eb, 0x8ad958cf, 0x78b2dbcc, 0x6be22838, 0x9989ab3b,
17f10ebdb1Sbrjhaiku 	0x4d43cfd0, 0xbf284cd3, 0xac78bf27, 0x5e133c24, 0x105ec76f, 0xe235446c,
18f10ebdb1Sbrjhaiku 	0xf165b798, 0x030e349b, 0xd7c45070, 0x25afd373, 0x36ff2087, 0xc494a384,
19f10ebdb1Sbrjhaiku 	0x9a879fa0, 0x68ec1ca3, 0x7bbcef57, 0x89d76c54, 0x5d1d08bf, 0xaf768bbc,
20f10ebdb1Sbrjhaiku 	0xbc267848, 0x4e4dfb4b, 0x20bd8ede, 0xd2d60ddd, 0xc186fe29, 0x33ed7d2a,
21f10ebdb1Sbrjhaiku 	0xe72719c1, 0x154c9ac2, 0x061c6936, 0xf477ea35, 0xaa64d611, 0x580f5512,
22f10ebdb1Sbrjhaiku 	0x4b5fa6e6, 0xb93425e5, 0x6dfe410e, 0x9f95c20d, 0x8cc531f9, 0x7eaeb2fa,
23f10ebdb1Sbrjhaiku 	0x30e349b1, 0xc288cab2, 0xd1d83946, 0x23b3ba45, 0xf779deae, 0x05125dad,
24f10ebdb1Sbrjhaiku 	0x1642ae59, 0xe4292d5a, 0xba3a117e, 0x4851927d, 0x5b016189, 0xa96ae28a,
25f10ebdb1Sbrjhaiku 	0x7da08661, 0x8fcb0562, 0x9c9bf696, 0x6ef07595, 0x417b1dbc, 0xb3109ebf,
26f10ebdb1Sbrjhaiku 	0xa0406d4b, 0x522bee48, 0x86e18aa3, 0x748a09a0, 0x67dafa54, 0x95b17957,
27f10ebdb1Sbrjhaiku 	0xcba24573, 0x39c9c670, 0x2a993584, 0xd8f2b687, 0x0c38d26c, 0xfe53516f,
28f10ebdb1Sbrjhaiku 	0xed03a29b, 0x1f682198, 0x5125dad3, 0xa34e59d0, 0xb01eaa24, 0x42752927,
29f10ebdb1Sbrjhaiku 	0x96bf4dcc, 0x64d4cecf, 0x77843d3b, 0x85efbe38, 0xdbfc821c, 0x2997011f,
30f10ebdb1Sbrjhaiku 	0x3ac7f2eb, 0xc8ac71e8, 0x1c661503, 0xee0d9600, 0xfd5d65f4, 0x0f36e6f7,
31f10ebdb1Sbrjhaiku 	0x61c69362, 0x93ad1061, 0x80fde395, 0x72966096, 0xa65c047d, 0x5437877e,
32f10ebdb1Sbrjhaiku 	0x4767748a, 0xb50cf789, 0xeb1fcbad, 0x197448ae, 0x0a24bb5a, 0xf84f3859,
33f10ebdb1Sbrjhaiku 	0x2c855cb2, 0xdeeedfb1, 0xcdbe2c45, 0x3fd5af46, 0x7198540d, 0x83f3d70e,
34f10ebdb1Sbrjhaiku 	0x90a324fa, 0x62c8a7f9, 0xb602c312, 0x44694011, 0x5739b3e5, 0xa55230e6,
35f10ebdb1Sbrjhaiku 	0xfb410cc2, 0x092a8fc1, 0x1a7a7c35, 0xe811ff36, 0x3cdb9bdd, 0xceb018de,
36f10ebdb1Sbrjhaiku 	0xdde0eb2a, 0x2f8b6829, 0x82f63b78, 0x709db87b, 0x63cd4b8f, 0x91a6c88c,
37f10ebdb1Sbrjhaiku 	0x456cac67, 0xb7072f64, 0xa457dc90, 0x563c5f93, 0x082f63b7, 0xfa44e0b4,
38f10ebdb1Sbrjhaiku 	0xe9141340, 0x1b7f9043, 0xcfb5f4a8, 0x3dde77ab, 0x2e8e845f, 0xdce5075c,
39f10ebdb1Sbrjhaiku 	0x92a8fc17, 0x60c37f14, 0x73938ce0, 0x81f80fe3, 0x55326b08, 0xa759e80b,
40f10ebdb1Sbrjhaiku 	0xb4091bff, 0x466298fc, 0x1871a4d8, 0xea1a27db, 0xf94ad42f, 0x0b21572c,
41f10ebdb1Sbrjhaiku 	0xdfeb33c7, 0x2d80b0c4, 0x3ed04330, 0xccbbc033, 0xa24bb5a6, 0x502036a5,
42f10ebdb1Sbrjhaiku 	0x4370c551, 0xb11b4652, 0x65d122b9, 0x97baa1ba, 0x84ea524e, 0x7681d14d,
43f10ebdb1Sbrjhaiku 	0x2892ed69, 0xdaf96e6a, 0xc9a99d9e, 0x3bc21e9d, 0xef087a76, 0x1d63f975,
44f10ebdb1Sbrjhaiku 	0x0e330a81, 0xfc588982, 0xb21572c9, 0x407ef1ca, 0x532e023e, 0xa145813d,
45f10ebdb1Sbrjhaiku 	0x758fe5d6, 0x87e466d5, 0x94b49521, 0x66df1622, 0x38cc2a06, 0xcaa7a905,
46f10ebdb1Sbrjhaiku 	0xd9f75af1, 0x2b9cd9f2, 0xff56bd19, 0x0d3d3e1a, 0x1e6dcdee, 0xec064eed,
47f10ebdb1Sbrjhaiku 	0xc38d26c4, 0x31e6a5c7, 0x22b65633, 0xd0ddd530, 0x0417b1db, 0xf67c32d8,
48f10ebdb1Sbrjhaiku 	0xe52cc12c, 0x1747422f, 0x49547e0b, 0xbb3ffd08, 0xa86f0efc, 0x5a048dff,
49f10ebdb1Sbrjhaiku 	0x8ecee914, 0x7ca56a17, 0x6ff599e3, 0x9d9e1ae0, 0xd3d3e1ab, 0x21b862a8,
50f10ebdb1Sbrjhaiku 	0x32e8915c, 0xc083125f, 0x144976b4, 0xe622f5b7, 0xf5720643, 0x07198540,
51f10ebdb1Sbrjhaiku 	0x590ab964, 0xab613a67, 0xb831c993, 0x4a5a4a90, 0x9e902e7b, 0x6cfbad78,
52f10ebdb1Sbrjhaiku 	0x7fab5e8c, 0x8dc0dd8f, 0xe330a81a, 0x115b2b19, 0x020bd8ed, 0xf0605bee,
53f10ebdb1Sbrjhaiku 	0x24aa3f05, 0xd6c1bc06, 0xc5914ff2, 0x37faccf1, 0x69e9f0d5, 0x9b8273d6,
54f10ebdb1Sbrjhaiku 	0x88d28022, 0x7ab90321, 0xae7367ca, 0x5c18e4c9, 0x4f48173d, 0xbd23943e,
55f10ebdb1Sbrjhaiku 	0xf36e6f75, 0x0105ec76, 0x12551f82, 0xe03e9c81, 0x34f4f86a, 0xc69f7b69,
56f10ebdb1Sbrjhaiku 	0xd5cf889d, 0x27a40b9e, 0x79b737ba, 0x8bdcb4b9, 0x988c474d, 0x6ae7c44e,
57f10ebdb1Sbrjhaiku 	0xbe2da0a5, 0x4c4623a6, 0x5f16d052, 0xad7d5351
586f4c36e2SJérôme Duval };
596f4c36e2SJérôme Duval 
606f4c36e2SJérôme Duval 
616f4c36e2SJérôme Duval /*! \brief Calculates the UDF crc checksum for the given byte stream.
626f4c36e2SJérôme Duval 
636f4c36e2SJérôme Duval 	Based on crc code from UDF-2.50 6.5, as permitted.
646f4c36e2SJérôme Duval 	This is reversed.
656f4c36e2SJérôme Duval 
666f4c36e2SJérôme Duval 	\param data Pointer to the byte stream.
676f4c36e2SJérôme Duval 	\param length Length of the byte stream in bytes.
686f4c36e2SJérôme Duval 
69*8f40380dSbrjhaiku 	\return The crc checksum.
706f4c36e2SJérôme Duval */
716f4c36e2SJérôme Duval uint32
calculate_crc(uint32 crc,uint8 * data,uint16 length)726f4c36e2SJérôme Duval calculate_crc(uint32 crc, uint8* data, uint16 length)
736f4c36e2SJérôme Duval {
746f4c36e2SJérôme Duval 	if (data) {
756f4c36e2SJérôme Duval 		for ( ; length > 0; length--, data++)
766f4c36e2SJérôme Duval 			crc = kCrcTable[(crc ^ *data) & 0xff] ^ (crc >> 8);
776f4c36e2SJérôme Duval 	}
786f4c36e2SJérôme Duval 	return crc;
796f4c36e2SJérôme Duval }
806f4c36e2SJérôme Duval 
81