Warning, file /frameworks/kwallet/autotests/blowfishtest.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 This file is part of the KDE libraries 0003 SPDX-FileCopyrightText: 2016 Michael Pyne <mpyne@kde.org> 0004 0005 SPDX-License-Identifier: LGPL-2.0-only 0006 */ 0007 0008 #include "backend/blowfish.h" 0009 0010 #include <QByteArray> 0011 #include <QObject> 0012 #include <QTest> 0013 0014 #include <stdint.h> 0015 0016 class TestBlowfish : public QObject 0017 { 0018 Q_OBJECT 0019 private Q_SLOTS: 0020 void testBlowfishCipher(); 0021 }; 0022 0023 // Source for test vectors: https://www.schneier.com/code/vectors.txt 0024 static const char *const keys[] = { 0025 "0000000000000000", "FFFFFFFFFFFFFFFF", "3000000000000000", "1111111111111111", "0123456789ABCDEF", "1111111111111111", "0000000000000000", 0026 "FEDCBA9876543210", "7CA110454A1A6E57", "0131D9619DC1376E", "07A1133E4A0B2686", "3849674C2602319E", "04B915BA43FEB5B6", "0113B970FD34F2CE", 0027 "0170F175468FB5E6", "43297FAD38E373FE", "07A7137045DA2A16", "04689104C2FD3B2F", "37D06BB516CB7546", "1F08260D1AC2465E", "584023641ABA6176", 0028 "025816164629B007", "49793EBC79B3258F", "4FB05E1515AB73A7", "49E95D6D4CA229BF", "018310DC409B26D6", "1C587F1C13924FEF", "0101010101010101", 0029 "1F1F1F1F0E0E0E0E", "E0FEE0FEF1FEF1FE", "0000000000000000", "FFFFFFFFFFFFFFFF", "0123456789ABCDEF", "FEDCBA9876543210", 0030 }; 0031 0032 static const char *const cleartexts[] = { 0033 "0000000000000000", "FFFFFFFFFFFFFFFF", "1000000000000001", "1111111111111111", "1111111111111111", "0123456789ABCDEF", "0000000000000000", 0034 "0123456789ABCDEF", "01A1D6D039776742", "5CD54CA83DEF57DA", "0248D43806F67172", "51454B582DDF440A", "42FD443059577FA2", "059B5E0851CF143A", 0035 "0756D8E0774761D2", "762514B829BF486A", "3BDD119049372802", "26955F6835AF609A", "164D5E404F275232", "6B056E18759F5CCA", "004BD6EF09176062", 0036 "480D39006EE762F2", "437540C8698F3CFA", "072D43A077075292", "02FE55778117F12A", "1D9D5C5018F728C2", "305532286D6F295A", "0123456789ABCDEF", 0037 "0123456789ABCDEF", "0123456789ABCDEF", "FFFFFFFFFFFFFFFF", "0000000000000000", "0000000000000000", "FFFFFFFFFFFFFFFF", 0038 }; 0039 0040 static const char *const ciphertexts[] = { 0041 "4EF997456198DD78", "51866FD5B85ECB8A", "7D856F9A613063F2", "2466DD878B963C9D", "61F9C3802281B096", "7D0CC630AFDA1EC7", "4EF997456198DD78", 0042 "0ACEAB0FC6A0A28D", "59C68245EB05282B", "B1B8CC0B250F09A0", "1730E5778BEA1DA4", "A25E7856CF2651EB", "353882B109CE8F1A", "48F4D0884C379918", 0043 "432193B78951FC98", "13F04154D69D1AE5", "2EEDDA93FFD39C79", "D887E0393C2DA6E3", "5F99D04F5B163969", "4A057A3B24D3977B", "452031C1E4FADA8E", 0044 "7555AE39F59B87BD", "53C55F9CB49FC019", "7A8E7BFA937E89A3", "CF9C5D7A4986ADB5", "D1ABB290658BC778", "55CB3774D13EF201", "FA34EC4847B268B2", 0045 "A790795108EA3CAE", "C39E072D9FAC631D", "014933E0CDAFF6E4", "F21E9A77B71C49BC", "245946885754369A", "6B5C5A9C5D9E0A5A", 0046 }; 0047 0048 static QByteArray readBinaryData(const char *const src) 0049 { 0050 return QByteArray::fromHex(QByteArray(src)); 0051 } 0052 0053 #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0])) 0054 0055 void TestBlowfish::testBlowfishCipher() 0056 { 0057 BlowFish bf; 0058 QByteArray result; 0059 0060 result.reserve(qstrlen(ciphertexts[0]) / 2); 0061 0062 for (std::size_t i = 0; i < ARRAY_SIZE(keys); i++) { 0063 QByteArray key = readBinaryData(keys[i]); 0064 QByteArray cleartext = readBinaryData(cleartexts[i]); 0065 QByteArray ciphertext = readBinaryData(ciphertexts[i]); 0066 0067 bf.setKey(key.data(), 8 * key.count()); 0068 QVERIFY(bf.readyToGo()); 0069 0070 // Verify encrypted cleartext == ciphertext 0071 QByteArray temp = cleartext; 0072 QCOMPARE(bf.encrypt(temp.data(), temp.count()), temp.count()); 0073 QVERIFY(temp == ciphertext); 0074 0075 bf.setKey(key.data(), 8 * key.count()); 0076 QVERIFY(bf.readyToGo()); 0077 0078 // Verify decryption of ciphertext w/ same key yield cleartext 0079 temp = ciphertext; 0080 QCOMPARE(bf.decrypt(temp.data(), temp.count()), temp.count()); 0081 QVERIFY(temp == cleartext); 0082 } 0083 } 0084 0085 QTEST_APPLESS_MAIN(TestBlowfish) 0086 0087 #include "blowfishtest.moc"