status = pk11_P_hash(HASH_AlgSHA1, &S2, label, seed, &tmp);
status = pk11_P_hash(HASH_AlgSHA1, &S2, label, seed, &tmp, isFIPS);
pk11_PRF(const SECItem *secret, const char *label, SECItem *seed,          SECItem *result){    SECStatus rv = SECFailure, status;    unsigned int i;    SECItem tmp = { siBuffer, NULL, 0};    SECItem S1;    SECItem S2;    PORT_Assert((secret != NULL) && (secret->data != NULL || !secret->len));    PORT_Assert((seed != NULL) && (seed->data != NULL));    PORT_Assert((result != NULL) && (result->data != NULL));    S1.type = siBuffer;    S1.len  = (secret->len / 2) + (secret->len & 1);    S1.data = secret->data;    S2.type = siBuffer;    S2.len  = S1.len;    S2.data = secret->data + (secret->len - S2.len);    tmp.data = (unsigned char*)PORT_Alloc(result->len);    if (tmp.data == NULL)	goto loser;    tmp.len = result->len;    status = pk11_P_hash(HASH_AlgMD5, &S1, label, seed, result);    if (status != SECSuccess)	goto loser;    status = pk11_P_hash(HASH_AlgSHA1, &S2, label, seed, &tmp);    if (status != SECSuccess)	goto loser;    for (i = 0; i < result->len; i++)	result->data[i] ^= tmp.data[i];    rv = SECSuccess;loser:    if (tmp.data != NULL)	PORT_ZFree(tmp.data, tmp.len);    return rv;}