PORT_Assert( ssl_Have1stHandshakeLock(ss) );
PORT_Assert( ss->opt.noLocks || ssl_Have1stHandshakeLock(ss) );
ssl2_SendCertificateRequestMessage(sslSocket *ss){    PRUint8 *        msg;    int              sent;    int              sendLen;    SECStatus        rv;    PORT_Assert( ssl_Have1stHandshakeLock(ss) );    ssl_GetXmitBufLock(ss);    /***************************************/    sendLen = SSL_HL_REQUEST_CERTIFICATE_HBYTES + SSL_CHALLENGE_BYTES;    rv = ssl2_GetSendBuffer(ss, sendLen);    if (rv != SECSuccess) 	goto done;    SSL_TRC(3, ("%d: SSL[%d]: sending certificate request",		SSL_GETPID(), ss->fd));    /* Generate random challenge for client to encrypt */    PK11_GenerateRandom(ss->sec.ci.serverChallenge, SSL_CHALLENGE_BYTES);    msg = ss->sec.ci.sendBuf.buf;    msg[0] = SSL_MT_REQUEST_CERTIFICATE;    msg[1] = SSL_AT_MD5_WITH_RSA_ENCRYPTION;    PORT_Memcpy(msg + SSL_HL_REQUEST_CERTIFICATE_HBYTES,                 ss->sec.ci.serverChallenge, SSL_CHALLENGE_BYTES);    DUMP_MSG(29, (ss, msg, sendLen));    sent = (*ss->sec.send)(ss, msg, sendLen, 0);    rv = (sent >= 0) ? SECSuccess : (SECStatus)sent;done:    ssl_ReleaseXmitBufLock(ss);    /***************************************/    return rv;}