PK11_DestroyContext(prf_context, PR_TRUE);
PK11_DestroyContext(prf_context, PR_TRUE); } else {  SECItem inData  = { siBuffer, }; SECItem outData = { siBuffer, }; PRBool isFIPS   = PR_FALSE;  inData.data  = (unsigned char *)hashes->md5; inData.len   = sizeof hashes[0]; outData.data = tlsFinished->verify_data; outData.len  = sizeof tlsFinished->verify_data; rv = TLS_PRF(&spec->msItem, label, &inData, &outData, isFIPS); PORT_Assert(rv != SECSuccess || \ outData.len == sizeof tlsFinished->verify_data); }
ssl3_ComputeTLSFinished(ssl3CipherSpec *spec,			PRBool          isServer,                const   SSL3Finished *  hashes,                        TLSFinished  *  tlsFinished){    PK11Context *prf_context;    const char * label;    unsigned int len;    SECStatus    rv;    SECItem      param 		= {siBuffer, NULL, 0};    label = isServer ? "server finished" : "client finished";    len   = 15;    prf_context = 	PK11_CreateContextBySymKey(CKM_TLS_PRF_GENERAL, CKA_SIGN, 	                           spec->master_secret, &param);    if (!prf_context)    	return SECFailure;    rv  = PK11_DigestBegin(prf_context);    rv |= PK11_DigestOp(prf_context, (const unsigned char *) label, len);    rv |= PK11_DigestOp(prf_context, hashes->md5, sizeof *hashes);    rv |= PK11_DigestFinal(prf_context, tlsFinished->verify_data,                            &len, sizeof *tlsFinished);    PORT_Assert(rv != SECSuccess || len == sizeof *tlsFinished);    PK11_DestroyContext(prf_context, PR_TRUE);    return rv;}