cx->isFIPS = isFIPS;
HMAC_Create(const SECHashObject *hash_obj, const unsigned char *secret,             unsigned int   secret_len){    HMACContext *cx;    int i;    unsigned char hashed_secret[SHA1_LENGTH];    cx = (HMACContext*)PORT_ZAlloc(sizeof(HMACContext));    if (cx == NULL)	return NULL;    cx->hashobj = hash_obj;    cx->hash = cx->hashobj->create();    if (cx->hash == NULL)	goto loser;    if (secret_len > HMAC_PAD_SIZE) {	cx->hashobj->begin( cx->hash);	cx->hashobj->update(cx->hash, secret, secret_len);	PORT_Assert(cx->hashobj->length <= sizeof hashed_secret);	cx->hashobj->end(   cx->hash, hashed_secret, &secret_len, 	                 sizeof hashed_secret);	if (secret_len != cx->hashobj->length)	    goto loser;	secret = (const unsigned char *)&hashed_secret[0];    }    PORT_Memset(cx->ipad, 0x36, sizeof cx->ipad);    PORT_Memset(cx->opad, 0x5c, sizeof cx->opad);    /* fold secret into padding */    for (i = 0; i < secret_len; i++) {	cx->ipad[i] ^= secret[i];	cx->opad[i] ^= secret[i];    }    PORT_Memset(hashed_secret, 0, sizeof hashed_secret);    return cx;loser:    PORT_Memset(hashed_secret, 0, sizeof hashed_secret);    HMAC_Destroy(cx);    return NULL;}