(SECKEYGetPasswordKey) pk11_givePass,
(SECKEYLowGetPasswordKey) pk11_givePass,
pk11_GetPrivKey(PK11Object *object,CK_KEY_TYPE key_type){    SECKEYLowPrivateKey *priv = NULL;    if (object->objclass != CKO_PRIVATE_KEY) {	return NULL;    }    if (object->objectInfo) {	return (SECKEYLowPrivateKey *)object->objectInfo;    }    if (pk11_isTrue(object,CKA_TOKEN)) {	/* grab it from the data base */	char *label = pk11_getString(object,CKA_LABEL);	SECItem pubKey;	CK_RV crv;	/* KEYID is the public KEY for DSA and DH, and the MODULUS for	 *  RSA */	crv=pk11_Attribute2SecItem(NULL,&pubKey,object,CKA_NETSCAPE_DB);	if (crv != CKR_OK) return NULL;		priv=SECKEY_FindKeyByPublicKey(SECKEY_GetDefaultKeyDB(),&pubKey,				       (SECKEYGetPasswordKey) pk11_givePass,				       object->slot);	if (!priv && pubKey.data[0] == 0) {	    /* Because of legacy code issues, sometimes the public key has	     * a '0' prepended to it, forcing it to be unsigned.  The database	     * may not store that '0', so remove it and try again.	     */	    SECItem tmpPubKey;	    tmpPubKey.data = pubKey.data + 1;	    tmpPubKey.len = pubKey.len - 1;	    priv=SECKEY_FindKeyByPublicKey(SECKEY_GetDefaultKeyDB(),&tmpPubKey,				           (SECKEYGetPasswordKey) pk11_givePass,				           object->slot);	}	if (pubKey.data) PORT_Free(pubKey.data);	/* don't 'cache' DB private keys */	return priv;    }     priv = pk11_mkPrivKey(object, key_type);    object->objectInfo = priv;    object->infoFree = (PK11Free) SECKEY_LowDestroyPrivateKey;    return priv;}