SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,SSL_R_INTERNAL_ERROR);
SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,ERR_R_INTERNAL_ERROR);
static int ssl3_send_client_verify(SSL *s)	{	unsigned char *p,*d;	unsigned char data[MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH];	EVP_PKEY *pkey;#ifndef OPENSSL_NO_RSA	unsigned u=0;#endif	unsigned long n;#ifndef OPENSSL_NO_DSA	int j;#endif	if (s->state == SSL3_ST_CW_CERT_VRFY_A)		{		d=(unsigned char *)s->init_buf->data;		p= &(d[4]);		pkey=s->cert->key->privatekey;		s->method->ssl3_enc->cert_verify_mac(s,&(s->s3->finish_dgst2),			&(data[MD5_DIGEST_LENGTH]));#ifndef OPENSSL_NO_RSA		if (pkey->type == EVP_PKEY_RSA)			{			s->method->ssl3_enc->cert_verify_mac(s,				&(s->s3->finish_dgst1),&(data[0]));			if (RSA_sign(NID_md5_sha1, data,					 MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH,					&(p[2]), &u, pkey->pkey.rsa) <= 0 )				{				SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,ERR_R_RSA_LIB);				goto err;				}			s2n(u,p);			n=u+2;			}		else#endif#ifndef OPENSSL_NO_DSA			if (pkey->type == EVP_PKEY_DSA)			{			if (!DSA_sign(pkey->save_type,				&(data[MD5_DIGEST_LENGTH]),				SHA_DIGEST_LENGTH,&(p[2]),				(unsigned int *)&j,pkey->pkey.dsa))				{				SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,ERR_R_DSA_LIB);				goto err;				}			s2n(j,p);			n=j+2;			}		else#endif			{			SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,SSL_R_INTERNAL_ERROR);			goto err;			}		*(d++)=SSL3_MT_CERTIFICATE_VERIFY;		l2n3(n,d);		s->init_num=(int)n+4;		s->init_off=0;		}	return(ssl3_do_write(s,SSL3_RT_HANDSHAKE));err:	return(-1);	}