bool doGetCertificate(PluginInstance *obj, NPVariant *result) {
	LOG_LOCATION;
	FAIL_IF_NOT_ALLOWED_SITE;    
	char selectedCertID[33];
	int dlg_result = 0;
	
	dlg_result = promptForCertificate(getNativeWindowHandle(obj), selectedCertID);

	EstEID_log("Certificate selection dialog result = %i", dlg_result);
	EstEID_log("Selected certificate ID = %s", selectedCertID);

	if(dlg_result == IDCANCEL) {
		sprintf(EstEID_error, "User canceled");
		EstEID_errorCode = ESTEID_USER_CANCEL;
		EstEID_log("EstEID_error = %s", EstEID_error);
		browserFunctions->setexception(&obj->header, EstEID_error);	
		return false;
	}
	
	CertInstance *certInstance = (CertInstance *)browserFunctions->createobject(obj->npp, certClass());
	certInstance->npp = obj->npp;
	certInstance->certInfo = EstEID_mapClone(EstEID_getNonRepudiationCertById(selectedCertID));
//	certInstance->certInfo = EstEID_mapClone(EstEID_getNonRepudiationCert());

	EstEID_log("certObject=%p", certInstance);
	OBJECT_TO_NPVARIANT((NPObject *)certInstance, *result);
	EstEID_log("result=%p", result);	
	return true;
}
bool doGetCertificates(PluginInstance *obj, NPVariant *result) {
	LOG_LOCATION;
	EstEID_log("obj=%p, name=doGetCertificates", obj);
	NPObject *windowObject = NULL;
	browserFunctions->getvalue(obj->npp, NPNVWindowNPObject, &windowObject);
	NPVariant array;
	browserFunctions->invoke(obj->npp, windowObject, browserFunctions->getstringidentifier("Array"), NULL, 0, &array);
	EstEID_Certs *certs = EstEID_loadCerts();
	for (unsigned i = 0u; i < certs->count; i++) {
		EstEID_Map cert = certs->certs[i];
		if (!EstEID_mapGet(cert, "usageNonRepudiation")) continue;
		CertInstance *certInstance = (CertInstance *)browserFunctions->createobject(obj->npp, certClass());
		certInstance->npp = obj->npp;
		certInstance->certInfo = EstEID_mapClone(cert);
		browserFunctions->retainobject((NPObject *)certInstance);
		EstEID_log("certObject=%p", certInstance);
		NPVariant *arg = (NPVariant *)browserFunctions->memalloc(sizeof(NPVariant));
		OBJECT_TO_NPVARIANT((NPObject *)certInstance, *arg);
		NPVariant ret;
		browserFunctions->invoke(obj->npp, array.value.objectValue, browserFunctions->getstringidentifier("push"), arg, 1, &ret);
	}
	browserFunctions->retainobject(array.value.objectValue);
	OBJECT_TO_NPVARIANT(array.value.objectValue, *result);
	return true;
}
bool doGetCertificate(PluginInstance *obj, NPVariant *result) {
	LOG_LOCATION;
	FAIL_IF_NOT_ALLOWED_SITE;
	char selectedCertID[33];
	int dlg_result = 0;
	
#ifdef _WIN32
	HWND ownerWindowHandle = (HWND)getNativeWindowHandle(obj);
	EstEID_log("owner window handle passed to DialogBoxParam() = %08X", ownerWindowHandle);
	dlg_result = (int)DialogBoxParam(pluginInstance, MAKEINTRESOURCE(IDD_CERTIFICATESELECTIONDLG), ownerWindowHandle, CertSelectionDialogProc, (LPARAM)selectedCertID);
#else
	dlg_result = promptForCertificate(getNativeWindowHandle(obj), selectedCertID);
#endif
	EstEID_log("Certificate selection dialog result = %i", dlg_result);
	EstEID_log("Selected certificate ID = %s", selectedCertID);
    
	if(dlg_result == IDCANCEL) {
		sprintf(EstEID_error, "User canceled");
		EstEID_errorCode = ESTEID_USER_CANCEL;
		EstEID_log("EstEID_error = %s", EstEID_error);
		browserFunctions->setexception(&obj->header, EstEID_error);
		return false;
	}
    if(dlg_result == IDABORT) {
		sprintf(EstEID_error, "No certificates");
		EstEID_errorCode = ESTEID_CERT_NOT_FOUND_ERROR;
		EstEID_log("EstEID_error = %s", EstEID_error);
		browserFunctions->setexception(&obj->header, EstEID_error);
		return false;
	}
	
	CertInstance *certInstance = (CertInstance *)browserFunctions->createobject(obj->npp, certClass());
	certInstance->npp = obj->npp;
	certInstance->certInfo = EstEID_mapClone(EstEID_getNonRepudiationCertById(selectedCertID));
    //	certInstance->certInfo = EstEID_mapClone(EstEID_getNonRepudiationCert());
    
	EstEID_log("certObject=%p", certInstance);
	OBJECT_TO_NPVARIANT((NPObject *)certInstance, *result);
	EstEID_log("result=%p", result);
	return true;
}