1 /* vi: set sw=4 ts=4: 2 * 3 * Copyright (C) 2001 - 2012 Christian Hohnstaedt. 4 * 5 * All rights reserved. 6 */ 7 8 #ifndef __DHGEN_H 9 #define __DHGEN_H 10 11 #include "lib/entropy.h" 12 #include "lib/exception.h" 13 #include "lib/xfile.h" 14 15 #include <openssl/rand.h> 16 #include <openssl/dh.h> 17 18 #include <QString> 19 #include <QThread> 20 21 class DHgen: public QThread 22 { 23 QString fname; 24 int bits; 25 26 public: 27 errorEx error; DHgen(const QString & n,int b)28 DHgen(const QString &n, int b) : QThread() 29 { 30 fname = n; 31 bits = b; 32 } filename()33 const QString &filename() const 34 { 35 return fname; 36 } 37 protected: run()38 void run() 39 { 40 DH *dh = NULL; 41 try { 42 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 43 dh = DH_new(); 44 check_oom(dh); 45 DH_generate_parameters_ex(dh, bits, 2, NULL); 46 #else 47 dh = DH_generate_parameters(bits, 2, NULL, NULL); 48 check_oom(dh); 49 #endif 50 openssl_error(); 51 52 XFile file(fname); 53 file.open_write(); 54 PEM_write_DHparams(file.fp(), dh); 55 openssl_error(); 56 } catch (errorEx &err) { 57 error = err; 58 } 59 if (dh) 60 DH_free(dh); 61 } 62 }; 63 #endif 64