blob: 8b1e02297d6db58bde9860ce2095b2e0895c8f89 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
#ifndef HYBRIDCRYPT_H
#define HYBRIDCRYPT_H
#include <cstdio>
#include <QByteArray>
#include <QFile>
#include <QString>
#include <QVector>
#include <QDebug>
#include <openssl/conf.h>
#include <openssl/evp.h>
#include <openssl/err.h>
#include <openssl/pem.h>
#include <openssl/rand.h>
#include <openssl/rsa.h>
#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.
*/
void encrypt(QString infileName, QString outfileName, QVector<QString> 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 throwOpenSslException
* Wirft eine Exception mit dem OpenSSL Fehler.
*/
void throwOpenSslException();
/**
* @brief freeKeyIfNotNull
* Gibt den Speicher vom Nutzerschlüssel frei, falls er existiert.
*/
void freeKeyIfNotNull();
};
#endif // HYBRIDCRYPT_H
|