Home | History | Annotate | Download | only in e2fsck
      1 /*
      2  * crc32.c --- CRC32 function
      3  *
      4  * Copyright (C) 2008 Theodore Ts'o.
      5  *
      6  * %Begin-Header%
      7  * This file may be redistributed under the terms of the GNU Public
      8  * License.
      9  * %End-Header%
     10  */
     11 
     12 /*
     13  * Oct 15, 2000 Matt Domsch <Matt_Domsch (at) dell.com>
     14  * Nicer crc32 functions/docs submitted by linux (at) horizon.com.  Thanks!
     15  * Code was from the public domain, copyright abandoned.  Code was
     16  * subsequently included in the kernel, thus was re-licensed under the
     17  * GNU GPL v2.
     18  *
     19  * Oct 12, 2000 Matt Domsch <Matt_Domsch (at) dell.com>
     20  * Same crc32 function was used in 5 other places in the kernel.
     21  * I made one version, and deleted the others.
     22  * There are various incantations of crc32().  Some use a seed of 0 or ~0.
     23  * Some xor at the end with ~0.  The generic crc32() function takes
     24  * seed as an argument, and doesn't xor at the end.  Then individual
     25  * users can do whatever they need.
     26  *   drivers/net/smc9194.c uses seed ~0, doesn't xor with ~0.
     27  *   fs/jffs2 uses seed 0, doesn't xor with ~0.
     28  *   fs/partitions/efi.c uses seed ~0, xor's with ~0.
     29  *
     30  * This source code is licensed under the GNU General Public License,
     31  * Version 2.  See the file COPYING for more details.
     32  */
     33 
     34 #include <stdlib.h>
     35 #include <unistd.h>
     36 #include <string.h>
     37 #include <ctype.h>
     38 
     39 #ifdef UNITTEST
     40 #undef ENABLE_NLS
     41 #endif
     42 #include "e2fsck.h"
     43 
     44 #include "crc32defs.h"
     45 #if CRC_LE_BITS == 8
     46 #define tole(x) __constant_cpu_to_le32(x)
     47 #define tobe(x) __constant_cpu_to_be32(x)
     48 #else
     49 #define tole(x) (x)
     50 #define tobe(x) (x)
     51 #endif
     52 #include "crc32table.h"
     53 
     54 #ifdef UNITTEST
     55 
     56 /**
     57  * crc32_le() - Calculate bitwise little-endian Ethernet AUTODIN II CRC32
     58  * @crc: seed value for computation.  ~0 for Ethernet, sometimes 0 for
     59  *	other uses, or the previous crc32 value if computing incrementally.
     60  * @p: pointer to buffer over which CRC is run
     61  * @len: length of buffer @p
     62  */
     63 __u32 crc32_le(__u32 crc, unsigned char const *p, size_t len);
     64 
     65 #if CRC_LE_BITS == 1
     66 /*
     67  * In fact, the table-based code will work in this case, but it can be
     68  * simplified by inlining the table in ?: form.
     69  */
     70 
     71 __u32 crc32_le(__u32 crc, unsigned char const *p, size_t len)
     72 {
     73 	int i;
     74 	while (len--) {
     75 		crc ^= *p++;
     76 		for (i = 0; i < 8; i++)
     77 			crc = (crc >> 1) ^ ((crc & 1) ? CRCPOLY_LE : 0);
     78 	}
     79 	return crc;
     80 }
     81 #else				/* Table-based approach */
     82 
     83 __u32 crc32_le(__u32 crc, unsigned char const *p, size_t len)
     84 {
     85 # if CRC_LE_BITS == 8
     86 	const __u32      *b =(__u32 *)p;
     87 	const __u32      *tab = crc32table_le;
     88 
     89 # ifdef WORDS_BIGENDIAN
     90 #  define DO_CRC(x) crc = tab[ ((crc >> 24) ^ (x)) & 255] ^ (crc<<8)
     91 # else
     92 #  define DO_CRC(x) crc = tab[ (crc ^ (x)) & 255 ] ^ (crc>>8)
     93 # endif
     94 
     95 	crc = __cpu_to_le32(crc);
     96 	/* Align it */
     97 	if(unlikely(((long)b)&3 && len)){
     98 		do {
     99 			__u8 *p = (__u8 *)b;
    100 			DO_CRC(*p++);
    101 			b = (void *)p;
    102 		} while ((--len) && ((long)b)&3 );
    103 	}
    104 	if(likely(len >= 4)){
    105 		/* load data 32 bits wide, xor data 32 bits wide. */
    106 		size_t save_len = len & 3;
    107 	        len = len >> 2;
    108 		--b; /* use pre increment below(*++b) for speed */
    109 		do {
    110 			crc ^= *++b;
    111 			DO_CRC(0);
    112 			DO_CRC(0);
    113 			DO_CRC(0);
    114 			DO_CRC(0);
    115 		} while (--len);
    116 		b++; /* point to next byte(s) */
    117 		len = save_len;
    118 	}
    119 	/* And the last few bytes */
    120 	if(len){
    121 		do {
    122 			__u8 *p = (__u8 *)b;
    123 			DO_CRC(*p++);
    124 			b = (void *)p;
    125 		} while (--len);
    126 	}
    127 
    128 	return __le32_to_cpu(crc);
    129 #undef ENDIAN_SHIFT
    130 #undef DO_CRC
    131 
    132 # elif CRC_LE_BITS == 4
    133 	while (len--) {
    134 		crc ^= *p++;
    135 		crc = (crc >> 4) ^ crc32table_le[crc & 15];
    136 		crc = (crc >> 4) ^ crc32table_le[crc & 15];
    137 	}
    138 	return crc;
    139 # elif CRC_LE_BITS == 2
    140 	while (len--) {
    141 		crc ^= *p++;
    142 		crc = (crc >> 2) ^ crc32table_le[crc & 3];
    143 		crc = (crc >> 2) ^ crc32table_le[crc & 3];
    144 		crc = (crc >> 2) ^ crc32table_le[crc & 3];
    145 		crc = (crc >> 2) ^ crc32table_le[crc & 3];
    146 	}
    147 	return crc;
    148 # endif
    149 }
    150 #endif
    151 
    152 #endif /* UNITTEST */
    153 
    154 /**
    155  * crc32_be() - Calculate bitwise big-endian Ethernet AUTODIN II CRC32
    156  * @crc: seed value for computation.  ~0 for Ethernet, sometimes 0 for
    157  *	other uses, or the previous crc32 value if computing incrementally.
    158  * @p: pointer to buffer over which CRC is run
    159  * @len: length of buffer @p
    160  */
    161 __u32 crc32_be(__u32 crc, unsigned char const *p, size_t len);
    162 
    163 #if CRC_BE_BITS == 1
    164 /*
    165  * In fact, the table-based code will work in this case, but it can be
    166  * simplified by inlining the table in ?: form.
    167  */
    168 
    169 __u32 crc32_be(__u32 crc, unsigned char const *p, size_t len)
    170 {
    171 	int i;
    172 	while (len--) {
    173 		crc ^= *p++ << 24;
    174 		for (i = 0; i < 8; i++)
    175 			crc =
    176 			    (crc << 1) ^ ((crc & 0x80000000) ? CRCPOLY_BE :
    177 					  0);
    178 	}
    179 	return crc;
    180 }
    181 
    182 #else				/* Table-based approach */
    183 __u32 crc32_be(__u32 crc, unsigned char const *p, size_t len)
    184 {
    185 # if CRC_BE_BITS == 8
    186 	const __u32      *b =(const __u32 *)p;
    187 	const __u32      *tab = crc32table_be;
    188 
    189 # ifdef WORDS_BIGENDIAN
    190 #  define DO_CRC(x) crc = tab[ ((crc >> 24) ^ (x)) & 255] ^ (crc<<8)
    191 # else
    192 #  define DO_CRC(x) crc = tab[ (crc ^ (x)) & 255 ] ^ (crc>>8)
    193 # endif
    194 
    195 	crc = __cpu_to_be32(crc);
    196 	/* Align it */
    197 	if(unlikely(((long)b)&3 && len)){
    198 		do {
    199 			const __u8 *q = (const __u8 *)b;
    200 			DO_CRC(*q++);
    201 			b = (const __u32 *)q;
    202 		} while ((--len) && ((long)b)&3 );
    203 	}
    204 	if(likely(len >= 4)){
    205 		/* load data 32 bits wide, xor data 32 bits wide. */
    206 		size_t save_len = len & 3;
    207 	        len = len >> 2;
    208 		--b; /* use pre increment below(*++b) for speed */
    209 		do {
    210 			crc ^= *++b;
    211 			DO_CRC(0);
    212 			DO_CRC(0);
    213 			DO_CRC(0);
    214 			DO_CRC(0);
    215 		} while (--len);
    216 		b++; /* point to next byte(s) */
    217 		len = save_len;
    218 	}
    219 	/* And the last few bytes */
    220 	if(len){
    221 		do {
    222 			const __u8 *q = (const __u8 *)b;
    223 			DO_CRC(*q++);
    224 			b = (const void *)q;
    225 		} while (--len);
    226 	}
    227 	return __be32_to_cpu(crc);
    228 #undef ENDIAN_SHIFT
    229 #undef DO_CRC
    230 
    231 # elif CRC_BE_BITS == 4
    232 	while (len--) {
    233 		crc ^= *p++ << 24;
    234 		crc = (crc << 4) ^ crc32table_be[crc >> 28];
    235 		crc = (crc << 4) ^ crc32table_be[crc >> 28];
    236 	}
    237 	return crc;
    238 # elif CRC_BE_BITS == 2
    239 	while (len--) {
    240 		crc ^= *p++ << 24;
    241 		crc = (crc << 2) ^ crc32table_be[crc >> 30];
    242 		crc = (crc << 2) ^ crc32table_be[crc >> 30];
    243 		crc = (crc << 2) ^ crc32table_be[crc >> 30];
    244 		crc = (crc << 2) ^ crc32table_be[crc >> 30];
    245 	}
    246 	return crc;
    247 # endif
    248 }
    249 #endif
    250 
    251 /*
    252  * A brief CRC tutorial.
    253  *
    254  * A CRC is a long-division remainder.  You add the CRC to the message,
    255  * and the whole thing (message+CRC) is a multiple of the given
    256  * CRC polynomial.  To check the CRC, you can either check that the
    257  * CRC matches the recomputed value, *or* you can check that the
    258  * remainder computed on the message+CRC is 0.  This latter approach
    259  * is used by a lot of hardware implementations, and is why so many
    260  * protocols put the end-of-frame flag after the CRC.
    261  *
    262  * It's actually the same long division you learned in school, except that
    263  * - We're working in binary, so the digits are only 0 and 1, and
    264  * - When dividing polynomials, there are no carries.  Rather than add and
    265  *   subtract, we just xor.  Thus, we tend to get a bit sloppy about
    266  *   the difference between adding and subtracting.
    267  *
    268  * A 32-bit CRC polynomial is actually 33 bits long.  But since it's
    269  * 33 bits long, bit 32 is always going to be set, so usually the CRC
    270  * is written in hex with the most significant bit omitted.  (If you're
    271  * familiar with the IEEE 754 floating-point format, it's the same idea.)
    272  *
    273  * Note that a CRC is computed over a string of *bits*, so you have
    274  * to decide on the endianness of the bits within each byte.  To get
    275  * the best error-detecting properties, this should correspond to the
    276  * order they're actually sent.  For example, standard RS-232 serial is
    277  * little-endian; the most significant bit (sometimes used for parity)
    278  * is sent last.  And when appending a CRC word to a message, you should
    279  * do it in the right order, matching the endianness.
    280  *
    281  * Just like with ordinary division, the remainder is always smaller than
    282  * the divisor (the CRC polynomial) you're dividing by.  Each step of the
    283  * division, you take one more digit (bit) of the dividend and append it
    284  * to the current remainder.  Then you figure out the appropriate multiple
    285  * of the divisor to subtract to being the remainder back into range.
    286  * In binary, it's easy - it has to be either 0 or 1, and to make the
    287  * XOR cancel, it's just a copy of bit 32 of the remainder.
    288  *
    289  * When computing a CRC, we don't care about the quotient, so we can
    290  * throw the quotient bit away, but subtract the appropriate multiple of
    291  * the polynomial from the remainder and we're back to where we started,
    292  * ready to process the next bit.
    293  *
    294  * A big-endian CRC written this way would be coded like:
    295  * for (i = 0; i < input_bits; i++) {
    296  * 	multiple = remainder & 0x80000000 ? CRCPOLY : 0;
    297  * 	remainder = (remainder << 1 | next_input_bit()) ^ multiple;
    298  * }
    299  * Notice how, to get at bit 32 of the shifted remainder, we look
    300  * at bit 31 of the remainder *before* shifting it.
    301  *
    302  * But also notice how the next_input_bit() bits we're shifting into
    303  * the remainder don't actually affect any decision-making until
    304  * 32 bits later.  Thus, the first 32 cycles of this are pretty boring.
    305  * Also, to add the CRC to a message, we need a 32-bit-long hole for it at
    306  * the end, so we have to add 32 extra cycles shifting in zeros at the
    307  * end of every message,
    308  *
    309  * So the standard trick is to rearrage merging in the next_input_bit()
    310  * until the moment it's needed.  Then the first 32 cycles can be precomputed,
    311  * and merging in the final 32 zero bits to make room for the CRC can be
    312  * skipped entirely.
    313  * This changes the code to:
    314  * for (i = 0; i < input_bits; i++) {
    315  *      remainder ^= next_input_bit() << 31;
    316  * 	multiple = (remainder & 0x80000000) ? CRCPOLY : 0;
    317  * 	remainder = (remainder << 1) ^ multiple;
    318  * }
    319  * With this optimization, the little-endian code is simpler:
    320  * for (i = 0; i < input_bits; i++) {
    321  *      remainder ^= next_input_bit();
    322  * 	multiple = (remainder & 1) ? CRCPOLY : 0;
    323  * 	remainder = (remainder >> 1) ^ multiple;
    324  * }
    325  *
    326  * Note that the other details of endianness have been hidden in CRCPOLY
    327  * (which must be bit-reversed) and next_input_bit().
    328  *
    329  * However, as long as next_input_bit is returning the bits in a sensible
    330  * order, we can actually do the merging 8 or more bits at a time rather
    331  * than one bit at a time:
    332  * for (i = 0; i < input_bytes; i++) {
    333  * 	remainder ^= next_input_byte() << 24;
    334  * 	for (j = 0; j < 8; j++) {
    335  * 		multiple = (remainder & 0x80000000) ? CRCPOLY : 0;
    336  * 		remainder = (remainder << 1) ^ multiple;
    337  * 	}
    338  * }
    339  * Or in little-endian:
    340  * for (i = 0; i < input_bytes; i++) {
    341  * 	remainder ^= next_input_byte();
    342  * 	for (j = 0; j < 8; j++) {
    343  * 		multiple = (remainder & 1) ? CRCPOLY : 0;
    344  * 		remainder = (remainder << 1) ^ multiple;
    345  * 	}
    346  * }
    347  * If the input is a multiple of 32 bits, you can even XOR in a 32-bit
    348  * word at a time and increase the inner loop count to 32.
    349  *
    350  * You can also mix and match the two loop styles, for example doing the
    351  * bulk of a message byte-at-a-time and adding bit-at-a-time processing
    352  * for any fractional bytes at the end.
    353  *
    354  * The only remaining optimization is to the byte-at-a-time table method.
    355  * Here, rather than just shifting one bit of the remainder to decide
    356  * in the correct multiple to subtract, we can shift a byte at a time.
    357  * This produces a 40-bit (rather than a 33-bit) intermediate remainder,
    358  * but again the multiple of the polynomial to subtract depends only on
    359  * the high bits, the high 8 bits in this case.
    360  *
    361  * The multiple we need in that case is the low 32 bits of a 40-bit
    362  * value whose high 8 bits are given, and which is a multiple of the
    363  * generator polynomial.  This is simply the CRC-32 of the given
    364  * one-byte message.
    365  *
    366  * Two more details: normally, appending zero bits to a message which
    367  * is already a multiple of a polynomial produces a larger multiple of that
    368  * polynomial.  To enable a CRC to detect this condition, it's common to
    369  * invert the CRC before appending it.  This makes the remainder of the
    370  * message+crc come out not as zero, but some fixed non-zero value.
    371  *
    372  * The same problem applies to zero bits prepended to the message, and
    373  * a similar solution is used.  Instead of starting with a remainder of
    374  * 0, an initial remainder of all ones is used.  As long as you start
    375  * the same way on decoding, it doesn't make a difference.
    376  */
    377 
    378 #ifdef UNITTEST
    379 
    380 #include <stdlib.h>
    381 #include <stdio.h>
    382 
    383 const __u8 byte_rev_table[256] = {
    384 	0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
    385 	0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
    386 	0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
    387 	0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
    388 	0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
    389 	0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
    390 	0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
    391 	0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
    392 	0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
    393 	0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
    394 	0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
    395 	0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
    396 	0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
    397 	0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
    398 	0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
    399 	0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
    400 	0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
    401 	0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
    402 	0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
    403 	0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
    404 	0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
    405 	0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
    406 	0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
    407 	0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
    408 	0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
    409 	0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
    410 	0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
    411 	0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
    412 	0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
    413 	0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
    414 	0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
    415 	0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff,
    416 };
    417 
    418 static inline __u8 bitrev8(__u8 byte)
    419 {
    420 	return byte_rev_table[byte];
    421 }
    422 
    423 static inline __u16 bitrev16(__u16 x)
    424 {
    425 	return (bitrev8(x & 0xff) << 8) | bitrev8(x >> 8);
    426 }
    427 
    428 /**
    429  * bitrev32 - reverse the order of bits in a u32 value
    430  * @x: value to be bit-reversed
    431  */
    432 static __u32 bitrev32(__u32 x)
    433 {
    434 	return (bitrev16(x & 0xffff) << 16) | bitrev16(x >> 16);
    435 }
    436 
    437 #if 0				/*Not used at present */
    438 
    439 static void
    440 buf_dump(char const *prefix, unsigned char const *buf, size_t len)
    441 {
    442 	fputs(prefix, stdout);
    443 	while (len--)
    444 		printf(" %02x", *buf++);
    445 	putchar('\n');
    446 
    447 }
    448 #endif
    449 
    450 static void bytereverse(unsigned char *buf, size_t len)
    451 {
    452 	while (len--) {
    453 		unsigned char x = bitrev8(*buf);
    454 		*buf++ = x;
    455 	}
    456 }
    457 
    458 static void random_garbage(unsigned char *buf, size_t len)
    459 {
    460 	while (len--)
    461 		*buf++ = (unsigned char) random();
    462 }
    463 
    464 #if 0				/* Not used at present */
    465 static void store_le(__u32 x, unsigned char *buf)
    466 {
    467 	buf[0] = (unsigned char) x;
    468 	buf[1] = (unsigned char) (x >> 8);
    469 	buf[2] = (unsigned char) (x >> 16);
    470 	buf[3] = (unsigned char) (x >> 24);
    471 }
    472 #endif
    473 
    474 static void store_be(__u32 x, unsigned char *buf)
    475 {
    476 	buf[0] = (unsigned char) (x >> 24);
    477 	buf[1] = (unsigned char) (x >> 16);
    478 	buf[2] = (unsigned char) (x >> 8);
    479 	buf[3] = (unsigned char) x;
    480 }
    481 
    482 /*
    483  * This checks that CRC(buf + CRC(buf)) = 0, and that
    484  * CRC commutes with bit-reversal.  This has the side effect
    485  * of bytewise bit-reversing the input buffer, and returns
    486  * the CRC of the reversed buffer.
    487  */
    488 static __u32 test_step(__u32 init, unsigned char *buf, size_t len)
    489 {
    490 	__u32 crc1, crc2;
    491 	size_t i;
    492 
    493 	crc1 = crc32_be(init, buf, len);
    494 	store_be(crc1, buf + len);
    495 	crc2 = crc32_be(init, buf, len + 4);
    496 	if (crc2)
    497 		printf("\nCRC cancellation fail: 0x%08x should be 0\n",
    498 		       crc2);
    499 
    500 	for (i = 0; i <= len + 4; i++) {
    501 		crc2 = crc32_be(init, buf, i);
    502 		crc2 = crc32_be(crc2, buf + i, len + 4 - i);
    503 		if (crc2)
    504 			printf("\nCRC split fail: 0x%08x\n", crc2);
    505 	}
    506 
    507 	/* Now swap it around for the other test */
    508 
    509 	bytereverse(buf, len + 4);
    510 	init = bitrev32(init);
    511 	crc2 = bitrev32(crc1);
    512 	if (crc1 != bitrev32(crc2))
    513 		printf("\nBit reversal fail: 0x%08x -> 0x%08x -> 0x%08x\n",
    514 		       crc1, crc2, bitrev32(crc2));
    515 	crc1 = crc32_le(init, buf, len);
    516 	if (crc1 != crc2)
    517 		printf("\nCRC endianness fail: 0x%08x != 0x%08x\n", crc1,
    518 		       crc2);
    519 	crc2 = crc32_le(init, buf, len + 4);
    520 	if (crc2)
    521 		printf("\nCRC cancellation fail: 0x%08x should be 0\n",
    522 		       crc2);
    523 
    524 	for (i = 0; i <= len + 4; i++) {
    525 		crc2 = crc32_le(init, buf, i);
    526 		crc2 = crc32_le(crc2, buf + i, len + 4 - i);
    527 		if (crc2)
    528 			printf("\nCRC split fail: 0x%08x\n", crc2);
    529 	}
    530 
    531 	return crc1;
    532 }
    533 
    534 #define SIZE 64
    535 #define INIT1 0
    536 #define INIT2 0
    537 
    538 int main(int argc, char **argv)
    539 {
    540 	unsigned char buf1[SIZE + 4];
    541 	unsigned char buf2[SIZE + 4];
    542 	unsigned char buf3[SIZE + 4];
    543 	int i, j;
    544 	__u32 crc1, crc2, crc3;
    545 	int exit_status = 0;
    546 
    547 	for (i = 0; i <= SIZE; i++) {
    548 		printf("\rTesting length %d...", i);
    549 		fflush(stdout);
    550 		random_garbage(buf1, i);
    551 		random_garbage(buf2, i);
    552 		for (j = 0; j < i; j++)
    553 			buf3[j] = buf1[j] ^ buf2[j];
    554 
    555 		crc1 = test_step(INIT1, buf1, i);
    556 		crc2 = test_step(INIT2, buf2, i);
    557 		/* Now check that CRC(buf1 ^ buf2) = CRC(buf1) ^ CRC(buf2) */
    558 		crc3 = test_step(INIT1 ^ INIT2, buf3, i);
    559 		if (crc3 != (crc1 ^ crc2)) {
    560 			printf("CRC XOR fail: 0x%08x != 0x%08x ^ 0x%08x\n",
    561 			       crc3, crc1, crc2);
    562 			exit_status++;
    563 		}
    564 	}
    565 	printf("\nAll test complete.  No failures expected.\n");
    566 	return 0;
    567 }
    568 
    569 #endif				/* UNITTEST */
    570