diff options
author | Toni Spets <toni.spets@iki.fi> | 2017-10-29 18:17:24 +0300 |
---|---|---|
committer | Toni Spets <toni.spets@iki.fi> | 2017-11-19 15:38:59 +0300 |
commit | 4840c2c64f1d6616af887457a0ec5a423d889db0 (patch) | |
tree | 3bca6b33b70df4d8f1579965bdf42bde27ccb8a7 /tests/TestOpenSSHKey.cpp | |
parent | 248ae9d4ba40975558c928ae0d28fdd78c16d26d (diff) |
SSH agent support
Diffstat (limited to 'tests/TestOpenSSHKey.cpp')
-rw-r--r-- | tests/TestOpenSSHKey.cpp | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/tests/TestOpenSSHKey.cpp b/tests/TestOpenSSHKey.cpp new file mode 100644 index 000000000..52cf4dbf5 --- /dev/null +++ b/tests/TestOpenSSHKey.cpp @@ -0,0 +1,124 @@ +/* + * Copyright (C) 2017 Toni Spets <toni.spets@iki.fi> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 or (at your option) + * version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "TestOpenSSHKey.h" +#include "sshagent/OpenSSHKey.h" +#include <QTest> + +QTEST_GUILESS_MAIN(TestOpenSSHKey) + +void TestOpenSSHKey::testParse() +{ + // mixed line endings and missing ones are intentional, we only require 3 lines total + const QString keyString = QString( + "\r\n\r" + "-----BEGIN OPENSSH PRIVATE KEY-----\n" + "b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW" + "QyNTUxOQAAACDdlO5F2kF2WzedrBAHBi9wBHeISzXZ0IuIqrp0EzeazAAAAKjgCfj94An4" + "/QAAAAtzc2gtZWQyNTUxOQAAACDdlO5F2kF2WzedrBAHBi9wBHeISzXZ0IuIqrp0EzeazA" + "AAAEBe1iilZFho8ZGAliiSj5URvFtGrgvmnEKdiLZow5hOR92U7kXaQXZbN52sEAcGL3AE" + "d4hLNdnQi4iqunQTN5rMAAAAH29wZW5zc2hrZXktdGVzdC1wYXJzZUBrZWVwYXNzeGMBAg" + "MEBQY=\r" + "-----END OPENSSH PRIVATE KEY-----\r\n\r" + ); + + const QByteArray keyData = keyString.toLatin1(); + + OpenSSHKey key; + QVERIFY(key.parse(keyData)); + QVERIFY(!key.encrypted()); + QCOMPARE(key.cipherName(), QString("none")); + QCOMPARE(key.type(), QString("ssh-ed25519")); + QCOMPARE(key.comment(), QString("opensshkey-test-parse@keepassxc")); + + QByteArray publicKey, privateKey; + BinaryStream publicStream(&publicKey), privateStream(&privateKey); + + QVERIFY(key.writePublic(publicStream)); + QVERIFY(key.writePrivate(privateStream)); + + QVERIFY(publicKey.length() == 51); + QVERIFY(privateKey.length() == 154); +} + +void TestOpenSSHKey::testDecryptAES256CBC() +{ + const QString keyString = QString( + "-----BEGIN OPENSSH PRIVATE KEY-----\n" + "b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jYmMAAAAGYmNyeXB0AAAAGAAAABD2A0agtd\n" + "oGtJiI9JvIxYbTAAAAEAAAAAEAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIDPvDXmi0w1rdMoX\n" + "fOeyZ0Q/v+wqq/tPFgJwxnW5ADtfAAAAsC3UPsf035hrF5SgZ48p55iDFPiyGfZC/C3vQx\n" + "+THzpQo8DTUmFokdPn8wvDYGQoIcr9q0RzJuKV87eMQf3zzvZfJthtLYBlt330Deivv9AQ\n" + "MbKdhPZ4SfwRvv0grgT2EVId3GQAPgSVBhXYQTOf2CdmbXV4kieFLTmSsBMy+v6Qn5Rqur\n" + "PDWBwuLQgamcVDZuhrkUEqIVJZU2zAiRU2oAXsw/XOgFV6+Y5UZmLwWJQZ\n" + "-----END OPENSSH PRIVATE KEY-----\n" + ); + + const QByteArray keyData = keyString.toLatin1(); + + OpenSSHKey key; + QVERIFY(key.parse(keyData)); + QVERIFY(key.encrypted()); + QCOMPARE(key.cipherName(), QString("aes256-cbc")); + QVERIFY(!key.openPrivateKey("incorrectpassphrase")); + QVERIFY(key.openPrivateKey("correctpassphrase")); + QCOMPARE(key.type(), QString("ssh-ed25519")); + QCOMPARE(key.comment(), QString("opensshkey-test-aes256cbc@keepassxc")); + + QByteArray publicKey, privateKey; + BinaryStream publicStream(&publicKey), privateStream(&privateKey); + + QVERIFY(key.writePublic(publicStream)); + QVERIFY(key.writePrivate(privateStream)); + + QVERIFY(publicKey.length() == 51); + QVERIFY(privateKey.length() == 158); +} + +void TestOpenSSHKey::testDecryptAES256CTR() +{ + const QString keyString = QString( + "-----BEGIN OPENSSH PRIVATE KEY-----\n" + "b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABAMhIAypt\n" + "WP4tZJBmMwq0tTAAAAEAAAAAEAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIErNsS8ROy43XoWC\n" + "nO9Sn2lEFBJYcDVtRPM1t6WB7W7OAAAAsFKXMOlPILoTmMj2JmcqzjaYAhaCezx18HDp76\n" + "VrNxaZTd0T28EGFSkzrReeewpJWy/bWlhLoXR5fRyOSSto+iMg/pibIvIJMrD5sqxlxr/e\n" + "c5lSeSZUzIK8Rv+ou/3EFDcY5jp8hVXqA4qNtoM/3fV52vmwlNje5d1V5Gsr4U8443+i+p\n" + "swqksozfatkynk51uR/9QFoOJKlsL/Z3LkK1S/apYz/K331iU1f5ozFELf\n" + "-----END OPENSSH PRIVATE KEY-----\n" + ); + + const QByteArray keyData = keyString.toLatin1(); + + OpenSSHKey key; + QVERIFY(key.parse(keyData)); + QVERIFY(key.encrypted()); + QCOMPARE(key.cipherName(), QString("aes256-ctr")); + QVERIFY(!key.openPrivateKey("incorrectpassphrase")); + QVERIFY(key.openPrivateKey("correctpassphrase")); + QCOMPARE(key.type(), QString("ssh-ed25519")); + QCOMPARE(key.comment(), QString("opensshkey-test-aes256ctr@keepassxc")); + + QByteArray publicKey, privateKey; + BinaryStream publicStream(&publicKey), privateStream(&privateKey); + + QVERIFY(key.writePublic(publicStream)); + QVERIFY(key.writePrivate(privateStream)); + + QVERIFY(publicKey.length() == 51); + QVERIFY(privateKey.length() == 158); +} |