summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Suhren <suhren.stefan@fh-swf.de>2015-09-09 13:42:10 +0200
committerStefan Suhren <suhren.stefan@fh-swf.de>2015-09-09 17:37:22 +0200
commitc529186d9c9f71054ea1cf92bfb4c25721d5cf78 (patch)
tree173235c04d295def8f87a988669a7ff795e2b792
parent22ee46a1d8bcfdaf1eae1401c7dfc5535cffb5eb (diff)
downloadsrc-c529186d9c9f71054ea1cf92bfb4c25721d5cf78.tar.gz
src-c529186d9c9f71054ea1cf92bfb4c25721d5cf78.zip
Implementiere exportPublicUserKey und kleiner Fixe
-rw-r--r--crypt/hybridcrypt.cpp67
-rw-r--r--crypt/hybridcrypt.h6
2 files changed, 45 insertions, 28 deletions
diff --git a/crypt/hybridcrypt.cpp b/crypt/hybridcrypt.cpp
index 6d0f202..fbe6791 100644
--- a/crypt/hybridcrypt.cpp
+++ b/crypt/hybridcrypt.cpp
@@ -91,59 +91,79 @@ void HybridCrypt::createKeypair()
void HybridCrypt::importUserKeypair(QString keyfileName, QString password)
{
- if (isCsprngSeeded())
+ // Räume den alten Schlüssel vorher ab
+ freeKeyIfNotNull();
+
+ FILE *keyfile = fopen(keyfileName.toStdString().c_str(), "r");
+
+ // Datei existiert nicht
+ if (keyfile == NULL)
{
- // Räume den alten Schlüssel vorher ab
- freeKeyIfNotNull();
+ throw CryptException("Datei nicht gefunden: " + keyfileName.toStdString(), 1);
+ }
+
+ // Ließ den Schlüssel des Nutzers ein
+ userKeypair = PEM_read_PrivateKey(keyfile, NULL, NULL,
+ (void *) password.toStdString().c_str());
+
+ // Räume die Ressourcen auf
+ fclose(keyfile);
- FILE *keyfile = fopen(keyfileName.toStdString().c_str(), "r");
+ // Wirf einen Fehler, falls OpenSSL ein Problem hatte
+ if (userKeypair == NULL)
+ {
+ throwOpenSslException();
+ }
+}
+
+void HybridCrypt::exportUserKeypair(QString keyfileName, QString password)
+{
+ if (userKeypair != NULL && isCsprngSeeded())
+ {
+ FILE *keyfile = fopen(keyfileName.toStdString().c_str(), "w+");
- // Datei existiert nicht
+ // Teste, ob die Datei zum Schreiben geöffnet werden konnte
if (keyfile == NULL)
{
- throw CryptException("Datei nicht gefunden: " + keyfileName.toStdString(), 1);
+ throw CryptException("Konnte Datei nicht schreiben: " +
+ keyfileName.toStdString(), 1);
}
- // Ließ den Schlüssel des Nutzers ein
- userKeypair = PEM_read_PrivateKey(keyfile, NULL, NULL,
- (void *) password.toStdString().c_str());
+ // Wenn password ein Leerstring ist, verschlüssele den privaten Schlüssel nicht
+ int opensslReturnError = PEM_write_PKCS8PrivateKey(keyfile, userKeypair,
+ (password.isEmpty()) ? NULL : EVP_aes_256_cbc(), NULL, 0, NULL,
+ (void *) password.toStdString().c_str());
// Räume die Ressourcen auf
fclose(keyfile);
// Wirf einen Fehler, falls OpenSSL ein Problem hatte
- if (userKeypair == NULL)
+ if (!opensslReturnError)
{
throwOpenSslException();
}
}
}
-void HybridCrypt::exportUserKeypair(QString keyfileName, QString password)
+void HybridCrypt::exportPublicUserKey(QString keyfileName)
{
- if (userKeypair != NULL && isCsprngSeeded())
+ if (userKeypair != NULL)
{
FILE *keyfile = fopen(keyfileName.toStdString().c_str(), "w+");
- // Teste ob die Datei zum Schreiben geöffnet werden konnte
+ // Teste, ob die Datei zum Schreiben geöffnet werden konnte
if (keyfile == NULL)
{
throw CryptException("Konnte Datei nicht schreiben: " +
keyfileName.toStdString(), 1);
}
- // Wird benutzt um die OpenSSL Fehler aufzufangen
- int opensslReturnError = 0;
-
- // Wenn password ein Leerstring ist, verschlüssele den privaten Schlüssel nicht
- opensslReturnError = PEM_write_PKCS8PrivateKey(keyfile, userKeypair,
- (password.isEmpty()) ? NULL : EVP_aes_256_cbc(), NULL, 0, NULL,
- (void *) password.toStdString().c_str());
+ int opensslReturnError = PEM_write_PUBKEY(keyfile, userKeypair);
// Räume die Ressourcen auf
fclose(keyfile);
- // Wirf einen Fehler, falls OpenSSL ein Problem hatte
+ // Wirft einen Fehler, falls OpenSSL ein Problem hatte
if (!opensslReturnError)
{
throwOpenSslException();
@@ -151,11 +171,6 @@ void HybridCrypt::exportUserKeypair(QString keyfileName, QString password)
}
}
-void HybridCrypt::exportPublicUserKey(QString keyfileName)
-{
-
-}
-
bool HybridCrypt::isCsprngSeeded()
{
return RAND_status() == 1;
diff --git a/crypt/hybridcrypt.h b/crypt/hybridcrypt.h
index 8b1e022..28f5dfb 100644
--- a/crypt/hybridcrypt.h
+++ b/crypt/hybridcrypt.h
@@ -40,9 +40,11 @@ public:
* mit den übergebenen Schlüsseln und dem Nutzerschlüssel.
* @param infileName Der Name der zu verschlüsselnde Datei.
* @param outfileName Der Name der verschlüsselten Datei (wird angelegt/überschrieben).
- * @param recipientKeyfileNames Die Schlüssel der empfänger, mit denen die Datei verschlüsselt wird.
+ * @param recipientKeyfileNames Die Schlüssel der Empfänger,
+ * mit denen die Datei verschlüsselt wird (Sollte nicht den Nutzerschlüssel enthalten).
*/
- void encrypt(QString infileName, QString outfileName, QVector<QString> recipientKeyfileNames);
+ void encrypt(QString infileName, QString outfileName,
+ QVector<QString> recipientKeyfileNames);
/**
* @brief HybridCrypt::decrypt