1 /*!
2  * \brief Unit tests for \ref  SignatureChecker
3  *
4  * \copyright Copyright (c) 2014-2021 Governikus GmbH & Co. KG, Germany
5  */
6 
7 #include <QtCore>
8 #include <QtTest>
9 
10 #include <openssl/bn.h>
11 #include <openssl/ec.h>
12 #include <openssl/ecdsa.h>
13 #include <openssl/err.h>
14 #include <openssl/obj_mac.h>
15 
16 #include "asn1/CVCertificate.h"
17 #include "asn1/SignatureChecker.h"
18 #include "TestFileHelper.h"
19 #include <QDebug>
20 
21 #include "pace/ec/EcUtil.h"
22 
23 
24 using namespace governikus;
25 
26 
27 class test_SignatureChecker
28 	: public QObject
29 {
30 	Q_OBJECT
31 
32 	QVector<QSharedPointer<const CVCertificate> > cvcs;
33 
load(const QString & pName)34 	static QSharedPointer<const CVCertificate> load(const QString& pName)
35 	{
36 		QByteArray bytes = TestFileHelper::readFile(pName);
37 		return CVCertificate::fromHex(bytes);
38 	}
39 
40 	private Q_SLOTS:
init()41 		void init()
42 		{
43 			cvcs.clear();
44 			cvcs.append(load(":/card/cvca-DETESTeID00001.hex"));
45 			cvcs.append(load(":/card/cvca-DETESTeID00002_DETESTeID00001.hex"));
46 			cvcs.append(load(":/card/cvca-DETESTeID00004_DETESTeID00002.hex"));
47 			cvcs.append(load(":/card/cvdv-DEDVeIDDPST00035.hex"));
48 			cvcs.append(load(":/card/cvat-DEDEMODEV00038.hex"));
49 			ERR_clear_error();
50 		}
51 
52 
cleanup()53 		void cleanup()
54 		{
55 			QCOMPARE(ERR_get_error(), 0);
56 		}
57 
58 
verifyEmptyList()59 		void verifyEmptyList()
60 		{
61 			QVector<QSharedPointer<const CVCertificate> > certs;
62 			SignatureChecker checker(certs);
63 
64 			QVERIFY(!checker.check());
65 		}
66 
67 
verifyNotSelfSigned()68 		void verifyNotSelfSigned()
69 		{
70 			QVector<QSharedPointer<const CVCertificate> > certs(cvcs);
71 			certs.removeAt(0);
72 			SignatureChecker checker(certs);
73 
74 			QVERIFY(!checker.check());
75 		}
76 
77 
verifyNoCertificateWithCurveParameters()78 		void verifyNoCertificateWithCurveParameters()
79 		{
80 			QVector<QSharedPointer<const CVCertificate> > certs(cvcs);
81 			certs.removeAt(2);
82 			certs.removeAt(1);
83 			certs.removeAt(0);
84 			SignatureChecker checker(certs);
85 
86 			QVERIFY(!checker.check());
87 		}
88 
89 
verifyNoValidChain()90 		void verifyNoValidChain()
91 		{
92 			QVector<QSharedPointer<const CVCertificate> > certs(cvcs);
93 			certs.removeAt(2);
94 			SignatureChecker checker(certs);
95 
96 			QVERIFY(!checker.check());
97 		}
98 
99 
verifyValidChain()100 		void verifyValidChain()
101 		{
102 			qDebug() << cvcs.size();
103 			SignatureChecker checker(cvcs);
104 
105 			QVERIFY(checker.check());
106 		}
107 
108 
109 };
110 
111 QTEST_GUILESS_MAIN(test_SignatureChecker)
112 #include "test_SignatureChecker.moc"
113