p = cipher_tv[i].input; sg[0].page = virt_to_page(p); sg[0].offset = offset_in_page(p); sg[0].length = cipher_tv[i].ilen; 
sg_set_buf(&sg[0], cipher_tv[i].input, cipher_tv[i].ilen); 
static void test_cipher(char *algo, int mode, int enc,			struct cipher_testvec *template, unsigned int tcount){	unsigned int ret, i, j, k, temp;	unsigned int tsize;	char *p, *q;	struct crypto_tfm *tfm;	char *key;	struct cipher_testvec *cipher_tv;	struct scatterlist sg[8];	const char *e, *m;	if (enc == ENCRYPT)	        e = "encryption";	else		e = "decryption";	if (mode == MODE_ECB)		m = "ECB";	else		m = "CBC";	printk("\ntesting %s %s %s\n", algo, m, e);	tsize = sizeof (struct cipher_testvec);	tsize *= tcount;	if (tsize > TVMEMSIZE) {		printk("template (%u) too big for tvmem (%u)\n", tsize,		       TVMEMSIZE);		return;	}	memcpy(tvmem, template, tsize);	cipher_tv = (void *)tvmem;	if (mode)		tfm = crypto_alloc_tfm(algo, 0);	else		tfm = crypto_alloc_tfm(algo, CRYPTO_TFM_MODE_CBC);	if (tfm == NULL) {		printk("failed to load transform for %s %s\n", algo, m);		return;	}	j = 0;	for (i = 0; i < tcount; i++) {		if (!(cipher_tv[i].np)) {			j++;			printk("test %u (%d bit key):\n",			j, cipher_tv[i].klen * 8);			tfm->crt_flags = 0;			if (cipher_tv[i].wk)				tfm->crt_flags |= CRYPTO_TFM_REQ_WEAK_KEY;			key = cipher_tv[i].key;			ret = crypto_cipher_setkey(tfm, key, cipher_tv[i].klen);			if (ret) {				printk("setkey() failed flags=%x\n", tfm->crt_flags);				if (!cipher_tv[i].fail)					goto out;			}			p = cipher_tv[i].input;			sg[0].page = virt_to_page(p);			sg[0].offset = offset_in_page(p);			sg[0].length = cipher_tv[i].ilen;			if (!mode) {				crypto_cipher_set_iv(tfm, cipher_tv[i].iv,					crypto_tfm_alg_ivsize(tfm));			}			if (enc)				ret = crypto_cipher_encrypt(tfm, sg, sg, cipher_tv[i].ilen);			else				ret = crypto_cipher_decrypt(tfm, sg, sg, cipher_tv[i].ilen);			if (ret) {				printk("%s () failed flags=%x\n", e, tfm->crt_flags);				goto out;			}			q = kmap(sg[0].page) + sg[0].offset;			hexdump(q, cipher_tv[i].rlen);			printk("%s\n",			       memcmp(q, cipher_tv[i].result,				      cipher_tv[i].rlen) ? "fail" : "pass");		}	}	printk("\ntesting %s %s %s across pages (chunking)\n", algo, m, e);	memset(xbuf, 0, XBUFSIZE);	j = 0;	for (i = 0; i < tcount; i++) {		if (cipher_tv[i].np) {			j++;			printk("test %u (%d bit key):\n",			j, cipher_tv[i].klen * 8);			tfm->crt_flags = 0;			if (cipher_tv[i].wk)				tfm->crt_flags |= CRYPTO_TFM_REQ_WEAK_KEY;			key = cipher_tv[i].key;			ret = crypto_cipher_setkey(tfm, key, cipher_tv[i].klen);			if (ret) {				printk("setkey() failed flags=%x\n", tfm->crt_flags);				if (!cipher_tv[i].fail)					goto out;			}			temp = 0;			for (k = 0; k < cipher_tv[i].np; k++) {				memcpy(&xbuf[IDX[k]],				       cipher_tv[i].input + temp,				       cipher_tv[i].tap[k]);				temp += cipher_tv[i].tap[k];				p = &xbuf[IDX[k]];				sg[k].page = virt_to_page(p);				sg[k].offset = offset_in_page(p);				sg[k].length = cipher_tv[i].tap[k];			}			if (!mode) {				crypto_cipher_set_iv(tfm, cipher_tv[i].iv,						crypto_tfm_alg_ivsize(tfm));			}			if (enc)				ret = crypto_cipher_encrypt(tfm, sg, sg, cipher_tv[i].ilen);			else				ret = crypto_cipher_decrypt(tfm, sg, sg, cipher_tv[i].ilen);			if (ret) {				printk("%s () failed flags=%x\n", e, tfm->crt_flags);				goto out;			}			temp = 0;			for (k = 0; k < cipher_tv[i].np; k++) {				printk("page %u\n", k);				q = kmap(sg[k].page) + sg[k].offset;				hexdump(q, cipher_tv[i].tap[k]);				printk("%s\n",					memcmp(q, cipher_tv[i].result + temp,						cipher_tv[i].tap[k]) ? "fail" :					"pass");				temp += cipher_tv[i].tap[k];			}		}	}out:	crypto_free_tfm(tfm);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/378f058cc49bcda7fa63d3cd86d2f9a0a5188b1c/tcrypt.c/clean/crypto/tcrypt.c