PORT_Assert( ssl_Have1stHandshakeLock(ss) );
PORT_Assert( ss->opt.noLocks || ssl_Have1stHandshakeLock(ss) );
ssl2_HandleVerifyMessage(sslSocket *ss){    PRUint8 *        data;    SECStatus        rv;    PORT_Assert( ssl_Have1stHandshakeLock(ss) );    ssl_GetRecvBufLock(ss);    data = ss->gs.buf.buf + ss->gs.recordOffset;    DUMP_MSG(29, (ss, data, ss->gs.recordLen));    if ((ss->gs.recordLen != 1 + SSL_CHALLENGE_BYTES) ||	(data[0] != SSL_MT_SERVER_VERIFY) ||	PORT_Memcmp(data+1, ss->sec.ci.clientChallenge, SSL_CHALLENGE_BYTES)) {	/* Bad server */	PORT_SetError(SSL_ERROR_BAD_SERVER);	goto loser;    }    ss->sec.ci.elements |= CIS_HAVE_VERIFY;    SSL_TRC(5, ("%d: SSL[%d]: got server-verify, required=0x%d got=0x%x",		SSL_GETPID(), ss->fd, ss->sec.ci.requiredElements,		ss->sec.ci.elements));    rv = ssl2_TryToFinish(ss);    if (rv) 	goto loser;    ss->gs.recordLen = 0;    ssl_ReleaseRecvBufLock(ss);    if (ss->handshake == 0) {	return SECSuccess;    }    ss->handshake         = ssl_GatherRecord1stHandshake;    ss->nextHandshake     = ssl2_HandleMessage;    return SECSuccess;  loser:    ssl_ReleaseRecvBufLock(ss);    return SECFailure;}