hashObj = SEC_GetRawHashObject(pbe_param->hashType);
hashObj = HASH_GetRawHashObject(pbe_param->hashType);
nsspkcs5_ComputeKeyAndIV(NSSPKCS5PBEParameter *pbe_param, SECItem *pwitem,		      SECItem *iv, PRBool faulty3DES){    SECItem *hash = NULL, *key = NULL;    const SECHashObject *hashObj;    PRBool getIV = PR_FALSE;    if((pbe_param == NULL) || (pwitem == NULL)) {	return NULL;    }    key = SECITEM_AllocItem(NULL,NULL,pbe_param->keyLen);    if (key == NULL) {	return NULL;    }    if ((pbe_param->ivLen) && (iv->data == NULL)) {	getIV = PR_TRUE;    	iv->data = (unsigned char *)PORT_Alloc(pbe_param->ivLen);    	if (iv->data == NULL) {	    goto loser;	}	iv->len = pbe_param->ivLen;    }    hashObj = SEC_GetRawHashObject(pbe_param->hashType);    switch (pbe_param->pbeType) {    case NSSPKCS5_PBKDF1:	hash = nsspkcs5_PBKDF1Extended(hashObj,pbe_param,pwitem,faulty3DES);	if (hash == NULL) {	    goto loser;	}	PORT_Assert(hash->len >= key->len+iv->len);	if (getIV) {	    PORT_Memcpy(iv->data, hash->data+(hash->len - iv->len),iv->len);	}    	break;#ifdef PBKDF2    case NSSPKCS5_PBKDF2:	hash = nsspkcs5_PBKDF2(hashObj,pbe_param,pwitem);	PORT_Assert(!getIV);    	break;#endif    case NSSPKCS5_PKCS12_V2:	if (getIV) {	    hash = nsspkcs5_PKCS12PBE(hashObj,pbe_param,pwitem,						pbeBitGenCipherIV,iv->len);	    if (hash == NULL) {		goto loser;	    }	    PORT_Memcpy(iv->data,hash->data,iv->len);	    SECITEM_ZfreeItem(hash,PR_TRUE);	    hash = NULL;	}	hash = nsspkcs5_PKCS12PBE(hashObj,pbe_param,pwitem,						pbe_param->keyID,key->len);    default:	break;    }    if (hash == NULL) {	goto loser;    }    if (pbe_param->is2KeyDES) {	PORT_Memcpy(key->data, hash->data, (key->len * 2) / 3);	PORT_Memcpy(&(key->data[(key->len  * 2) / 3]), key->data,		    key->len / 3);    } else {	PORT_Memcpy(key->data, hash->data, key->len);    }    SECITEM_FreeItem(hash, PR_TRUE);    return key;loser:    if (getIV && iv->data) {	PORT_ZFree(iv->data,iv->len);	iv->data = NULL;    }    SECITEM_ZfreeItem(key, PR_TRUE);    return NULL;}