From bfd20d2cda6d32ed7b683b1bcd6425122fb9b65d Mon Sep 17 00:00:00 2001 From: Emil Lundberg Date: Mon, 3 Jun 2024 14:58:03 +0200 Subject: [PATCH 01/13] Bump org.scalatestplus:junit dependency version (git cherry-pick a62d4c8ce5196caf697d1c79cce70f1cec1de39c) Fixes this build failure that suddenly occurred with no code changes: ``` $ ./gradlew :webauthn-server-core:compileTestScala Execution failed for task ':webauthn-server-core:compileTestScala'. > bad constant pool index: 0 at pos: 89856 while compiling: ./webauthn-server-core/src/test/scala/com/yubico/scalacheck/gen/JacksonGenerators.scala during phase: globalPhase=typer, enteringPhase=namer library version: version 2.13.8 compiler version: version 2.13.8 reconstructed args: [9876 characters redacted for brevity] last tree to typer: Ident(com) tree position: line 35 of ./webauthn-server-core/src/test/scala/com/yubico/scalacheck/gen/JacksonGenerators.scala tree tpe: com.type symbol: final package com symbol definition: final package com (a ModuleSymbol) symbol package: symbol owners: package com call site: package gen in package scalacheck in package scalacheck == Source file context for tree position == 32 import com.fasterxml.jackson.databind.node.NumericNode 33 import com.fasterxml.jackson.databind.node.ObjectNode 34 import com.fasterxml.jackson.databind.node.TextNode 35 import com.upokecenter.cbor.CBORObject 36 import com.yubico.internal.util.JacksonCodecs 37 import org.scalacheck.Arbitrary 38 import org.scalacheck.Arbitrary.arbitrary ``` --- test-platform/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-platform/build.gradle.kts b/test-platform/build.gradle.kts index c3ee96679..e6224e144 100644 --- a/test-platform/build.gradle.kts +++ b/test-platform/build.gradle.kts @@ -12,7 +12,7 @@ dependencies { api("org.mockito:mockito-core:4.7.0") api("org.scalacheck:scalacheck_2.13:1.16.0") api("org.scalatest:scalatest_2.13:3.2.13") - api("org.scalatestplus:junit-4-13_2.13:3.2.13.0") + api("org.scalatestplus:junit-4-13_2.13:3.2.17.0") api("org.scalatestplus:scalacheck-1-16_2.13:3.2.13.0") api("org.slf4j:slf4j-nop:2.0.3") api("uk.org.lidalia:slf4j-test:1.2.0") From 7a785f7551931e8728e0b31d912c03846aa66f10 Mon Sep 17 00:00:00 2001 From: Emil Lundberg Date: Mon, 3 Jun 2024 15:19:39 +0200 Subject: [PATCH 02/13] Bump test dependency versions (git cherry-pick f242370b8c1ab1c430847a72ca0a486d005adb45) --- test-platform/build.gradle.kts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test-platform/build.gradle.kts b/test-platform/build.gradle.kts index e6224e144..763737ab2 100644 --- a/test-platform/build.gradle.kts +++ b/test-platform/build.gradle.kts @@ -9,12 +9,12 @@ dependencies { api("junit:junit:4.13.2") api("org.bouncycastle:bcpkix-jdk18on:[1.62,2)") api("org.bouncycastle:bcprov-jdk18on:[1.62,2)") - api("org.mockito:mockito-core:4.7.0") - api("org.scalacheck:scalacheck_2.13:1.16.0") - api("org.scalatest:scalatest_2.13:3.2.13") - api("org.scalatestplus:junit-4-13_2.13:3.2.17.0") - api("org.scalatestplus:scalacheck-1-16_2.13:3.2.13.0") - api("org.slf4j:slf4j-nop:2.0.3") + api("org.mockito:mockito-core:4.11.0") + api("org.scalacheck:scalacheck_2.13:1.18.0") + api("org.scalatest:scalatest_2.13:3.2.18") + api("org.scalatestplus:junit-4-13_2.13:3.2.18.0") + api("org.scalatestplus:scalacheck-1-16_2.13:3.2.14.0") + api("org.slf4j:slf4j-nop:2.0.13") api("uk.org.lidalia:slf4j-test:1.2.0") } } From ef12050a8c013eb1b0f20c890398fb3cec594f99 Mon Sep 17 00:00:00 2001 From: Emil Lundberg Date: Mon, 3 Jun 2024 15:42:40 +0200 Subject: [PATCH 03/13] Fix scalafix errors (git cherry-pick 3a67ec4a1b2d6588e5161fc24de6ae28544ddd88) The `ignoreSourceSets` config is needed to fix errors like this: ``` Execution failed for task ':yubico-util:configSemanticDBMain'. > Failed to calculate the value of task ':yubico-util:configSemanticDBMain' property 'scalaVersion'. > Unable to detect the Scala version for the 'main' source set. Please ensure it declares dependency to scala-library or consider adding it to 'ignoreSourceSets' ``` The change to `project-convention-code-formatting-internal.gradle` is needed to fix this error: ``` Execution failed for task ':yubico-util-scala:compileScala'. > Could not resolve all files for configuration ':yubico-util-scala:detachedConfiguration1'. > Could not find org.scalameta:semanticdb-scalac_2.13.13:4.5.5. Searched in the following locations: - https://repo.maven.apache.org/maven2/org/scalameta/semanticdb-scalac_2.13.13/4.5.5/semanticdb-scalac_2.13.13-4.5.5.pom If the artifact you are trying to retrieve can be found in the repository but without metadata in 'Maven POM' format, you need to adjust the 'metadataSources { ... }' of the re pository declaration. Required by: project :yubico-util-scala ``` --- buildSrc/build.gradle.kts | 4 ++-- .../groovy/project-convention-code-formatting-internal.gradle | 4 ---- webauthn-server-attestation/build.gradle.kts | 4 ++++ webauthn-server-core/build.gradle.kts | 4 ++++ webauthn-server-demo/build.gradle.kts | 4 ++++ yubico-util/build.gradle.kts | 4 ++++ 6 files changed, 18 insertions(+), 6 deletions(-) diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 8e2ebbf9b..3accd9ee0 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -15,7 +15,7 @@ dependencies { // Spotless dropped Java 8 support in version 2.33.0 if (JavaVersion.current().isJava11Compatible) { - implementation("com.diffplug.spotless:spotless-plugin-gradle:6.19.0") - implementation("io.github.cosmicsilence:gradle-scalafix:0.1.14") + implementation("com.diffplug.spotless:spotless-plugin-gradle:6.25.0") + implementation("io.github.cosmicsilence:gradle-scalafix:0.2.2") } } diff --git a/buildSrc/src/main/groovy/project-convention-code-formatting-internal.gradle b/buildSrc/src/main/groovy/project-convention-code-formatting-internal.gradle index 29e7800f9..5da3528c4 100644 --- a/buildSrc/src/main/groovy/project-convention-code-formatting-internal.gradle +++ b/buildSrc/src/main/groovy/project-convention-code-formatting-internal.gradle @@ -12,10 +12,6 @@ spotless { scalafix { configFile.set(project.rootProject.file("scalafix.conf")) - - // Work around dependency resolution issues in April 2022 - semanticdb.autoConfigure.set(true) - semanticdb.version.set("4.5.5") } project.dependencies.scalafix("com.github.liancheng:organize-imports_2.13:0.6.0") diff --git a/webauthn-server-attestation/build.gradle.kts b/webauthn-server-attestation/build.gradle.kts index 1748835d2..1b331539e 100644 --- a/webauthn-server-attestation/build.gradle.kts +++ b/webauthn-server-attestation/build.gradle.kts @@ -86,3 +86,7 @@ tasks.javadoc.configure { // Use this instead for local testing //(options as StandardJavadocDocletOptions).linksOffline("file://${coreJavadoc.destinationDir}", "${coreJavadoc.destinationDir}") } + +scalafix { + ignoreSourceSets.add("main") +} diff --git a/webauthn-server-core/build.gradle.kts b/webauthn-server-core/build.gradle.kts index 9bbd2bda8..cc1d311e3 100644 --- a/webauthn-server-core/build.gradle.kts +++ b/webauthn-server-core/build.gradle.kts @@ -68,3 +68,7 @@ tasks.withType(Jar::class) { )) } } + +scalafix { + ignoreSourceSets.add("main") +} diff --git a/webauthn-server-demo/build.gradle.kts b/webauthn-server-demo/build.gradle.kts index 82830c46e..c0fb5f773 100644 --- a/webauthn-server-demo/build.gradle.kts +++ b/webauthn-server-demo/build.gradle.kts @@ -71,3 +71,7 @@ for (task in listOf(tasks.installDist, tasks.distZip, tasks.distTar)) { } } } + +scalafix { + ignoreSourceSets.add("main") +} diff --git a/yubico-util/build.gradle.kts b/yubico-util/build.gradle.kts index e8319c120..4d503d950 100644 --- a/yubico-util/build.gradle.kts +++ b/yubico-util/build.gradle.kts @@ -49,3 +49,7 @@ tasks.jar { )) } } + +scalafix { + ignoreSourceSets.add("main") +} From 3920803a248bcf391dc92b84071aee05a06bf0fb Mon Sep 17 00:00:00 2001 From: Emil Lundberg Date: Tue, 3 Sep 2024 15:13:26 +0200 Subject: [PATCH 04/13] Bump Gradle scripts to current state on main ``` git checkout 240b8d937e5aeb6d861625dada77035b49b839bf -- build.gradle settings.gradle.kts buildSrc/ */build.gradle.kts ``` --- buildSrc/build.gradle.kts | 2 +- .../project-convention-code-formatting-internal.gradle | 5 +++++ .../src/main/kotlin/project-convention-pitest.gradle.kts | 2 +- webauthn-server-attestation/build.gradle.kts | 4 ---- webauthn-server-core/build.gradle.kts | 4 ---- webauthn-server-demo/build.gradle.kts | 4 ---- yubico-util/build.gradle.kts | 4 ---- 7 files changed, 7 insertions(+), 18 deletions(-) diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 3accd9ee0..2efaa001c 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -10,7 +10,7 @@ repositories { } dependencies { - implementation("info.solidsoft.gradle.pitest:gradle-pitest-plugin:1.9.11") + implementation("info.solidsoft.gradle.pitest:gradle-pitest-plugin:1.15.0") implementation("io.franzbecker:gradle-lombok:5.0.0") // Spotless dropped Java 8 support in version 2.33.0 diff --git a/buildSrc/src/main/groovy/project-convention-code-formatting-internal.gradle b/buildSrc/src/main/groovy/project-convention-code-formatting-internal.gradle index 5da3528c4..d468bf0c7 100644 --- a/buildSrc/src/main/groovy/project-convention-code-formatting-internal.gradle +++ b/buildSrc/src/main/groovy/project-convention-code-formatting-internal.gradle @@ -12,6 +12,11 @@ spotless { scalafix { configFile.set(project.rootProject.file("scalafix.conf")) + + if (project.name != "yubico-util-scala") { + // yubico-util-scala is the only subproject with Scala sources in the "main" source set + ignoreSourceSets.add("main") + } } project.dependencies.scalafix("com.github.liancheng:organize-imports_2.13:0.6.0") diff --git a/buildSrc/src/main/kotlin/project-convention-pitest.gradle.kts b/buildSrc/src/main/kotlin/project-convention-pitest.gradle.kts index 4bd829dfb..0bd7a5104 100644 --- a/buildSrc/src/main/kotlin/project-convention-pitest.gradle.kts +++ b/buildSrc/src/main/kotlin/project-convention-pitest.gradle.kts @@ -4,7 +4,7 @@ plugins { } pitest { - pitestVersion.set("1.9.5") + pitestVersion.set("1.15.0") timestampedReports.set(false) outputFormats.set(listOf("XML", "HTML")) diff --git a/webauthn-server-attestation/build.gradle.kts b/webauthn-server-attestation/build.gradle.kts index 1b331539e..1748835d2 100644 --- a/webauthn-server-attestation/build.gradle.kts +++ b/webauthn-server-attestation/build.gradle.kts @@ -86,7 +86,3 @@ tasks.javadoc.configure { // Use this instead for local testing //(options as StandardJavadocDocletOptions).linksOffline("file://${coreJavadoc.destinationDir}", "${coreJavadoc.destinationDir}") } - -scalafix { - ignoreSourceSets.add("main") -} diff --git a/webauthn-server-core/build.gradle.kts b/webauthn-server-core/build.gradle.kts index cc1d311e3..9bbd2bda8 100644 --- a/webauthn-server-core/build.gradle.kts +++ b/webauthn-server-core/build.gradle.kts @@ -68,7 +68,3 @@ tasks.withType(Jar::class) { )) } } - -scalafix { - ignoreSourceSets.add("main") -} diff --git a/webauthn-server-demo/build.gradle.kts b/webauthn-server-demo/build.gradle.kts index c0fb5f773..82830c46e 100644 --- a/webauthn-server-demo/build.gradle.kts +++ b/webauthn-server-demo/build.gradle.kts @@ -71,7 +71,3 @@ for (task in listOf(tasks.installDist, tasks.distZip, tasks.distTar)) { } } } - -scalafix { - ignoreSourceSets.add("main") -} diff --git a/yubico-util/build.gradle.kts b/yubico-util/build.gradle.kts index 4d503d950..e8319c120 100644 --- a/yubico-util/build.gradle.kts +++ b/yubico-util/build.gradle.kts @@ -49,7 +49,3 @@ tasks.jar { )) } } - -scalafix { - ignoreSourceSets.add("main") -} From bfad3b3d0fc5943cc3b91034ad63e4ea2e549176 Mon Sep 17 00:00:00 2001 From: Emil Lundberg Date: Tue, 3 Sep 2024 14:56:41 +0200 Subject: [PATCH 05/13] Add weekly integration test workflow --- .github/workflows/integration-test.yml | 48 ++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 .github/workflows/integration-test.yml diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml new file mode 100644 index 000000000..0ebc057db --- /dev/null +++ b/.github/workflows/integration-test.yml @@ -0,0 +1,48 @@ +# This name is shown in the status badge in the README +name: integration-test + +on: + schedule: + # Run once a week to check compatibility with new FIDO MDS blob contents + - cron: '0 0 * * 1' + +jobs: + test: + name: JDK ${{ matrix.java }} ${{ matrix.distribution }} + + runs-on: ubuntu-latest + strategy: + matrix: + java: [17] + distribution: [temurin] + + outputs: + report-java: 17 + report-dist: temurin + + steps: + - name: Check out code + uses: actions/checkout@v3 + + - name: Set up JDK ${{ matrix.java }} + uses: actions/setup-java@v3 + with: + java-version: ${{ matrix.java }} + distribution: ${{ matrix.distribution }} + + - name: Run tests and integration tests + run: ./gradlew check + + - name: Archive HTML test report + if: ${{ always() }} + uses: actions/upload-artifact@v3 + with: + name: test-reports-java${{ matrix.java }}-${{ matrix.distribution }}-html + path: "*/build/reports/**" + + - name: Archive JUnit test report + if: ${{ always() }} + uses: actions/upload-artifact@v3 + with: + name: test-reports-java${{ matrix.java }}-${{ matrix.distribution }}-xml + path: "*/build/test-results/**/*.xml" From f384e8ef8caa08d49c29950035af4d101d78b372 Mon Sep 17 00:00:00 2001 From: Emil Lundberg Date: Tue, 3 Sep 2024 14:57:35 +0200 Subject: [PATCH 06/13] Run weekly integration test workflow on this branch --- .github/workflows/integration-test.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index 0ebc057db..dad10911d 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -2,6 +2,9 @@ name: integration-test on: + pull_request: + branches-ignore: + - 'tmp**' schedule: # Run once a week to check compatibility with new FIDO MDS blob contents - cron: '0 0 * * 1' From d2a06641cc08d658ae67c9641a02d2e267ffe308 Mon Sep 17 00:00:00 2001 From: Emil Lundberg Date: Tue, 3 Sep 2024 15:23:15 +0200 Subject: [PATCH 07/13] Don't run unit tests in integration-test workflow --- .github/workflows/integration-test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index dad10911d..66070b644 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -33,8 +33,8 @@ jobs: java-version: ${{ matrix.java }} distribution: ${{ matrix.distribution }} - - name: Run tests and integration tests - run: ./gradlew check + - name: Run integration tests + run: ./gradlew integrationTest - name: Archive HTML test report if: ${{ always() }} From 533bf0f124ef8db6fdbc62223e0093ff15b9a37f Mon Sep 17 00:00:00 2001 From: Emil Lundberg Date: Tue, 3 Sep 2024 14:09:48 +0200 Subject: [PATCH 08/13] Disable FAIL_ON_UNKNOWN_PROPERTIES in FidoMetadataDownloader Jackson deserializer --- .../main/java/com/yubico/fido/metadata/JacksonCodecs.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/webauthn-server-attestation/src/main/java/com/yubico/fido/metadata/JacksonCodecs.java b/webauthn-server-attestation/src/main/java/com/yubico/fido/metadata/JacksonCodecs.java index 2d16b1820..0fd5d84b6 100644 --- a/webauthn-server-attestation/src/main/java/com/yubico/fido/metadata/JacksonCodecs.java +++ b/webauthn-server-attestation/src/main/java/com/yubico/fido/metadata/JacksonCodecs.java @@ -5,8 +5,13 @@ class JacksonCodecs { - static ObjectMapper jsonWithDefaultEnums() { + static ObjectMapper json() { return com.yubico.internal.util.JacksonCodecs.json() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + static ObjectMapper jsonWithDefaultEnums() { + return json() .configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE, true); } } From 3aeb20f31e8a1fc15f97e087cd69af9d93d9c61d Mon Sep 17 00:00:00 2001 From: Emil Lundberg Date: Tue, 3 Sep 2024 14:10:13 +0200 Subject: [PATCH 09/13] Disable FAIL_ON_UNKNOWN_PROPERTIES in header deserializer too --- .../com/yubico/fido/metadata/FidoMetadataDownloader.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/webauthn-server-attestation/src/main/java/com/yubico/fido/metadata/FidoMetadataDownloader.java b/webauthn-server-attestation/src/main/java/com/yubico/fido/metadata/FidoMetadataDownloader.java index 15fc7ae08..cf3dfd5cd 100644 --- a/webauthn-server-attestation/src/main/java/com/yubico/fido/metadata/FidoMetadataDownloader.java +++ b/webauthn-server-attestation/src/main/java/com/yubico/fido/metadata/FidoMetadataDownloader.java @@ -25,7 +25,6 @@ package com.yubico.fido.metadata; import com.fasterxml.jackson.core.Base64Variants; -import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.yubico.fido.metadata.FidoMetadataDownloaderException.Reason; import com.yubico.internal.util.BinaryUtil; @@ -1172,9 +1171,7 @@ private static ParseResult parseBlob(ByteArray jwt) throws IOException, Base64Ur final ByteArray jwtSignature = ByteArray.fromBase64Url(s.next()); final ObjectMapper headerJsonMapper = - com.yubico.internal.util.JacksonCodecs.json() - .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true) - .setBase64Variant(Base64Variants.MIME_NO_LINEFEEDS); + JacksonCodecs.json().setBase64Variant(Base64Variants.MIME_NO_LINEFEEDS); return new ParseResult( new MetadataBLOB( From d69cee4792c648d2af69e4fb61455415c3ec679a Mon Sep 17 00:00:00 2001 From: Emil Lundberg Date: Tue, 3 Sep 2024 15:28:50 +0200 Subject: [PATCH 10/13] Revert "Run weekly integration test workflow on this branch" This reverts commit f384e8ef8caa08d49c29950035af4d101d78b372. --- .github/workflows/integration-test.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index 66070b644..ea4b98d70 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -2,9 +2,6 @@ name: integration-test on: - pull_request: - branches-ignore: - - 'tmp**' schedule: # Run once a week to check compatibility with new FIDO MDS blob contents - cron: '0 0 * * 1' From 48faa74475f5d00ccc2922289c1c7f42ede33538 Mon Sep 17 00:00:00 2001 From: Emil Lundberg Date: Tue, 3 Sep 2024 15:31:19 +0200 Subject: [PATCH 11/13] Run integration test workflow on main and release branches --- .github/workflows/integration-test.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index ea4b98d70..8c38161b3 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -2,6 +2,10 @@ name: integration-test on: + push: + branches: + - main + - 'release-*' schedule: # Run once a week to check compatibility with new FIDO MDS blob contents - cron: '0 0 * * 1' From 3abc17d21799a269e33c776f29c1ee85440201a1 Mon Sep 17 00:00:00 2001 From: Emil Lundberg Date: Tue, 3 Sep 2024 15:48:06 +0200 Subject: [PATCH 12/13] Bump action versions in integration test workflow --- .github/workflows/integration-test.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index 8c38161b3..430fcaae1 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -26,10 +26,10 @@ jobs: steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up JDK ${{ matrix.java }} - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: ${{ matrix.java }} distribution: ${{ matrix.distribution }} @@ -39,14 +39,14 @@ jobs: - name: Archive HTML test report if: ${{ always() }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: test-reports-java${{ matrix.java }}-${{ matrix.distribution }}-html path: "*/build/reports/**" - name: Archive JUnit test report if: ${{ always() }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: test-reports-java${{ matrix.java }}-${{ matrix.distribution }}-xml path: "*/build/test-results/**/*.xml" From 63bc71b471628b4e1c67bd3ed793d511d6b33e24 Mon Sep 17 00:00:00 2001 From: Emil Lundberg Date: Tue, 3 Sep 2024 15:51:23 +0200 Subject: [PATCH 13/13] Add FIDO MDS unknown properties fix to NEWS --- NEWS | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/NEWS b/NEWS index f502f25ba..a2b2df447 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,13 @@ +== Version 2.5.3 (unreleased) == + +`webauthn-server-attestation`: + +Fixes: + +* `FidoMetadataDownloader` no longer rejects FIDO MDS metadata BLOBs with + unknown properties. + + == Version 2.5.2 == Fixes: