1 /*! 2 * \brief Unit tests for \ref PACEInfo 3 * 4 * \copyright Copyright (c) 2014-2021 Governikus GmbH & Co. KG, Germany 5 */ 6 7 #include <QtCore> 8 #include <QtTest> 9 10 #include "asn1/KnownOIDs.h" 11 #include "asn1/PaceInfo.h" 12 13 14 using namespace governikus; 15 16 class test_PaceInfo 17 : public QObject 18 { 19 Q_OBJECT 20 21 private Q_SLOTS: parseCrap()22 void parseCrap() 23 { 24 QVERIFY(PaceInfo::decode("3003020101") == nullptr); 25 } 26 27 parseChipAuthenticationInfo()28 void parseChipAuthenticationInfo() 29 { 30 QByteArray bytes = QByteArray::fromHex("30 12" 31 " 06 0A 04007F00070202030202" 32 " 02 01 02" 33 " 02 01 08"); 34 35 QVERIFY(PaceInfo::decode(bytes) == nullptr); 36 } 37 38 parsePaceInfoWithWrongContent()39 void parsePaceInfoWithWrongContent() 40 { 41 QByteArray bytes = QByteArray::fromHex("30 12" 42 " 06 0A 04007F00070202040202" 43 " 04 01 02" 44 " 04 01 08"); 45 46 auto paceInfo = PaceInfo::decode(bytes); 47 48 QVERIFY(paceInfo == nullptr); 49 } 50 51 missingOid()52 void missingOid() 53 { 54 QByteArray bytes = QByteArray::fromHex("30 06" 55 " 02 01 02" 56 " 02 01 08"); 57 58 QVERIFY(PaceInfo::decode(bytes) == nullptr); 59 } 60 61 missingVersion()62 void missingVersion() 63 { 64 QByteArray bytes = QByteArray::fromHex("30 0C" 65 " 06 0A 04007F00070202040202"); 66 67 QVERIFY(PaceInfo::decode(bytes) == nullptr); 68 } 69 70 withoutOptionalParameter()71 void withoutOptionalParameter() 72 { 73 QByteArray bytes = QByteArray::fromHex("30 0F" 74 " 06 0A 04007F00070202040202" 75 " 02 01 02"); 76 77 auto paceInfo = PaceInfo::decode(bytes); 78 79 QVERIFY(paceInfo != nullptr); 80 QCOMPARE(paceInfo->getParameterIdAsInt(), -1); 81 } 82 83 getParameterId()84 void getParameterId() 85 { 86 QByteArray bytes = QByteArray::fromHex("30 12" 87 " 06 0A 04007F00070202040202" 88 " 02 01 02" 89 " 02 01 08"); 90 91 auto paceInfo = PaceInfo::decode(bytes); 92 93 QVERIFY(paceInfo != nullptr); 94 QCOMPARE(paceInfo->getParameterId(), QByteArray::fromHex("08")); 95 QCOMPARE(paceInfo->getParameterIdAsInt(), 8); 96 } 97 98 getVersion()99 void getVersion() 100 { 101 QByteArray bytes; 102 QSharedPointer<PaceInfo> paceInfo; 103 104 bytes = QByteArray::fromHex("30 12" 105 " 06 0A 04007F00070202040202" 106 " 02 01 01" 107 " 02 01 08"); 108 109 paceInfo = PaceInfo::decode(bytes); 110 111 QVERIFY(paceInfo != nullptr); 112 QCOMPARE(paceInfo->getVersion(), 1); 113 114 bytes = QByteArray::fromHex("30 12" 115 " 06 0A 04007F00070202040202" 116 " 02 01 02" 117 " 02 01 08"); 118 119 paceInfo = PaceInfo::decode(bytes); 120 121 QVERIFY(paceInfo != nullptr); 122 QCOMPARE(paceInfo->getVersion(), 2); 123 } 124 125 getEnumString()126 void getEnumString() 127 { 128 QCOMPARE(getEnumName(KeyAgreementType::DH), QStringLiteral("DH")); 129 QCOMPARE(getEnumName(MappingType::IM), QStringLiteral("IM")); 130 } 131 132 getKeyAgreementType()133 void getKeyAgreementType() 134 { 135 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040101 020102"))->getKeyAgreementType(), KeyAgreementType::DH); 136 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040102 020102"))->getKeyAgreementType(), KeyAgreementType::DH); 137 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040103 020102"))->getKeyAgreementType(), KeyAgreementType::DH); 138 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040104 020102"))->getKeyAgreementType(), KeyAgreementType::DH); 139 140 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040201 020102"))->getKeyAgreementType(), KeyAgreementType::ECDH); 141 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040202 020102"))->getKeyAgreementType(), KeyAgreementType::ECDH); 142 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040203 020102"))->getKeyAgreementType(), KeyAgreementType::ECDH); 143 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040204 020102"))->getKeyAgreementType(), KeyAgreementType::ECDH); 144 145 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040301 020102"))->getKeyAgreementType(), KeyAgreementType::DH); 146 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040302 020102"))->getKeyAgreementType(), KeyAgreementType::DH); 147 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040303 020102"))->getKeyAgreementType(), KeyAgreementType::DH); 148 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040304 020102"))->getKeyAgreementType(), KeyAgreementType::DH); 149 150 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040401 020102"))->getKeyAgreementType(), KeyAgreementType::ECDH); 151 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040402 020102"))->getKeyAgreementType(), KeyAgreementType::ECDH); 152 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040403 020102"))->getKeyAgreementType(), KeyAgreementType::ECDH); 153 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040404 020102"))->getKeyAgreementType(), KeyAgreementType::ECDH); 154 } 155 156 getMappingType()157 void getMappingType() 158 { 159 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040101 020102"))->getMappingType(), MappingType::GM); 160 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040102 020102"))->getMappingType(), MappingType::GM); 161 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040103 020102"))->getMappingType(), MappingType::GM); 162 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040104 020102"))->getMappingType(), MappingType::GM); 163 164 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040201 020102"))->getMappingType(), MappingType::GM); 165 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040202 020102"))->getMappingType(), MappingType::GM); 166 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040203 020102"))->getMappingType(), MappingType::GM); 167 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040204 020102"))->getMappingType(), MappingType::GM); 168 169 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040301 020102"))->getMappingType(), MappingType::IM); 170 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040302 020102"))->getMappingType(), MappingType::IM); 171 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040303 020102"))->getMappingType(), MappingType::IM); 172 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040304 020102"))->getMappingType(), MappingType::IM); 173 174 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040401 020102"))->getMappingType(), MappingType::IM); 175 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040402 020102"))->getMappingType(), MappingType::IM); 176 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040403 020102"))->getMappingType(), MappingType::IM); 177 QCOMPARE(PaceInfo::decode(QByteArray::fromHex("300F 060A04007F00070202040404 020102"))->getMappingType(), MappingType::IM); 178 } 179 180 isStandardizedECDH_GM()181 void isStandardizedECDH_GM() 182 { 183 // version = 2, parameterId = 8 184 QByteArray bytes = QByteArray::fromHex("30 12" 185 " 06 0A 04007F00070202040202" 186 " 02 01 02" 187 " 02 01 08"); 188 189 auto paceInfo = PaceInfo::decode(bytes); 190 191 QVERIFY(paceInfo != nullptr); 192 QVERIFY(paceInfo->isStandardizedDomainParameters()); 193 } 194 195 isNotStandardizedECDH_GM()196 void isNotStandardizedECDH_GM() 197 { 198 // version = 2, parameterId = 7 199 QByteArray bytes = QByteArray::fromHex("30 12" 200 " 06 0A 04007F00070202040202" 201 " 02 01 02" 202 " 02 01 07"); 203 204 auto paceInfo = PaceInfo::decode(bytes); 205 206 QVERIFY(paceInfo != nullptr); 207 QVERIFY(!paceInfo->isStandardizedDomainParameters()); 208 } 209 210 isStandardizedECDH_IM()211 void isStandardizedECDH_IM() 212 { 213 // version = 2, parameterId = 8 214 QByteArray bytes = QByteArray::fromHex("30 12" 215 " 06 0A 04007F00070202040402" 216 " 02 01 02" 217 " 02 01 08"); 218 219 auto paceInfo = PaceInfo::decode(bytes); 220 221 QVERIFY(paceInfo != nullptr); 222 QVERIFY(paceInfo->isStandardizedDomainParameters()); 223 } 224 225 isNotStandardizedECDH_IM()226 void isNotStandardizedECDH_IM() 227 { 228 // version = 2, parameterId = 10 229 QByteArray bytes = QByteArray::fromHex("30 12" 230 " 06 0A 04007F00070202040402" 231 " 02 01 02" 232 " 02 01 0A"); 233 234 auto paceInfo = PaceInfo::decode(bytes); 235 236 QVERIFY(paceInfo != nullptr); 237 QVERIFY(!paceInfo->isStandardizedDomainParameters()); 238 } 239 240 isStandardizedDH_GM()241 void isStandardizedDH_GM() 242 { 243 // version = 2, parameterId = 0 244 QByteArray bytes = QByteArray::fromHex("30 12" 245 " 06 0A 04007F00070202040102" 246 " 02 01 02" 247 " 02 01 00"); 248 249 auto paceInfo = PaceInfo::decode(bytes); 250 251 QVERIFY(paceInfo != nullptr); 252 QVERIFY(paceInfo->isStandardizedDomainParameters()); 253 } 254 255 isNotStandardizedDH_GM()256 void isNotStandardizedDH_GM() 257 { 258 // version = 2, parameterId = 7 259 QByteArray bytes = QByteArray::fromHex("30 12" 260 " 06 0A 04007F00070202040102" 261 " 02 01 02" 262 " 02 01 07"); 263 264 auto paceInfo = PaceInfo::decode(bytes); 265 266 QVERIFY(paceInfo != nullptr); 267 QVERIFY(!paceInfo->isStandardizedDomainParameters()); 268 } 269 270 isStandardizedDH_IM()271 void isStandardizedDH_IM() 272 { 273 // version = 2, parameterId = 0 274 QByteArray bytes = QByteArray::fromHex("30 12" 275 " 06 0A 04007F00070202040302" 276 " 02 01 02" 277 " 02 01 00"); 278 279 auto paceInfo = PaceInfo::decode(bytes); 280 281 QVERIFY(paceInfo != nullptr); 282 QVERIFY(paceInfo->isStandardizedDomainParameters()); 283 } 284 285 isNotStandardizedDH_IM()286 void isNotStandardizedDH_IM() 287 { 288 // version = 2, parameterId = 8 289 QByteArray bytes = QByteArray::fromHex("30 12" 290 " 06 0A 04007F00070202040302" 291 " 02 01 02" 292 " 02 01 08"); 293 294 auto paceInfo = PaceInfo::decode(bytes); 295 296 QVERIFY(paceInfo != nullptr); 297 QVERIFY(!paceInfo->isStandardizedDomainParameters()); 298 } 299 300 301 }; 302 303 QTEST_GUILESS_MAIN(test_PaceInfo) 304 #include "test_PaceInfo.moc" 305