[SCM] kdeconnect packaging branch, master, updated. debian/0.9g-1-1183-g9d69498

Maximiliano Curia maxy at moszumanska.debian.org
Fri Oct 14 14:26:53 UTC 2016


Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/kdeconnect.git;a=commitdiff;h=161ec36

The following commit has been merged in the master branch:
commit 161ec366cc2eb25a342da60454422f4b4a8bc2bd
Author: Albert Vaca <albertvaka at gmail.com>
Date:   Tue Sep 3 16:01:28 2013 +0200

    Using PEM format instead of Base64 encoded DER for the keys.
---
 kded/daemon.cpp         |  8 +++---
 kded/device.cpp         | 69 +++++++++++++++++++++++++++++++------------------
 kded/networkpackage.cpp |  4 +--
 3 files changed, 50 insertions(+), 31 deletions(-)

diff --git a/kded/daemon.cpp b/kded/daemon.cpp
index 873d101..0fad8c7 100644
--- a/kded/daemon.cpp
+++ b/kded/daemon.cpp
@@ -57,11 +57,11 @@ Daemon::Daemon(QObject *parent, const QList<QVariant>&)
 
         //http://delta.affinix.com/docs/qca/rsatest_8cpp-example.html
         QCA::PrivateKey privateKey = QCA::KeyGenerator().createRSA(2048);
-        config->group("myself").writeEntry("privateKey", privateKey.toDER().toByteArray().toBase64());
+        config->group("myself").writeEntry("privateKey", privateKey.toPEM());
 
         QCA::PublicKey publicKey = privateKey.toPublicKey();
-        config->group("myself").writeEntry("publicKey", publicKey.toDER().toBase64());
-        //TODO: Store key in a PEM file instead (KStandardDirs::locate("appdata", "private.pem"))
+        config->group("myself").writeEntry("publicKey", publicKey.toPEM());
+        //TODO: Store key in a PEM file instead (use something like KStandardDirs::locate("appdata", "private.pem"))
         
     }
 
@@ -73,7 +73,7 @@ Daemon::Daemon(QObject *parent, const QList<QVariant>&)
     mLinkProviders.insert(new LoopbackLinkProvider());
 
     //Read remebered paired devices
-    const KConfigGroup& known = config->group("devices");
+    const KConfigGroup& known = config->group("trusted_devices");
     const QStringList& list = known.groupList();
     Q_FOREACH(const QString& id, list) {
         Device* device = new Device(id);
diff --git a/kded/device.cpp b/kded/device.cpp
index 87a0074..5b3cef7 100644
--- a/kded/device.cpp
+++ b/kded/device.cpp
@@ -24,13 +24,12 @@ Device::Device(const QString& id)
     m_deviceId = id;
 
     KSharedConfigPtr config = KSharedConfig::openConfig("kdeconnectrc");
-    const KConfigGroup& data = config->group("devices").group(id);
+    const KConfigGroup& data = config->group("trusted_devices").group(id);
 
-    const QString& name = data.readEntry<QString>("name", QString("unnamed"));
-    m_deviceName = name;
+    m_deviceName = data.readEntry<QString>("deviceName", QString("unnamed"));
 
-    const QByteArray& key = data.readEntry<QByteArray>("publicKey",QByteArray());
-    m_publicKey = QCA::RSAPublicKey::fromDER(QByteArray::fromBase64(key));
+    const QString& key = data.readEntry<QString>("publicKey",QString());
+    m_publicKey = QCA::RSAPublicKey::fromPEM(key);
 
     m_pairStatus = Device::Paired;
 
@@ -143,8 +142,9 @@ void Device::requestPair()
     NetworkPackage np(PACKAGE_TYPE_PAIR);
     np.set("pair", true);
     KSharedConfigPtr config = KSharedConfig::openConfig("kdeconnectrc");
-    const QByteArray& key = config->group("myself").readEntry<QByteArray>("publicKey",QByteArray());
+    const QString& key = config->group("myself").readEntry<QString>("publicKey",QString());
     np.set("publicKey",key);
+    qDebug() << "BYTES" << QByteArray::fromBase64(key.toAscii());
     bool success = sendPackage(np);
 
     if (!success) {
@@ -167,7 +167,7 @@ void Device::unpair()
     pairingTimer.stop();
 
     KSharedConfigPtr config = KSharedConfig::openConfig("kdeconnectrc");
-    config->group("devices").deleteGroup(id());
+    config->group("trusted_devices").deleteGroup(id());
 
     if (isReachable()) {
         NetworkPackage np(PACKAGE_TYPE_PAIR);
@@ -237,7 +237,7 @@ void Device::removeLink(DeviceLink* link)
 
 bool Device::sendPackage(NetworkPackage& np)
 {
-    if (isPaired()) {
+    if (np.type() != PACKAGE_TYPE_PAIR && isPaired()) {
         np.encrypt(m_publicKey);
     } else {
         //Maybe we could block here any package that is not an identity or a pairing package to prevent sending non encrypted data
@@ -272,8 +272,18 @@ void Device::privateReceivedPackage(const NetworkPackage& np)
 
         if (wantsPair) {
 
-            const QByteArray& key = np.get<QByteArray>("publicKey");
-            m_publicKey = QCA::RSAPublicKey::fromDER(QByteArray::fromBase64(key));
+            //Retrieve their public key
+            const QString& key = np.get<QString>("publicKey");
+            m_publicKey = QCA::RSAPublicKey::fromPEM(key);
+            if (m_publicKey.isNull()) {
+                qDebug() << "ERROR decoding key";
+                if (m_pairStatus == PairRequested) {
+                    m_pairStatus = NotPaired;
+                    pairingTimer.stop();
+                }
+                Q_EMIT pairingFailed(i18n("Received incorrect key"));
+                return;
+            }
 
             if (m_pairStatus == Device::PairRequested)  { //We started pairing
 
@@ -284,9 +294,8 @@ void Device::privateReceivedPackage(const NetworkPackage& np)
 
                 //Store as trusted device
                 KSharedConfigPtr config = KSharedConfig::openConfig("kdeconnectrc");
-                config->group("devices").group(id()).writeEntry("publicKey",key);
-                config->group("devices").group(id()).writeEntry("name",name());
-                m_publicKey = QCA::RSAPublicKey::fromDER(QByteArray::fromBase64(key));
+                config->group("trusted_devices").group(id()).writeEntry("publicKey",key);
+                config->group("trusted_devices").group(id()).writeEntry("deviceName",name());
 
                 Q_EMIT pairingSuccesful();
 
@@ -309,19 +318,23 @@ void Device::privateReceivedPackage(const NetworkPackage& np)
         } else {
 
             qDebug() << "Unpair request";
+
+            m_pairStatus = Device::NotPaired;
+
             if (m_pairStatus == PairRequested) {
-                m_pairStatus = Device::NotPaired;
                 pairingTimer.stop();
                 Q_EMIT pairingFailed(i18n("Canceled by other peer"));
             } else if (m_pairStatus == Paired) {
-                unpair();
+                KSharedConfigPtr config = KSharedConfig::openConfig("kdeconnectrc");
+                config->group("trusted_devices").deleteGroup(id());
+                reloadPlugins();
             }
 
         }
 
     } else if (!isPaired()) {
 
-        //TODO: Alert the other side that we don't trust them
+        //TODO: Notify the other side that we don't trust them
         qDebug() << "device" << name() << "not paired, ignoring package" << np.type();
 
     } else {
@@ -330,18 +343,22 @@ void Device::privateReceivedPackage(const NetworkPackage& np)
 
             //TODO: Do not read the key every time
             KSharedConfigPtr config = KSharedConfig::openConfig("kdeconnectrc");
-            const QByteArray& key = config->group("myself").readEntry<QByteArray>("privateKey",QByteArray());
-            QCA::PrivateKey privateKey = QCA::PrivateKey::fromDER(QByteArray::fromBase64(key));
+            const QString& key = config->group("myself").readEntry<QString>("privateKey",QString());
+            QCA::PrivateKey privateKey = QCA::PrivateKey::fromPEM(key);
 
             //Emit decrypted package
             NetworkPackage decryptedNp("");
-            np.decrypt(privateKey, &decryptedNp);
-            Q_EMIT receivedPackage(decryptedNp);
+            bool success = np.decrypt(privateKey, &decryptedNp);
+            if (!success) {
+                qDebug() << "Failed to decrypt package";
+            } else {
+                Q_EMIT receivedPackage(decryptedNp);
+            }
 
         } else {
 
-            //TODO: The other side doesn't know that we are already paired
-            qDebug() << "Warning: A paired device is sending an unencrypted package";
+            //TODO: The other side doesn't know that we are already paired, do something
+            qDebug() << "WARNING: Received unencrypted package from paired device!";
 
             //Forward package
             Q_EMIT receivedPackage(np);
@@ -362,7 +379,7 @@ void Device::acceptPairing()
     //Send our own public key
     NetworkPackage np(PACKAGE_TYPE_PAIR);
     np.set("pair", true);
-    const QByteArray& key = config->group("myself").readEntry<QByteArray>("publicKey",QByteArray());
+    const QString& key = config->group("myself").readEntry<QString>("publicKey",QString());
     np.set("publicKey",key);
     bool success = sendPackage(np);
 
@@ -371,8 +388,10 @@ void Device::acceptPairing()
     }
 
     //Store as trusted device
-    config->group("devices").group(id()).writeEntry("publicKey", m_publicKey.toDER().toBase64());
-    config->group("devices").group(id()).writeEntry("name", name());
+    config->group("trusted_devices").group(id()).writeEntry("publicKey", m_publicKey.toPEM());
+    config->group("trusted_devices").group(id()).writeEntry("deviceName", name());
+
+    m_pairStatus = Paired;
 
     reloadPlugins(); //This will load plugins
 }
diff --git a/kded/networkpackage.cpp b/kded/networkpackage.cpp
index c636c5e..107a769 100644
--- a/kded/networkpackage.cpp
+++ b/kded/networkpackage.cpp
@@ -75,13 +75,13 @@ bool NetworkPackage::unserialize(const QByteArray& a, NetworkPackage* np)
     QVariantMap variant = parser.parse(a, &ok).toMap();
     if (!ok) {
         qDebug() << "Unserialization error:" << parser.errorLine() << parser.errorString();
-		return false;
+        return false;
     }
 
     //QVariant -> Object
     QJson::QObjectHelper::qvariant2qobject(variant,np);
 
-	return true;
+    return true;
 
 }
 

-- 
kdeconnect packaging



More information about the pkg-kde-commits mailing list