/*! * \brief Tests for GeneralAuthenticate response APDUs * * \copyright Copyright (c) 2015-2018 Governikus GmbH & Co. KG, Germany */ #include #include #include "GeneralAuthenticateResponse.h" using namespace governikus; class test_GeneralAuthenticateResponse : public QObject { Q_OBJECT private Q_SLOTS: void parseGAEncryptedNonceResponse() { QByteArray bytes = QByteArray::fromHex("7c1280105391ded7867c2d7df7f871ed6913c07d9000"); GAEncryptedNonceResponse response; response.setBuffer(bytes); QCOMPARE(response.getEncryptedNonce(), QByteArray::fromHex("5391ded7867c2d7df7f871ed6913c07d")); } void parseGAEncryptedNonceResponse_invalidData() { QByteArray bytes = QByteArray::fromHex("7c1281105391ded7867c2d7df7f871ed6913c07d9000"); GAEncryptedNonceResponse response; response.setBuffer(bytes); QCOMPARE(response.getEncryptedNonce(), QByteArray()); } void parseGAMapNonceResponse() { QByteArray bytes = QByteArray::fromHex("7c438241042a8199d469fde8f98e22bf8bb5a72804b5293bb54a8afa4d84e4b63217d163b61d78dc6453408bde19a86254ee3b0f03871964b71f1b57f77037ecdbedbe79b09000"); GAMapNonceResponse response; response.setBuffer(bytes); QCOMPARE(response.getMappingData(), QByteArray::fromHex("042a8199d469fde8f98e22bf8bb5a72804b5293bb54a8afa4d84e4b63217d163b61d78dc6453 408bde19a86254ee3b0f03871964b71f1b57f77037ecdbedbe79b0")); } void parseGAMapNonceResponse_invalidData() { QByteArray bytes = QByteArray::fromHex("7c438141042a8199d469fde8f98e22bf8bb5a72804b5293bb54a8afa4d84e4b63217d163b61d78dc6453408bde19a86254ee3b0f03871964b71f1b57f77037ecdbedbe79b09000"); GAMapNonceResponse response; response.setBuffer(bytes); QCOMPARE(response.getMappingData(), QByteArray()); } void parseGAPerformKeyAgreementResponse() { QByteArray bytes = QByteArray::fromHex("7c43844104a3be2ed0fccb4bf96df00be39a9c3e6b67d3a1118c95c195d0389fa14956c383a322c34f1b63a7bdb41f98b644aa9e15f823a2d726ef6ae8df3c10ac4e7298cc9000"); GAPerformKeyAgreementResponse response; response.setBuffer(bytes); QCOMPARE(response.getEphemeralPublicKey(), QByteArray::fromHex("04a3be2ed0fccb4bf96df00be39a9c3e6b67d3a1118c95c195d0389fa14956c383a322c34f1b63a7bdb41f98b644aa9e15f823a2d726ef6ae8df3c10ac4e7298cc")); } void parseGAPerformKeyAgreementResponse_invalid() { QByteArray bytes = QByteArray::fromHex("7c43814104a3be2ed0fccb4bf96df00be39a9c3e6b67d3a1118c95c195d0389fa14956c383a322c34f1b63a7bdb41f98b644aa9e15f823a2d726ef6ae8df3c10ac4e7298cc9000"); GAPerformKeyAgreementResponse response; response.setBuffer(bytes); QCOMPARE(response.getEphemeralPublicKey(), QByteArray()); } void parseGAMutualAuthenticationResponse_withoutCARs() { QByteArray bytes = QByteArray::fromHex("7c0a8608afcd013365384ba39000"); GAMutualAuthenticationResponse response; response.setBuffer(bytes); QCOMPARE(response.getAuthenticationToken(), QByteArray::fromHex("afcd013365384ba3")); QCOMPARE(response.getCarCurr(), QByteArray()); QCOMPARE(response.getCarPrev(), QByteArray()); } void testGAMutualAuthenticationResponse_oneCAR() { // this is the response from a new card that did not see any link certificates QByteArray bytes = QByteArray::fromHex("7c1a860871204ff538eec464870e44454356434165494430303130339000"); GAMutualAuthenticationResponse response; response.setBuffer(bytes); QCOMPARE(response.getCarCurr(), QByteArray("DECVCAeID00103")); QCOMPARE(response.getCarPrev(), QByteArray()); } void testGAMutualAuthenticationResponse_twoCARs() { // this is the response from a card that already saw link certificates QByteArray bytes = QByteArray::fromHex("7c2a86086fa6266f2ef1f2d9870e4445544553546549443030303034880e44455445535465494430303030329000"); GAMutualAuthenticationResponse response; response.setBuffer(bytes); QCOMPARE(response.getCarCurr(), QByteArray("DETESTeID00004")); QCOMPARE(response.getCarPrev(), QByteArray("DETESTeID00002")); } void testGAMutualAuthenticationResponse_invalid() { // this is the response from a new card that did not see any link certificates QByteArray bytes = QByteArray::fromHex("7c1a810871204ff538eec464870e44454356434165494430303130339000"); GAMutualAuthenticationResponse response; response.setBuffer(bytes); QCOMPARE(response.getCarCurr(), QByteArray()); QCOMPARE(response.getCarPrev(), QByteArray()); } void testGAChipAuthenticationResponse() { QByteArray bytes = QByteArray::fromHex("7c1481085b5b32c5b15d012c8208aaa14cfba15994d39000"); GAChipAuthenticationResponse response; response.setBuffer(bytes); QCOMPARE(response.getNonce(), QByteArray::fromHex("5b5b32c5b15d012c")); QCOMPARE(response.getAuthenticationToken(), QByteArray::fromHex("aaa14cfba15994d3")); } void testGAChipAuthenticationResponse_invalid() { QByteArray bytes = QByteArray::fromHex("7c148208aaa14cfba15994d39000"); GAChipAuthenticationResponse response; response.setBuffer(bytes); QCOMPARE(response.getAuthenticationToken(), QByteArray()); QCOMPARE(response.getNonce(), QByteArray()); } }; QTEST_GUILESS_MAIN(test_GeneralAuthenticateResponse) #include "test_GeneralAuthenticateResponse.moc"