diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 1ce5ece3..f10cf4e7 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,46 +1,47 @@ find_package(Qt5Test REQUIRED) set(test_LIBS kgpg_lib Qt5::Test) set(COMMON common.h common.cpp) function(create_test name) add_executable(${name} ${ARGN} ${COMMON}) target_link_libraries(${name} ${test_LIBS}) add_test(NAME ${name} COMMAND ${name}) set_property(TEST ${name} PROPERTY ENVIRONMENT "XDG_CONFIG_HOME=${CMAKE_BINARY_DIR}/tests") set_property(TEST ${name} PROPERTY RUN_SERIAL TRUE) #since gpg config home is shared between each test add_dependencies(${name} test-data) endfunction() create_test(kgpg-import kgpgimport.h kgpgimport.cpp) create_test(kgpg-verify kgpgverify.h kgpgverify.cpp) create_test(kgpg-change-trust kgpgchangetrust.h kgpgchangetrust.cpp) create_test(kgpg-disable kgpgchangedisable.h kgpgchangedisable.cpp) create_test(kgpg-interface kgpginterface.h kgpginterface.cpp) +create_test(kgpg-encrypt kgpgencrypt.h kgpgencrypt.cpp) set(GpgConf .gnupg/gpg.conf) set(KgpgConf kgpgrc) set(Keys keys/kgpgtest_BA7695F3C550DF14.asc keys/kgpgtest_BA7695F3C550DF14.pass keys/kgpgtest_BA7695F3C550DF14_pub.asc keys/signed_bad_sig keys/signed_text keys/encrypted_text.txt keys/encrypted_text_hide_key_id.txt ) add_custom_target(test-data) add_custom_command(TARGET test-data PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/tests/.gnupg ${CMAKE_BINARY_DIR}/tests/gnupg) add_custom_command(TARGET test-data PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/tests/keys ${CMAKE_BINARY_DIR}/tests/keys) add_custom_command(TARGET test-data PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/tests/kgpgrc ${CMAKE_BINARY_DIR}/tests/kgpgrc) diff --git a/tests/keys/encrypted_symmetrical.txt b/tests/keys/encrypted_symmetrical.txt new file mode 100644 index 00000000..b6ed268f --- /dev/null +++ b/tests/keys/encrypted_symmetrical.txt @@ -0,0 +1,15 @@ +-----BEGIN PGP MESSAGE----- + +jA0ECQMCxRjbOVuHe+r/0sE2AfBAt4LOnD8COwosYrm6ECd1eJiwPAqGlvyGiEde +WM/SgM+BkF/M8b4lcH3864ycd1NQwA8frZ4ZxSQO4dllpT1tdGlsszN8KMOCoAmj +TVl2Ovv1JQoMeBir2tI4QySDCIQRcSZh56vX/X6kHwcPOcujJcE5KAjTrKqgH53c +kRz9P2F0+S3oJ2zwiVEzepW0onr1+K0D2BLCJueqgn7DlKn1yNwjwncgTb2hSN/6 +yn7c1lC6F3dL6L1aKEnkXsB3B5Wzwh7MYiHO7bo1XyKsQA4vtSS39spnI/EpkEYJ +EX2qadhTzU/SFfTjJx5e/R3jQ22nL6RI9xYRYNpI75IXPu1Tjq+sNo+sauSDX2WP +JXFwM9pP6DckC4o9onCxPTi776su73eYV3NjU2dXBegcjwEy5sJdcsQuH6+jUKvy +frCd2WUxs01sjIK7xZyIvOxfADa2bm5JC8DIWUVSpVTpZ/nb5Pwq/qKh7slZ2Y6O +Jfhqy8byMp7AXFDmc4JRbBFjkzqULy/PnWLDkpRO2od60ZR2PT5FPtvmGJKIZFYB +X6HKHrP5XnA+muuTNiROzFoz6+iy8jjcnY7CEdchVL0+pUjKp4pxWKlc8KpyMl3G +9ugXEpMsfs09S4QeDmszmke1DpUjdzJ9jGJBz4LdomuLwXxJVdjZUw== +=vWpk +-----END PGP MESSAGE----- diff --git a/tests/kgpgencrypt.cpp b/tests/kgpgencrypt.cpp new file mode 100644 index 00000000..fa76224b --- /dev/null +++ b/tests/kgpgencrypt.cpp @@ -0,0 +1,137 @@ +#include "common.h" +#include "kgpgencrypt.h" +#include "../transactions/kgpgencrypt.h" +#include "../transactions/kgpgdecrypt.h" + +#include +#include +#include +#include +#include + +void KGpgEncryptTest::init() +{ + QVERIFY(resetGpgConf()); +} + +void KGpgEncryptTest::testAsciiArmoredEncryption() +{ + //Add keys to keyring + addGpgKey(QLatin1String("keys/kgpgtest_BA7695F3C550DF14_pub.asc")); + QString passphrase = readFile(QLatin1String("keys/kgpgtest_BA7695F3C550DF14.pass")); + addGpgKey(QLatin1String("keys/kgpgtest_BA7695F3C550DF14.asc"), passphrase); + + //Encrypt text + QString text = readFile(QLatin1String("keys/sample_text")); + QStringList userIds(QLatin1String("Test KGpg")); + KGpgEncrypt *encryption = new KGpgEncrypt( + this, userIds, text, + KGpgEncrypt::AsciiArmored | KGpgEncrypt::AllowUntrustedEncryption); + QObject::connect(encryption, &KGpgEncrypt::done, + [](int result) { QCOMPARE(result, KGpgTransaction::TS_OK); }); + QSignalSpy spy(encryption, &KGpgEncrypt::done); + encryption->start(); + QVERIFY(spy.wait()); + + QString encryptedText = encryption->encryptedText().join("\n"); + //Check if the encrypted text has a header and footer + QVERIFY(encryptedText.startsWith(QLatin1String("-----BEGIN PGP MESSAGE-----"))); + QVERIFY(encryptedText.endsWith(QLatin1String("-----END PGP MESSAGE-----"))); + //Test if encrypted text contains "KGpg" + QVERIFY(!encryptedText.contains(QLatin1String("KGpg"))); + + //Decrypt encrypted text + KGpgDecrypt *decryption = new KGpgDecrypt(this, encryptedText); + QObject::connect(decryption, &KGpgDecrypt::done, + [](int result) { QCOMPARE(result, KGpgTransaction::TS_OK); }); + QSignalSpy spy2(decryption, &KGpgDecrypt::done); + addPasswordArguments(decryption, passphrase); + decryption->start(); + QVERIFY(spy2.wait()); + + //Check if decrypted text is equal to original text + QVERIFY(text.compare(decryption->decryptedText().join(QLatin1Char('\n')))); +} + +void KGpgEncryptTest::testHideKeyIdEncryption() +{ + //Add keys to keyring + addGpgKey(QLatin1String("keys/kgpgtest_BA7695F3C550DF14_pub.asc")); + QString passphrase = readFile(QLatin1String("keys/kgpgtest_BA7695F3C550DF14.pass")); + addGpgKey(QLatin1String("keys/kgpgtest_BA7695F3C550DF14.asc"), passphrase); + + //Encrypt text + QString text = readFile(QLatin1String("keys/sample_text")); + QStringList userIds(QLatin1String("Test KGpg")); + KGpgEncrypt *encryption = + new KGpgEncrypt(this, userIds, text, + KGpgEncrypt::AsciiArmored | KGpgEncrypt::HideKeyId | + KGpgEncrypt::AllowUntrustedEncryption); + QObject::connect(encryption, &KGpgEncrypt::done, + [](int result) { QCOMPARE(result, KGpgTransaction::TS_OK); }); + QSignalSpy spy(encryption, &KGpgEncrypt::done); + encryption->start(); + QVERIFY(spy.wait()); + + QString encryptedText = encryption->encryptedText().join("\n"); + //Check if the encrypted text has a header and footer + QVERIFY(encryptedText.startsWith(QLatin1String("-----BEGIN PGP MESSAGE-----"))); + QVERIFY(encryptedText.endsWith(QLatin1String("-----END PGP MESSAGE-----"))); + //Test if encrypted text contains "KGpg" + QVERIFY(!encryptedText.contains(QLatin1String("KGpg"))); + //Check if encrypted text contains key Id + QString keyId = QLatin1String("BA7695F3C550DF14"); + QString log = encryption->getMessages().join(QLatin1Char('\n')); + QVERIFY(!log.contains(keyId)); + + //Decrypt encrypted text + KGpgDecrypt *decryption = new KGpgDecrypt(this, encryptedText); + QObject::connect(decryption, &KGpgDecrypt::done, + [](int result) { QCOMPARE(result, KGpgTransaction::TS_OK); }); + QSignalSpy spy2(decryption, &KGpgDecrypt::done); + addPasswordArguments(decryption, passphrase); + decryption->start(); + QVERIFY(spy2.wait()); + + //Check if decrypted text is equal to original text + QVERIFY(text.compare(decryption->decryptedText().join(QLatin1Char('\n')))); +} + +void KGpgEncryptTest::testSymmetricEncryption() +{ + QString passphrase = QLatin1String("symmetric key"); + QString text = readFile(QLatin1String("keys/sample_text")); + QStringList userIds; + + //Encrypt text + KGpgEncrypt *encryption = new KGpgEncrypt( + this, userIds, text, + KGpgEncrypt::AsciiArmored | KGpgEncrypt::AllowUntrustedEncryption); + QObject::connect(encryption, &KGpgEncrypt::done, + [](int result) { QCOMPARE(result, KGpgTransaction::TS_OK); }); + QSignalSpy spy(encryption, &KGpgEncrypt::done); + addPasswordArguments(encryption, passphrase); + encryption->start(); + QVERIFY(spy.wait()); + + QString encryptedText = encryption->encryptedText().join("\n"); + //Check if the encrypted text has a header and footer + QVERIFY(encryptedText.startsWith(QLatin1String("-----BEGIN PGP MESSAGE-----"))); + QVERIFY(encryptedText.endsWith(QLatin1String("-----END PGP MESSAGE-----"))); + //Test if encrypted text contains "KGpg" + QVERIFY(!encryptedText.contains(QLatin1String("KGpg"))); + + //Decrypt encrypted text + KGpgDecrypt *decryption = new KGpgDecrypt(this, encryptedText); + QObject::connect(decryption, &KGpgDecrypt::done, + [](int result) { QCOMPARE(result, KGpgTransaction::TS_OK); }); + QSignalSpy spy2(decryption, &KGpgDecrypt::done); + addPasswordArguments(decryption, passphrase); + decryption->start(); + QVERIFY(spy2.wait()); + + //Check if decrypted text is equal to original text + QVERIFY(text.compare(decryption->decryptedText().join(QLatin1Char('\n')))); +} + +QTEST_MAIN(KGpgEncryptTest) diff --git a/tests/kgpgencrypt.h b/tests/kgpgencrypt.h new file mode 100644 index 00000000..52db819e --- /dev/null +++ b/tests/kgpgencrypt.h @@ -0,0 +1,15 @@ +#ifndef KGPGENCRYPT_TEST_H +#define KGPGENCRYPT_TEST_H + +#include + +class KGpgEncryptTest : public QObject { + Q_OBJECT +private slots: + void init(); + void testAsciiArmoredEncryption(); + void testHideKeyIdEncryption(); + void testSymmetricEncryption(); +}; + +#endif