for (i = 0; i < sk_X509_num(certs); i++)
if(!(flags & OCSP_NOCERTS))
int OCSP_basic_sign(OCSP_BASICRESP *brsp, 			X509 *signer, EVP_PKEY *key, const EVP_MD *dgst,			STACK_OF(X509) *certs, unsigned long flags)        {	int i;	OCSP_RESPID *rid;	if(!(flags & OCSP_NOCERTS) && !OCSP_basic_add1_cert(brsp, signer))		goto err;	for (i = 0; i < sk_X509_num(certs); i++)		{		X509 *tmpcert = sk_X509_value(certs, i);		if(!OCSP_basic_add1_cert(brsp, tmpcert))				goto err;		}	rid = brsp->tbsResponseData->responderId;	if (flags & OCSP_RESPID_KEY)		{		unsigned char md[SHA_DIGEST_LENGTH];		X509_pubkey_digest(signer, EVP_sha1(), md, NULL);		if (!(rid->value.byKey = ASN1_OCTET_STRING_new()))			goto err;		if (!(ASN1_OCTET_STRING_set(rid->value.byKey, md, SHA_DIGEST_LENGTH)))				goto err;		rid->type = V_OCSP_RESPID_KEY;		}	else		{		if (!X509_NAME_set(&rid->value.byName,					X509_get_subject_name(signer)))				goto err;		rid->type = V_OCSP_RESPID_NAME;		}	if (!(flags & OCSP_NOTIME) &&		!X509_gmtime_adj(brsp->tbsResponseData->producedAt, 0))		goto err;	/* Right now, I think that not doing double hashing is the right	   thing.	-- Richard Levitte */	if (!OCSP_BASICRESP_sign(brsp, key, dgst, 0)) goto err;	return 1;err:	return 0;	}