/* * NSSCKFWInstance_GetMDInstance * */ NSS_IMPLEMENT NSSCKMDInstance * NSSCKFWInstance_GetMDInstance( NSSCKFWInstance *fwInstance) { #ifdef DEBUG if (CKR_OK != nssCKFWInstance_verifyPointer(fwInstance)) { return (NSSCKMDInstance *)NULL; } #endif /* DEBUG */ return nssCKFWInstance_GetMDInstance(fwInstance); }
/* * nssCKFWFindObjects_Create * */ NSS_EXTERN NSSCKFWFindObjects * nssCKFWFindObjects_Create ( NSSCKFWSession *fwSession, NSSCKFWToken *fwToken, NSSCKFWInstance *fwInstance, NSSCKMDFindObjects *mdFindObjects1, NSSCKMDFindObjects *mdFindObjects2, CK_RV *pError ) { NSSCKFWFindObjects *fwFindObjects = NULL; NSSCKMDSession *mdSession; NSSCKMDToken *mdToken; NSSCKMDInstance *mdInstance; mdSession = nssCKFWSession_GetMDSession(fwSession); mdToken = nssCKFWToken_GetMDToken(fwToken); mdInstance = nssCKFWInstance_GetMDInstance(fwInstance); fwFindObjects = nss_ZNEW(NULL, NSSCKFWFindObjects); if (!fwFindObjects) { *pError = CKR_HOST_MEMORY; goto loser; } fwFindObjects->mdfo1 = mdFindObjects1; fwFindObjects->mdfo2 = mdFindObjects2; fwFindObjects->fwSession = fwSession; fwFindObjects->mdSession = mdSession; fwFindObjects->fwToken = fwToken; fwFindObjects->mdToken = mdToken; fwFindObjects->fwInstance = fwInstance; fwFindObjects->mdInstance = mdInstance; fwFindObjects->mutex = nssCKFWInstance_CreateMutex(fwInstance, NULL, pError); if (!fwFindObjects->mutex) { goto loser; } #ifdef DEBUG *pError = findObjects_add_pointer(fwFindObjects); if( CKR_OK != *pError ) { goto loser; } #endif /* DEBUG */ return fwFindObjects; loser: if( fwFindObjects ) { if( NULL != mdFindObjects1 ) { if( NULL != mdFindObjects1->Final ) { fwFindObjects->mdFindObjects = mdFindObjects1; mdFindObjects1->Final(mdFindObjects1, fwFindObjects, mdSession, fwSession, mdToken, fwToken, mdInstance, fwInstance); } } if( NULL != mdFindObjects2 ) { if( NULL != mdFindObjects2->Final ) { fwFindObjects->mdFindObjects = mdFindObjects2; mdFindObjects2->Final(mdFindObjects2, fwFindObjects, mdSession, fwSession, mdToken, fwToken, mdInstance, fwInstance); } } nss_ZFreeIf(fwFindObjects); } if( CKR_OK == *pError ) { *pError = CKR_GENERAL_ERROR; } return (NSSCKFWFindObjects *)NULL; }
/* * nssCKFWObject_Create * */ NSS_IMPLEMENT NSSCKFWObject * nssCKFWObject_Create ( NSSArena *arena, NSSCKMDObject *mdObject, NSSCKFWSession *fwSession, NSSCKFWToken *fwToken, NSSCKFWInstance *fwInstance, CK_RV *pError ) { NSSCKFWObject *fwObject; nssCKFWHash *mdObjectHash; #ifdef NSSDEBUG if( (CK_RV *)NULL == pError ) { return (NSSCKFWObject *)NULL; } if( PR_SUCCESS != nssArena_verifyPointer(arena) ) { *pError = CKR_ARGUMENTS_BAD; return (NSSCKFWObject *)NULL; } #endif /* NSSDEBUG */ if( (NSSCKFWToken *)NULL == fwToken ) { *pError = CKR_ARGUMENTS_BAD; return (NSSCKFWObject *)NULL; } mdObjectHash = nssCKFWToken_GetMDObjectHash(fwToken); if( (nssCKFWHash *)NULL == mdObjectHash ) { *pError = CKR_GENERAL_ERROR; return (NSSCKFWObject *)NULL; } if( nssCKFWHash_Exists(mdObjectHash, mdObject) ) { fwObject = nssCKFWHash_Lookup(mdObjectHash, mdObject); return fwObject; } fwObject = nss_ZNEW(arena, NSSCKFWObject); if( (NSSCKFWObject *)NULL == fwObject ) { *pError = CKR_HOST_MEMORY; return (NSSCKFWObject *)NULL; } fwObject->arena = arena; fwObject->mdObject = mdObject; fwObject->fwSession = fwSession; if( (NSSCKFWSession *)NULL != fwSession ) { fwObject->mdSession = nssCKFWSession_GetMDSession(fwSession); } fwObject->fwToken = fwToken; fwObject->mdToken = nssCKFWToken_GetMDToken(fwToken); fwObject->fwInstance = fwInstance; fwObject->mdInstance = nssCKFWInstance_GetMDInstance(fwInstance); fwObject->mutex = nssCKFWInstance_CreateMutex(fwInstance, arena, pError); if( (NSSCKFWMutex *)NULL == fwObject->mutex ) { if( CKR_OK == *pError ) { *pError = CKR_GENERAL_ERROR; } return (NSSCKFWObject *)NULL; } *pError = nssCKFWHash_Add(mdObjectHash, mdObject, fwObject); if( CKR_OK != *pError ) { nss_ZFreeIf(fwObject); return (NSSCKFWObject *)NULL; } #ifdef DEBUG *pError = object_add_pointer(fwObject); if( CKR_OK != *pError ) { nssCKFWHash_Remove(mdObjectHash, mdObject); nss_ZFreeIf(fwObject); return (NSSCKFWObject *)NULL; } #endif /* DEBUG */ *pError = CKR_OK; return fwObject; }
/* * nssCKFWSlot_Create * */ NSS_IMPLEMENT NSSCKFWSlot * nssCKFWSlot_Create( NSSCKFWInstance *fwInstance, NSSCKMDSlot *mdSlot, CK_SLOT_ID slotID, CK_RV *pError) { NSSCKFWSlot *fwSlot; NSSCKMDInstance *mdInstance; NSSArena *arena; #ifdef NSSDEBUG if (!pError) { return (NSSCKFWSlot *)NULL; } *pError = nssCKFWInstance_verifyPointer(fwInstance); if (CKR_OK != *pError) { return (NSSCKFWSlot *)NULL; } #endif /* NSSDEBUG */ mdInstance = nssCKFWInstance_GetMDInstance(fwInstance); if (!mdInstance) { *pError = CKR_GENERAL_ERROR; return (NSSCKFWSlot *)NULL; } arena = nssCKFWInstance_GetArena(fwInstance, pError); if (!arena) { if (CKR_OK == *pError) { *pError = CKR_GENERAL_ERROR; } } fwSlot = nss_ZNEW(arena, NSSCKFWSlot); if (!fwSlot) { *pError = CKR_HOST_MEMORY; return (NSSCKFWSlot *)NULL; } fwSlot->mdSlot = mdSlot; fwSlot->fwInstance = fwInstance; fwSlot->mdInstance = mdInstance; fwSlot->slotID = slotID; fwSlot->mutex = nssCKFWInstance_CreateMutex(fwInstance, arena, pError); if (!fwSlot->mutex) { if (CKR_OK == *pError) { *pError = CKR_GENERAL_ERROR; } (void)nss_ZFreeIf(fwSlot); return (NSSCKFWSlot *)NULL; } if (mdSlot->Initialize) { *pError = CKR_OK; *pError = mdSlot->Initialize(mdSlot, fwSlot, mdInstance, fwInstance); if (CKR_OK != *pError) { (void)nssCKFWMutex_Destroy(fwSlot->mutex); (void)nss_ZFreeIf(fwSlot); return (NSSCKFWSlot *)NULL; } } #ifdef DEBUG *pError = slot_add_pointer(fwSlot); if (CKR_OK != *pError) { if (mdSlot->Destroy) { mdSlot->Destroy(mdSlot, fwSlot, mdInstance, fwInstance); } (void)nssCKFWMutex_Destroy(fwSlot->mutex); (void)nss_ZFreeIf(fwSlot); return (NSSCKFWSlot *)NULL; } #endif /* DEBUG */ return fwSlot; }