rv = ssl3_ComputeHandshakeHashes(ss, ssl3->pwSpec, &hashes, 0);
rv = ssl3_ComputeHandshakeHashes(ss, ss->ssl3.pwSpec, &hashes, 0);
ssl3_SendCertificateVerify(sslSocket *ss){    ssl3State *   ssl3 		= ss->ssl3;    SECStatus     rv		= SECFailure;    PRBool        isTLS;    SECItem       buf           = {siBuffer, NULL, 0};    SSL3Hashes    hashes;    PORT_Assert( ssl_HaveXmitBufLock(ss));    PORT_Assert( ssl_HaveSSL3HandshakeLock(ss));    SSL_TRC(3, ("%d: SSL3[%d]: send certificate_verify handshake",		SSL_GETPID(), ss->fd));    ssl_GetSpecReadLock(ss);    rv = ssl3_ComputeHandshakeHashes(ss, ssl3->pwSpec, &hashes, 0);    ssl_ReleaseSpecReadLock(ss);    if (rv != SECSuccess) {	goto done;	/* err code was set by ssl3_ComputeHandshakeHashes */    }    isTLS = (PRBool)(ssl3->pwSpec->version > SSL_LIBRARY_VERSION_3_0);    rv = ssl3_SignHashes(&hashes, ssl3->clientPrivateKey, &buf, isTLS);    if (rv == SECSuccess) {	PK11SlotInfo * slot;	sslSessionID * sid   = ss->sec.ci.sid;    	/* Remember the info about the slot that did the signing.	** Later, when doing an SSL restart handshake, verify this.	** These calls are mere accessors, and can't fail.	*/	slot = PK11_GetSlotFromPrivateKey(ss->ssl3->clientPrivateKey);	sid->u.ssl3.clAuthSeries     = PK11_GetSlotSeries(slot);	sid->u.ssl3.clAuthSlotID     = PK11_GetSlotID(slot);	sid->u.ssl3.clAuthModuleID   = PK11_GetModuleID(slot);	sid->u.ssl3.clAuthValid      = PR_TRUE;	PK11_FreeSlot(slot);    }    /* If we're doing RSA key exchange, we're all done with the private key     * here.  Diffie-Hellman key exchanges need the client's     * private key for the key exchange.     */    if (ssl3->hs.kea_def->exchKeyType == kt_rsa) {	SECKEY_DestroyPrivateKey(ssl3->clientPrivateKey);	ssl3->clientPrivateKey = NULL;    }    if (rv != SECSuccess) {	goto done;	/* err code was set by ssl3_SignHashes */    }    rv = ssl3_AppendHandshakeHeader(ss, certificate_verify, buf.len + 2);    if (rv != SECSuccess) {	goto done;	/* error code set by AppendHandshake */    }    rv = ssl3_AppendHandshakeVariable(ss, buf.data, buf.len, 2);    if (rv != SECSuccess) {	goto done;	/* error code set by AppendHandshake */    }done:    if (buf.data)	PORT_Free(buf.data);    return rv;}