summaryrefslogtreecommitdiffstats
path: root/crypt/hybridcrypt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'crypt/hybridcrypt.cpp')
-rw-r--r--crypt/hybridcrypt.cpp33
1 files changed, 25 insertions, 8 deletions
diff --git a/crypt/hybridcrypt.cpp b/crypt/hybridcrypt.cpp
index fbe6791..c408bf1 100644
--- a/crypt/hybridcrypt.cpp
+++ b/crypt/hybridcrypt.cpp
@@ -22,7 +22,7 @@ HybridCrypt::HybridCrypt()
HybridCrypt::~HybridCrypt()
{
// Räume Nutzerschlüssel auf
- freeKeyIfNotNull();
+ freeEvpKey(&userKeypair);
// Räume OpenSSL auf
// Entferne alle Hash- und Verschlüsselungsalgorithmen
@@ -55,7 +55,7 @@ void HybridCrypt::createKeypair()
if (isCsprngSeeded())
{
// Räume den alten Schlüssel vorher ab
- freeKeyIfNotNull();
+ freeEvpKey(&userKeypair);
// Lege Schlüsselkontextvariable an
EVP_PKEY_CTX *ctx = NULL;
@@ -92,7 +92,7 @@ void HybridCrypt::createKeypair()
void HybridCrypt::importUserKeypair(QString keyfileName, QString password)
{
// Räume den alten Schlüssel vorher ab
- freeKeyIfNotNull();
+ freeEvpKey(&userKeypair);
FILE *keyfile = fopen(keyfileName.toStdString().c_str(), "r");
@@ -114,6 +114,9 @@ void HybridCrypt::importUserKeypair(QString keyfileName, QString password)
{
throwOpenSslException();
}
+
+ // Wirf Exception, falls kein RSA Schlüssel importiert wurde
+ throwExceptionIfEvpKeyIsNotRsa(&userKeypair);
}
void HybridCrypt::exportUserKeypair(QString keyfileName, QString password)
@@ -171,11 +174,20 @@ void HybridCrypt::exportPublicUserKey(QString keyfileName)
}
}
+/*
+ * Private Funktionen
+ */
+
bool HybridCrypt::isCsprngSeeded()
{
return RAND_status() == 1;
}
+bool HybridCrypt::isKeyRsa(EVP_PKEY *key)
+{
+ return EVP_PKEY_type(key->type) == EVP_PKEY_RSA;
+}
+
void HybridCrypt::throwOpenSslException()
{
QString errorMsg("OpenSSL Fehler. Fehlermeldung: ");
@@ -183,12 +195,17 @@ void HybridCrypt::throwOpenSslException()
throw CryptException(errorMsg.toStdString(), 5);
}
-
-void HybridCrypt::freeKeyIfNotNull()
+void HybridCrypt::throwExceptionIfEvpKeyIsNotRsa(EVP_PKEY **key)
{
- if (userKeypair != NULL)
+ if (!isKeyRsa(*key))
{
- EVP_PKEY_free(userKeypair);
- userKeypair = NULL;
+ freeEvpKey(key);
+ throw CryptException("Nur RSA Schlüssel werden unterstüzt.", 6);
}
}
+
+void HybridCrypt::freeEvpKey(EVP_PKEY **key)
+{
+ EVP_PKEY_free(*key);
+ *key = NULL;
+}