sg[i].page = virt_to_page(test_vec[i]); sg[i].offset = offset_in_page(test_vec[i]); sg[i].length = VECSIZE; 
sg_set_buf(&sg[i], test_vec[i], VECSIZE); 
static void test_crc32c(void){#define NUMVEC 6#define VECSIZE 40	int i, j, pass;	u32 crc;	u8 b, test_vec[NUMVEC][VECSIZE];	static u32 vec_results[NUMVEC] = {		0x0e2c157f, 0xe980ebf6, 0xde74bded,		0xd579c862, 0xba979ad0, 0x2b29d913	};	static u32 tot_vec_results = 0x24c5d375;	struct scatterlist sg[NUMVEC];	struct crypto_tfm *tfm;	char *fmtdata = "testing crc32c initialized to %08x: %s\n";#define SEEDTESTVAL 0xedcba987	u32 seed;	printk("\ntesting crc32c\n");	tfm = crypto_alloc_tfm("crc32c", 0);	if (tfm == NULL) {		printk("failed to load transform for crc32c\n");		return;	}	crypto_digest_init(tfm);	crypto_digest_final(tfm, (u8*)&crc);	printk(fmtdata, crc, (crc == 0) ? "pass" : "ERROR");	/*	 * stuff test_vec with known values, simple incrementing	 * byte values.	 */	b = 0;	for (i = 0; i < NUMVEC; i++) {		for (j = 0; j < VECSIZE; j++)			test_vec[i][j] = ++b;		sg[i].page = virt_to_page(test_vec[i]);		sg[i].offset = offset_in_page(test_vec[i]);		sg[i].length = VECSIZE;	}	seed = SEEDTESTVAL;	(void)crypto_digest_setkey(tfm, (const u8*)&seed, sizeof(u32));	crypto_digest_final(tfm, (u8*)&crc);	printk("testing crc32c setkey returns %08x : %s\n", crc, (crc == (SEEDTESTVAL ^ ~(u32)0)) ?	       "pass" : "ERROR");	printk("testing crc32c using update/final:\n");	pass = 1;		    /* assume all is well */	for (i = 0; i < NUMVEC; i++) {		seed = ~(u32)0;		(void)crypto_digest_setkey(tfm, (const u8*)&seed, sizeof(u32));		crypto_digest_update(tfm, &sg[i], 1);		crypto_digest_final(tfm, (u8*)&crc);		if (crc == vec_results[i]) {			printk(" %08x:OK", crc);		} else {			printk(" %08x:BAD, wanted %08x\n", crc, vec_results[i]);			pass = 0;		}	}	printk("\ntesting crc32c using incremental accumulator:\n");	crc = 0;	for (i = 0; i < NUMVEC; i++) {		seed = (crc ^ ~(u32)0);		(void)crypto_digest_setkey(tfm, (const u8*)&seed, sizeof(u32));		crypto_digest_update(tfm, &sg[i], 1);		crypto_digest_final(tfm, (u8*)&crc);	}	if (crc == tot_vec_results) {		printk(" %08x:OK", crc);	} else {		printk(" %08x:BAD, wanted %08x\n", crc, tot_vec_results);		pass = 0;	}	printk("\ntesting crc32c using digest:\n");	seed = ~(u32)0;	(void)crypto_digest_setkey(tfm, (const u8*)&seed, sizeof(u32));	crypto_digest_digest(tfm, sg, NUMVEC, (u8*)&crc);	if (crc == tot_vec_results) {		printk(" %08x:OK", crc);	} else {		printk(" %08x:BAD, wanted %08x\n", crc, tot_vec_results);		pass = 0;	}	printk("\n%s\n", pass ? "pass" : "ERROR");	crypto_free_tfm(tfm);	printk("crc32c test complete\n");}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/378f058cc49bcda7fa63d3cd86d2f9a0a5188b1c/tcrypt.c/clean/crypto/tcrypt.c