summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Suhren <suhren.stefan@fh-swf.de>2015-09-04 22:17:14 +0200
committerStefan Suhren <suhren.stefan@fh-swf.de>2015-09-04 22:17:14 +0200
commit240930cdb922f3fed2442234ce6fdeaf67aaed33 (patch)
tree3f62c482c35e35034cedc91d5d9f11facbaae465
parenta1aa74e5edb90266637c529dd96dd3487ac7d712 (diff)
downloadsrc-240930cdb922f3fed2442234ce6fdeaf67aaed33.tar.gz
src-240930cdb922f3fed2442234ce6fdeaf67aaed33.zip
Initialisiere OpenSSL und fÃge Fehlerbehandlung ein
-rw-r--r--crypt/hybridcrypt.cpp54
-rw-r--r--crypt/hybridcrypt.h22
2 files changed, 70 insertions, 6 deletions
diff --git a/crypt/hybridcrypt.cpp b/crypt/hybridcrypt.cpp
index b197f75..0802397 100644
--- a/crypt/hybridcrypt.cpp
+++ b/crypt/hybridcrypt.cpp
@@ -2,14 +2,56 @@
HybridCrypt::HybridCrypt()
{
- // Teste ob der Zufallszahlengenerator initialisiert ist
- qDebug() << "Zufallszahlengenerator wurde erfolgreich initialisiert: " << isCsprngSeeded();
+ // Initialisiere Nutzerschlüssel mit NULL
+ privateUserkey = NULL;
+ publicUserkey = NULL;
+
+ // Lade die menschenlesbaren Fehlerstrings für LibCrypto
+ ERR_load_crypto_strings();
+
+ // Lade alle Hash- und Verschlüsselungsalgorithmen
+ OpenSSL_add_all_algorithms();
+
+ // Lade Konfigurationsdatei und andere wichtige Initialisierungen
+ OPENSSL_config(NULL);
+
+ // Zeige ob der Zufallszahlengenerator initialisiert wurde
+ qDebug() << "Zufallszahlengenerator erfolgreich initialisiert: " <<
+ isCsprngSeeded();
+}
+
+HybridCrypt::~HybridCrypt()
+{
+ // Räume Nutzerschlüssel auf
+ if (privateUserkey != NULL)
+ {
+ EVP_PKEY_free(privateUserkey);
+ }
+
+ if (publicUserkey != NULL)
+ {
+ EVP_PKEY_free(publicUserkey);
+ }
+
+ // Räume OpenSSL auf
+ // Entferne alle Hash- und Verschlüsselungsalgorithmen
+ EVP_cleanup();
+
+ // Falls das nächste Ausgelassen wird, könnte ein Speicherleck auftreten,
+ // wenn die BIO Api verwendet wurde (Base64 transformationen)
+ CRYPTO_cleanup_all_ex_data();
+
+ // Lösche den CSPRNG sicher
+ RAND_cleanup();
+
+ // Entferne Fehlerstrings
+ ERR_free_strings();
}
void HybridCrypt::encrypt(QString infileName, QString outfileName,
QVector<QString> recipientKeyfileNames)
{
- qDebug() << "Zufallszahlengenerator wurde ausreichend geseeded: " << isCsprngSeeded();
+
}
void HybridCrypt::decrypt(QString infileName, QString outfileName)
@@ -42,3 +84,9 @@ bool HybridCrypt::isCsprngSeeded()
return RAND_status() == 1;
}
+void HybridCrypt::throwOpenSslException()
+{
+ QString errorMsg("OpenSSL Fehler. Fehlermeldung: ");
+ errorMsg.append(ERR_error_string(ERR_get_error(), NULL));
+ throw new CryptException(errorMsg.toStdString(), 5);
+}
diff --git a/crypt/hybridcrypt.h b/crypt/hybridcrypt.h
index 710cf47..c3ce4ef 100644
--- a/crypt/hybridcrypt.h
+++ b/crypt/hybridcrypt.h
@@ -7,9 +7,13 @@
#include <QVector>
#include <QDebug>
+#include <openssl/conf.h>
#include <openssl/evp.h>
#include <openssl/err.h>
#include <openssl/rand.h>
+#include <openssl/rsa.h>
+
+#include "cryptexception.h"
class HybridCrypt
{
@@ -17,11 +21,17 @@ public:
/**
* @brief HybridCrypt::HybridCrypt
- * Initialisiert den CSPRNG von OpenSSL mittels /dev/random.
+ * Initialisiert OpenSSL.
*/
HybridCrypt();
/**
+ * @brief HybridCrypt::~HybridCrypt
+ * Räumt OpenSSL auf.
+ */
+ ~HybridCrypt();
+
+ /**
* @brief HybridCrypt::encrypt
* Ließt eine Datei ein und schreibt diese verschlüsselt
* mit den übergebenen Schlüsseln und dem Nutzerschlüssel.
@@ -71,8 +81,8 @@ public:
void exportPublicUserKey(QString keyfileName);
private:
- EVP_PKEY privateUserkey;
- EVP_PKEY publicUserkey;
+ EVP_PKEY *privateUserkey;
+ EVP_PKEY *publicUserkey;
/**
* @brief isCsprngSeeded
@@ -80,6 +90,12 @@ private:
* @return Gibt wahr zurück wenn ausreichend intialisert wurde, ansonsten falsch.
*/
bool isCsprngSeeded();
+
+ /**
+ * @brief throwOpenSslException
+ * Wirft eine Exception mit dem OpenSSL Fehler.
+ */
+ void throwOpenSslException();
};
#endif // HYBRIDCRYPT_H