[SCM] kdeconnect packaging branch, master, updated. debian/0.9g-1-1183-g9d69498
Maximiliano Curia
maxy at moszumanska.debian.org
Fri Oct 14 14:26:52 UTC 2016
Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/kdeconnect.git;a=commitdiff;h=f59ab45
The following commit has been merged in the master branch:
commit f59ab456441c4fbe304872391316010b4c06938b
Author: Albert Vaca <albertvaka at gmail.com>
Date: Mon Sep 2 03:17:23 2013 +0200
Support encrypting strings longer than key.maximumEncryptSize()
Strings are divided in smaller chunks and serialized in an array
Added a test for this case
---
daemon/daemon.cpp | 2 +-
daemon/networkpackage.cpp | 32 ++++++++++++++++++++++++--------
tests/networkpackagetests.cpp | 21 ++++++++++++++++++++-
3 files changed, 45 insertions(+), 10 deletions(-)
diff --git a/daemon/daemon.cpp b/daemon/daemon.cpp
index 29e3274..b7f6cb4 100644
--- a/daemon/daemon.cpp
+++ b/daemon/daemon.cpp
@@ -56,7 +56,7 @@ Daemon::Daemon(QObject *parent, const QList<QVariant>&)
if (!config->group("myself").hasKey("privateKey") || !config->group("myself").hasKey("publicKey")) {
//http://delta.affinix.com/docs/qca/rsatest_8cpp-example.html
- QCA::PrivateKey privateKey = QCA::KeyGenerator().createRSA(1024);
+ QCA::PrivateKey privateKey = QCA::KeyGenerator().createRSA(2048);
config->group("myself").writeEntry("privateKey", privateKey.toDER().toByteArray().toBase64());
QCA::PublicKey publicKey = privateKey.toPublicKey();
diff --git a/daemon/networkpackage.cpp b/daemon/networkpackage.cpp
index c0077fa..9277ff8 100644
--- a/daemon/networkpackage.cpp
+++ b/daemon/networkpackage.cpp
@@ -90,15 +90,25 @@ void NetworkPackage::unserialize(const QByteArray& a, NetworkPackage* np)
void NetworkPackage::encrypt (QCA::PublicKey& key)
{
- qDebug() << key.toDER() << key.canEncrypt();
-
+
QByteArray serialized = serialize();
- QByteArray data = key.encrypt(serialized, QCA::EME_PKCS1v15).toByteArray();
+
+ int chunkSize = key.maximumEncryptSize(QCA::EME_PKCS1v15);
+
+ QStringList chunks;
+ while (!serialized.isEmpty()) {
+ QByteArray chunk = serialized.left(chunkSize);
+ serialized = serialized.mid(chunkSize);
+ QByteArray encryptedChunk = key.encrypt(chunk, QCA::EME_PKCS1v15).toByteArray();
+ chunks.append( encryptedChunk.toBase64() );
+ }
+
+ qDebug() << chunks.size() << "chunks";
mId = QString::number(QDateTime::currentMSecsSinceEpoch());
mType = "kdeconnect.encrypted";
mBody = QVariantMap();
- mBody["data"] = data.toBase64();
+ mBody["data"] = chunks;
mVersion = CURRENT_PACKAGE_VERSION;
mEncrypted = true;
@@ -106,12 +116,18 @@ void NetworkPackage::encrypt (QCA::PublicKey& key)
void NetworkPackage::decrypt (QCA::PrivateKey& key, NetworkPackage* out) const
{
- QByteArray encryptedJson = QByteArray::fromBase64(get<QByteArray>("data"));
+ const QStringList& chunks = mBody["data"].toStringList();
+
+ QByteArray decryptedJson;
+ Q_FOREACH(const QString& chunk, chunks) {
+ QByteArray encryptedChunk = QByteArray::fromBase64(chunk.toAscii());
+ QCA::SecureArray decryptedChunk;
+ key.decrypt(encryptedChunk, &decryptedChunk, QCA::EME_PKCS1v15);
+ decryptedJson.append(decryptedChunk.toByteArray());
- QCA::SecureArray decryptedJson;
- key.decrypt(encryptedJson, &decryptedJson, QCA::EME_PKCS1v15);
+ }
- unserialize(decryptedJson.toByteArray(), out);
+ unserialize(decryptedJson, out);
}
diff --git a/tests/networkpackagetests.cpp b/tests/networkpackagetests.cpp
index 8b05414..4ac8344 100644
--- a/tests/networkpackagetests.cpp
+++ b/tests/networkpackagetests.cpp
@@ -39,6 +39,8 @@ void NetworkPackageTests::dummyTest()
QVERIFY( date.isValid() );
QCOMPARE( date.month(), 3 );
QCOMPARE( QDate::longMonthName(date.month()), QString("March") );
+
+ QCOMPARE(QString("hello").toUpper(), QString("HELLO"));
}
void NetworkPackageTests::networkPackageTest()
@@ -93,9 +95,10 @@ void NetworkPackageTests::networkPackageEncryptionTest()
NetworkPackage decrypted("");
QCA::Initializer init;
- QCA::PrivateKey privateKey = QCA::KeyGenerator().createRSA(1024);
+ QCA::PrivateKey privateKey = QCA::KeyGenerator().createRSA(2048);
QCA::PublicKey publicKey = privateKey.toPublicKey();
+
//Encrypt and decrypt np
QCOMPARE( original.isEncrypted(), false );
original.encrypt(publicKey);
@@ -110,6 +113,22 @@ void NetworkPackageTests::networkPackageEncryptionTest()
QCOMPARE( decrypted.version(), copy.version() );
QCOMPARE( decrypted.body(), copy.body() );
+
+
+ //Test for long package encryption that need multi-chunk encryption
+
+ QByteArray json = "{ \"body\" : { \"nowPlaying\" : \"A really long song name - A really long artist name\", \"player\" : \"A really long player name\" }, \"id\" : \"A really long package id\", \"isEncrypted\" : false, \"type\" : \"kdeconnect.a_really_long_package_type\", \"version\" : 2 }
";
+ qDebug() << "EME_PKCS1_OAEP maximumEncryptSize" << publicKey.maximumEncryptSize(QCA::EME_PKCS1_OAEP);
+ qDebug() << "EME_PKCS1v15 maximumEncryptSize" << publicKey.maximumEncryptSize(QCA::EME_PKCS1v15);
+ QCOMPARE( json.size() > publicKey.maximumEncryptSize(QCA::EME_PKCS1v15), true );
+
+ NetworkPackage::unserialize(json, &original);
+ original.encrypt(publicKey);
+ original.decrypt(privateKey, &decrypted);
+ QByteArray decryptedJson = decrypted.serialize();
+
+ QCOMPARE(QString(json), QString(decryptedJson));
+
}
--
kdeconnect packaging
More information about the pkg-kde-commits
mailing list