]> granicus.if.org Git - postgresql/blob - src/include/utils/pg_crc_tables.h
5524fda43a03098f0f1d4abf396e97222aa633ea
[postgresql] / src / include / utils / pg_crc_tables.h
1 /*-------------------------------------------------------------------------
2  *
3  * pg_crc_tables.h
4  *        Polynomial lookup tables for CRC macros
5  *
6  * We make these tables available as a .h file so that programs not linked
7  * with libpgport can still use the macros in pg_crc.h.  They just need
8  * to #include this header as well.
9  *
10  * See Ross Williams' excellent introduction
11  * A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS, available from
12  * http://www.ross.net/crc/download/crc_v3.txt or several other net sites.
13  *
14  * These lookup tables are for normal, not "reflected", in Williams' terms,
15  * CRC.
16  *
17  * Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group
18  * Portions Copyright (c) 1994, Regents of the University of California
19  *
20  * src/include/utils/pg_crc_tables.h
21  *
22  *-------------------------------------------------------------------------
23  */
24 #ifndef PG_CRC_TABLES_H
25 #define PG_CRC_TABLES_H
26
27 /*
28  * This table is based on the so-called Castagnoli polynomial (the same
29  * that is used e.g. in iSCSI).
30  */
31 const uint32 pg_crc32c_table[256] = {
32         0x00000000, 0xF26B8303, 0xE13B70F7, 0x1350F3F4,
33         0xC79A971F, 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB,
34         0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B,
35         0x4D43CFD0, 0xBF284CD3, 0xAC78BF27, 0x5E133C24,
36         0x105EC76F, 0xE235446C, 0xF165B798, 0x030E349B,
37         0xD7C45070, 0x25AFD373, 0x36FF2087, 0xC494A384,
38         0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54,
39         0x5D1D08BF, 0xAF768BBC, 0xBC267848, 0x4E4DFB4B,
40         0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A,
41         0xE72719C1, 0x154C9AC2, 0x061C6936, 0xF477EA35,
42         0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5,
43         0x6DFE410E, 0x9F95C20D, 0x8CC531F9, 0x7EAEB2FA,
44         0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45,
45         0xF779DEAE, 0x05125DAD, 0x1642AE59, 0xE4292D5A,
46         0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A,
47         0x7DA08661, 0x8FCB0562, 0x9C9BF696, 0x6EF07595,
48         0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48,
49         0x86E18AA3, 0x748A09A0, 0x67DAFA54, 0x95B17957,
50         0xCBA24573, 0x39C9C670, 0x2A993584, 0xD8F2B687,
51         0x0C38D26C, 0xFE53516F, 0xED03A29B, 0x1F682198,
52         0x5125DAD3, 0xA34E59D0, 0xB01EAA24, 0x42752927,
53         0x96BF4DCC, 0x64D4CECF, 0x77843D3B, 0x85EFBE38,
54         0xDBFC821C, 0x2997011F, 0x3AC7F2EB, 0xC8AC71E8,
55         0x1C661503, 0xEE0D9600, 0xFD5D65F4, 0x0F36E6F7,
56         0x61C69362, 0x93AD1061, 0x80FDE395, 0x72966096,
57         0xA65C047D, 0x5437877E, 0x4767748A, 0xB50CF789,
58         0xEB1FCBAD, 0x197448AE, 0x0A24BB5A, 0xF84F3859,
59         0x2C855CB2, 0xDEEEDFB1, 0xCDBE2C45, 0x3FD5AF46,
60         0x7198540D, 0x83F3D70E, 0x90A324FA, 0x62C8A7F9,
61         0xB602C312, 0x44694011, 0x5739B3E5, 0xA55230E6,
62         0xFB410CC2, 0x092A8FC1, 0x1A7A7C35, 0xE811FF36,
63         0x3CDB9BDD, 0xCEB018DE, 0xDDE0EB2A, 0x2F8B6829,
64         0x82F63B78, 0x709DB87B, 0x63CD4B8F, 0x91A6C88C,
65         0x456CAC67, 0xB7072F64, 0xA457DC90, 0x563C5F93,
66         0x082F63B7, 0xFA44E0B4, 0xE9141340, 0x1B7F9043,
67         0xCFB5F4A8, 0x3DDE77AB, 0x2E8E845F, 0xDCE5075C,
68         0x92A8FC17, 0x60C37F14, 0x73938CE0, 0x81F80FE3,
69         0x55326B08, 0xA759E80B, 0xB4091BFF, 0x466298FC,
70         0x1871A4D8, 0xEA1A27DB, 0xF94AD42F, 0x0B21572C,
71         0xDFEB33C7, 0x2D80B0C4, 0x3ED04330, 0xCCBBC033,
72         0xA24BB5A6, 0x502036A5, 0x4370C551, 0xB11B4652,
73         0x65D122B9, 0x97BAA1BA, 0x84EA524E, 0x7681D14D,
74         0x2892ED69, 0xDAF96E6A, 0xC9A99D9E, 0x3BC21E9D,
75         0xEF087A76, 0x1D63F975, 0x0E330A81, 0xFC588982,
76         0xB21572C9, 0x407EF1CA, 0x532E023E, 0xA145813D,
77         0x758FE5D6, 0x87E466D5, 0x94B49521, 0x66DF1622,
78         0x38CC2A06, 0xCAA7A905, 0xD9F75AF1, 0x2B9CD9F2,
79         0xFF56BD19, 0x0D3D3E1A, 0x1E6DCDEE, 0xEC064EED,
80         0xC38D26C4, 0x31E6A5C7, 0x22B65633, 0xD0DDD530,
81         0x0417B1DB, 0xF67C32D8, 0xE52CC12C, 0x1747422F,
82         0x49547E0B, 0xBB3FFD08, 0xA86F0EFC, 0x5A048DFF,
83         0x8ECEE914, 0x7CA56A17, 0x6FF599E3, 0x9D9E1AE0,
84         0xD3D3E1AB, 0x21B862A8, 0x32E8915C, 0xC083125F,
85         0x144976B4, 0xE622F5B7, 0xF5720643, 0x07198540,
86         0x590AB964, 0xAB613A67, 0xB831C993, 0x4A5A4A90,
87         0x9E902E7B, 0x6CFBAD78, 0x7FAB5E8C, 0x8DC0DD8F,
88         0xE330A81A, 0x115B2B19, 0x020BD8ED, 0xF0605BEE,
89         0x24AA3F05, 0xD6C1BC06, 0xC5914FF2, 0x37FACCF1,
90         0x69E9F0D5, 0x9B8273D6, 0x88D28022, 0x7AB90321,
91         0xAE7367CA, 0x5C18E4C9, 0x4F48173D, 0xBD23943E,
92         0xF36E6F75, 0x0105EC76, 0x12551F82, 0xE03E9C81,
93         0x34F4F86A, 0xC69F7B69, 0xD5CF889D, 0x27A40B9E,
94         0x79B737BA, 0x8BDCB4B9, 0x988C474D, 0x6AE7C44E,
95         0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351
96 };
97
98
99 /*
100  * This table is based on the polynomial
101  *      x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1.
102  * (This is the same polynomial used in Ethernet checksums, for instance.)
103  */
104 const uint32 pg_crc32_table[256] = {
105         0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
106         0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
107         0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
108         0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
109         0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
110         0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
111         0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
112         0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
113         0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
114         0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
115         0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
116         0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
117         0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
118         0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
119         0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
120         0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
121         0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
122         0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
123         0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
124         0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
125         0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
126         0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
127         0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
128         0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
129         0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
130         0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
131         0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
132         0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
133         0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
134         0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
135         0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
136         0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
137         0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
138         0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
139         0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
140         0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
141         0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
142         0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
143         0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
144         0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
145         0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
146         0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
147         0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
148         0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
149         0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
150         0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
151         0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
152         0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
153         0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
154         0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
155         0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
156         0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
157         0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
158         0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
159         0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
160         0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
161         0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
162         0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
163         0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
164         0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
165         0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
166         0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
167         0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
168         0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
169 };
170
171 #endif   /* PG_CRC_TABLES_H */