keyval->attrib.ulValueLen);
keyval->attrib.ulValueLen, isFIPS);
pk11_doHMACInit(PK11SessionContext *context,HASH_HashType hash,					PK11Object *key, CK_ULONG mac_size){    PK11Attribute *keyval;    HMACContext *HMACcontext;    CK_ULONG *intpointer;    const SECHashObject *hashObj = &SECRawHashObjects[hash];    keyval = pk11_FindAttribute(key,CKA_VALUE);    if (keyval == NULL) return CKR_KEY_SIZE_RANGE;    HMACcontext = HMAC_Create(hashObj, 		(const unsigned char*)keyval->attrib.pValue,						 keyval->attrib.ulValueLen);    context->hashInfo = HMACcontext;    context->multi = PR_TRUE;    pk11_FreeAttribute(keyval);    if (context->hashInfo == NULL) {	return CKR_HOST_MEMORY;    }    context->hashUpdate = (PK11Hash) HMAC_Update;    context->end = (PK11End) HMAC_Finish;    context->hashdestroy = (PK11Destroy) pk11_HMAC_Destroy;    intpointer = (CK_ULONG *) PORT_Alloc(sizeof(CK_ULONG));    if (intpointer == NULL) {	return CKR_HOST_MEMORY;    }    *intpointer = mac_size;    context->cipherInfo = (void *) intpointer;    context->destroy = (PK11Destroy) pk11_Space;    context->update = (PK11Cipher) pk11_HMACCopy;    context->verify = (PK11Verify) pk11_HMACCmp;    context->maxLen = hashObj->length;    HMAC_Begin(HMACcontext);    return CKR_OK;}