summaryrefslogtreecommitdiffstats
path: root/crypt/hybridcrypt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'crypt/hybridcrypt.cpp')
-rw-r--r--crypt/hybridcrypt.cpp67
1 files changed, 41 insertions, 26 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;