QString hostId() { static QString id; unsigned char guid[100] = "", md[SHA_DIGEST_LENGTH]; if (!id.isEmpty()) return id; #if defined(Q_OS_WIN32) #define REG_CRYPTO "SOFTWARE\\Microsoft\\Cryptography" #define REG_GUID "MachineGuid" ULONG dwGuid = sizeof guid; HKEY hKey; if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, REG_CRYPTO, 0, KEY_WOW64_64KEY|KEY_READ, &hKey) != ERROR_SUCCESS) { XCA_WARN("Registry Key: '" REG_CRYPTO "' not found"); } else { if (RegQueryValueEx(hKey, REG_GUID, NULL, NULL, guid, &dwGuid) != ERROR_SUCCESS) { XCA_WARN("Registry Key: '" REG_CRYPTO "\\" REG_GUID "' not found"); } } RegCloseKey(hKey); #elif defined(Q_OS_MAC) io_registry_entry_t ioRegistryRoot = IORegistryEntryFromPath( kIOMasterPortDefault, "IOService:/"); CFStringRef uuidCf = (CFStringRef)IORegistryEntryCreateCFProperty( ioRegistryRoot, CFSTR(kIOPlatformUUIDKey), kCFAllocatorDefault, 0); snprintf((char*)guid, sizeof guid, "%s", CCHAR( QString::fromUtf16(CFStringGetCharactersPtr(uuidCf)) )); IOObjectRelease(ioRegistryRoot); CFRelease(uuidCf); #else QString mach_id; QStringList dirs; dirs << "/etc" << "/var/lib/dbus" << "/var/db/dbus"; foreach(QString dir, dirs) { QFile file(dir + "/machine-id"); if (file.open(QIODevice::ReadOnly)) { QTextStream in(&file); mach_id = in.readLine().trimmed(); file.close(); } qDebug() << "ID:" << mach_id; if (!mach_id.isEmpty()) { snprintf((char*)guid, sizeof guid, "%s", CCHAR(mach_id)); break; } }
QString getPrefix() { #if defined(Q_OS_WIN32) static char inst_dir[100] = ""; char *p; ULONG dwLength = 100; HKEY hKey; if (inst_dir[0] != '\0') { /* if we already once discovered the directory just return it */ return QString(inst_dir); } // fallback: directory of xca.exe GetModuleFileName(0, inst_dir, dwLength - 1); p = strrchr(inst_dir, '\\'); if (p) { *p = '\0'; return QString(inst_dir); } if (portable_app()) return QString(inst_dir); p = inst_dir; *p = '\0'; if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\xca", 0, KEY_WOW64_32KEY|KEY_READ, &hKey) != ERROR_SUCCESS) { XCA_WARN("Registry Key: 'HKEY_LOCAL_MACHINE\\Software\\xca' not found"); return QString(inst_dir); } if (RegQueryValueEx(hKey, "Install_Dir", NULL, NULL, (unsigned char *)inst_dir, &dwLength) != ERROR_SUCCESS) { XCA_WARN("Registry Key: 'HKEY_LOCAL_MACHINE->Software->xca->Install_Dir' not found"); } RegCloseKey(hKey); return QString(inst_dir); #elif defined(Q_OS_MAC) // since this is platform-specific anyway, // this is a more robust way to get the bundle directory QDir bundleDir(qApp->applicationDirPath()); bundleDir.cdUp(); return bundleDir.canonicalPath() + "/Resources"; #else #ifndef XCA_PREFIX #define XCA_PREFIX PREFIX "/share/xca" #endif return QString(XCA_PREFIX); #endif }
static LONG CALLBACK w32_segfault(LPEXCEPTION_POINTERS e) { if (e->ExceptionRecord->ExceptionCode == EXCEPTION_ACCESS_VIOLATION) { if (segv_data[0]) { XCA_WARN(QString(segv_data)); abort(); } return EXCEPTION_CONTINUE_EXECUTION; } else return EXCEPTION_CONTINUE_SEARCH; }
void CertDetail::setCert(pki_x509 *cert) { image->setPixmap(*MainWindow::certImg); headerLabel->setText(tr("Details of the certificate")); try { setX509super(cert); // No attributes tabwidget->removeTab(3); // examine the signature if ( cert->getSigner() == NULL) { signature->setText(tr("Signer unknown")); signature->setDisabled(true); signature->disableToolTip(); } else if ( cert == cert->getSigner()) { signature->setText(tr("Self signed")); signature->setGreen(); signature->disableToolTip(); } else { signature->setText(cert->getSigner()->getIntName()); signature->setGreen(); } // check trust state trustState->disableToolTip(); if (cert->getEffTrust() == 0) { trustState->setText(tr("Not trusted")); trustState->setRed(); } else { trustState->setText(tr("Trusted")); trustState->setGreen(); } // the serial serialNr->setText(cert->getSerial().toHex()); // details of the issuer issuer->setX509name(cert->getIssuer()); // The dates notBefore->setText(cert->getNotBefore().toPretty()); notBefore->setToolTip(cert->getNotBefore().toPrettyGMT()); notAfter->setText(cert->getNotAfter().toPretty()); notAfter->setToolTip(cert->getNotAfter().toPrettyGMT()); // validation of the Date dateValid->disableToolTip(); if (cert->isRevoked()) { x509rev rev = cert->getRevocation(); dateValid->setText(tr("Revoked: ") + rev.getDate().toPretty()); dateValid->setRed(); dateValid->setToolTip(rev.getDate().toPrettyGMT()); } else if (!cert->checkDate()) { dateValid->setText(tr("Not valid")); dateValid->setRed(); } else { dateValid->setGreen(); dateValid->setText(tr("Valid")); } // the fingerprints fpMD5->setText(cert->fingerprint(EVP_md5())); fpSHA1->setText(cert->fingerprint(EVP_sha1())); QString fp = cert->fingerprint(EVP_sha256()); int x = fp.size() / 2; fp = fp.mid(0,x) + "\n" + fp.mid(x+1, -1); fpSHA256->setText(fp); openssl_error(); } catch (errorEx &err) { XCA_WARN(err.getString()); } }
void CertDetail::setReq(pki_x509req *req) { image->setPixmap(*MainWindow::csrImg); headerLabel->setText(tr("Details of the certificate signing request")); try { setX509super(req); // No issuer tabwidget->removeTab(2); // verification if (!req->verify() ) { signature->setRed(); signature->setText("Failed"); } else { signature->setGreen(); if (req->isSpki()) { signature->setText("SPKAC"); } else { signature->setText("PKCS#10"); } } signature->disableToolTip(); trustState->hide(); fingerprints->hide(); validity->hide(); serialLabel->hide(); serialNr->hide(); // The non extension attributes int cnt = X509_REQ_get_attr_count(req->getReq()); int added = 0; QGridLayout *attrLayout = new QGridLayout(attributes); attrLayout->setAlignment(Qt::AlignTop); attrLayout->setSpacing(6); attrLayout->setMargin(11); for (int i = 0; i<cnt; i++) { int nid; QLabel *label; QString trans; X509_ATTRIBUTE *att = X509_REQ_get_attr(req->getReq(), i); nid = OBJ_obj2nid(att->object); if (X509_REQ_extension_nid(nid)) { continue; } label = new QLabel(this); trans = dn_translations[nid]; if (translate_dn && !trans.isEmpty()) { label->setText(trans); label->setToolTip(QString(OBJ_nid2sn(nid))); } else { label->setText(QString(OBJ_nid2ln(nid))); label->setToolTip(trans); } label->setText(QString(OBJ_nid2ln(nid))); label->setToolTip(QString(OBJ_nid2sn(nid))); attrLayout->addWidget(label, i, 0); added++; if (att->single) { label = labelFromAsn1String(att->value.single->value.asn1_string); attrLayout->addWidget(label, i, 1); continue; } int count = sk_ASN1_TYPE_num(att->value.set); for (int j=0; j<count; j++) { label = labelFromAsn1String(sk_ASN1_TYPE_value(att->value.set, j)->value.asn1_string); attrLayout->addWidget(label, i, j +1); } } ASN1_IA5STRING *chal = req->spki_challange(); if (chal) { QLabel *label; label = new QLabel(this); label->setText(QString("SPKI Challenge String")); attrLayout->addWidget(label, 0, 0); label = labelFromAsn1String(chal); attrLayout->addWidget(label, 0, 1); added++; } if (!added) { tabwidget->removeTab(2); } openssl_error(); } catch (errorEx &err) { XCA_WARN(err.getString()); } }
static void segv_handler_gui(int) { if (segv_data[0]) XCA_WARN(QString(segv_data)); abort(); }