Пример #1
0
/***********************************************************
Function: sc_init_one 

Description:
	get the function list pointer first. 
	initialize and find the slot with the card


***********************************************************/
int
sc_init_one(
    CK_SLOT_ID_PTR                      pslot) 
{
  CK_RV                               status;
  CK_SLOT_ID                          list[20];
  CK_SLOT_ID                          slot;
  CK_SLOT_ID_PTR                      slotList = &list[0];
  CK_TOKEN_INFO                       tokeninfo;
  CK_ULONG                            count = 0;
  CK_C_Initialize                     pC_Initialize;

  if (!sc_get_function_list()) {
    return SCERR_R_INITIALIZE;
  }

  pC_Initialize = pFunctionList->C_Initialize;
  status = (*pC_Initialize)(0);

  if (status != CKR_OK) {
    SCerr(SCERR_F_SCINIT,SCERR_R_INITIALIZE);
    ERR_add_error_data(1,sc_ERR_code(status));
    return SCERR_R_INITIALIZE;
  }
/*
  status = (*(pFunctionList->C_GetSlotList))(FALSE, NULL, &count);
  if (status != CKR_OK) {
  SCerr(SCERR_F_SCINIT,SCERR_R_GETSLOTLIST);
  ERR_add_error_data(1,sc_ERR_code(status));
  return SCERR_R_GETSLOTLIST;
  }
  fprintf(stderr,"Slotlist count = %d\n",count);
*/
  count = 20;

  status = (*(pFunctionList->C_GetSlotList))(FALSE, slotList, &count);
  if (status != CKR_OK) {
    SCerr(SCERR_F_SCINIT,SCERR_R_GETSLOTLIST);
    ERR_add_error_data(1,sc_ERR_code(status));
    return SCERR_R_GETSLOTLIST;
  }
    
  if (count == 0) {
    SCerr(SCERR_F_SCINIT,SCERR_R_OPENSESSION);
    ERR_add_error_data(1,"\n       No SmartCard readers found");
    return SCERR_R_OPENSESSION;
  }

  /*
   * need to look at all the slots. 
   * Maybe provide the card label then look for it 
   */

  slot = list[0];
  if (pslot) {
    *pslot = slot;
  }
  return 0;
}
Пример #2
0
/***********************************************************
Function: sc_init_one 

Description:
	get the function list pointer first. 
	initialize and find the slot with the card


***********************************************************/
int
sc_init_one(
    CK_SLOT_ID_PTR                      pslot) 
{
  CK_RV                               status;
  CK_SLOT_ID                          list[20];
  CK_SLOT_ID                          slot;
  CK_SLOT_ID_PTR                      slotList = &list[0];
  CK_ULONG                            count = 0;
  CK_C_Initialize                     pC_Initialize;
  CK_C_INITIALIZE_ARGS		      initArgs;
  CK_C_INITIALIZE_ARGS_PTR	      args = NULL;
  const char *			      nss_library_params = NULL;

  if (!sc_get_function_list()) {
    return SCERR_R_INITIALIZE;
  }

  nss_library_params = getenv("PKCS11_INIT_ARGS");
  if (nss_library_params) {
      /* hack to initialize the NSS soft token */
      memset(&initArgs, 0, sizeof(initArgs));
      initArgs.flags = CKF_OS_LOCKING_OK;
      initArgs.pReserved = (void *) nss_library_params;
      args = &initArgs;
  }

  pC_Initialize = pFunctionList->C_Initialize;
  status = (*pC_Initialize)(args);

  if (status != CKR_OK) {
    SCerr(SCERR_F_SCINIT,SCERR_R_INITIALIZE);
    ERR_add_error_data(1,sc_ERR_code(status));
    return SCERR_R_INITIALIZE;
  }
/*
  status = (*(pFunctionList->C_GetSlotList))(FALSE, NULL, &count);
  if (status != CKR_OK) {
  SCerr(SCERR_F_SCINIT,SCERR_R_GETSLOTLIST);
  ERR_add_error_data(1,sc_ERR_code(status));
  return SCERR_R_GETSLOTLIST;
  }
  fprintf(stderr,"Slotlist count = %d\n",count);
*/
  count = 20;

  status = (*(pFunctionList->C_GetSlotList))(FALSE, slotList, &count);
  if (status != CKR_OK) {
    SCerr(SCERR_F_SCINIT,SCERR_R_GETSLOTLIST);
    ERR_add_error_data(1,sc_ERR_code(status));
    return SCERR_R_GETSLOTLIST;
  }
    
  if (count == 0) {
    SCerr(SCERR_F_SCINIT,SCERR_R_OPENSESSION);
    ERR_add_error_data(1,"\n       No SmartCard readers found");
    return SCERR_R_OPENSESSION;
  }

  /*
   * need to look at all the slots. 
   * Maybe provide the card label then look for it 
   */

//  slot = list[0];
  slot = list[1];
  if (pslot) {
    *pslot = slot;
  }
  return 0;
}