From 41b9aa5c9d9d92f69dc9e7838bb4475f1dd183f7 Mon Sep 17 00:00:00 2001 From: varjolintu Date: Fri, 8 Mar 2024 07:54:31 +0200 Subject: [PATCH 1/4] Skip a few Passkeys tets with Botan <= 2.14 --- tests/TestPasskeys.cpp | 4 ++++ tests/TestPasskeys.h | 12 +++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/tests/TestPasskeys.cpp b/tests/TestPasskeys.cpp index 9ab66d99b9..6ed70dc9ee 100644 --- a/tests/TestPasskeys.cpp +++ b/tests/TestPasskeys.cpp @@ -192,6 +192,7 @@ void TestPasskeys::testDecodeResponseData() QCOMPARE(publicKey["-3"], QString("4u5_6Q8O6R0Hg0oDCdtCJLEL0yX_GDLhU5m3HUIE54M")); } +#if defined BOTAN_VALID void TestPasskeys::testLoadingECPrivateKeyFromPem() { const auto publicKeyCredentialRequestOptions = @@ -214,6 +215,7 @@ void TestPasskeys::testLoadingECPrivateKeyFromPem() browserMessageBuilder()->getBase64FromArray(signature), QString("MEYCIQCpbDaYJ4b2ofqWBxfRNbH3XCpsyao7Iui5lVuJRU9HIQIhAPl5moNZgJu5zmurkKK_P900Ct6wd3ahVIqCEqTeeRdE")); } +#endif void TestPasskeys::testLoadingRSAPrivateKeyFromPem() { @@ -410,6 +412,7 @@ void TestPasskeys::testRegister() QCOMPARE(clientDataJsonObject["type"], QString("webauthn.create")); } +#if defined BOTAN_VALID void TestPasskeys::testGet() { const auto privateKeyPem = QString("-----BEGIN PRIVATE KEY-----" @@ -446,6 +449,7 @@ void TestPasskeys::testGet() auto clientDataJsonObject = browserMessageBuilder()->getJsonObject(clientDataByteArray); QCOMPARE(clientDataJsonObject["challenge"].toString(), publicKeyCredentialRequestOptions["challenge"].toString()); } +#endif void TestPasskeys::testExtensions() { diff --git a/tests/TestPasskeys.h b/tests/TestPasskeys.h index b3882804f2..c045c7c6f6 100644 --- a/tests/TestPasskeys.h +++ b/tests/TestPasskeys.h @@ -18,9 +18,13 @@ #ifndef KEEPASSXC_TESTPASSKEYS_H #define KEEPASSXC_TESTPASSKEYS_H +#include "browser/BrowserPasskeys.h" #include +#include -#include "browser/BrowserPasskeys.h" +#if BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(2, 14, 0) +#define BOTAN_VALID +#endif class TestPasskeys : public QObject { @@ -32,14 +36,16 @@ private slots: void testBase64WithHexStrings(); void testDecodeResponseData(); - +#if defined BOTAN_VALID void testLoadingECPrivateKeyFromPem(); +#endif void testLoadingRSAPrivateKeyFromPem(); void testCreatingAttestationObjectWithEC(); void testCreatingAttestationObjectWithRSA(); void testRegister(); +#if defined BOTAN_VALID void testGet(); - +#endif void testExtensions(); void testParseFlags(); void testSetFlags(); From 989c4fe9055755768bf2395f36ed55fdda133197 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Fri, 8 Mar 2024 08:19:07 -0500 Subject: [PATCH 2/4] Update TestPasskeys.h --- tests/TestPasskeys.h | 8 -------- 1 file changed, 8 deletions(-) diff --git a/tests/TestPasskeys.h b/tests/TestPasskeys.h index c045c7c6f6..71dcf6ae87 100644 --- a/tests/TestPasskeys.h +++ b/tests/TestPasskeys.h @@ -22,10 +22,6 @@ #include #include -#if BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(2, 14, 0) -#define BOTAN_VALID -#endif - class TestPasskeys : public QObject { Q_OBJECT @@ -36,16 +32,12 @@ private slots: void testBase64WithHexStrings(); void testDecodeResponseData(); -#if defined BOTAN_VALID void testLoadingECPrivateKeyFromPem(); -#endif void testLoadingRSAPrivateKeyFromPem(); void testCreatingAttestationObjectWithEC(); void testCreatingAttestationObjectWithRSA(); void testRegister(); -#if defined BOTAN_VALID void testGet(); -#endif void testExtensions(); void testParseFlags(); void testSetFlags(); From 79693acb6c04c8c05b7478ac35be7b102f5bdfa0 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Fri, 8 Mar 2024 08:20:45 -0500 Subject: [PATCH 3/4] Update TestPasskeys.cpp --- tests/TestPasskeys.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/TestPasskeys.cpp b/tests/TestPasskeys.cpp index 6ed70dc9ee..fc101db5e0 100644 --- a/tests/TestPasskeys.cpp +++ b/tests/TestPasskeys.cpp @@ -192,9 +192,11 @@ void TestPasskeys::testDecodeResponseData() QCOMPARE(publicKey["-3"], QString("4u5_6Q8O6R0Hg0oDCdtCJLEL0yX_GDLhU5m3HUIE54M")); } -#if defined BOTAN_VALID void TestPasskeys::testLoadingECPrivateKeyFromPem() { +#if BOTAN_VERSION_CODE < BOTAN_VERSION_CODE_FOR(2, 14, 0) + QSKIP("ECDSA Signature is broken on Botan < 2.14.0"); +#endif const auto publicKeyCredentialRequestOptions = browserMessageBuilder()->getJsonObject(PublicKeyCredentialRequestOptions.toUtf8()); const auto privateKeyPem = QString("-----BEGIN PRIVATE KEY-----" @@ -215,7 +217,6 @@ void TestPasskeys::testLoadingECPrivateKeyFromPem() browserMessageBuilder()->getBase64FromArray(signature), QString("MEYCIQCpbDaYJ4b2ofqWBxfRNbH3XCpsyao7Iui5lVuJRU9HIQIhAPl5moNZgJu5zmurkKK_P900Ct6wd3ahVIqCEqTeeRdE")); } -#endif void TestPasskeys::testLoadingRSAPrivateKeyFromPem() { @@ -412,9 +413,11 @@ void TestPasskeys::testRegister() QCOMPARE(clientDataJsonObject["type"], QString("webauthn.create")); } -#if defined BOTAN_VALID void TestPasskeys::testGet() { +#if BOTAN_VERSION_CODE < BOTAN_VERSION_CODE_FOR(2, 14, 0) + QSKIP("ECDSA Signature is broken on Botan < 2.14.0"); +#endif const auto privateKeyPem = QString("-----BEGIN PRIVATE KEY-----" "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg5DX2R6I37nMSZqCp" "XfHlE3UeitkGGE03FqGsdfxIBoOhRANCAAQG7K80W2KRYW0ZWQOmUCrKMcSVqGnl" @@ -449,7 +452,6 @@ void TestPasskeys::testGet() auto clientDataJsonObject = browserMessageBuilder()->getJsonObject(clientDataByteArray); QCOMPARE(clientDataJsonObject["challenge"].toString(), publicKeyCredentialRequestOptions["challenge"].toString()); } -#endif void TestPasskeys::testExtensions() { From 5cb9b0d7318dded1110c5a7abebf9453d6a4d216 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Fri, 8 Mar 2024 08:21:19 -0500 Subject: [PATCH 4/4] Update TestPasskeys.h --- tests/TestPasskeys.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/TestPasskeys.h b/tests/TestPasskeys.h index 71dcf6ae87..b1c8dbc4e4 100644 --- a/tests/TestPasskeys.h +++ b/tests/TestPasskeys.h @@ -32,12 +32,14 @@ private slots: void testBase64WithHexStrings(); void testDecodeResponseData(); + void testLoadingECPrivateKeyFromPem(); void testLoadingRSAPrivateKeyFromPem(); void testCreatingAttestationObjectWithEC(); void testCreatingAttestationObjectWithRSA(); void testRegister(); void testGet(); + void testExtensions(); void testParseFlags(); void testSetFlags();