1 /*!
2  * \brief Unit tests for \ref CertificateGenerator
3  *
4  * \copyright Copyright (c) 2017-2021 Governikus GmbH & Co. KG, Germany
5  */
6 
7 #include "KeyPair.h"
8 
9 #include "TlsChecker.h"
10 
11 #include <QSslCertificateExtension>
12 #include <QtTest>
13 
14 using namespace governikus;
15 
16 
17 class test_KeyPair
18 	: public QObject
19 {
20 	Q_OBJECT
21 
22 	private Q_SLOTS:
validKey()23 		void validKey()
24 		{
25 			const KeyPair pair = KeyPair::generate();
26 			QVERIFY(pair.isValid());
27 			const auto& key = pair.getKey();
28 			QVERIFY(!key.isNull());
29 			QCOMPARE(key.length(), 2048);
30 			QCOMPARE(key.algorithm(), QSsl::Rsa);
31 			QCOMPARE(key.type(), QSsl::PrivateKey);
32 		}
33 
34 
multiKey()35 		void multiKey()
36 		{
37 			const KeyPair pair1 = KeyPair::generate();
38 			QVERIFY(!pair1.getKey().isNull());
39 
40 			const KeyPair pair2 = KeyPair::generate();
41 			QVERIFY(!pair2.getKey().isNull());
42 
43 			QVERIFY(pair1.getKey() != pair2.getKey());
44 		}
45 
46 
validCertificate()47 		void validCertificate()
48 		{
49 			const KeyPair pair = KeyPair::generate();
50 			QVERIFY(pair.isValid());
51 			const auto& cert = pair.getCertificate();
52 			QVERIFY(!cert.isNull());
53 			QCOMPARE(cert.issuerInfo(QSslCertificate::CommonName).size(), 1);
54 			QCOMPARE(cert.issuerInfo(QSslCertificate::CommonName).at(0), QCoreApplication::applicationName());
55 			QCOMPARE(cert.issuerInfo(QSslCertificate::SerialNumber).size(), 1);
56 			QVERIFY(cert.issuerInfo(QSslCertificate::SerialNumber).at(0).size() > 0);
57 			QVERIFY(cert.extensions().isEmpty());
58 			QCOMPARE(cert.version(), QByteArray("1"));
59 			QVERIFY(cert.isSelfSigned());
60 
61 			X509* rawCert = static_cast<X509*>(cert.handle());
62 			const qlonglong serialNumberValue = ASN1_INTEGER_get(X509_get_serialNumber(rawCert));
63 			QVERIFY(serialNumberValue > 0);
64 			QVERIFY(QByteArray::number(serialNumberValue).size() < 21);
65 
66 			const auto& key = cert.publicKey();
67 			QCOMPARE(key.length(), 2048);
68 			QCOMPARE(key.algorithm(), QSsl::Rsa);
69 			QCOMPARE(key.type(), QSsl::PublicKey);
70 			QVERIFY(TlsChecker::hasValidCertificateKeyLength(cert));
71 
72 			QVERIFY(cert.expiryDate().isValid());
73 			QVERIFY(cert.effectiveDate().isValid());
74 			QVERIFY(cert.expiryDate() > QDateTime::currentDateTime());
75 			QVERIFY(cert.effectiveDate() <= QDateTime::currentDateTime());
76 		}
77 
78 
multiCertificate()79 		void multiCertificate()
80 		{
81 			const KeyPair pair1 = KeyPair::generate();
82 			QVERIFY(!pair1.getCertificate().isNull());
83 
84 			const KeyPair pair2 = KeyPair::generate();
85 			QVERIFY(!pair2.getCertificate().isNull());
86 
87 			QVERIFY(pair1.getCertificate() != pair2.getCertificate());
88 		}
89 
90 
91 };
92 
93 QTEST_GUILESS_MAIN(test_KeyPair)
94 #include "test_KeyPair.moc"
95