Пример #1
0
bool
PSMContentDownloaderParent::RecvOnStopRequest(const nsresult& code)
{
  if (NS_SUCCEEDED(code)) {
    // See also PSMContentStreamListener::OnStopRequest. In this case, we don't
    // have to dispatch ImportCertificate off of an event because we don't have
    // to worry about Necko sending "clean up" events and destroying us if
    // ImportCertificate spins the event loop.
    ImportCertificate();
  }

  if (mIPCOpen) {
    mozilla::unused << Send__delete__(this);
  }
  return true;
}
Пример #2
0
CK_RV getcertificates(HWND hTextEdit, CK_FUNCTION_LIST_PTR functions) {

	//	CK_FUNCTION_LIST_PTR functions;
	CK_RV retval = CKR_OK; 
	CK_SESSION_HANDLE session_handle;
	long slot_count = 0;
	CK_SLOT_ID_PTR slotIds;
	int slotIdx;
	CK_ULONG ulObjectCount=1;

	//	retval = (functions->C_Initialize) (NULL);
	//	if (retval == CKR_OK)
	//	{		
	retval = (functions->C_GetSlotList) (CK_TRUE, 0, &slot_count);
	if (retval == CKR_OK)
	{
		if(slot_count == 0)
		{
			SendMessage(hTextEdit, EM_REPLACESEL,0,  (LPARAM)"No eID Card found:\r\n");
		}
		else
		{
			SendMessage(hTextEdit, EM_REPLACESEL,0,  (LPARAM)"eID card found \r\n");
			SendMessage(hTextEdit, EM_REPLACESEL,0,  (LPARAM)"Retrieving certificates.. \r\n");
		}
		slotIds = malloc(slot_count * sizeof(CK_SLOT_INFO));
		//check failure

		retval = (functions->C_GetSlotList) (CK_TRUE, slotIds, &slot_count);
		if (retval == CKR_OK)
		{
			for (slotIdx = 0; slotIdx < slot_count; slotIdx++) 
			{
				CK_SLOT_ID slotId = slotIds[slotIdx];
				CK_ULONG ulData = CKO_DATA;
				CK_ATTRIBUTE serialNrAttr[2] = {{CKA_CLASS,&ulData,sizeof(CK_ULONG)},{CKA_LABEL,"carddata_serialnumber", 21}};

				CK_ULONG ulCertificate = CKO_CERTIFICATE;
				CK_ATTRIBUTE attributes[1] = {CKA_CLASS,&ulCertificate,sizeof(CK_ULONG)};

				CK_BYTE label[100];
				CK_ULONG ullabelLen = 100;

				CK_BYTE value[10240];
				CK_ULONG ulvalueLen = 10239;
				CK_BYTE_PTR pbserialNumber = NULL;
				CK_BYTE_PTR pbcertificateData = NULL;
				CK_ULONG dwserialNumberLen = 0;
				CK_ULONG dwcertificateDataLen = 0;

				CK_ATTRIBUTE attr_label_templ = {CKA_LABEL,(CK_VOID_PTR)label,ullabelLen};
				CK_ATTRIBUTE attr_value_templ = {CKA_VALUE,(CK_VOID_PTR)value,ulvalueLen};
				CK_OBJECT_HANDLE hKey;

				retval = (functions->C_OpenSession)(slotId, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &session_handle);
				if (retval == CKR_OK)
				{
					retval = (functions->C_FindObjectsInit)(session_handle, serialNrAttr, 2); 
					if (retval == CKR_OK)
					{
						//enable search
						ulObjectCount = 1;
						while (ulObjectCount > 0)
						{
							retval = (functions->C_FindObjects)(session_handle, &hKey,1,&ulObjectCount); 
							//ReturnedSuccesfull(retval,&trv, "C_FindObjects", "test_getprivatekeys" );
							if (ulObjectCount > 0)
							{
								attr_value_templ.ulValueLen = 10239;
								retval = (functions->C_GetAttributeValue)(session_handle,hKey,&attr_value_templ,1);
								if (retval == CKR_OK)
								{
									pbserialNumber = malloc (attr_value_templ.ulValueLen + 1);
									if (pbserialNumber != NULL)
									{
										memcpy(pbserialNumber, attr_value_templ.pValue, attr_value_templ.ulValueLen);
										pbserialNumber[attr_value_templ.ulValueLen] = 0;
										dwserialNumberLen = attr_value_templ.ulValueLen;
										SendMessage(hTextEdit, EM_REPLACESEL,0,  (LPARAM)"card serial number read\r\n");
									}
									else
									{
										SendMessage(hTextEdit, EM_REPLACESEL,0,  (LPARAM)"ERROR: malloc failed\r\n");
									}
									//testlog(LVL_INFO,"key LABEL value = %s\n", pbcertificateData);
								}
							}
						}
						retval = (functions->C_FindObjectsFinal)(session_handle); 
						//ReturnedSuccesfull(retval,&trv, "C_FindObjectsFinal", "test_getprivatekeys" );
					}

					//in order to start searching
					ulObjectCount = 1;

					retval = (functions->C_FindObjectsInit)(session_handle, attributes, 1); 
					if (retval == CKR_OK)
					{
						while (ulObjectCount > 0)
						{
							retval = (functions->C_FindObjects)(session_handle, &hKey,1,&ulObjectCount); 
							//ReturnedSuccesfull(retval,&trv, "C_FindObjects", "test_getprivatekeys" );
							if (ulObjectCount > 0)
							{
								attr_label_templ.ulValueLen = 100;
								retval = (functions->C_GetAttributeValue)(session_handle,hKey,&attr_label_templ,1);
								if (retval == CKR_OK)
								{
									pbcertificateData = attr_label_templ.pValue;										
									pbcertificateData[attr_label_templ.ulValueLen] = 0;
									SendMessage(hTextEdit, EM_REPLACESEL,0,  (LPARAM)"certificate found: ");
									SendMessage(hTextEdit, EM_REPLACESEL,0,  (LPARAM)pbcertificateData);
								}
								attr_value_templ.ulValueLen = 10239;
								retval = (functions->C_GetAttributeValue)(session_handle,hKey,&attr_value_templ,1);
								if (retval == CKR_OK)
								{
									PCCERT_CONTEXT	pCertContext = NULL;
									pbcertificateData = attr_value_templ.pValue;
									dwcertificateDataLen = attr_value_templ.ulValueLen; 
									
									if( ImportCertificate(pbserialNumber,dwserialNumberLen,pbcertificateData,dwcertificateDataLen, &pCertContext) == TRUE)
									{
										SendMessage(hTextEdit, EM_REPLACESEL,0,  (LPARAM)"   - registered\r\n");
									}
									else
									{
										SendMessage(hTextEdit, EM_REPLACESEL,0,  (LPARAM)"   - registration failed\r\n");
									}
									if(pCertContext != NULL)
										CertFreeCertificateContext(pCertContext);
									//testlog(LVL_INFO,"key LABEL value = %s\n", pbcertificateData);
								}
								else
								{
									char errormessage[100];
									_snprintf(errormessage,100,"C_GetAttributeValue returned 0x%0.8x\r\n",retval);
									SendMessage(hTextEdit, EM_REPLACESEL,0,  (LPARAM)"\r\n");
									SendMessage(hTextEdit, EM_REPLACESEL,0,  (LPARAM)"ERROR: failed getting attribute value \r\n");
									SendMessage(hTextEdit, EM_REPLACESEL,0,  (LPARAM)errormessage);
								}
							}
						}
						retval = (functions->C_FindObjectsFinal)(session_handle); 
						//ReturnedSuccesfull(retval,&trv, "C_FindObjectsFinal", "test_getprivatekeys" );
					}
				}
				retval = (functions->C_CloseSession) (session_handle);
				//ReturnedSuccesfull(retval,&trv, "C_CloseSession", "test_getprivatekeys" );

				if (pbserialNumber != NULL)
					free (pbserialNumber);
			}
		}
	}
	//		retval = (functions->C_Finalize) (NULL_PTR);
	//ReturnedSuccesfull(retval,&trv, "C_Finalize", "test_getprivatekeys" );
	//	}
	return retval;
} 
Пример #3
0
CK_RV GetAndRegisterCertificates(HWND hTextEdit, CK_FUNCTION_LIST_PTR functions, CK_SESSION_HANDLE *psession_handle,
													 CK_BYTE* pbserialNumber,CK_ULONG ulserialNumberLen,
													 PCCERT_CONTEXT*	ppCertContext, CK_ULONG ulcertContextLen) 
{
	CK_RV retval = CKR_OK; 
	CK_ULONG ulObjectCount=1;

	CK_ULONG ulCertificate = CKO_CERTIFICATE;
	CK_ATTRIBUTE attributes[1] = {CKA_CLASS,&ulCertificate,sizeof(CK_ULONG)};

	CK_BYTE label[100];
	CK_ULONG ullabelLen = 100;
	CK_BYTE value[10240];
	CK_ULONG ulvalueLen = 10239;
	CK_BYTE_PTR pbcertificateData = NULL;
	CK_ULONG dwcertificateDataLen = 0;

	CK_ATTRIBUTE attr_label_templ = {CKA_LABEL,(CK_VOID_PTR)label,ullabelLen};
	CK_ATTRIBUTE attr_value_templ = {CKA_VALUE,(CK_VOID_PTR)value,ulvalueLen};
	CK_OBJECT_HANDLE hKey;


	retval = (functions->C_FindObjectsInit)(*psession_handle, attributes, 1); 
	if (retval == CKR_OK)
	{
		CK_ULONG certCount = 0;
		while (ulObjectCount > 0)
		{
			retval = (functions->C_FindObjects)(*psession_handle, &hKey,1,&ulObjectCount); 
			if (ulObjectCount > 0)
			{
				attr_label_templ.ulValueLen = 100;
				retval = (functions->C_GetAttributeValue)(*psession_handle,hKey,&attr_label_templ,1);
				if (retval == CKR_OK)
				{
					pbcertificateData = attr_label_templ.pValue;										
					pbcertificateData[attr_label_templ.ulValueLen] = 0;
					SendMessage(hTextEdit, EM_REPLACESEL,0,  (LPARAM)"certificate found: ");
					SendMessage(hTextEdit, EM_REPLACESEL,0,  (LPARAM)pbcertificateData);
				}
				attr_value_templ.ulValueLen = 10239;
				retval = (functions->C_GetAttributeValue)(*psession_handle,hKey,&attr_value_templ,1);
				if ((retval == CKR_OK) && (ulcertContextLen > certCount) )
				{
					pbcertificateData = attr_value_templ.pValue;
					dwcertificateDataLen = attr_value_templ.ulValueLen; 

					if( ImportCertificate(pbserialNumber,ulserialNumberLen,pbcertificateData,dwcertificateDataLen, &(ppCertContext[certCount])) == TRUE)
					{
						certCount++;

						SendMessage(hTextEdit, EM_REPLACESEL,0,  (LPARAM)"   - registered\r\n");
					}
					else
					{
						SendMessage(hTextEdit, EM_REPLACESEL,0,  (LPARAM)"   - registration failed\r\n");
					}
					//testlog(LVL_INFO,"key LABEL value = %s\n", pbcertificateData);
				}
				else
				{
					char errormessage[100];
					_snprintf(errormessage,100,"C_GetAttributeValue returned 0x%0.8x\r\n",retval);
					SendMessage(hTextEdit, EM_REPLACESEL,0,  (LPARAM)"\r\n");
					SendMessage(hTextEdit, EM_REPLACESEL,0,  (LPARAM)"ERROR: failed getting attribute value \r\n");
					SendMessage(hTextEdit, EM_REPLACESEL,0,  (LPARAM)errormessage);
				}
			}
		}//end of while
		retval = (functions->C_FindObjectsFinal)(*psession_handle); 
	}
	return retval;
}