cx = HMAC_Create(hashObj, secret->data, secret->len);
cx = HMAC_Create(hashObj, secret->data, secret->len, isFIPS);
pk11_P_hash(HASH_HashType hashType, const SECItem *secret, const char *label, 	SECItem *seed, SECItem *result){    unsigned char state[PHASH_STATE_MAX_LEN];    unsigned char outbuf[PHASH_STATE_MAX_LEN];    unsigned int state_len = 0, label_len = 0, outbuf_len = 0, chunk_size;    unsigned int remaining;    unsigned char *res;    SECStatus status;    HMACContext *cx;    SECStatus rv = SECFailure;    const SECHashObject *hashObj = &SECRawHashObjects[hashType];    PORT_Assert((secret != NULL) && (secret->data != NULL || !secret->len));    PORT_Assert((seed != NULL) && (seed->data != NULL));    PORT_Assert((result != NULL) && (result->data != NULL));    remaining = result->len;    res = result->data;    if (label != NULL)	label_len = PORT_Strlen(label);    cx = HMAC_Create(hashObj, secret->data, secret->len);    if (cx == NULL)	goto loser;    /* initialize the state = A(1) = HMAC_hash(secret, seed) */    HMAC_Begin(cx);    HMAC_Update(cx, (unsigned char *)label, label_len);    HMAC_Update(cx, seed->data, seed->len);    status = HMAC_Finish(cx, state, &state_len, PHASH_STATE_MAX_LEN);    if (status != SECSuccess)	goto loser;    /* generate a block at a time until we're done */    while (remaining > 0) {	HMAC_Begin(cx);	HMAC_Update(cx, state, state_len);	if (label_len)	    HMAC_Update(cx, (unsigned char *)label, label_len);	HMAC_Update(cx, seed->data, seed->len);	status = HMAC_Finish(cx, outbuf, &outbuf_len, PHASH_STATE_MAX_LEN);	if (status != SECSuccess)	    goto loser;        /* Update the state = A(i) = HMAC_hash(secret, A(i-1)) */	HMAC_Begin(cx); 	HMAC_Update(cx, state, state_len); 	status = HMAC_Finish(cx, state, &state_len, PHASH_STATE_MAX_LEN);	if (status != SECSuccess)	    goto loser;	chunk_size = PR_MIN(outbuf_len, remaining);	PORT_Memcpy(res, &outbuf, chunk_size);	res += chunk_size;	remaining -= chunk_size;    }    rv = SECSuccess;loser:    /* if (cx) HMAC_Destroy(cx); */    /* clear out state so it's not left on the stack */    if (cx) HMAC_Destroy(cx);    PORT_Memset(state, 0, sizeof(state));    PORT_Memset(outbuf, 0, sizeof(outbuf));    return rv;}