summaryrefslogtreecommitdiff
path: root/distfoldd/localkey.cc
diff options
context:
space:
mode:
authorJavier S. Pedro <maemo@javispedro.com>2012-09-30 16:48:52 +0200
committerJavier S. Pedro <maemo@javispedro.com>2012-09-30 16:48:52 +0200
commit630923d0de4a5cab558531e943370f00a64b316d (patch)
tree144e29d4785de0bfd46c65cd7977bd59e8d5ab09 /distfoldd/localkey.cc
parent0a174260c5dd04d516da7a6021e681d49c312547 (diff)
downloaddistfold-630923d0de4a5cab558531e943370f00a64b316d.tar.gz
distfold-630923d0de4a5cab558531e943370f00a64b316d.zip
autogenerate keys and autostartup daemon
Diffstat (limited to 'distfoldd/localkey.cc')
-rw-r--r--distfoldd/localkey.cc50
1 files changed, 50 insertions, 0 deletions
diff --git a/distfoldd/localkey.cc b/distfoldd/localkey.cc
new file mode 100644
index 0000000..9855ff4
--- /dev/null
+++ b/distfoldd/localkey.cc
@@ -0,0 +1,50 @@
+#include <QtCore/QDir>
+#include <QtCore/QDebug>
+#include <QtCrypto>
+
+#include "localkey.h"
+
+LocalKey::LocalKey()
+{
+}
+
+QString LocalKey::localKeyDir()
+{
+ return QDir::home().absoluteFilePath(".config/distfold");
+}
+
+bool LocalKey::setupLocalKey()
+{
+ QDir local_key_dir(localKeyDir());
+ if (local_key_dir.exists("server.crt") && local_key_dir.exists("server.key")) {
+ return true;
+ }
+
+ QCA::Initializer qca;
+
+ QCA::KeyGenerator keygen;
+ keygen.setBlockingEnabled(true);
+
+ qDebug() << "Generating private key...";
+ QCA::PrivateKey private_key = keygen.createRSA(2048);
+ if (!private_key.toPEMFile(local_key_dir.absoluteFilePath("server.key"))) {
+ qWarning() << "Failed to save private key";
+ return false;
+ }
+
+ qDebug() << "Generating server certificate...";
+ QCA::CertificateInfo cert_info;
+ cert_info.insert(QCA::CommonName, "Distfold Private Generic Cert");
+ QCA::CertificateOptions cert_options;
+ cert_options.setAsCA(1);
+ cert_options.setInfo(cert_info);
+ cert_options.setValidityPeriod(QDateTime::currentDateTime(),
+ QDateTime::currentDateTime().addYears(2));
+ QCA::Certificate cert(cert_options, private_key);
+ if (!cert.toPEMFile(local_key_dir.absoluteFilePath("server.crt"))) {
+ qWarning() << "Failed to save server certificate";
+ return false;
+ }
+
+ return true;
+}