isTLS = (PRBool)(ss->ssl3->prSpec->version > SSL_LIBRARY_VERSION_3_0);
isTLS = (PRBool)(ss->ssl3.prSpec->version > SSL_LIBRARY_VERSION_3_0);
ssl3_HandleCertificateVerify(sslSocket *ss, SSL3Opaque *b, PRUint32 length,			     SSL3Hashes *hashes){    SECItem              signed_hash = {siBuffer, NULL, 0};    SECStatus            rv;    int                  errCode     = SSL_ERROR_RX_MALFORMED_CERT_VERIFY;    SSL3AlertDescription desc        = handshake_failure;    PRBool               isTLS;    SSL_TRC(3, ("%d: SSL3[%d]: handle certificate_verify handshake",		SSL_GETPID(), ss->fd));    PORT_Assert( ssl_HaveRecvBufLock(ss) );    PORT_Assert( ssl_HaveSSL3HandshakeLock(ss) );    if (ss->ssl3->hs.ws != wait_cert_verify || ss->sec.peerCert == NULL) {	desc    = unexpected_message;	errCode = SSL_ERROR_RX_UNEXPECTED_CERT_VERIFY;	goto alert_loser;    }    rv = ssl3_ConsumeHandshakeVariable(ss, &signed_hash, 2, &b, &length);    if (rv != SECSuccess) {	goto loser;		/* malformed. */    }    isTLS = (PRBool)(ss->ssl3->prSpec->version > SSL_LIBRARY_VERSION_3_0);    /* XXX verify that the key & kea match */    rv = ssl3_VerifySignedHashes(hashes, ss->sec.peerCert, &signed_hash,				 isTLS, ss->pkcs11PinArg);    if (rv != SECSuccess) {    	errCode = PORT_GetError();	desc = isTLS ? decrypt_error : handshake_failure;	goto alert_loser;    }    PORT_Free(signed_hash.data);    signed_hash.data = NULL;    if (length != 0) {	desc    = isTLS ? decode_error : illegal_parameter;	goto alert_loser;	/* malformed */    }    ss->ssl3->hs.ws = wait_change_cipher;    return SECSuccess;alert_loser:    SSL3_SendAlert(ss, alert_fatal, desc);loser:    if (signed_hash.data != NULL) SECITEM_FreeItem(&signed_hash, PR_FALSE);    PORT_SetError(errCode);    return SECFailure;}