#ifndef HYBRIDCRYPT_H #define HYBRIDCRYPT_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include "cryptexception.h" class HybridCrypt { public: /** * @brief HybridCrypt::HybridCrypt * 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. * @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 (Sollte nicht den Nutzerschlüssel enthalten). */ void encrypt(QString infileName, QString outfileName, QVector recipientKeyfileNames); /** * @brief HybridCrypt::decrypt * Entschlüsselt die übergeben Datei mit dem Nutzerschlüssel und schreibt diese entschlüsselt. * @param infileName Der Name der zu entschlüsselnden Datei. * @param outfileName Der Name der entschlüsselten Datei (wird angelegt/überschrieben). */ void decrypt(QString infileName, QString outfileName); /** * @brief HybridCrypt::createKeypair * Erzeugt sicher ein neues RSA Schlüsselpaar zur Verwendung in #encrypt und #decrypt. * Sollte mittel #exportUserKeypair exportiert werden. */ void createKeypair(); /** * @brief HybridCrypt::importUserKeypair * Importiert das Schlüsselpaar des Nutzers zur Verwendung in #encrypt und #decrypt. * @param keyfileName Der Name der Schlüsseldatei im (PEM|DER|NET|ASC) Format, die importiert werden soll. * @param password Das Password mit dem der private Schlüssel in der Datei verschlüsselt ist. */ void importUserKeypair(QString keyfileName, QString password); /** * @brief HybridCrypt::exportUserKeypair * Exportiert das Schlüsselpaar des Nutzers im (PEM|DER|NET|ASC) Format. * @param keyfileName Der Name der Datei in die das Schlüsselpaar exportiert wird (wird angelegt/überschrieben). * @param password Das Password mit dem der private Schlüssel des Nutzers verschlüsselt wird. */ void exportUserKeypair(QString keyfileName, QString password); /** * @brief HybridCrypt::exportPublicUserKey * Exportiert den öffentlichen Schlüssel des Nutzers im (PEM|DER|NET|ASC) Format. * @param keyfileName Der Name der Datei in den der öffentliche Schlüssel exportiert wird (wird angelegt/überschrieben). */ void exportPublicUserKey(QString keyfileName); private: EVP_PKEY *userKeypair; // Enthält nur den privaten Schlüssel, da OpenSSL nicht mehr braucht. /** * @brief isCsprngSeeded * Gibt an, ob der Zufallszahlengenerator von OpenSSL mit ausreichend Entropie initialisiert wurde. * @return Gibt wahr zurück wenn ausreichend intialisert wurde, ansonsten falsch. */ bool isCsprngSeeded(); /** * @brief isKeyRsa * Überprüft, ob der Schlüssel vom Typ RSA ist. * @param key Der Schlüssel, der überprüft wird. * @return Gibt wahr zurück, falls Key vom Typ RSA ist, ansonsten flasch. */ bool isKeyRsa(EVP_PKEY *key); /** * @brief throwOpenSslException * Wirft eine CryptException mit dem OpenSSL Fehler. */ void throwOpenSslException(); /** * @brief throwExceptionIfEvpKeyIsNotRsa * Wirft eine CryptException, falls der Schlüssel nicht RSA ist. * @param key Der Pointer, der auf NULL gesetzt wird, nachdem der Schlüssel abgräumt wurde. */ void throwExceptionIfEvpKeyIsNotRsa(EVP_PKEY **key); /** * @brief freeEvpKey * Räumt den Schlüssel hinter key ab. * @param key Der Pointer, der auf NULL gesetzt wird. */ void freeEvpKey(EVP_PKEY **key); }; #endif // HYBRIDCRYPT_H