tmp.page = virt_to_page(ipad); tmp.offset = offset_in_page(ipad); tmp.length = crypto_tfm_alg_blocksize(tfm); 
sg_set_buf(&tmp, ipad, crypto_tfm_alg_blocksize(tfm)); 
void crypto_hmac_init(struct crypto_tfm *tfm, u8 *key, unsigned int *keylen){	unsigned int i;	struct scatterlist tmp;	char *ipad = tfm->crt_digest.dit_hmac_block;		if (*keylen > crypto_tfm_alg_blocksize(tfm)) {		hash_key(tfm, key, *keylen);		*keylen = crypto_tfm_alg_digestsize(tfm);	}	memset(ipad, 0, crypto_tfm_alg_blocksize(tfm));	memcpy(ipad, key, *keylen);	for (i = 0; i < crypto_tfm_alg_blocksize(tfm); i++)		ipad[i] ^= 0x36;	tmp.page = virt_to_page(ipad);	tmp.offset = offset_in_page(ipad);	tmp.length = crypto_tfm_alg_blocksize(tfm);		crypto_digest_init(tfm);	crypto_digest_update(tfm, &tmp, 1);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/378f058cc49bcda7fa63d3cd86d2f9a0a5188b1c/hmac.c/buggy/crypto/hmac.c