mac_def = spec->mac_def; if (mac_def->mac == mac_null) { *outLength = 0;  return SECSuccess; }
ssl3_ComputeRecordMAC(    ssl3CipherSpec *   spec,    PK11Context *      mac_context,    SSL3ContentType    type,    SSL3ProtocolVersion version,    SSL3SequenceNumber seq_num,    SSL3Opaque *       input,    int                inputLength,    unsigned char *    outbuf,    unsigned int *     outLength){    const ssl3MACDef * mac_def;    SECStatus          rv;    unsigned int       tempLen;    unsigned char      temp[MAX_MAC_LENGTH];/*  ssl_GetSpecReadLock(ss);  Don't have "ss"! */    mac_def = spec->mac_def;    if (mac_def->mac == mac_null) {	*outLength = 0;/*	ssl_ReleaseSpecReadLock(ss); */	return SECSuccess;    }    temp[0] = (unsigned char)(seq_num.high >> 24);    temp[1] = (unsigned char)(seq_num.high >> 16);    temp[2] = (unsigned char)(seq_num.high >>  8);    temp[3] = (unsigned char)(seq_num.high >>  0);    temp[4] = (unsigned char)(seq_num.low  >> 24);    temp[5] = (unsigned char)(seq_num.low  >> 16);    temp[6] = (unsigned char)(seq_num.low  >>  8);    temp[7] = (unsigned char)(seq_num.low  >>  0);    temp[8] = type;    /* TLS MAC includes the record's version field, SSL's doesn't.    ** We decide which MAC defintion to use based on the version of     ** the protocol that was negotiated when the spec became current,    ** NOT based on the version value in the record itself.    ** But, we use the record'v version value in the computation.    */    if (spec->version <= SSL_LIBRARY_VERSION_3_0) {	temp[9]  = MSB(inputLength);	temp[10] = LSB(inputLength);	tempLen  = 11;    } else {    	/* New TLS hash includes version. */	temp[9]  = MSB(version);	temp[10] = LSB(version);	temp[11] = MSB(inputLength);	temp[12] = LSB(inputLength);	tempLen  = 13;    }    PRINT_BUF(95, (NULL, "frag hash1: temp", temp, tempLen));    PRINT_BUF(95, (NULL, "frag hash1: input", input, inputLength));    rv  = PK11_DigestBegin(mac_context);    rv |= PK11_DigestOp(mac_context, temp, tempLen);    rv |= PK11_DigestOp(mac_context, input, inputLength);    rv |= PK11_DigestFinal(mac_context, outbuf, outLength, spec->mac_size);    PORT_Assert(rv != SECSuccess || *outLength == (unsigned)spec->mac_size);/*  ssl_ReleaseSpecReadLock(ss); */    PRINT_BUF(95, (NULL, "frag hash2: result", outbuf, *outLength));    if (rv != SECSuccess) {    	rv = SECFailure;	ssl_MapLowLevelError(SSL_ERROR_MAC_COMPUTATION_FAILURE);    }    return rv;}