instance.c
来自「支持SSL v2/v3, TLS, PKCS #5, PKCS #7, PKCS」· C语言 代码 · 共 1,311 行 · 第 1/2 页
C
1,311 行
if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { return (CK_SESSION_HANDLE)0; } if( CKR_OK != nssCKFWSession_verifyPointer(fwSession) ) { return (CK_SESSION_HANDLE)0; }#endif /* NSSDEBUG */ return nssCKFWSession_GetHandle(fwSession); /* look it up and assert? */}/* * nssCKFWInstance_CreateObjectHandle * */NSS_IMPLEMENT CK_OBJECT_HANDLEnssCKFWInstance_CreateObjectHandle( NSSCKFWInstance *fwInstance, NSSCKFWObject *fwObject, CK_RV *pError){ CK_OBJECT_HANDLE hObject;#ifdef NSSDEBUG if( (CK_RV *)NULL == pError ) { return (CK_OBJECT_HANDLE)0; } *pError = nssCKFWInstance_verifyPointer(fwInstance); if( CKR_OK != *pError ) { return (CK_OBJECT_HANDLE)0; }#endif /* NSSDEBUG */ *pError = nssCKFWMutex_Lock(fwInstance->mutex); if( CKR_OK != *pError ) { return (CK_OBJECT_HANDLE)0; } hObject = ++(fwInstance->lastObjectHandle); *pError = nssCKFWObject_SetHandle(fwObject, hObject); if( CKR_OK != *pError ) { hObject = (CK_OBJECT_HANDLE)0; goto done; } *pError = nssCKFWHash_Add(fwInstance->objectHandleHash, (const void *)hObject, (const void *)fwObject); if( CKR_OK != *pError ) { hObject = (CK_OBJECT_HANDLE)0; goto done; } done: (void)nssCKFWMutex_Unlock(fwInstance->mutex); return hObject;}/* * nssCKFWInstance_ResolveObjectHandle * */NSS_IMPLEMENT NSSCKFWObject *nssCKFWInstance_ResolveObjectHandle( NSSCKFWInstance *fwInstance, CK_OBJECT_HANDLE hObject){ NSSCKFWObject *fwObject;#ifdef NSSDEBUG if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { return (NSSCKFWObject *)NULL; }#endif /* NSSDEBUG */ if( CKR_OK != nssCKFWMutex_Lock(fwInstance->mutex) ) { return (NSSCKFWObject *)NULL; } fwObject = (NSSCKFWObject *)nssCKFWHash_Lookup( fwInstance->objectHandleHash, (const void *)hObject); /* Assert(hObject == nssCKFWObject_GetHandle(fwObject)) */ (void)nssCKFWMutex_Unlock(fwInstance->mutex); return fwObject;}/* * nssCKFWInstance_ReassignObjectHandle * */NSS_IMPLEMENT CK_RVnssCKFWInstance_ReassignObjectHandle( NSSCKFWInstance *fwInstance, CK_OBJECT_HANDLE hObject, NSSCKFWObject *fwObject){ CK_RV error = CKR_OK; NSSCKFWObject *oldObject;#ifdef NSSDEBUG error = nssCKFWInstance_verifyPointer(fwInstance); if( CKR_OK != error ) { return error; }#endif /* NSSDEBUG */ error = nssCKFWMutex_Lock(fwInstance->mutex); if( CKR_OK != error ) { return error; } oldObject = (NSSCKFWObject *)nssCKFWHash_Lookup( fwInstance->objectHandleHash, (const void *)hObject); /* Assert(hObject == nssCKFWObject_GetHandle(oldObject) */ (void)nssCKFWObject_SetHandle(oldObject, (CK_SESSION_HANDLE)0); nssCKFWHash_Remove(fwInstance->objectHandleHash, (const void *)hObject); error = nssCKFWObject_SetHandle(fwObject, hObject); if( CKR_OK != error ) { goto done; } error = nssCKFWHash_Add(fwInstance->objectHandleHash, (const void *)hObject, (const void *)fwObject); done: (void)nssCKFWMutex_Unlock(fwInstance->mutex); return error;}/* * nssCKFWInstance_DestroyObjectHandle * */NSS_IMPLEMENT voidnssCKFWInstance_DestroyObjectHandle( NSSCKFWInstance *fwInstance, CK_OBJECT_HANDLE hObject){ NSSCKFWObject *fwObject;#ifdef NSSDEBUG if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { return; }#endif /* NSSDEBUG */ if( CKR_OK != nssCKFWMutex_Lock(fwInstance->mutex) ) { return; } fwObject = (NSSCKFWObject *)nssCKFWHash_Lookup( fwInstance->objectHandleHash, (const void *)hObject); /* Assert(hObject = nssCKFWObject_GetHandle(fwObject)) */ nssCKFWHash_Remove(fwInstance->objectHandleHash, (const void *)hObject); (void)nssCKFWObject_SetHandle(fwObject, (CK_SESSION_HANDLE)0); (void)nssCKFWMutex_Unlock(fwInstance->mutex); return;}/* * nssCKFWInstance_FindObjectHandle * */NSS_IMPLEMENT CK_OBJECT_HANDLEnssCKFWInstance_FindObjectHandle( NSSCKFWInstance *fwInstance, NSSCKFWObject *fwObject){#ifdef NSSDEBUG if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { return (CK_OBJECT_HANDLE)0; } if( CKR_OK != nssCKFWObject_verifyPointer(fwObject) ) { return (CK_OBJECT_HANDLE)0; }#endif /* NSSDEBUG */ return nssCKFWObject_GetHandle(fwObject);}/* * nssCKFWInstance_GetNSlots * */NSS_IMPLEMENT CK_ULONGnssCKFWInstance_GetNSlots( NSSCKFWInstance *fwInstance, CK_RV *pError){#ifdef NSSDEBUG if( (CK_RV *)NULL == pError ) { return (CK_ULONG)0; } *pError = nssCKFWInstance_verifyPointer(fwInstance); if( CKR_OK != *pError ) { return (CK_ULONG)0; }#endif /* NSSDEBUG */ *pError = CKR_OK; return fwInstance->nSlots;} /* * nssCKFWInstance_GetCryptokiVersion * */NSS_IMPLEMENT CK_VERSIONnssCKFWInstance_GetCryptokiVersion( NSSCKFWInstance *fwInstance){ CK_VERSION rv;#ifdef NSSDEBUG if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { rv.major = rv.minor = 0; return rv; }#endif /* NSSDEBUG */ if( CKR_OK != nssCKFWMutex_Lock(fwInstance->mutex) ) { rv.major = rv.minor = 0; return rv; } if( (0 != fwInstance->cryptokiVersion.major) || (0 != fwInstance->cryptokiVersion.minor) ) { rv = fwInstance->cryptokiVersion; goto done; } if( (void *)NULL != (void *)fwInstance->mdInstance->GetCryptokiVersion ) { fwInstance->cryptokiVersion = fwInstance->mdInstance->GetCryptokiVersion( fwInstance->mdInstance, fwInstance); } else { fwInstance->cryptokiVersion.major = 2; fwInstance->cryptokiVersion.minor = 1; } rv = fwInstance->cryptokiVersion; done: (void)nssCKFWMutex_Unlock(fwInstance->mutex); return rv;}/* * nssCKFWInstance_GetManufacturerID * */NSS_IMPLEMENT CK_RVnssCKFWInstance_GetManufacturerID( NSSCKFWInstance *fwInstance, CK_CHAR manufacturerID[32]){ CK_RV error = CKR_OK;#ifdef NSSDEBUG if( (CK_CHAR_PTR)NULL == manufacturerID ) { return CKR_ARGUMENTS_BAD; } error = nssCKFWInstance_verifyPointer(fwInstance); if( CKR_OK != error ) { return error; }#endif /* NSSDEBUG */ error = nssCKFWMutex_Lock(fwInstance->mutex); if( CKR_OK != error ) { return error; } if( (NSSUTF8 *)NULL == fwInstance->manufacturerID ) { if( (void *)NULL != (void *)fwInstance->mdInstance->GetManufacturerID ) { fwInstance->manufacturerID = fwInstance->mdInstance->GetManufacturerID( fwInstance->mdInstance, fwInstance, &error); if( ((NSSUTF8 *)NULL == fwInstance->manufacturerID) && (CKR_OK != error) ) { goto done; } } else { fwInstance->manufacturerID = (NSSUTF8 *) ""; } } (void)nssUTF8_CopyIntoFixedBuffer(fwInstance->manufacturerID, (char *)manufacturerID, 32, ' '); error = CKR_OK; done: (void)nssCKFWMutex_Unlock(fwInstance->mutex); return error;}/* * nssCKFWInstance_GetFlags * */NSS_IMPLEMENT CK_ULONGnssCKFWInstance_GetFlags( NSSCKFWInstance *fwInstance){#ifdef NSSDEBUG if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { return (CK_ULONG)0; }#endif /* NSSDEBUG */ /* No "instance flags" are yet defined by Cryptoki. */ return (CK_ULONG)0;}/* * nssCKFWInstance_GetLibraryDescription * */NSS_IMPLEMENT CK_RVnssCKFWInstance_GetLibraryDescription( NSSCKFWInstance *fwInstance, CK_CHAR libraryDescription[32]){ CK_RV error = CKR_OK;#ifdef NSSDEBUG if( (CK_CHAR_PTR)NULL == libraryDescription ) { return CKR_ARGUMENTS_BAD; } error = nssCKFWInstance_verifyPointer(fwInstance); if( CKR_OK != error ) { return error; }#endif /* NSSDEBUG */ error = nssCKFWMutex_Lock(fwInstance->mutex); if( CKR_OK != error ) { return error; } if( (NSSUTF8 *)NULL == fwInstance->libraryDescription ) { if( (void *)NULL != (void *)fwInstance->mdInstance->GetLibraryDescription ) { fwInstance->libraryDescription = fwInstance->mdInstance->GetLibraryDescription( fwInstance->mdInstance, fwInstance, &error); if( ((NSSUTF8 *)NULL == fwInstance->libraryDescription) && (CKR_OK != error) ) { goto done; } } else { fwInstance->libraryDescription = (NSSUTF8 *) ""; } } (void)nssUTF8_CopyIntoFixedBuffer(fwInstance->libraryDescription, (char *)libraryDescription, 32, ' '); error = CKR_OK; done: (void)nssCKFWMutex_Unlock(fwInstance->mutex); return error;}/* * nssCKFWInstance_GetLibraryVersion * */NSS_IMPLEMENT CK_VERSIONnssCKFWInstance_GetLibraryVersion( NSSCKFWInstance *fwInstance){ CK_VERSION rv;#ifdef NSSDEBUG if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { rv.major = rv.minor = 0; return rv; }#endif /* NSSDEBUG */ if( CKR_OK != nssCKFWMutex_Lock(fwInstance->mutex) ) { rv.major = rv.minor = 0; return rv; } if( (0 != fwInstance->libraryVersion.major) || (0 != fwInstance->libraryVersion.minor) ) { rv = fwInstance->libraryVersion; goto done; } if( (void *)NULL != (void *)fwInstance->mdInstance->GetLibraryVersion ) { fwInstance->libraryVersion = fwInstance->mdInstance->GetLibraryVersion( fwInstance->mdInstance, fwInstance); } else { fwInstance->libraryVersion.major = 0; fwInstance->libraryVersion.minor = 1; } rv = fwInstance->libraryVersion; done: (void)nssCKFWMutex_Unlock(fwInstance->mutex); return rv;}/* * nssCKFWInstance_GetModuleHandlesSessionObjects * */NSS_IMPLEMENT CK_BBOOLnssCKFWInstance_GetModuleHandlesSessionObjects( NSSCKFWInstance *fwInstance){#ifdef NSSDEBUG if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { return CK_FALSE; }#endif /* NSSDEBUG */ return fwInstance->moduleHandlesSessionObjects;}/* * nssCKFWInstance_GetSlots * */NSS_IMPLEMENT NSSCKFWSlot **nssCKFWInstance_GetSlots( NSSCKFWInstance *fwInstance, CK_RV *pError){#ifdef NSSDEBUG if( (CK_RV *)NULL == pError ) { return (NSSCKFWSlot **)NULL; } *pError = nssCKFWInstance_verifyPointer(fwInstance); if( CKR_OK != *pError ) { return (NSSCKFWSlot **)NULL; }#endif /* NSSDEBUG */ return fwInstance->fwSlotList;}/* * nssCKFWInstance_WaitForSlotEvent * */NSS_IMPLEMENT NSSCKFWSlot *nssCKFWInstance_WaitForSlotEvent( NSSCKFWInstance *fwInstance, CK_BBOOL block, CK_RV *pError){ NSSCKFWSlot *fwSlot = (NSSCKFWSlot *)NULL; NSSCKMDSlot *mdSlot; CK_ULONG i, n;#ifdef NSSDEBUG if( (CK_RV *)NULL == pError ) { return (NSSCKFWSlot *)NULL; } *pError = nssCKFWInstance_verifyPointer(fwInstance); if( CKR_OK != *pError ) { return (NSSCKFWSlot *)NULL; } switch( block ) { case CK_TRUE: case CK_FALSE: break; default: *pError = CKR_ARGUMENTS_BAD; return (NSSCKFWSlot *)NULL; }#endif /* NSSDEBUG */ if( (void *)NULL == (void *)fwInstance->mdInstance->WaitForSlotEvent ) { *pError = CKR_NO_EVENT; return (NSSCKFWSlot *)NULL; } mdSlot = fwInstance->mdInstance->WaitForSlotEvent( fwInstance->mdInstance, fwInstance, block, pError ); if( (NSSCKMDSlot *)NULL == mdSlot ) { return (NSSCKFWSlot *)NULL; } n = nssCKFWInstance_GetNSlots(fwInstance, pError); if( ((CK_ULONG)0 == n) && (CKR_OK != *pError) ) { return (NSSCKFWSlot *)NULL; } for( i = 0; i < n; i++ ) { if( fwInstance->mdSlotList[i] == mdSlot ) { fwSlot = fwInstance->fwSlotList[i]; break; } } if( (NSSCKFWSlot *)NULL == fwSlot ) { /* Internal error */ *pError = CKR_GENERAL_ERROR; return (NSSCKFWSlot *)NULL; } return fwSlot;}/* * 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);}/* * NSSCKFWInstance_GetArena * */NSS_IMPLEMENT NSSArena *NSSCKFWInstance_GetArena( NSSCKFWInstance *fwInstance, CK_RV *pError){#ifdef DEBUG if( (CK_RV *)NULL == pError ) { return (NSSArena *)NULL; } *pError = nssCKFWInstance_verifyPointer(fwInstance); if( CKR_OK != *pError ) { return (NSSArena *)NULL; }#endif /* DEBUG */ return nssCKFWInstance_GetArena(fwInstance, pError);}/* * NSSCKFWInstance_MayCreatePthreads * */NSS_IMPLEMENT CK_BBOOLNSSCKFWInstance_MayCreatePthreads( NSSCKFWInstance *fwInstance){#ifdef DEBUG if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { return CK_FALSE; }#endif /* DEBUG */ return nssCKFWInstance_MayCreatePthreads(fwInstance);}/* * NSSCKFWInstance_CreateMutex * */NSS_IMPLEMENT NSSCKFWMutex *NSSCKFWInstance_CreateMutex( NSSCKFWInstance *fwInstance, NSSArena *arena, CK_RV *pError){#ifdef DEBUG if( (CK_RV *)NULL == pError ) { return (NSSCKFWMutex *)NULL; } *pError = nssCKFWInstance_verifyPointer(fwInstance); if( CKR_OK != *pError ) { return (NSSCKFWMutex *)NULL; }#endif /* DEBUG */ return nssCKFWInstance_CreateMutex(fwInstance, arena, pError);}/* * NSSCKFWInstance_GetConfigurationData * */NSS_IMPLEMENT NSSUTF8 *NSSCKFWInstance_GetConfigurationData( NSSCKFWInstance *fwInstance){#ifdef DEBUG if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { return (NSSUTF8 *)NULL; }#endif /* DEBUG */ return nssCKFWInstance_GetConfigurationData(fwInstance);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?