changeset 767:406bf18ee633

Merged
author Sascha Wilde <wilde@intevation.de>
date Tue, 08 Jul 2014 11:36:22 +0200
parents 9f0ad4bab175 (current diff) b39f369523fb (diff)
children 3f290ea49d45
files packaging/tmp-createpackage.sh
diffstat 17 files changed, 543 insertions(+), 318 deletions(-) [+]
line wrap: on
line diff
--- a/CMakeLists.txt	Tue Jul 08 10:52:53 2014 +0200
+++ b/CMakeLists.txt	Tue Jul 08 11:36:22 2014 +0200
@@ -117,7 +117,8 @@
 get_filename_component(NSS_BASE_DIR ${NSS_BASE_DIR} PATH)
 
 set(NSS_BASE_DIR "${NSS_BASE_DIR}/..")
-configure_file (packaging/tmp-createpackage.sh.in packaging/tmp-createpackage.sh)
+configure_file (packaging/tmp-createpackage.sh.in packaging/tmp-createpackage.sh @ONLY)
+configure_file (packaging/create-dist-package.sh.in packaging/create-dist-package.sh @ONLY)
 configure_file (packaging/linux-createpackage.sh.in packaging/linux-createpackage.sh @ONLY)
 configure_file (packaging/linux-installer.inc.in packaging/linux-installer.inc @ONLY)
 
--- a/common/pubkey-test.h	Tue Jul 08 10:52:53 2014 +0200
+++ b/common/pubkey-test.h	Tue Jul 08 11:36:22 2014 +0200
@@ -27,39 +27,36 @@
 /* Key used for codesigning */
 static const unsigned char public_key_codesign_pem[] =
 "-----BEGIN CERTIFICATE-----\n"
-"MIIFqTCCA5GgAwIBAgIBATANBgkqhkiG9w0BAQUFADBZMSAwHgYDVQQDExdQdWJs\n"
+"MIIFKTCCAxGgAwIBAgIBATANBgkqhkiG9w0BAQUFADBZMSAwHgYDVQQDExdQdWJs\n"
 "aWMgVHJ1c3RCcmlkZ2UgVGVzdDEoMCYGA1UEChMfUHVibGljIHNlY3JldCBkbyBu\n"
 "b3QgdHJ1c3QgdGhpczELMAkGA1UEBhMCREUwHhcNMTMwMTAxMDAwMDAwWhcNMTUx\n"
 "MjMxMjM1OTU5WjBlMSwwKgYDVQQDEyNQdWJsaWMgVHJ1c3RCcmlkZ2UgY29kZXNp\n"
 "Z25pbmcgdGVzdDEoMCYGA1UEChMfUHVibGljIHNlY3JldCBkbyBub3QgdHJ1c3Qg\n"
-"dGhpczELMAkGA1UEBhMCREUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC\n"
-"AQDIz9IetAtdqJJ7aSfJcLmA9Mb4nxrqEJ5E6PMejDJZmmHNjyhCVp1qsLYmyC60\n"
-"m7qJ4OBENx0v2n5LiCUHJpJ4mzAklkWn1GffUkzWgQ2VHw5Nr44NWEwkUUa5/jT7\n"
-"Sxts2DWuaLz2r7oi6BUQpoRmQRPwwzFPONcCSw9iAvTU6oVI2jW1opEW3t10UwY3\n"
-"5/muryPsUz6y5VkBIc73VC0wByXoAruEPBBpMgOVw1+npOaJ1PL1XXQ/P6xziZo0\n"
-"Ab/tKvN6IpEHrNEGv1gScJt//pKKklvIyXm9UdIY9XpB6aauzthKpTFJXGYySlXx\n"
-"bD1a5sq0i2sAK/p8RvErVWg3EfBlUrQryJxONPVqribczZIWcgKVEFfXjX1tQqiC\n"
-"qRCgO4M6zhNIKLkAicp0DvYs8M4hIoPng98nqK6kSpfXR6Y4b9DU3yEktH7wGrwL\n"
-"jKATVM2l2yTF17Pjxkr2tH0XWrChfS+oV6Qzm9JQ/vmLKz5piLKpt5SXuZny+j0Y\n"
-"68ch709sVTuuPm4RAm5c5t0SCwEippClFpkZynYRsJVrjG9ZTrdvULxZao8GBzJx\n"
-"Lb+tCaKP60BRoUuRfwGMKZbU6j6ujOCy5bZIoJaKgHgyAHXRuS4PIjY9K2BGM5vI\n"
-"seA2GEdAJNmZPAQJE5rxkrsAH9n8QtmHucEqzCZVFcLuCwIDAQABo3AwbjAJBgNV\n"
-"HRMEAjAAMB0GA1UdDgQWBBSMgUaKY3L65wH5M4il/gbHCeVm4TAfBgNVHSMEGDAW\n"
-"gBTl/kZGRoa0cm82zW7CPn3yqk4MeTAOBgNVHQ8BAQEEBAMCAYAwEQYJYIZIAYb4\n"
-"QgEBBAQDAgAQMA0GCSqGSIb3DQEBBQUAA4ICAQAdmpf8k+ZKuhDvNwMCrf1JIZh3\n"
-"uJxlCHFke/ypsMT2E6p/GZpD/lLyRHbk7V5aEYdmBaK6Dem0KYhRuDclWscpQdXl\n"
-"96wx1IDNueMkj5ZDmpBLFl/nqxlM9HfHo8YTE9dRgzJAR8+dFR8HyRSayKo+pz4L\n"
-"FkNFT5Jtm9kKLIN+mSGKMBmpY4owfpeh7K6YyASoOHL9Zk8A0I7iZX8FB5KujrlG\n"
-"WJahjSAyvLvy98XDCf9/SyX73F1ol5ycAb/du+G5VZFDEI8sv/7fIdTx/AUR30Ac\n"
-"f3tqXZ4HwxWc0gofT0J2z/I4FZ/sT/1SNHReGNrG9GNn5bxjwpSXfc5A1bjhRfxd\n"
-"x73xKEInjpgo6AXY7wfNk1V+2z7keVOpaDEZUOsd/x/C+L8FsUh2JJHZp/hKX6Co\n"
-"AD///pxqNfvH5pPLUINC7VRUOTynUas7p9UvkPeJjqnWY6pmjeb4Fs6Z6vn0+Opy\n"
-"HP1MjLL41a+U9VxuNb6SfRDoeT19pqK6ovT2gbc61OvTI0lE97ChC622rjnV0c/N\n"
-"QYqkeTQG/IjPk0QFrYQxMqq6QKgds2nheYd4LyLGhk72pKWr28Hfj1ElcoTFFbWP\n"
-"ndI+uZePkkCsVYNMXbIAIpqLb++1ftl+L+itqxTyq+0tPObIL3WG9rzBGz8X6WT0\n"
-"KIzi4KAn66e5/iWZng==\n"
+"dGhpczELMAkGA1UEBhMCREUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIB\n"
+"gQDtK3Ow4W0t9UbfrLB/nlQy2X9ejc8McCw2C0vwq1eFs+d8zv7nhzCaFiBN88C/\n"
+"eYL6wQoIFPjGPqASuQknBaUCM1XCzVu86jiluVCeN4MYbl1nr6f8rDHiK0iJL4mu\n"
+"ROQ+FhsRsiKpRPhR8/sp5INlgqC2XBUrQ5zde6Yh3gRajjESRdcfOWIaO4vBXIo8\n"
+"onQ2wBar8b3LWdvhFXqgrYaqcHX6SCn5xaoYn7xb7Gq7lD3LeSQlbgZtUv6mv+H9\n"
+"LlLgC52Sr9R5JfvomQC6R6l+mXKWrtlxYo3VndQ/Sn603IOXOV6aAswfXDoD3iOM\n"
+"4BbPYHv0EGQBXRtH+bzqgdUfMZkQU7lIgOIDskmeZo2ovYfpkUTyujsLPOVcHEx8\n"
+"9MtGiZmzprYuiGXDtJ2sam9KHK4+Mastk4L4k+Qz1wbHMj49VW4Q9iXDgWOkKiFH\n"
+"+PmmYdEm0UZ8BdheQ9UxIajVt9eOxWg3v5ak0o4LdZf0lAH7H6yOIO8AZEaJ/8Nz\n"
+"wNsCAwEAAaNwMG4wCQYDVR0TBAIwADAdBgNVHQ4EFgQUCsyNwGUNmueV2MfSimlR\n"
+"OGBI66kwHwYDVR0jBBgwFoAU5f5GRkaGtHJvNs1uwj598qpODHkwDgYDVR0PAQEB\n"
+"BAQDAgGAMBEGCWCGSAGG+EIBAQQEAwIAEDANBgkqhkiG9w0BAQUFAAOCAgEAmhpe\n"
+"dcdqXCwdhNy2sPUxsBGxvU5qdyxgVoTSpaISr1RIZrTTKISWcfTjs2r9/fyjAIER\n"
+"tXbHYy9pbEG6ILejVRq05dmBMoLD5zrSyEo6C54K045Lwz7rXndw9xJnkv5eT2B+\n"
+"YWta2h+pwWG1yqaxVDFOUhsTTIR0yBlA2SADXDQejbdSk9n1EoDqCFV5Wn41kP8c\n"
+"AujPCoVgXBhsIKzfKpOFBLYOXVSL5WtoHZ/hFH1e3qF4P/SyHhnKU5OQ2bqO0Pf7\n"
+"VACBnqYVCiGvzjOqwIkllSdv5vds++XkaSDPTIsrPdFH7BD1Jowd0e7UQ+ItLA8A\n"
+"G5iuO0pcRYSCvRA9tc1uTfws0WwHom4nhPsO46KNms+8g+/NOFjEMOYw15cFHk+U\n"
+"UKKWtIadGp6IHz712xpP5wr2dtkiGvkJVIm44edrNJMH0HHFlVpt7xuMhALuzTK0\n"
+"uwagUu9+KVU/EWzDF1BkVyZ72d36oUxrt0mK0GuUe89RSwK87kutS0+ophmiBX+x\n"
+"QMNSVIGr8MdXoGx52zo70qfZcjr/4sjL5YSrecYr2i3Rt5cU3y6xIgTXSPD9+cOm\n"
+"9M/8Xck6vDKTAy0LE+TFXLCEusKSSZ6JgcC9ItihcxsCEUvUbifbYdEvgIIJhmFj\n"
+"Y8w7FNHYMiaw2xII1Fcrv7nmO+tysu+GhJ04oj4=\n"
 "-----END CERTIFICATE-----\n";
 
-static const size_t  public_key_codesign_pem_size = 2025;
+static const size_t  public_key_codesign_pem_size = 1850;
 
 #endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/packaging/create-dist-package.sh.in	Tue Jul 08 11:36:22 2014 +0200
@@ -0,0 +1,34 @@
+#!/bin/bash
+# Helper script to package the files expected by the -admin application
+# Windows build is expected to live in CMAKE_SOURCE_DIR/build-windows
+set -x
+set -e
+
+if [ ! -d "$WINDOWS_NSSDIR" ]; then
+    echo "ERROR: Please set WINDOWS_NSSDIR to the location of your nss binaries"
+    exit 1
+fi
+
+TMPD=$(mktemp -d)
+TMPDIR=$TMPD/TrustBridge-@PROJECT_VERSION@
+cd @CMAKE_BINARY_DIR@
+/bin/bash packaging/linux-createpackage.sh
+mkdir -p $TMPDIR/linux
+mkdir -p $TMPDIR/windows
+cp @CMAKE_BINARY_DIR@/TrustBridge-@PROJECT_VERSION@.sh $TMPDIR/linux
+cp @CMAKE_SOURCE_DIR@/build-windows/ui/trustbridge.exe $TMPDIR/windows
+cp @CMAKE_SOURCE_DIR@/build-windows/cinst/cinst.exe $TMPDIR/windows
+cp @CMAKE_SOURCE_DIR@/build-windows/cinst/mozilla.exe $TMPDIR/windows
+cp @CMAKE_SOURCE_DIR@/packaging/filelist.nsh $TMPDIR
+cp @CMAKE_SOURCE_DIR@/packaging/trustbridge.nsi $TMPDIR
+cp -r @CMAKE_SOURCE_DIR@/packaging/resources $TMPDIR/resources
+LC_ALL="de_DE.latin-1" echo "company=Bundesamt für Sicherheit in der Informationstechnik" > $TMPDIR/meta.ini
+echo "version_number=@PROJECT_VERSION@" >>  $TMPDIR/meta.ini
+echo "setupname=%1TrustBridge-@PROJECT_VERSION@.exe" >> $TMPDIR/meta.ini
+echo "productname=TrustBridge" >> $TMPDIR/meta.ini
+cp $WINDOWS_NSSDIR/*.dll $TMPDIR/windows
+cd $TMPD
+zip -r TrustBridge-@PROJECT_VERSION@.zip TrustBridge-@PROJECT_VERSION@
+mv TrustBridge-@PROJECT_VERSION@.zip @CMAKE_BINARY_DIR@
+rm -r $TMPD
+echo "Package is: @CMAKE_BINARY_DIR@/TrustBridge-@PROJECT_VERSION@.zip"
--- a/packaging/tmp-createpackage.sh	Tue Jul 08 10:52:53 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-# Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik
-# Software engineering by Intevation GmbH
-#
-# This file is Free Software under the GNU GPL (v>=2)
-# and comes with ABSOLUTELY NO WARRANTY!
-# See LICENSE.txt for details.
-
-#!/bin/bash
-
-#NSSDIR is hackish as this will be replaced by static compiling 
-# anyway
-
-NSSDIR="/home/andre/ubuntu/src/mxe/usr/i686-w64-mingw32.static/nss-3.12.7/bin/"
-MYPATH=$(dirname `readlink -f $0`)
-
-TMPDIR=$(mktemp -d)
-
-EXEFILES=$(find . -name cinst.exe -o -name trustbridge.exe -o -name mozilla.exe)
-
-cp $NSSDIR/*.dll $TMPDIR
-cp $EXEFILES $TMPDIR
-
-echo $TMPDIR
-makensis -Dfiles_dir=$TMPDIR \
-    -Dcompany="Bundesamt für Sicherheit in der Informationstechnik" \
-    -Dversion_number=0.0.0.1 \
-    -Dsetupname="TrustBridge.exe" \
-    -Dproductname="TrustBridge" \
-    -Dproductname_short="TrustBridge" $MYPATH/trustbridge.nsi
-rm -r $TMPDIR
--- a/ui/certificatelistwidget.cpp	Tue Jul 08 10:52:53 2014 +0200
+++ b/ui/certificatelistwidget.cpp	Tue Jul 08 11:36:22 2014 +0200
@@ -43,7 +43,7 @@
     for (int i = 0; i < mCertificateWidgets.size(); i++) {
         if (mCertificateWidgets[i]->certificate() == cert) {
             mLayout.removeWidget(mCertificateWidgets[i]);
-            delete(mCertificateWidgets[i]);
+            mCertificateWidgets[i]->deleteLater();
             mCertificateWidgets.removeAt(i);
             break;
         }
--- a/ui/createinstallerdialog.cpp	Tue Jul 08 10:52:53 2014 +0200
+++ b/ui/createinstallerdialog.cpp	Tue Jul 08 11:36:22 2014 +0200
@@ -6,6 +6,8 @@
  * See LICENSE.txt for details.
  */
 #include "createinstallerdialog.h"
+#include "sslhelp.h"
+
 #include <QDebug>
 #include <QTextEdit>
 #include <QDir>
@@ -15,12 +17,15 @@
 #include <QVBoxLayout>
 #include <QLabel>
 #include <QFileDialog>
+#include <QSaveFile>
 #include <QSettings>
 #include <QStyle>
 #include <QApplication>
 #include <QMessageBox>
 #include <QTemporaryDir>
 
+#include <polarssl/pk.h>
+
 /* Static information used in codesigning */
 #ifndef SIGN_HASH
 #define SIGN_HASH "sha256"
@@ -32,7 +37,6 @@
 #define SIGN_PUBLISHER "TrustBridge Test with ümlaut"
 #endif
 
-
 CreateInstallerDialog::CreateInstallerDialog(QMainWindow *parent) :
     QDialog(parent),
     mProgress(this),
@@ -228,11 +232,46 @@
                 .arg(binDir.path()));
         return;
     }
+    /* Sign the linux installer */
+    QDir linuxDir(binDir.path() + "/linux");
+    if (!linuxDir.exists()) {
+        showErrorMessage(tr("Failed to find the directory for linux binaries: %s")
+                .arg(linuxDir.path()));
+        return;
+    }
+    QStringList nameFilter;
+    nameFilter << "*.sh";
+    QStringList candidates = linuxDir.entryList(nameFilter, QDir::Files | QDir::Readable);
+    if (candidates.isEmpty()) {
+        showErrorMessage(tr("Failed to find a readable *.sh file in: %s")
+                .arg(linuxDir.path()));
+        return;
+    }
+    if (candidates.size() > 1) {
+        showErrorMessage(tr("Unexpected additional .sh files in: %s")
+                .arg(linuxDir.path()));
+        return;
+    }
+    mProgress.setLabelText(tr("Signing Linux package..."));
+    mProgress.cancel();
 
-    QTemporaryDir *signedFilesDir = codesignBinaries(binDir.path() + "/windows");
+    QString outFileName = options.value("setupname", "TrustBridge-default.exe"
+            ).toString().replace(".exe", ".sh").arg(QString());
 
-    if (!signedFilesDir) {
+    if (!appendTextSignatureToFile(linuxDir.path() + "/" + candidates.first(),
+                outDir.path() + "/" + outFileName)) {
+        qDebug() << "Failed to sign linux package.";
+        mProgress.close();
+        return;
+    }
+
+    /* The Windows installer */
+
+    mCurrentWorkingDir = codesignBinaries(binDir.path() + "/windows");
+
+    if (!mCurrentWorkingDir) {
         /* Error messages should have been shown by the codesign function */
+        mProgress.close();
         return;
     }
 
@@ -244,7 +283,7 @@
     mNSISProc.setProcessChannelMode(QProcess::MergedChannels);
     mNSISProc.setWorkingDirectory(outDir.path());
 #ifdef Q_OS_WIN
-    arguments << QString::fromLatin1("/Dfiles_dir=") + signedFilesDir->path().replace("/", "\\");
+    arguments << QString::fromLatin1("/Dfiles_dir=") + mCurrentWorkingDir->path().replace("/", "\\");
     arguments << "/Dpath_sep=\\";
     foreach (const QString &key, keys) {
         QString value = options.value(key, QString()).toString();
@@ -255,7 +294,7 @@
         arguments << QString::fromLatin1("/D%1=%2").arg(key, value);
     }
 #else
-    arguments << QString::fromLatin1("-Dfiles_dir=") + signedFilesDir->path();
+    arguments << QString::fromLatin1("-Dfiles_dir=") + mCurrentWorkingDir->path();
     arguments << "-Dpath_sep=/";
     foreach (const QString &key, keys) {
         QString value = options.value(key, QString()).toString();
@@ -360,6 +399,64 @@
     return target;
 }
 
+bool CreateInstallerDialog::appendTextSignatureToFile(const QString& input,
+                                                 const QString& output) {
+    QFile inFile(input);
+    pk_context pk;
+
+    pk_init(&pk);
+    int ret = pk_parse_keyfile(&pk, mCertFile->text().toLocal8Bit().constData(), "");
+
+    if (ret != 0) {
+        showErrorMessage(tr("Failed to load certificate: %1")
+                .arg(getPolarSSLErrorMsg(ret)));
+        pk_free(&pk);
+        return false;
+    }
+
+    /* Check that it is a 3072 bit RSA key as specified */
+    if (!pk.pk_info || pk_get_size(&pk) != 3072 ||
+            pk.pk_info->type != POLARSSL_PK_RSA) {
+        qDebug() << pk.pk_info->type << "type";
+        qDebug() << POLARSSL_PK_RSA << "rsa";
+        qDebug() << "size " << pk_get_size(&pk);
+        showErrorMessage(tr("Only 3072 bit RSA keys are supported by the current format."));
+        pk_free(&pk);
+        return false;
+    }
+
+    if (!inFile.open(QIODevice::ReadOnly)) {
+        showErrorMessage(tr("Failed to open input file: %1").arg(inFile.fileName()));
+        pk_free(&pk);
+        return false;
+    }
+
+    const QByteArray inputContent = inFile.readAll(); // Memory is cheap :)
+    inFile.close();
+
+    if (inputContent.isEmpty()) {
+        showErrorMessage(tr("Failed to read input file: %1").arg(inFile.fileName()));
+        pk_free(&pk);
+        return false;
+    }
+
+    const QByteArray signature = rsaSignSHA256Hash(sha256sum(inputContent), &pk);
+
+    pk_free(&pk);
+    if (signature.size() != 3072 / 8) {
+        qDebug() << "Signature creation returned signature of invalid size.";
+        return false;
+    }
+
+    QSaveFile outFile(output);
+    outFile.open(QIODevice::WriteOnly);
+    outFile.write(inputContent);
+    outFile.write("\r\nS:");
+    outFile.write(signature.toBase64());
+
+    return outFile.commit();
+}
+
 FinishedDialog::FinishedDialog(QDialog *parent,
         QString msg, QString details, bool isErr):
     QDialog(parent)
--- a/ui/createinstallerdialog.h	Tue Jul 08 10:52:53 2014 +0200
+++ b/ui/createinstallerdialog.h	Tue Jul 08 11:36:22 2014 +0200
@@ -91,6 +91,19 @@
      */
     bool signFile(QString filePath);
 
+    /**@brief Append a base64 encoded sha256 RSA signature to a file.
+     *
+     * The format of the added signature line will be:
+     * S:<signature>\r\n
+     * For the signature the key in mCertFile is used.
+     *
+     * @param[in] input The absolute path of the file to sign
+     * @param[out] output The absolute path of the file to write
+     *
+     * @returns true on success, false on failure
+     */
+    bool appendTextSignatureToFile(const QString& input, const QString& output);
+
     /* Slots for the creator process */
     void processError(QProcess::ProcessError error);
     void processFinished(int exitCode, QProcess::ExitStatus exitStatus);
--- a/ui/l10n/administrator_de_DE.ts	Tue Jul 08 10:52:53 2014 +0200
+++ b/ui/l10n/administrator_de_DE.ts	Tue Jul 08 11:36:22 2014 +0200
@@ -415,8 +415,8 @@
 <context>
     <name>CreateInstallerDialog</name>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="43"/>
-        <location filename="../createinstallerdialog.cpp" line="68"/>
+        <location filename="../createinstallerdialog.cpp" line="47"/>
+        <location filename="../createinstallerdialog.cpp" line="72"/>
         <source>Create binary installer</source>
         <translation>Installationspaket erstellen</translation>
     </message>
@@ -433,114 +433,134 @@
         <translation type="vanished">Code Signing Zertifikat auswählen (privater Schlüssel):</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="70"/>
+        <location filename="../createinstallerdialog.cpp" line="74"/>
         <source>Create and sign a TrustBridge binary installer.</source>
         <translation>Erzeugt und signiert ein TrustBridge-Installationspaket.</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="81"/>
+        <location filename="../createinstallerdialog.cpp" line="85"/>
         <source>Select binary folder:</source>
         <translation>Binärverzeichnis auswählen:</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="82"/>
+        <location filename="../createinstallerdialog.cpp" line="86"/>
         <source>Select code signing certificate:</source>
         <translation>Code-Signing-Zertifikat auswählen:</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="83"/>
+        <location filename="../createinstallerdialog.cpp" line="87"/>
         <source>Select output folder:</source>
         <translation>Ausgabeverzeichnis auswählen:</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="112"/>
+        <location filename="../createinstallerdialog.cpp" line="116"/>
         <source>Create installer</source>
         <translation>Installationspaket erzeugen</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="114"/>
+        <location filename="../createinstallerdialog.cpp" line="118"/>
         <source>Cancel</source>
         <translation>Abbrechen</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="208"/>
+        <location filename="../createinstallerdialog.cpp" line="212"/>
         <source>Creating installer package...</source>
         <translation>Installationspaket wird erstellt...</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="145"/>
+        <location filename="../createinstallerdialog.cpp" line="149"/>
         <source>Select certificate</source>
         <translation>Zertifikat auswählen</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="156"/>
+        <location filename="../createinstallerdialog.cpp" line="160"/>
         <source>Select binary folder</source>
         <translation>Binärverzeichnis auswählen</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="174"/>
+        <location filename="../createinstallerdialog.cpp" line="178"/>
         <source>Error!</source>
         <translation>Fehler!</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="183"/>
+        <location filename="../createinstallerdialog.cpp" line="187"/>
         <source>Created installer in %1.</source>
         <translation>Installationspaket erstellt in %1.</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="186"/>
+        <location filename="../createinstallerdialog.cpp" line="190"/>
         <source>Signing installer package...</source>
         <translation>Installationspaket signieren...</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="188"/>
+        <location filename="../createinstallerdialog.cpp" line="192"/>
         <source>Failed to sign installer package.</source>
         <translation>Fehler beim Signieren des Installationspakets.</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="212"/>
+        <location filename="../createinstallerdialog.cpp" line="216"/>
         <source>Please select an existing input folder.</source>
         <translation>Bitte wählen Sie ein existierendes Eingabeverzeichnis.</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="216"/>
+        <location filename="../createinstallerdialog.cpp" line="220"/>
         <source>Please select a codesigning certificate.</source>
         <translation>Bitte wählen Sie ein Code-Signing-Zertifikat.</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="220"/>
+        <location filename="../createinstallerdialog.cpp" line="224"/>
         <source>Please select a output folder.</source>
         <translation>Bitte wählen Sie ein Ausgabeverzeichnis.</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="227"/>
+        <location filename="../createinstallerdialog.cpp" line="231"/>
         <source>Folder %1 does not appear to contain a meta.ini</source>
         <translation>Das Verzeichnis %1 enthält keine meta.ini Datei</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="239"/>
+        <location filename="../createinstallerdialog.cpp" line="238"/>
+        <source>Failed to find the directory for linux binaries: %s</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../createinstallerdialog.cpp" line="246"/>
+        <source>Failed to find a readable *.sh file in: %s</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../createinstallerdialog.cpp" line="251"/>
+        <source>Unexpected additional .sh files in: %s</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../createinstallerdialog.cpp" line="255"/>
+        <source>Signing Linux package...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../createinstallerdialog.cpp" line="278"/>
         <source>Creating NSIS package...</source>
         <translation>NSIS-Paket wird erstellt...</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="279"/>
+        <location filename="../createinstallerdialog.cpp" line="318"/>
         <source>Failed to start makensis.
 Please ensure that makensis is installed and in your PATH variable.</source>
         <translation>Fehler beim Starten von makensis.
 Bitte versichern Sie sich, dass makensis korrekt installiert und in der PATH-Variable enthalten ist.</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="335"/>
+        <location filename="../createinstallerdialog.cpp" line="374"/>
         <source>Signing binaries...</source>
         <translation>Binärpakete werden signiert...</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="345"/>
+        <location filename="../createinstallerdialog.cpp" line="384"/>
         <source>Failed to copy binaries to temporary location.</source>
         <translation>Fehler beim Kopieren der Binärdaten in temporären Ort.</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="351"/>
+        <location filename="../createinstallerdialog.cpp" line="390"/>
         <source>Failed to sign binaries with osslsigncode.
 Please check that %1 is a valid code signing certificate and thatosslsigncode can be found in the PATH.</source>
         <translatorcomment>TODO: missing blank in EN string</translatorcomment>
@@ -548,11 +568,31 @@
 Bitte prüfen Sie, dass %1 ein gültiges Code-Signing-Zertifikat ist und osslsigncode im PATH gefunden wird.</translation>
     </message>
     <message>
+        <location filename="../createinstallerdialog.cpp" line="411"/>
+        <source>Failed to load certificate: %1</source>
+        <translation type="unfinished">Fehler beim laden des Schlüssels: %1</translation>
+    </message>
+    <message>
+        <location filename="../createinstallerdialog.cpp" line="423"/>
+        <source>Only 3072 bit RSA keys are supported by the current format.</source>
+        <translation type="unfinished">Nur 3027 bit RSA Schlüssel werden vom aktuellen Format unterstützt.</translation>
+    </message>
+    <message>
+        <location filename="../createinstallerdialog.cpp" line="429"/>
+        <source>Failed to open input file: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../createinstallerdialog.cpp" line="438"/>
+        <source>Failed to read input file: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>Select source archive</source>
         <translation type="vanished">Archiv auswählen</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="166"/>
+        <location filename="../createinstallerdialog.cpp" line="170"/>
         <source>Select target location</source>
         <translation>Zielort auswählen</translation>
     </message>
@@ -560,22 +600,26 @@
 <context>
     <name>FinishedDialog</name>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="377"/>
         <source>Success!</source>
-        <translation>Erfolgreich!</translation>
+        <translation type="vanished">Erfolgreich!</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="381"/>
+        <location filename="../createinstallerdialog.cpp" line="474"/>
+        <source>Successfully created installation package</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../createinstallerdialog.cpp" line="478"/>
         <source>Error!</source>
         <translation>Fehler!</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="389"/>
+        <location filename="../createinstallerdialog.cpp" line="486"/>
         <source>Details</source>
         <translation>Details</translation>
     </message>
     <message>
-        <location filename="../createinstallerdialog.cpp" line="393"/>
+        <location filename="../createinstallerdialog.cpp" line="490"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
--- a/ui/l10n/trustbridge_de_DE.ts	Tue Jul 08 10:52:53 2014 +0200
+++ b/ui/l10n/trustbridge_de_DE.ts	Tue Jul 08 11:36:22 2014 +0200
@@ -174,7 +174,7 @@
     </message>
     <message>
         <location filename="../mainwindow.cpp" line="412"/>
-        <location filename="../mainwindow.cpp" line="888"/>
+        <location filename="../mainwindow.cpp" line="901"/>
         <source>Quit</source>
         <translation>Beenden</translation>
     </message>
@@ -185,12 +185,32 @@
         <translation>TrustBridge</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="775"/>
+        <location filename="../mainwindow.cpp" line="519"/>
+        <source>Installed certificates from:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="524"/>
+        <source>TrustBridge Version:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="530"/>
+        <source>Last sucessful update check:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="533"/>
+        <source>Last successful update check:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="788"/>
         <source>Updates</source>
         <translation>Aktualisierungen</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="797"/>
+        <location filename="../mainwindow.cpp" line="810"/>
         <source>Revoked
 certificates</source>
         <translation>Zurückgezogene
@@ -205,41 +225,41 @@
         <translation type="vanished">Aktualisierungen (%1/%2)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="549"/>
-        <location filename="../mainwindow.cpp" line="893"/>
+        <location filename="../mainwindow.cpp" line="560"/>
+        <location filename="../mainwindow.cpp" line="906"/>
         <source>Quit without saving</source>
         <translation>Beenden ohne Speichern</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="598"/>
-        <location filename="../mainwindow.cpp" line="927"/>
+        <location filename="../mainwindow.cpp" line="609"/>
+        <location filename="../mainwindow.cpp" line="940"/>
         <source>Remove revoked certificates (%1/%2)</source>
         <translation>Zurückgezogene Zertifikate löschen (%1/%2)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="667"/>
+        <location filename="../mainwindow.cpp" line="680"/>
         <source>Trusted certificates</source>
         <translation>Vertrauenswürdige Zertifikate</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="668"/>
+        <location filename="../mainwindow.cpp" line="681"/>
         <source>The following list of trusted root certificates is managed by the BSI. The BSI validates independently the authenticity, security and actuality of these certificates.</source>
         <translation>Die folgende Liste von Wurzelzertifikaten wird durch das BSI betreut. Das BSI überprüft dabei unabhängig die Echtheit, Sicherheit und Aktualität der Zertifikate.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="675"/>
+        <location filename="../mainwindow.cpp" line="688"/>
         <source>Please choose the certificates you want to trust or untrust. TrustBridge will install these certificates for your secure communication for email and internet.</source>
         <translation>Legen Sie fest, welchen Zertifikaten Sie vertrauen wollen. TrustBridge wird diese Zertifikate dann für Ihre sichere Kommunikation via E-Mail und Internet installieren.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="788"/>
+        <location filename="../mainwindow.cpp" line="801"/>
         <source>Trusted
 certificates</source>
         <translation>Vertrauenswürdige
 Zertifikate</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="806"/>
+        <location filename="../mainwindow.cpp" line="819"/>
         <source>Information
 and help</source>
         <translation>Informationen
@@ -258,7 +278,7 @@
         <translation type="vanished">Sie sollten die folgenden Änderungen an Ihren Wurzelzertifikaten übernehmen:</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="532"/>
+        <location filename="../mainwindow.cpp" line="538"/>
         <source>Check for updates</source>
         <translation>Nach Aktualisierungen suchen</translation>
     </message>
@@ -267,49 +287,49 @@
         <translation type="vanished">Aktualisierungen einspielen</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="581"/>
-        <location filename="../mainwindow.cpp" line="912"/>
+        <location filename="../mainwindow.cpp" line="592"/>
+        <location filename="../mainwindow.cpp" line="925"/>
         <source>Install new trusted certificates (%1/%2)</source>
         <translation>Neue, vertrauenswürdige Zertifikate installieren (%1/%2)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="583"/>
-        <location filename="../mainwindow.cpp" line="600"/>
-        <location filename="../mainwindow.cpp" line="616"/>
-        <location filename="../mainwindow.cpp" line="902"/>
-        <location filename="../mainwindow.cpp" line="917"/>
-        <location filename="../mainwindow.cpp" line="932"/>
-        <location filename="../mainwindow.cpp" line="1212"/>
-        <location filename="../mainwindow.cpp" line="1223"/>
-        <location filename="../mainwindow.cpp" line="1233"/>
+        <location filename="../mainwindow.cpp" line="594"/>
+        <location filename="../mainwindow.cpp" line="611"/>
+        <location filename="../mainwindow.cpp" line="628"/>
+        <location filename="../mainwindow.cpp" line="915"/>
+        <location filename="../mainwindow.cpp" line="930"/>
+        <location filename="../mainwindow.cpp" line="945"/>
+        <location filename="../mainwindow.cpp" line="1224"/>
+        <location filename="../mainwindow.cpp" line="1235"/>
+        <location filename="../mainwindow.cpp" line="1245"/>
         <source>Show details</source>
         <translation>Details einblenden</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="708"/>
+        <location filename="../mainwindow.cpp" line="721"/>
         <source>Revoked certificates</source>
         <translation>Zurückgezogene Zertifikate</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="709"/>
+        <location filename="../mainwindow.cpp" line="722"/>
         <source>Certificates can be corrupted or stolen and misused in many ways. Therefore the BSI recommends to remove all revoked certificates from your system.</source>
         <translation>Zertifikate können auf vielfache Weise korrumpiert oder gestohlen und missbraucht werden. Das BSI empfiehlt Ihnen daher zurückgezogene Zertifikate auch umgehend von Ihrem System zu entfernen.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="716"/>
+        <location filename="../mainwindow.cpp" line="729"/>
         <source>The follwing unsecure certificates were revoked by the BSI. Already uninstalled certificates cannot be reinstalled. It is recommended that you select all certificates to uninstall if you still have revoked certificates installed.</source>
         <translation>Die folgenden unsicheren Zertifikate wurden vom BSI zurückgezogen. Bereits deinstallierte Zertifikate können nicht wieder installiert werden. Es wird empfohlen, dass Sie alle Zertifikate zur Deinstallation markieren, sofern Sie noch zurückgezogene Zertifikate installiert haben.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="614"/>
-        <location filename="../mainwindow.cpp" line="1012"/>
-        <location filename="../mainwindow.cpp" line="1139"/>
-        <location filename="../mainwindow.cpp" line="1149"/>
+        <location filename="../mainwindow.cpp" line="626"/>
+        <location filename="../mainwindow.cpp" line="1024"/>
+        <location filename="../mainwindow.cpp" line="1151"/>
+        <location filename="../mainwindow.cpp" line="1161"/>
         <source>Manually changed certificates (%1)</source>
         <translation>Manuell geänderte Zertifikate (%1)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="758"/>
+        <location filename="../mainwindow.cpp" line="771"/>
         <source>Trust in your digital communication</source>
         <translation>Vertrauen in Ihre digitale Kommunikation</translation>
     </message>
@@ -319,26 +339,24 @@
     </message>
     <message>
         <location filename="../mainwindow.cpp" line="517"/>
-        <location filename="../mainwindow.cpp" line="889"/>
+        <location filename="../mainwindow.cpp" line="902"/>
         <source>Certificates unchanged</source>
         <translation>Zertifikate unverändert</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="522"/>
         <source>TrustBridge Version: %1</source>
-        <translation>TrustBridge Version: %1</translation>
+        <translation type="vanished">TrustBridge Version: %1</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="527"/>
         <source>Last sucessful update check: %1</source>
-        <translation>Letzte erfolgreiche Prüfung nach Aktualisierungen: %1</translation>
+        <translation type="vanished">Letzte erfolgreiche Prüfung nach Aktualisierungen: %1</translation>
     </message>
     <message>
         <source>You should apply the following, recommended changes to your root certificates.</source>
         <translation type="vanished">Es wird empfohlen, die nachfolgenden Änderungen an Ihren Wurzelzertifikaten zu übernehmen.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="897"/>
+        <location filename="../mainwindow.cpp" line="910"/>
         <source>Apply changes</source>
         <translation>Änderungen übernehmen</translation>
     </message>
@@ -348,14 +366,14 @@
         <translation>Version:</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="546"/>
-        <location filename="../mainwindow.cpp" line="883"/>
+        <location filename="../mainwindow.cpp" line="557"/>
+        <location filename="../mainwindow.cpp" line="896"/>
         <source>There are currently no changes for your certificate stores.</source>
         <translation>Es liegen derzeit keine Änderungen für Ihre Zertifikatsspeicher vor.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="553"/>
-        <location filename="../mainwindow.cpp" line="891"/>
+        <location filename="../mainwindow.cpp" line="564"/>
+        <location filename="../mainwindow.cpp" line="904"/>
         <source>Install certificates again</source>
         <translation>Zertifikate erneut installieren</translation>
     </message>
@@ -392,34 +410,32 @@
         <translation type="vanished">Änderungen (%1)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="984"/>
+        <location filename="../mainwindow.cpp" line="996"/>
         <source>install</source>
         <translation>Installieren</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="984"/>
+        <location filename="../mainwindow.cpp" line="996"/>
         <source>ignore</source>
         <translation>Ignorieren</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="1006"/>
         <source>Installed certificates from: %1</source>
-        <translation>Installierte Zertifikate vom: %1</translation>
+        <translation type="vanished">Installierte Zertifikate vom: %1</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="1207"/>
-        <location filename="../mainwindow.cpp" line="1218"/>
-        <location filename="../mainwindow.cpp" line="1229"/>
+        <location filename="../mainwindow.cpp" line="1219"/>
+        <location filename="../mainwindow.cpp" line="1230"/>
+        <location filename="../mainwindow.cpp" line="1241"/>
         <source>Hide details</source>
         <translation>Details ausblenden</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="1253"/>
         <source>Last successful update check: %1</source>
-        <translation>Letzte erfolgreiche Prüfung nach Aktualisierungen: %1</translation>
+        <translation type="vanished">Letzte erfolgreiche Prüfung nach Aktualisierungen: %1</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="1256"/>
+        <location filename="../mainwindow.cpp" line="1268"/>
         <source>Sucessfully checked for updates.</source>
         <translation>Prüfung nach Aktualisierungen erfolgreich.</translation>
     </message>
@@ -431,27 +447,27 @@
 Hier klicken, um Download und Installation zu starten.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="877"/>
+        <location filename="../mainwindow.cpp" line="890"/>
         <source>You should apply the following, recommended changes to your certificate stores.</source>
         <translation>Es wird empfohlen, die nachfolgenden Änderungen an Ihren Zertifikatsspeichern zu übernehmen.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="880"/>
+        <location filename="../mainwindow.cpp" line="893"/>
         <source>You can apply the following, changes to your certificate stores.</source>
         <translation>Es wird empfohlen, die nachfolgenden Änderungen an Ihren Zertifikatsspeichern zu übernehmen.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="894"/>
+        <location filename="../mainwindow.cpp" line="907"/>
         <source>Changes to certificate stores (%1)</source>
         <translation>Änderungen an Zertifikatsspeichern (%1)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="1018"/>
+        <location filename="../mainwindow.cpp" line="1030"/>
         <source>Error executing update</source>
         <translation>Fehler bei der Aktualisierung</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="1075"/>
+        <location filename="../mainwindow.cpp" line="1087"/>
         <source>Installing certificates...</source>
         <translation>Zertifikate werden installiert...</translation>
     </message>
--- a/ui/mainwindow.cpp	Tue Jul 08 10:52:53 2014 +0200
+++ b/ui/mainwindow.cpp	Tue Jul 08 11:36:22 2014 +0200
@@ -516,18 +516,24 @@
     mUpdatesHeader =
         new QLabel("<h2>" + tr("Certificates unchanged")+ "</h2>");
     mLastCertUpdate =
-        new QLabel("");
+        new QLabel(tr("Installed certificates from:"));
+    mLastCertUpdateContents = new QLabel(QString());
     mLastCertUpdate->hide();
+    mLastCertUpdateContents->hide();
     mSoftwareVersionLabel =
-        new QLabel(tr("TrustBridge Version: %1").arg(QApplication::applicationVersion()));
+        new QLabel(tr("TrustBridge Version:"));
+    mSoftwareVersionContents = new QLabel(QApplication::applicationVersion());
     const QDateTime lastCheck = mSettings.value("lastUpdateCheck").toDateTime().toLocalTime();
     if (lastCheck.isValid()) {
         const QString lastUpdateCheck = QLocale::system().toString(lastCheck, DATETIME_FORMAT);
         mLastUpdateCheck =
-            new QLabel(tr("Last sucessful update check: %1").arg(lastUpdateCheck));
+            new QLabel(tr("Last sucessful update check:"));
+        mLastUpdateCheckContents = new QLabel(lastUpdateCheck);
     } else {
-        mLastUpdateCheck = new QLabel("");
+        mLastUpdateCheck = new QLabel(tr("Last successful update check:"));
+        mLastUpdateCheckContents = new QLabel(QString());
         mLastUpdateCheck->hide();
+        mLastUpdateCheckContents->hide();
     }
     QPushButton *searchUpdates = new QPushButton(" " + tr("Check for updates"));
     searchUpdates->setIcon(QIcon(":/img/edit-find.png"));
@@ -536,9 +542,14 @@
     // addWidget(*Widget, row, column, rowspan, colspan, [Qt::Alignment])
     updatesHeaderLayout->addWidget(mUpdatesHeader, 0, 0, 1, 2);
     updatesHeaderLayout->addWidget(mSoftwareVersionLabel, 1, 0, 1, 1);
+    updatesHeaderLayout->addWidget(mSoftwareVersionContents, 1, 1, 1, 1);
     updatesHeaderLayout->addWidget(mLastUpdateCheck, 2, 0, 1, 1);
+    updatesHeaderLayout->addWidget(mLastUpdateCheckContents, 2, 1, 1, 1);
     updatesHeaderLayout->addWidget(mLastCertUpdate, 3, 0, 1, 1);
-    updatesHeaderLayout->addWidget(searchUpdates, 1, 2, 2, 1, Qt::AlignRight);
+    updatesHeaderLayout->addWidget(mLastCertUpdateContents, 3, 1, 1, 1);
+    updatesHeaderLayout->setColumnStretch(3, 1);
+
+    updatesHeaderLayout->addWidget(searchUpdates, 1, 4, 1, 2, Qt::AlignRight);
     updatesHeaderLayout->setRowMinimumHeight(4, 15);
 
     /* Header 2: Action text and buttons */
@@ -564,10 +575,10 @@
     connect(mInstallButton, SIGNAL(clicked()), this, SLOT(checkAndInstallCerts()));
 
     // addWidget(*Widget, row, column, rowspan, colspan)
-    updatesHeaderLayout->addWidget(mUpdatesTip, 5, 0, 1, 2);
+    updatesHeaderLayout->addWidget(mUpdatesTip, 5, 0, 1, 4);
     updatesHeaderActionButtonLayout->addWidget(mInstallButton);
     updatesHeaderActionButtonLayout->addWidget(mQuitButton);
-    updatesHeaderLayout->addLayout(updatesHeaderActionButtonLayout, 6, 0, 1, 1);
+    updatesHeaderLayout->addLayout(updatesHeaderActionButtonLayout, 6, 0, 1, 3, Qt::AlignLeft);
     updatesHeaderLayout->setRowMinimumHeight(7, 10);
 
     /* The central panels. */
@@ -1004,10 +1015,10 @@
     }
 
     if (mInstalledList.date().isValid()) {
-        mLastCertUpdate->setText(tr("Installed certificates from: %1")
-                .arg(QLocale::system().toString(mInstalledList.date().toLocalTime(),
-                        DATETIME_FORMAT)));
+        mLastCertUpdateContents->setText(QLocale::system().toString(mInstalledList.date().toLocalTime(),
+                        DATETIME_FORMAT));
         mLastCertUpdate->show();
+        mLastCertUpdateContents->show();
     }
     mUpdatesManualCertificates->setText("<h3>" +
             tr("Manually changed certificates (%1)").arg(0) +
@@ -1251,8 +1262,8 @@
     if (getState() != TransferError) {
         const QDateTime now = QDateTime::currentDateTime();
         mSettings.setValue("lastUpdateCheck", now);
-        mLastUpdateCheck->setText(tr("Last successful update check: %1").arg(
-                        QLocale::system().toString(now, DATETIME_FORMAT)));
+        mLastUpdateCheckContents->setText(QLocale::system().toString(now, DATETIME_FORMAT));
+        mLastUpdateCheckContents->show();
         mLastUpdateCheck->show();
         syslog_info_printf(tr("Sucessfully checked for updates.").toUtf8().constData());
     }
--- a/ui/mainwindow.h	Tue Jul 08 10:52:53 2014 +0200
+++ b/ui/mainwindow.h	Tue Jul 08 11:36:22 2014 +0200
@@ -247,8 +247,11 @@
 
     QLabel *mUpdatesHeader;
     QLabel *mLastCertUpdate;
+    QLabel *mLastCertUpdateContents;
     QLabel *mSoftwareVersionLabel;
+    QLabel *mSoftwareVersionContents;
     QLabel *mLastUpdateCheck;
+    QLabel *mLastUpdateCheckContents;
     QLabel *mUpdatesNewCertificates;
     QLabel *mUpdatesRemoveCertificates;
     QLabel *mUpdatesManualCertificates;
--- a/ui/tests/data/NOTES	Tue Jul 08 10:52:53 2014 +0200
+++ b/ui/tests/data/NOTES	Tue Jul 08 11:36:22 2014 +0200
@@ -99,7 +99,7 @@
 is_ca=1 max_pathlen=0 output_file=codesigning_root.pem
 
 # Codesign cert
-gen_key filename=codesigning.key
+gen_key rsa_keysize=3072 filename=codesigning.key
 cert_req filename=codesigning.key output_file=codesigning.csr \
 subject_name="CN=Public TrustBridge codesigning test,O=Public secret do not trust this,C=DE" \
 key_usage=digital_signature \
@@ -119,7 +119,7 @@
       -out TrustBridge-0.6+21-aee3eb10bbba-signed.exe
 
 # Different test certificates.
-gen_key filename=codesigning-other.key
+gen_key rsa_keysize=3072 filename=codesigning-other.key
 cert_req filename=codesigning-other.key output_file=codesigning-other.csr \
 subject_name="CN=Public TrustBridge codesigning test,O=Public secret do not trust this,C=DE" \
 key_usage=digital_signature \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/tests/data/codesign/codesigning-combined.pem	Tue Jul 08 11:36:22 2014 +0200
@@ -0,0 +1,69 @@
+-----BEGIN CERTIFICATE-----
+MIIFKTCCAxGgAwIBAgIBATANBgkqhkiG9w0BAQUFADBZMSAwHgYDVQQDExdQdWJs
+aWMgVHJ1c3RCcmlkZ2UgVGVzdDEoMCYGA1UEChMfUHVibGljIHNlY3JldCBkbyBu
+b3QgdHJ1c3QgdGhpczELMAkGA1UEBhMCREUwHhcNMTMwMTAxMDAwMDAwWhcNMTUx
+MjMxMjM1OTU5WjBlMSwwKgYDVQQDEyNQdWJsaWMgVHJ1c3RCcmlkZ2UgY29kZXNp
+Z25pbmcgdGVzdDEoMCYGA1UEChMfUHVibGljIHNlY3JldCBkbyBub3QgdHJ1c3Qg
+dGhpczELMAkGA1UEBhMCREUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIB
+gQDtK3Ow4W0t9UbfrLB/nlQy2X9ejc8McCw2C0vwq1eFs+d8zv7nhzCaFiBN88C/
+eYL6wQoIFPjGPqASuQknBaUCM1XCzVu86jiluVCeN4MYbl1nr6f8rDHiK0iJL4mu
+ROQ+FhsRsiKpRPhR8/sp5INlgqC2XBUrQ5zde6Yh3gRajjESRdcfOWIaO4vBXIo8
+onQ2wBar8b3LWdvhFXqgrYaqcHX6SCn5xaoYn7xb7Gq7lD3LeSQlbgZtUv6mv+H9
+LlLgC52Sr9R5JfvomQC6R6l+mXKWrtlxYo3VndQ/Sn603IOXOV6aAswfXDoD3iOM
+4BbPYHv0EGQBXRtH+bzqgdUfMZkQU7lIgOIDskmeZo2ovYfpkUTyujsLPOVcHEx8
+9MtGiZmzprYuiGXDtJ2sam9KHK4+Mastk4L4k+Qz1wbHMj49VW4Q9iXDgWOkKiFH
++PmmYdEm0UZ8BdheQ9UxIajVt9eOxWg3v5ak0o4LdZf0lAH7H6yOIO8AZEaJ/8Nz
+wNsCAwEAAaNwMG4wCQYDVR0TBAIwADAdBgNVHQ4EFgQUCsyNwGUNmueV2MfSimlR
+OGBI66kwHwYDVR0jBBgwFoAU5f5GRkaGtHJvNs1uwj598qpODHkwDgYDVR0PAQEB
+BAQDAgGAMBEGCWCGSAGG+EIBAQQEAwIAEDANBgkqhkiG9w0BAQUFAAOCAgEAmhpe
+dcdqXCwdhNy2sPUxsBGxvU5qdyxgVoTSpaISr1RIZrTTKISWcfTjs2r9/fyjAIER
+tXbHYy9pbEG6ILejVRq05dmBMoLD5zrSyEo6C54K045Lwz7rXndw9xJnkv5eT2B+
+YWta2h+pwWG1yqaxVDFOUhsTTIR0yBlA2SADXDQejbdSk9n1EoDqCFV5Wn41kP8c
+AujPCoVgXBhsIKzfKpOFBLYOXVSL5WtoHZ/hFH1e3qF4P/SyHhnKU5OQ2bqO0Pf7
+VACBnqYVCiGvzjOqwIkllSdv5vds++XkaSDPTIsrPdFH7BD1Jowd0e7UQ+ItLA8A
+G5iuO0pcRYSCvRA9tc1uTfws0WwHom4nhPsO46KNms+8g+/NOFjEMOYw15cFHk+U
+UKKWtIadGp6IHz712xpP5wr2dtkiGvkJVIm44edrNJMH0HHFlVpt7xuMhALuzTK0
+uwagUu9+KVU/EWzDF1BkVyZ72d36oUxrt0mK0GuUe89RSwK87kutS0+ophmiBX+x
+QMNSVIGr8MdXoGx52zo70qfZcjr/4sjL5YSrecYr2i3Rt5cU3y6xIgTXSPD9+cOm
+9M/8Xck6vDKTAy0LE+TFXLCEusKSSZ6JgcC9ItihcxsCEUvUbifbYdEvgIIJhmFj
+Y8w7FNHYMiaw2xII1Fcrv7nmO+tysu+GhJ04oj4=
+-----END CERTIFICATE-----
+-----BEGIN RSA PRIVATE KEY-----
+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
+-----END RSA PRIVATE KEY-----
--- a/ui/tests/data/codesign/codesigning-other.key	Tue Jul 08 10:52:53 2014 +0200
+++ b/ui/tests/data/codesign/codesigning-other.key	Tue Jul 08 11:36:22 2014 +0200
@@ -1,51 +1,39 @@
 -----BEGIN RSA PRIVATE KEY-----
-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
+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
 -----END RSA PRIVATE KEY-----
--- a/ui/tests/data/codesign/codesigning-other.pem	Tue Jul 08 10:52:53 2014 +0200
+++ b/ui/tests/data/codesign/codesigning-other.pem	Tue Jul 08 11:36:22 2014 +0200
@@ -1,33 +1,30 @@
 -----BEGIN CERTIFICATE-----
-MIIFqTCCA5GgAwIBAgIBATANBgkqhkiG9w0BAQUFADBZMSAwHgYDVQQDExdQdWJs
+MIIFKTCCAxGgAwIBAgIBATANBgkqhkiG9w0BAQUFADBZMSAwHgYDVQQDExdQdWJs
 aWMgVHJ1c3RCcmlkZ2UgVGVzdDEoMCYGA1UEChMfUHVibGljIHNlY3JldCBkbyBu
 b3QgdHJ1c3QgdGhpczELMAkGA1UEBhMCREUwHhcNMTMwMTAxMDAwMDAwWhcNMTUx
 MjMxMjM1OTU5WjBlMSwwKgYDVQQDEyNQdWJsaWMgVHJ1c3RCcmlkZ2UgY29kZXNp
 Z25pbmcgdGVzdDEoMCYGA1UEChMfUHVibGljIHNlY3JldCBkbyBub3QgdHJ1c3Qg
-dGhpczELMAkGA1UEBhMCREUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
-AQCq39hi9rzq5kuPboqQ2slvqKYcVu8+jFftAEAiSEz7nQYpm44/9Bkpx0B41kbs
-56mqRzjoMzUmBM8Wyda5k+bTFOHHtjwtMaG4C3BzN1ANtp1zw08be4q+fZWaVBo3
-bImbFWCU1ZYm7m2QLXd/M+QME3f5abur6/S1jwWsD2IA87p1GysGUZjRc5wHFHbS
-FrtQSNXZ+2xUpiDApb3CfAX6RlTTDs5pPMtLwkiChg+0nHaTlMFjpaAZBGsV2v/V
-IdX17MAsqWB73++4k0z85pI8t+CY5zGeX5naOJChLuiIkhqAgYeq5XVJxoC+xoJz
-u5B6d4PcrUzTcjaj+plxcIGDkB1u2q1ZkrYiJX/hxJgebmD2YwSdJ1KWPAP8wc6N
-t00bWa/5QcH3nxHTAx12IxNOrnnyXKIO6h6HnivGlznVtP6IyGWOGQzuGrHQ8RfD
-ANnyiE7onEJHPyTUcdOzBX2DrfXmgRklswhtU4ttZSIdwnD4kP23X6Mm7E11jXPd
-yz3mWqVv7H7AhU/c7B2R5wWZWbk9FYJHh3frEYIR7+mfeRXcq1XGYVM7UDOvfyIY
-awyF0qgrd2xbg9WeE2gRXjJrlSndYqBdzREatUyOkTTZtZETZa/U3x3i4ZE1En22
-wzuSvHfttzENIYvmJOhYxqnGSIafvqHGzaxG/O6r3Wn4zwIDAQABo3AwbjAJBgNV
-HRMEAjAAMB0GA1UdDgQWBBS0lOBu/DAejrDytCTEGB+6rDLVizAfBgNVHSMEGDAW
-gBTl/kZGRoa0cm82zW7CPn3yqk4MeTAOBgNVHQ8BAQEEBAMCAYAwEQYJYIZIAYb4
-QgEBBAQDAgAQMA0GCSqGSIb3DQEBBQUAA4ICAQA2ublxGKfS6s5iAz8OAuMdGKg0
-oxacGX378xBctl7s+PORwx7kOo1X96d8KuQyWf9LXSZv1uPPRnEO+atMF2hswqcS
-gFx/Y32vEz8dGeqye6qOGfQOBD7M4wZ7ww/CiTJJBVbQ54WrU3zoy5Fga/ijXOtY
-i0AaZaoFfureK6+fCua9h+SRE7OljDCpSHigWTIY9MQ6fe7T8wXTnxhopdgT8k0R
-NXL/UNEUm/y79xIFfBpsVQbqMwhvtu4j6qGEmT6DhDcbnlQU8kwTkf5dYopC2kBT
-4atKKvWrfyoF2jDPSbwB0/ZztmRQtvE+Ve4+bGZREEy/0cviGmuGkzRXdfA/Ckl8
-4em9A01C8PzQ49psN+YGnl0OSiVXweHJzYnEy7/jep8ImHp8uXr2fT3sdreiUh9v
-tv9j12Yy0AlgJp6TsgVPIpbS1CtZqF9vqojKAef3NxNZLjGKOdwlvlP+c0/A3xne
-kubVCuGaVCrBvvZ3lOoqiDrkYjhaDADJoyQwNhU75Ah7fziJ1pjIyPUePYwJaOoc
-b3ntUNAtLNy8EXTI0jhlJH4uo8aMi3eO52kNrRUScBtySATSCyB7k2gkdSfCnF03
-LUbDV2nTFK5NJ7+8rz/LNStu60nO5j1poVAPflbfz9mMNgb0wmncIyMr6w+Ixwpd
-qSaFDC+2vJwwzhGmlg==
+dGhpczELMAkGA1UEBhMCREUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIB
+gQC3TZy0q9zvhZbPAorfMA142+J1drTkPgzK+DXurw+VeTvtlyftdN3RQ9tYdwgP
+47jgAW5DLmD5j+sQZe1OJ640zPSExjWlQ93RhG0nEcpZoLrWVsFBcISa885xQILL
+F+Zl9Yq3L+5kDCh86n6/0i5w98LTQU1C6X2OXPAa5T9D6Q9xLBv7BRobfEazDe+o
+DzSNejaN1bmssLo3IuLqD+K1DIr1OOAXMD0uwPvr4sqVbvqpVMygGzSG57Yl5c5m
+/L13OoE63c91gKzFwK0Uilx1dwjbhvES8oyk8UUwp5q2MSbRimN+xyLo7A6D5+/9
+bdo9cYz9r5f8GWgcD5dICRhBnSNzzYiIxR85a8h8PuLVoKTYrsQT4OllG8XJREtX
+KlYiHYW1q2PC2pW8lbYHPDZU2FVCur3q3S280n+WqeQptjNDST41ZTaKzeUeHuyt
+o6UyINgRy8uhZ4z6UYGvmP8QNgYFUBghSfbniMFsg9oo/6bS6xkybJsngCas2P9o
+21cCAwEAAaNwMG4wCQYDVR0TBAIwADAdBgNVHQ4EFgQUNtiDImdiWibkOfd9xlze
+8Bf1sEgwHwYDVR0jBBgwFoAU5f5GRkaGtHJvNs1uwj598qpODHkwDgYDVR0PAQEB
+BAQDAgGAMBEGCWCGSAGG+EIBAQQEAwIAEDANBgkqhkiG9w0BAQUFAAOCAgEAqrcq
+OSDed29wNRNCszEnGFCfPyw0AEBI1cFWIponacug7DJNT/k01C3iW9Fo2byWANXL
+xno31pOoq1KP9CW/kkaZmB32EHoSlj7H3F1657upeH/DnjRZWeFg6H9GtMa0AarE
+rszruYWbjbDicsprS96s9Haz1KDPwQFAnYiZgv8WanRQAYcGnmClDQPKR9D/hW+X
+XRFo5nPC+uatziedjvFSUp4FzPm5K2vNmveuunQMUdFyB/TiuA+dsRrW0EpNbyIz
+5AQc7oV2O5e6h3KnrHd2dixGju1Ue9h9WLLs+RO1ScSZ/o5/hgSb0/0Rdw4JoTrI
+Kmz7hFViV95ilmQCaC6NmDICkBznclvphm5kyCya1zPBnuozZc3UuxO9rwAROPzR
+Uhw4oB6lUf0w4sDvqh0h0DhJ+LkOF/p+fCjgv0shBQ6onTNUQnKh1VS8HwcYKqyW
+M277poW1NnAJuIrclNyM7+5splqDHvePbzq0RQujKqiWlBVAnFOvka9a/JDthPnq
+6GqnM09Z0s3iVa9xM3IPdAsG3a93Ab5Vk1XFR1gou+mkr7PyFGrU9jLRzl3e+os7
+5iJKZib8RvdtmIrlk14h8kitFIebV/MiZ8bU4ck9NzBcbWmbiyveJYrFRT1xcjdh
+DEOTyG/jTVnR2h/t2rJO91kj2sPbxRvrZh/fmNM=
 -----END CERTIFICATE-----
--- a/ui/tests/data/codesign/codesigning.key	Tue Jul 08 10:52:53 2014 +0200
+++ b/ui/tests/data/codesign/codesigning.key	Tue Jul 08 11:36:22 2014 +0200
@@ -1,51 +1,39 @@
 -----BEGIN RSA PRIVATE KEY-----
-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
+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
 -----END RSA PRIVATE KEY-----
--- a/ui/tests/data/codesign/codesigning.pem	Tue Jul 08 10:52:53 2014 +0200
+++ b/ui/tests/data/codesign/codesigning.pem	Tue Jul 08 11:36:22 2014 +0200
@@ -1,33 +1,30 @@
 -----BEGIN CERTIFICATE-----
-MIIFqTCCA5GgAwIBAgIBATANBgkqhkiG9w0BAQUFADBZMSAwHgYDVQQDExdQdWJs
+MIIFKTCCAxGgAwIBAgIBATANBgkqhkiG9w0BAQUFADBZMSAwHgYDVQQDExdQdWJs
 aWMgVHJ1c3RCcmlkZ2UgVGVzdDEoMCYGA1UEChMfUHVibGljIHNlY3JldCBkbyBu
 b3QgdHJ1c3QgdGhpczELMAkGA1UEBhMCREUwHhcNMTMwMTAxMDAwMDAwWhcNMTUx
 MjMxMjM1OTU5WjBlMSwwKgYDVQQDEyNQdWJsaWMgVHJ1c3RCcmlkZ2UgY29kZXNp
 Z25pbmcgdGVzdDEoMCYGA1UEChMfUHVibGljIHNlY3JldCBkbyBub3QgdHJ1c3Qg
-dGhpczELMAkGA1UEBhMCREUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
-AQDIz9IetAtdqJJ7aSfJcLmA9Mb4nxrqEJ5E6PMejDJZmmHNjyhCVp1qsLYmyC60
-m7qJ4OBENx0v2n5LiCUHJpJ4mzAklkWn1GffUkzWgQ2VHw5Nr44NWEwkUUa5/jT7
-Sxts2DWuaLz2r7oi6BUQpoRmQRPwwzFPONcCSw9iAvTU6oVI2jW1opEW3t10UwY3
-5/muryPsUz6y5VkBIc73VC0wByXoAruEPBBpMgOVw1+npOaJ1PL1XXQ/P6xziZo0
-Ab/tKvN6IpEHrNEGv1gScJt//pKKklvIyXm9UdIY9XpB6aauzthKpTFJXGYySlXx
-bD1a5sq0i2sAK/p8RvErVWg3EfBlUrQryJxONPVqribczZIWcgKVEFfXjX1tQqiC
-qRCgO4M6zhNIKLkAicp0DvYs8M4hIoPng98nqK6kSpfXR6Y4b9DU3yEktH7wGrwL
-jKATVM2l2yTF17Pjxkr2tH0XWrChfS+oV6Qzm9JQ/vmLKz5piLKpt5SXuZny+j0Y
-68ch709sVTuuPm4RAm5c5t0SCwEippClFpkZynYRsJVrjG9ZTrdvULxZao8GBzJx
-Lb+tCaKP60BRoUuRfwGMKZbU6j6ujOCy5bZIoJaKgHgyAHXRuS4PIjY9K2BGM5vI
-seA2GEdAJNmZPAQJE5rxkrsAH9n8QtmHucEqzCZVFcLuCwIDAQABo3AwbjAJBgNV
-HRMEAjAAMB0GA1UdDgQWBBSMgUaKY3L65wH5M4il/gbHCeVm4TAfBgNVHSMEGDAW
-gBTl/kZGRoa0cm82zW7CPn3yqk4MeTAOBgNVHQ8BAQEEBAMCAYAwEQYJYIZIAYb4
-QgEBBAQDAgAQMA0GCSqGSIb3DQEBBQUAA4ICAQAdmpf8k+ZKuhDvNwMCrf1JIZh3
-uJxlCHFke/ypsMT2E6p/GZpD/lLyRHbk7V5aEYdmBaK6Dem0KYhRuDclWscpQdXl
-96wx1IDNueMkj5ZDmpBLFl/nqxlM9HfHo8YTE9dRgzJAR8+dFR8HyRSayKo+pz4L
-FkNFT5Jtm9kKLIN+mSGKMBmpY4owfpeh7K6YyASoOHL9Zk8A0I7iZX8FB5KujrlG
-WJahjSAyvLvy98XDCf9/SyX73F1ol5ycAb/du+G5VZFDEI8sv/7fIdTx/AUR30Ac
-f3tqXZ4HwxWc0gofT0J2z/I4FZ/sT/1SNHReGNrG9GNn5bxjwpSXfc5A1bjhRfxd
-x73xKEInjpgo6AXY7wfNk1V+2z7keVOpaDEZUOsd/x/C+L8FsUh2JJHZp/hKX6Co
-AD///pxqNfvH5pPLUINC7VRUOTynUas7p9UvkPeJjqnWY6pmjeb4Fs6Z6vn0+Opy
-HP1MjLL41a+U9VxuNb6SfRDoeT19pqK6ovT2gbc61OvTI0lE97ChC622rjnV0c/N
-QYqkeTQG/IjPk0QFrYQxMqq6QKgds2nheYd4LyLGhk72pKWr28Hfj1ElcoTFFbWP
-ndI+uZePkkCsVYNMXbIAIpqLb++1ftl+L+itqxTyq+0tPObIL3WG9rzBGz8X6WT0
-KIzi4KAn66e5/iWZng==
+dGhpczELMAkGA1UEBhMCREUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIB
+gQDtK3Ow4W0t9UbfrLB/nlQy2X9ejc8McCw2C0vwq1eFs+d8zv7nhzCaFiBN88C/
+eYL6wQoIFPjGPqASuQknBaUCM1XCzVu86jiluVCeN4MYbl1nr6f8rDHiK0iJL4mu
+ROQ+FhsRsiKpRPhR8/sp5INlgqC2XBUrQ5zde6Yh3gRajjESRdcfOWIaO4vBXIo8
+onQ2wBar8b3LWdvhFXqgrYaqcHX6SCn5xaoYn7xb7Gq7lD3LeSQlbgZtUv6mv+H9
+LlLgC52Sr9R5JfvomQC6R6l+mXKWrtlxYo3VndQ/Sn603IOXOV6aAswfXDoD3iOM
+4BbPYHv0EGQBXRtH+bzqgdUfMZkQU7lIgOIDskmeZo2ovYfpkUTyujsLPOVcHEx8
+9MtGiZmzprYuiGXDtJ2sam9KHK4+Mastk4L4k+Qz1wbHMj49VW4Q9iXDgWOkKiFH
++PmmYdEm0UZ8BdheQ9UxIajVt9eOxWg3v5ak0o4LdZf0lAH7H6yOIO8AZEaJ/8Nz
+wNsCAwEAAaNwMG4wCQYDVR0TBAIwADAdBgNVHQ4EFgQUCsyNwGUNmueV2MfSimlR
+OGBI66kwHwYDVR0jBBgwFoAU5f5GRkaGtHJvNs1uwj598qpODHkwDgYDVR0PAQEB
+BAQDAgGAMBEGCWCGSAGG+EIBAQQEAwIAEDANBgkqhkiG9w0BAQUFAAOCAgEAmhpe
+dcdqXCwdhNy2sPUxsBGxvU5qdyxgVoTSpaISr1RIZrTTKISWcfTjs2r9/fyjAIER
+tXbHYy9pbEG6ILejVRq05dmBMoLD5zrSyEo6C54K045Lwz7rXndw9xJnkv5eT2B+
+YWta2h+pwWG1yqaxVDFOUhsTTIR0yBlA2SADXDQejbdSk9n1EoDqCFV5Wn41kP8c
+AujPCoVgXBhsIKzfKpOFBLYOXVSL5WtoHZ/hFH1e3qF4P/SyHhnKU5OQ2bqO0Pf7
+VACBnqYVCiGvzjOqwIkllSdv5vds++XkaSDPTIsrPdFH7BD1Jowd0e7UQ+ItLA8A
+G5iuO0pcRYSCvRA9tc1uTfws0WwHom4nhPsO46KNms+8g+/NOFjEMOYw15cFHk+U
+UKKWtIadGp6IHz712xpP5wr2dtkiGvkJVIm44edrNJMH0HHFlVpt7xuMhALuzTK0
+uwagUu9+KVU/EWzDF1BkVyZ72d36oUxrt0mK0GuUe89RSwK87kutS0+ophmiBX+x
+QMNSVIGr8MdXoGx52zo70qfZcjr/4sjL5YSrecYr2i3Rt5cU3y6xIgTXSPD9+cOm
+9M/8Xck6vDKTAy0LE+TFXLCEusKSSZ6JgcC9ItihcxsCEUvUbifbYdEvgIIJhmFj
+Y8w7FNHYMiaw2xII1Fcrv7nmO+tysu+GhJ04oj4=
 -----END CERTIFICATE-----

http://wald.intevation.org/projects/trustbridge/