int EstEID_getSlotId(char* certId, CK_SLOT_ID* slotId) { int certIndex; EstEID_Certs *certs = EstEID_loadCerts(); EstEID_log("certs loaded"); if (!certs) { EstEID_log("%s", EstEID_error); return FALSE; } else if ((certIndex = EstEID_findNonRepuditionCert(certs, certId)) == NOT_FOUND) { EstEID_log("card is changed"); return FALSE; } *slotId = certs->slotIDs[certIndex]; return TRUE; }
int main(int argc, const char **argv) { EstEID_Certs *certs = EstEID_loadCerts(NULL); if (certs != NULL) { EstEID_printCerts(certs); while(1) { printf("tokensChanged: %i\n", EstEID_tokensChanged()); getchar(); } //EstEID_waitForSlotEvent(); if (argc == 2) sign(argv[1], certs); EstEID_freeCerts(certs); } else { printf("error: %s (error code: %i)\n", EstEID_error, EstEID_errorCode); } }
BOOL CEstEidPin2Dlg::OnInitDialog() { LOG_LOCATION; CDialog::OnInitDialog(); WCHAR label[512]; int certIndex; EstEID_Certs *certs = EstEID_loadCerts(); if (!certs) { EstEID_log("no certs found"); } else if ((certIndex = EstEID_findNonRepuditionCert(certs, ATL::CW2A(this->certId))) == NOT_FOUND) { EstEID_log("card is changed"); } EstEID_Map cert = certs->certs[certIndex]; char* name = EstEID_getFullNameWithPersonalCode(cert); MultiByteToWideChar(CP_UTF8, 0, name, -1, label, sizeof(label) / sizeof(WCHAR)); this->SetWindowText(label); SetDlgItemText(IDC_NAME, label); this->pin2MinLen = (unsigned)atoi(EstEID_mapGet(cert, "minPinLen")); free(name); MultiByteToWideChar(CP_UTF8, 0, l10n("For signing enter PIN2:"), -1, label, sizeof(label) / sizeof(WCHAR)); SetDlgItemText(IDC_PIN2_LABEL, label); MultiByteToWideChar(CP_UTF8, 0, l10n("Sign"), -1, label, sizeof(label) / sizeof(WCHAR)); SetDlgItemText(IDOK, label); MultiByteToWideChar(CP_UTF8, 0, l10n("Cancel"), -1, label, sizeof(label) / sizeof(WCHAR)); SetDlgItemText(IDCANCEL, label); SetDlgItemText(IDC_ERROR, L""); EndDialogIfPIN2Blocked(SetUpPin2Dialog()); return TRUE; }
void buildCertificatesList(HWND hwnd) { RECT rect; HWND certificatesList; LV_COLUMN lvC; certificatesList = GetDlgItem(hwnd, IDC_CERTIFICATESLIST); ListView_SetUnicodeFormat(certificatesList, true); GetClientRect(certificatesList, &rect); int rectWidth = rect.right - rect.left; int colSize = rectWidth/6; int colWidths[] = {3 * colSize, 2 * colSize, colSize + (rectWidth - (6*colSize)), 0}; int colTitles[] = {IDS_CERTIFICATEHEADER, IDS_TYPEHEADER, IDS_VALIDUNTILHEADER, IDS_EMPTY}; ListView_SetExtendedListViewStyle(certificatesList, LVS_EX_FULLROWSELECT); lvC.mask = LVCF_WIDTH | LVCF_TEXT; lvC.fmt = LVCFMT_LEFT; TCHAR header[32]; for(int index = 0; index < 4; index++) { lvC.iSubItem = index; lvC.cx = colWidths[index]; LoadString(pluginInstance, colTitles[index], header, sizeof(header)/sizeof(TCHAR)); lvC.pszText = header;//colTitles[index]; ListView_InsertColumn(certificatesList, index, &lvC); } LV_ITEM lv; lv.mask = LVIF_TEXT; EstEID_Certs *certs = EstEID_loadCerts(); EstEID_log("reading certs @ %p, certs->count = %u ", certs, certs->count); TCHAR unicodeBuf[512]; int currentCertIndex = 0; for (int i = 0; i < certs->count; i++) { EstEID_Map cert = certs->certs[i]; if (!EstEID_mapGet(cert, "usageNonRepudiation")) { continue; } lv.iSubItem = 0; lv.iItem = currentCertIndex; MultiByteToWideChar(CP_UTF8, 0, EstEID_mapGet(cert, "commonName"), -1, unicodeBuf, sizeof(unicodeBuf) / sizeof(TCHAR)); lv.pszText = (LPWSTR)unicodeBuf; ListView_InsertItem(certificatesList, &lv); MultiByteToWideChar(CP_UTF8, 0, EstEID_mapGet(cert, "organizationName"), -1, unicodeBuf, sizeof(unicodeBuf) / sizeof(TCHAR)); ListView_SetItemText(certificatesList, currentCertIndex, 1, unicodeBuf); char* validTo = getDateFromDateTime(EstEID_mapGet(cert, "validTo")); MultiByteToWideChar(CP_UTF8, 0, validTo, -1, unicodeBuf, sizeof(unicodeBuf) / sizeof(TCHAR)); ListView_SetItemText(certificatesList, currentCertIndex, 2, unicodeBuf); free(validTo); MultiByteToWideChar(CP_UTF8, 0, EstEID_mapGet(cert, "certHash"), -1, unicodeBuf, sizeof(unicodeBuf) / sizeof(TCHAR)); ListView_SetItemText(certificatesList, currentCertIndex, 3, unicodeBuf); currentCertIndex++; } }