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 + -
显示快捷键?